ThunderPhone 2.0 уже доступен.Самостоятельный запуск — от 2 ¢/мин.Читать анонс

Connect tools & data

Используйте ThunderPhone с n8n

Установите узел ThunderPhone для n8n, подключите ключ API сервера и создайте рабочий процесс, который запускается каждый раз после завершения звонка.

n8n — инструмент для автоматизации рабочих процессов. Пакет ThunderPhone для n8n добавляет два узла:

  • Триггер ThunderPhone запускает рабочий процесс при завершении звонка (Звонок завершён) или завершении запуска оценки звонка (Звонок оценён).
  • ThunderPhone выполняет исходящие звонки, добавляет контакты в кампании и запускает их, получает звонки с их расшифровкой и записью, а также выводит список ваших агентов и телефонных номеров.

Это проверенный узел сообщества, представленный на странице ThunderPhone в n8n.

Установите узел

В редакторе n8n нажмите +, чтобы открыть панель узлов, и найдите ThunderPhone. Владельцу экземпляра может потребоваться настроить проверенные узлы, прежде чем другие пользователи смогут их добавлять.

В самостоятельно развёрнутом n8n также можно выполнить установку по имени пакета: откройте Настройки > Узлы сообщества и установите n8n-nodes-thunderphone. Ознакомьтесь с рисками, связанными с узлами сообщества, и политикой вашего экземпляра перед установкой.

Создайте серверный API-ключ

  1. Откройте вкладку «Ключи»

    В ThunderPhone перейдите в Организация → Ключи и нажмите Создать ключ.

  2. Задайте имя

    Используйте имя, указывающее, где хранится ключ, например «n8n».

  3. Скопируйте его сейчас

    Полный секрет sk_live_... отображается один раз. Скопируйте его, прежде чем закрыть диалоговое окно.

Создать ключ может только администратор или владелец, и ThunderPhone считает, что запросы, выполненные с его помощью, поступают от этого человека. Для триггера и операций с кампаниями этот человек должен сохранять роль администратора или владельца. Создание серверного API-ключа описывает ротацию и отзыв.

Добавьте учётные данные в n8n

  1. В n8n создайте учётные данные типа ThunderPhone API.
  2. Вставьте ключ в поле API-ключ.
  3. Сохраните их и запустите проверку учётных данных. Проверка считывает сведения об одном звонке из вашей организации с помощью GET /v1/calls?limit=1.

Создайте первый рабочий процесс

Этот рабочий процесс добавляет строку в Google Таблицу каждый раз после завершения звонка.

  1. Добавьте триггер

    Добавьте ThunderPhone Trigger, выберите учётные данные API ThunderPhone и задайте для Событие значение Звонок завершён.

  2. Получите данные звонка

    Добавьте узел ThunderPhone. Задайте для Ресурс значение Звонок, для Операция — Получить, а для ID звонка — выражение {{ $json.data.call_id }}. На выходе вы получите запись звонка, а также transcripts и recording_url — ссылку с коротким сроком действия, которая имеет значение null, если у звонка нет записи.

  3. Добавьте строку

    Добавьте узел Google Таблиц, который добавляет строку, и сопоставьте нужные столбцы с данными из результата «Получить звонок» (см. таблицу ниже).

  4. Активируйте рабочий процесс

    Сохраните и активируйте. Триггер регистрирует свой Продакшен URL в качестве конечной точки вебхука в вашей организации ThunderPhone. Деактивация рабочего процесса удаляет эту конечную точку.

  5. Протестируйте

    Откройте агента в конструкторе, нажмите Поговорить и завершите звонок. Тестовые звонки из конструктора доставляются как web.complete — одно из двух событий, соответствующих «Звонок завершён», поэтому рабочий процесс запускается и появляется строка.

Полезные столбцы:

СтолбецВыражение
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, если речь идёт о сведениях о здоровье, и храните только необходимые поля.

Триггер выводит полное событие: type, event_id и data. Все поля см. в telephony.complete / web.complete и call.graded. Доставка выполняется как минимум один раз, а 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. См. Исходящие кампании.

Перед тем как рабочий процесс начнёт совершать звонки:

  • Если ThunderPhone просит вашу организацию подтвердить, что её исходящие звонки соответствуют TCPA и другим законам о звонках, администратор должен сначала зафиксировать это подтверждение в панели управления.
  • Номер отправителя должен быть включён для исходящих звонков. Номера, которые вы переносите от собственного оператора, становятся доступными после проверки. Номера ThunderPhone изначально доступны только для входящих звонков и могут быть одобрены для исходящего использования: администратор запрашивает это на странице «Номера телефонов». См. Получить номер телефона.
  • Ваша организация отвечает за наличие согласия на звонок по каждому номеру и за соблюдение применимых законов о звонках. См. Законы об исходящих звонках.

Примеры рабочих процессов

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

Расшифровки, сводки и записи звонков могут содержать персональную информацию или информацию о здоровье. Отправляйте их только в приложения, которые ваша организация имеет право использовать для таких данных, по соглашению BAA, если речь идёт об информации о здоровье, и храните только нужные поля.