---
title: "Използвайте ThunderPhone с n8n"
description: "Инсталирайте възела ThunderPhone за n8n, свържете API ключ за сървър и изградете работен процес, който се изпълнява всеки път, когато разговор приключи."
---

[n8n](https://n8n.io) е инструмент за автоматизация на работни процеси. Пакетът ThunderPhone
за n8n добавя два възела:

- **ThunderPhone Trigger** стартира работен процес, когато разговор приключи (**Call
  Completed**) или когато завърши изпълнение за оценяване на разговор (**Call Graded**).
- **ThunderPhone** извършва изходящи обаждания, добавя контакти към кампании и
  ги стартира, извлича обаждания с техния транскрипт и запис и изброява вашите
  агенти и телефонни номера.

Това е потвърден общностен възел, публикуван в
[ThunderPhone в n8n](https://n8n.io/integrations/thunderphone/).

## Инсталиране на възела

В редактора на n8n щракнете върху **+**, за да отворите панела с възли, и потърсете
**ThunderPhone**. Възможно е собственикът на инстанцията да трябва да настрои
потвърдени възли, преди други потребители да могат да ги добавят.

При самостоятелно хостван n8n можете също да инсталирате чрез името на пакета: отворете
**Настройки > Общностни възли** и инсталирайте `n8n-nodes-thunderphone`. Проверете рисковете
от общностните възли и правилата на вашата инстанция, преди да инсталирате.

## Създаване на сървърен API ключ

<Steps>
  <Step title="Отворете раздела Keys">
    В ThunderPhone отидете на **Организация → Keys** и щракнете върху **Създаване на ключ**.
  </Step>
  <Step title="Дайте му име">
    Използвайте име, което указва къде се намира ключът, например „n8n“.
  </Step>
  <Step title="Копирайте го сега">
    Пълната тайна `sk_live_...` се показва само веднъж. Копирайте я, преди да затворите
    диалоговия прозорец.
  </Step>
</Steps>

Само администратор или собственик може да създаде ключа и ThunderPhone третира заявките,
направени с него, като идващи от този човек. Тригерът и операциите с кампании
изискват този човек да запази ролята на администратор или собственик.
[Създаване на сървърен API ключ](/bg/guides/api-keys) обхваща ротацията и отмяната.

## Добавяне на идентификационните данни в n8n

1. В n8n създайте идентификационни данни от тип **ThunderPhone API**.
2. Поставете ключа в **API Key**.
3. Запазете ги и изпълнете теста на идентификационните данни. Тестът прочита едно обаждане от вашата
   организация чрез `GET /v1/calls?limit=1`.

## Създайте първи работен процес

Този работен процес добавя ред в Google Sheets всеки път, когато разговор приключи.

<Steps>
  <Step title="Добавете задействането">
    Добавете **Задействане на ThunderPhone**, изберете своите идентификационни данни за API на ThunderPhone и
    задайте **Събитие** на **Разговорът е завършен**.
  </Step>
  <Step title="Получете разговора">
    Добавете възел **ThunderPhone**. Задайте **Ресурс** на **Разговор**, **Операция**
    на **Получаване** и **ID на разговора** на израза `{{ $json.data.call_id }}`.
    Изходът е [записът на разговора](/api-reference/calls) плюс `transcripts`
    и `recording_url` — кратковременна връзка, която е `null`, когато разговорът няма
    запис.
  </Step>
  <Step title="Добавете ред">
    Добавете възел Google Sheets, който добавя ред, и съпоставете желаните колони
    от изхода на Get Call (вижте таблицата по-долу).
  </Step>
  <Step title="Активирайте работния процес">
    Запазете и активирайте. Задействането регистрира своя продукционен URL като крайна точка за уебкука
    във вашата организация в 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 на разговора и изпълнете Get Call отново, когато
ви е нужна нова връзка. Транскрипциите, обобщенията и записите на разговорите могат да съдържат
лична или здравна информация. Изпращайте ги само до приложения, които вашата организация има
право да използва за тези данни, съгласно BAA, когато е засегната здравна информация,
и запазвайте само необходимите полета.

<Note>
  ThunderPhone доставя събития с `POST` до **Продукционния
  URL** на задействането, затова вашият екземпляр на n8n трябва да е достъпен през HTTPS от интернет,
  а работният процес трябва да е активен. Задействането проверява
  HMAC подписа `X-ThunderPhone-Signature` при всяка заявка и връща `401` на
  всичко без подпис или с невалиден подпис.
</Note>

Задействането извежда пълното събитие: `type`, `event_id` и `data`. Вижте
[`telephony.complete` / `web.complete`](/bg/webhooks/call-complete) и
[`call.graded`](/bg/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.
Вижте [Изходящи кампании](/bg/guides/outbound-campaigns).

Преди работен процес да започне обаждания:

- Ако ThunderPhone поиска от вашата организация да потвърди, че нейните изходящи обаждания
  спазват TCPA и други закони за обажданията, администратор трябва първо да запише това
  потвърждение в таблото за управление.
- Номерът, от който се извършва обаждането, трябва да е разрешен за изходящи обаждания. Номерата, които пренасяте от
  собствен оператор, отговарят на изискванията след потвърждаване. Номерата на ThunderPhone първоначално са
  само за входящи обаждания и могат да бъдат одобрени за изходяща употреба: администратор заявява това
  от страницата „Телефонни номера“. Вижте
  [Получаване на телефонен номер](/bg/guides/get-a-phone-number).
- Вашата организация носи отговорност да има съгласие за обаждане до всеки номер
  и да спазва приложимите закони за обажданията. Вижте
  [Закони за изходящите обаждания](/bg/guides/outbound-calling-laws).

## Примерни работни процеси

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

Преписите, обобщенията и записите на обаждания могат да съдържат лична или здравна
информация. Изпращайте ги само към приложения, които вашата организация има право да използва за
тези данни, съгласно споразумение за бизнес партньорство (BAA), когато е засегната здравна информация, и запазвайте само
необходимите полета.

<Note>
  Изпращате същите събития за обаждания към собствен сървър? Вижте
  [Webhook крайни точки](/bg/webhooks/endpoints).
  [Извършване на изходящи обаждания](/bg/guides/place-outbound-calls) описва API зад
  Извършване на изходящо обаждане.
</Note>
