---
title: "Користите ThunderPhone са n8n"
description: "Инсталирајте ThunderPhone чвор за n8n, повежите API кључ сервера и направите ток рада који се покреће сваки пут када се позив заврши."
---

[n8n](https://n8n.io) је алат за аутоматизацију токова рада. Пакет ThunderPhone
за n8n додаје два чвора:

- **ThunderPhone Trigger** покреће ток рада када се позив заврши (**Позив
  завршен**) или када се заврши оцењивање позива (**Позив оцењен**).
- **ThunderPhone** упућује одлазне позиве, додаје контакте у кампање и
  покреће их, преузима позиве са њиховим транскриптом и снимком, и приказује
  ваше агенте и бројеве телефона.

То је верификовани чвор заједнице, наведен на страници
[ThunderPhone на n8n](https://n8n.io/integrations/thunderphone/).

## Инсталирајте чвор

У n8n уређивачу кликните на **+** да отворите панел са чворовима и потражите
**ThunderPhone**. Власник инстанце ће можда морати да подеси верификоване
чворове пре него што други корисници могу да их додају.

На самостално хостованом n8n такође можете да инсталирате по називу пакета: отворите
**Подешавања > Чворови заједнице** и инсталирајте `n8n-nodes-thunderphone`. Проверите ризике чворова заједнице и правила своје инстанце
пре инсталације.

## Направите API кључ сервера

<Steps>
  <Step title="Отворите картицу „Кључеви“">
    У ThunderPhone, идите на **Организација → Кључеви** и кликните на **Направите кључ**.
  </Step>
  <Step title="Именујте га">
    Користите назив који указује где се кључ налази, као што је „n8n“.
  </Step>
  <Step title="Копирајте га одмах">
    Целокупна тајна вредност `sk_live_...` приказује се једном. Копирајте је пре него што затворите
    дијалог.
  </Step>
</Steps>

Само администратор или власник може да направи кључ, а ThunderPhone захтеве
послате помоћу њега третира као да долазе од те особе. Окидач и операције
кампање захтевају да та особа задржи улогу администратора или власника.
[Направите API кључ сервера](/sr/guides/api-keys) обухвата ротацију и опозив.

## Додајте акредитив у n8n

1. У n8n направите акредитив типа **ThunderPhone API**.
2. Налепите кључ у **API кључ**.
3. Сачувајте га и покрените тест акредитива. Тест чита један позив из ваше
   организације помоћу `GET /v1/calls?limit=1`.

## Направите први ток посла

Овај ток посла додаје ред у Google Sheet сваки пут када се позив заврши.

<Steps>
  <Step title="Додајте окидач">
    Додајте **ThunderPhone окидач**, изаберите своје ThunderPhone API акредитиве и
    подесите **Догађај** на **Позив завршен**.
  </Step>
  <Step title="Преузмите позив">
    Додајте чвор **ThunderPhone**. Подесите **Ресурс** на **Позив**, **Операција**
    на **Преузми** и **ID позива** на израз `{{ $json.data.call_id }}`.
    Излаз је [запис позива](/api-reference/calls) уз `transcripts`
    и `recording_url`, краткотрајну везу која је `null` када позив нема
    снимак.
  </Step>
  <Step title="Додајте ред">
    Додајте чвор Google Sheets који додаје ред и мапирајте жељене колоне
    из излаза Преузми позив (погледајте табелу испод).
  </Step>
  <Step title="Активирајте ток посла">
    Сачувајте и активирајте. Окидач региструје свој продукциони URL као webhook
    крајњу тачку у вашој ThunderPhone организацији. Деактивирањем тока посла
    брише се та крајња тачка.
  </Step>
  <Step title="Тестирајте">
    Отворите агента у градитељу, кликните на **Разговарајте** и завршите позив. Тест
    позиви из градитеља испоручују се као `web.complete`, један од два догађаја
    која стоје иза Позив завршен, па се ток посла покреће и појављује се ред.
  </Step>
</Steps>

Корисне колоне:

| Колона | Израз |
|---|---|
| ID позива | `{{ $json.call_id }}` |
| Смер | `{{ $json.direction }}` |
| Од | `{{ $json.from_number }}` |
| За | `{{ $json.to_number }}` |
| Почетак | `{{ $json.start_time }}` |
| Трајање (с) | `{{ $json.duration_seconds }}` |
| Статус | `{{ $json.status }}` |
| Разлог завршетка | `{{ $json.end_reason }}` |
| Веза до позива | `https://app.thunderphone.com/dashboard/call-history/{{ $json.call_id }}` |

Веза до позива отвара позив на ThunderPhone контролној табли за чланове
ваше организације, заједно са транскриптом и снимком, тако да табела не
мора да чува ниједно од тога.

Да бисте ипак додали транскрипт, мапирајте
`{{ $json.transcripts.filter(t => typeof t.content === 'string').map(t => t.role + ': ' + t.content).join('\n') }}`.
URL снимка истиче, зато сачувајте ID позива и поново покрените Преузми позив када
вам је потребна нова веза. Транскрипти, резимеи и снимци позива могу да садрже
личне или здравствене податке. Шаљите их само апликацијама које ваша организација
сме да користи за те податке, у складу са BAA када су укључени здравствени
подаци, и чувајте само поља која су вам потребна.

<Note>
  ThunderPhone испоручује догађаје методом `POST` на **Продукциони
  URL** окидача, па ваша n8n инстанца мора бити доступна преко HTTPS-а са интернета,
  а ток посла мора бити активан. Окидач проверава
  `X-ThunderPhone-Signature` HMAC при сваком захтеву и враћа `401` за
  све што није потписано или је неважеће.
</Note>

Окидач даје цео догађај: `type`, `event_id` и `data`. Погледајте
[`telephony.complete` / `web.complete`](/sr/webhooks/call-complete) и
[`call.graded`](/sr/webhooks/events) за сва поља. Испорука је најмање једном,
а `event_id` остаје исти при поновним покушајима једног догађаја, зато га проверите пре
корака који не сме да се понови.

## Безбедно упућујте одлазне позиве

**Упутите одлазни позив** (Ресурс **Одлазни позив**, Операција **Упутите**)
прихвата:

| Поље | Значење |
|---|---|
| Име или ID агента | Сачувани агент. Падајућа листа приказује Ваше агенте. |
| Име или ID броја телефона | Број са ког се позива. Падајућа листа приказује само бројеве омогућене за одлазне позиве. |
| Број примаоца | Одредиште у формату E.164, нпр. `+14155552671`. |
| Променљиве | JSON објекат вредности за чуваре места у упиту агента. |
| Кључ идемпотентности | Стабилни ID из узводног записа или догађаја. Обавезно. |

Повежите **Кључ идемпотентности** са ID-ом из онога што је покренуло извршавање, као што су
ID CRM записа или `event_id` окидача. Чвор шаље
`n8n:<node ID>:<your value>`, па:

- Аутоматски поновни покушај или **Поновите извршавање** шаље исти кључ, а
  ThunderPhone враћа оригинални позив са `idempotent_replay: true`
  уместо да поново позива.
- Два ThunderPhone чвора којима се прослеђује исти запис шаљу различите кључеве.
- Празна вредност не успева пре слања било каквог захтева.

Избегавајте временске ознаке, случајне вредности и ID-ове n8n извршавања или тока рада. Нова
вредност при поновном покушају упућује други стварни позив. Цео кључ може имати највише 128
знакова. Поновна употреба кључа са другим агентом, бројем или променљивама не успева
због конфликта.

**Кампање.** **Додајте контакте** (Ресурс **Кампања**) додаје контакте у
нацрт кампање. Прихвата ID кампање и JSON низ контаката. Сваком контакту је потребан `phone_number`; остали кључеви
постају променљиве позива. Чвор не успева када је сваки контакт одбијен и поставља
`partial_success: true` када су одбијени само неки. **Покрените** захтева поље за потврду
којим потврђујете да кампања упућује стварне позиве и троши ThunderPhone
кредите. Погледајте [Одлазне кампање](/sr/guides/outbound-campaigns).

Пре него што ток рада почне да упућује позиве:

- Ако ThunderPhone затражи од Ваше организације да потврди да њени одлазни позиви
  поштују TCPA и друге законе о позивању, администратор мора прво да забележи ту
  потврду на контролној табли.
- Број са ког се позива мора бити омогућен за одлазне позиве. Бројеви које пренесете од
  сопственог оператера испуњавају услове након верификације. ThunderPhone бројеви су у почетку
  само за долазне позиве и могу бити одобрени за одлазну употребу: администратор то захтева
  на страници Бројеви телефона. Погледајте
  [Набавите број телефона](/sr/guides/get-a-phone-number).
- Ваша организација је одговорна за прибављање пристанка за позивање сваког броја
  и за поштовање важећих закона о позивању. Погледајте
  [Закони о одлазним позивима](/sr/guides/outbound-calling-laws).

## Примери токова рада

- **CRM контакти у кампању.** Додајте CRM контакте у нацрт ThunderPhone
  кампање, а затим покрените кампању када неко одобри листу.
- **Завршени позив у запис клијента.** Када се позив заврши, покрените Преузмите позив
  и сачувајте транскрипт и везу ка снимку у одговарајући запис клијента.
- **Ниске оцене на преглед.** Када се позив оцени, филтрирајте према
  `{{ $json.data.grade.score }}` и усмерите позиве са ниским оценама у ред за преглед
  са ID-ом позива и детаљима оцене. Позив може бити оцењен више пута,
  а свако завршено оцењивање активира окидач, зато задржите само најновији
  `graded_at` за сваки ID позива.

Транскрипти, резимеи и снимци позива могу да садрже личне или здравствене
податке. Шаљите их само апликацијама које Ваша организација сме да користи за
те податке, у складу са BAA када су укључени здравствени подаци, и задржите само
поља која су Вам потребна.

<Note>
  Уместо тога шаљете исте догађаје позива на сопствени сервер? Погледајте
  [Вебхук крајње тачке](/sr/webhooks/endpoints).
  [Упућивање одлазних позива](/sr/guides/place-outbound-calls) обухвата API иза
  функције Упутите одлазни позив.
</Note>
