---
title: "Використовуйте ThunderPhone з n8n"
description: "Встановіть вузол ThunderPhone для n8n, підключіть ключ API сервера та створіть робочий процес, який запускатиметься щоразу після завершення дзвінка."
---

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

- **Тригер ThunderPhone** запускає робочий процес після завершення дзвінка (**Дзвінок
  завершено**) або завершення перевірки якості дзвінка (**Дзвінок оцінено**).
- **ThunderPhone** здійснює вихідні дзвінки, додає контакти до кампаній і
  запускає їх, отримує дзвінки з їхніми транскриптами та записами, а також показує список ваших
  агентів і номерів телефонів.

Це перевірений вузол спільноти, представлений на сторінці
[ThunderPhone на n8n](https://n8n.io/integrations/thunderphone/).

## Установіть вузол

У редакторі n8n натисніть **+**, щоб відкрити панель вузлів, і знайдіть
**ThunderPhone**. Власнику інстансу може знадобитися налаштувати перевірені вузли, перш ніж
інші користувачі зможуть їх додавати.

У self-hosted n8n також можна встановити пакет за назвою: відкрийте
**Налаштування > Вузли спільноти** та встановіть `n8n-nodes-thunderphone`. Перевірте ризики вузлів спільноти та політику вашого інстансу,
перш ніж установлювати.

## Створіть серверний API-ключ

<Steps>
  <Step title="Відкрийте вкладку «Ключі»">
    У ThunderPhone перейдіть до **Організація → Ключі** та натисніть **Створити ключ**.
  </Step>
  <Step title="Назвіть його">
    Використайте назву, яка вказує, де зберігається ключ, наприклад «n8n».
  </Step>
  <Step title="Скопіюйте його зараз">
    Повний секрет `sk_live_...` відображається лише один раз. Скопіюйте його, перш ніж закрити
    діалогове вікно.
  </Step>
</Steps>

Лише адміністратор або власник може створити ключ, і ThunderPhone вважає запити,
зроблені з ним, запитами від цієї особи. Для тригера та операцій із кампаніями
ця особа має зберігати роль адміністратора або власника.
[Створення серверного API-ключа](/uk/guides/api-keys) описує ротацію та відкликання.

## Додайте облікові дані в n8n

1. У n8n створіть облікові дані типу **ThunderPhone API**.
2. Вставте ключ у поле **API-ключ**.
3. Збережіть їх і запустіть перевірку облікових даних. Перевірка зчитує один дзвінок з вашої
   організації за допомогою `GET /v1/calls?limit=1`.

## Створіть перший робочий процес

Цей робочий процес додає рядок до Google Sheets щоразу після завершення дзвінка.

<Steps>
  <Step title="Додайте тригер">
    Додайте **ThunderPhone Trigger**, виберіть облікові дані API ThunderPhone і
    встановіть для **Event** значення **Call Completed**.
  </Step>
  <Step title="Отримайте дзвінок">
    Додайте вузол **ThunderPhone**. Установіть для **Resource** значення **Call**, для **Operation**
    — **Get**, а для **Call ID** — вираз `{{ $json.data.call_id }}`.
    Вивід містить [запис дзвінка](/api-reference/calls), а також `transcripts`
    і `recording_url` — короткочасне посилання, яке має значення `null`, якщо запису
    дзвінка немає.
  </Step>
  <Step title="Додайте рядок">
    Додайте вузол Google Sheets, який додає рядок, і зіставте потрібні стовпці
    з виводу Get Call (див. таблицю нижче).
  </Step>
  <Step title="Активуйте робочий процес">
    Збережіть і активуйте. Тригер реєструє свою Production URL як кінцеву точку
    вебхука у вашій організації ThunderPhone. Деактивація робочого процесу
    видаляє цю кінцеву точку.
  </Step>
  <Step title="Протестуйте">
    Відкрийте агента в конструкторі, натисніть **Talk** і завершіть дзвінок. Тестові
    дзвінки конструктора надходять як `web.complete` — одна з двох подій, що лежать в основі
    Call Completed, тому робочий процес запускається й з’являється рядок.
  </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` до **Production
  URL** тригера, тому ваш екземпляр n8n має бути доступним з інтернету через HTTPS,
  а робочий процес має бути активним. Тригер перевіряє HMAC
  `X-ThunderPhone-Signature` для кожного запиту та відповідає `401` на
  будь-які непідписані або недійсні запити.
</Note>

Тригер виводить повну подію: `type`, `event_id` і `data`. Перегляньте
[`telephony.complete` / `web.complete`](/uk/webhooks/call-complete) та
[`call.graded`](/uk/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.
Дивіться [Вихідні кампанії](/uk/guides/outbound-campaigns).

Перш ніж робочий процес почне здійснювати дзвінки:

- Якщо ThunderPhone просить вашу організацію підтвердити, що її вихідні дзвінки
  відповідають вимогам TCPA та інших законів щодо дзвінків, адміністратор має
  спочатку зафіксувати це підтвердження на інформаційній панелі.
- Номер відправника має бути ввімкнено для вихідних дзвінків. Номери, які ви
  додаєте від власного оператора, можна використовувати після перевірки. Номери
  ThunderPhone спочатку призначені лише для вхідних дзвінків, але можуть бути
  схвалені для вихідного використання: адміністратор надсилає запит на сторінці
  «Номери телефонів». Дивіться
  [Отримати номер телефону](/uk/guides/get-a-phone-number).
- Ваша організація відповідає за наявність згоди на дзвінки на кожен номер
  і за дотримання застосовних законів щодо дзвінків. Дивіться
  [Закони щодо вихідних дзвінків](/uk/guides/outbound-calling-laws).

## Приклади робочих процесів

- **Контакти CRM до кампанії.** Додайте контакти CRM до чернетки кампанії
  ThunderPhone, а потім запустіть кампанію після схвалення списку.
- **Завершений дзвінок до запису клієнта.** Після завершення дзвінка запустіть «Отримати дзвінок»
  і збережіть стенограму та посилання на запис у відповідному записі клієнта.
- **Низькі оцінки на перевірку.** Після оцінювання дзвінка відфільтруйте за
  `{{ $json.data.grade.score }}` і спрямовуйте дзвінки з низькими оцінками до черги перевірки
  з ID дзвінка та деталями оцінки. Дзвінок можна оцінювати кілька разів,
  і кожен завершений процес оцінювання активує тригер, тому зберігайте лише
  останній `graded_at` для кожного ID дзвінка.

Стенограми, підсумки та записи дзвінків можуть містити персональні дані або
інформацію про здоров’я. Надсилайте їх лише до застосунків, які ваша організація
має право використовувати для таких даних, за угодою BAA, якщо йдеться про
інформацію про здоров’я, і зберігайте лише потрібні поля.

<Note>
  Натомість надсилаєте ті самі події дзвінків на власний сервер? Дивіться
  [Кінцеві точки вебхуків](/uk/webhooks/endpoints).
  [Здійснення вихідних дзвінків](/uk/guides/place-outbound-calls) описує API, що стоїть за
  «Здійснити вихідний виклик».
</Note>
