Как это работает
- Определите инструменты со схемой (какие аргументы принимает инструмент)
- Укажите конфигурацию
endpoint(куда ThunderPhone вызывает ваш API) или не указывайте её, чтобы получать вызовы инструментов через вебхук организации - Во время звонка ИИ решает, когда использовать инструмент, на основе разговора
- ThunderPhone вызывает ваш эндпоинт с аргументами инструмента
- Ответ вашего API передаётся обратно ИИ для продолжения разговора
Инструменты функций — это вариант с использованием собственного API. ThunderPhone также
предоставляет управляемые платформой инструменты, которым не нужен эндпоинт:
подключения приложений (HubSpot, Salesforce, Slack,
Google Calendar, Google Sheets, Cal.com),
подключения API и
серверы MCP.
Схема инструмента
Каждый инструмент имеет следующую структуру:Определение функции
Конфигурация эндпоинта
Конфигурация
endpoint не отправляется модели ИИ — она используется только ThunderPhone для выполнения вызова инструмента.Два пути вызова
Какой запрос получит ваш сервер, зависит от наличия у инструментаendpoint:
Оба пути являются блокирующими — ИИ ожидает результат посреди фразы —
с тайм-аутом 20 с. Обработчики должны работать быстро. Можно использовать
смешанный подход: при звонке, для организации которого указан URL вебхука,
инструменты с
endpoint вызываются напрямую, а остальные используют вебхук.
Прямые вызовы endpoint
Когда ИИ вызывает инструмент сendpoint, ThunderPhone отправляет
запрос на ваш URL:
Заголовки запроса
endpoint.headers всегда включаются
без изменений, а также добавляются два заголовка в пространстве имён ThunderPhone:
X-ThunderPhone-Signature— HMAC-SHA256 точных байтов тела запроса с ключом в виде вашего секрета webhook организацииX-ThunderPhone-Call-ID— идентификатор текущего звонка
Content-Type: application/json устанавливается, если только ваш endpoint.headers
не переопределяет его — пользовательский Content-Type имеет приоритет.
Тело запроса
ДляPOST / PUT / PATCH тело содержит только аргументы инструмента
(без обёртки), сериализованные канонически (отсортированные ключи, компактные
разделители):
GET / DELETE аргументы отправляются как параметры запроса,
а тело остаётся пустым — в этом случае подпись вычисляется по пустой
строке байтов. См.
Проверка подписей webhook.
Ответ
Верните JSON-ответ с результатом инструмента:{"data": "<text>"};
тайм-ауты и ошибки подключения передаются ИИ как ошибки, поэтому
агент может извиниться и продолжить работу, а не зависнуть.
Маршрутизация в режиме webhook
Инструменты безendpoint отправляются на устаревший URL webhook вашей
организации как подписанный запрос telephony.tool (телефонные звонки) или
web.tool (веб-звонки). В отличие от уведомлений аудита,
доставляемых на endpoint webhook после выполнения, этот запрос является
выполнением — ваш HTTP-ответ служит результатом инструмента.
web.tool содержит origin_domain вместо from_number /
to_number. Ответьте результатом инструмента в формате JSON — применяется тот же
контракт ответа, что и для прямых вызовов endpoint. Запрос подписывается
секретом webhook организации по исходному телу, как и любой другой webhook.
Подписанные endpoint webhook дополнительно
получают неблокирующее
telephony.tool / web.tool уведомление
после выполнения каждого инструмента (независимо от пути выполнения), включая
ответ инструмента — это полезно для журналов аудита. См.
каталог событий.Проверка подписи
Прямые вызовы инструментов подписываются так же, как вебхуки:- HMAC-SHA256 по точным байтам тела запроса (канонический JSON — ключи отсортированы, без лишних пробелов)
- С использованием секрета вебхука вашей организации
- Инструменты
GET/DELETEподписывают пустую строку байтов
Пример: полный процесс записи
Ниже приведён набор инструментов для полноценной системы записи на приём:Рекомендации
Пишите понятные описания
Пишите понятные описания
Поле
description помогает ИИ понять, когда использовать инструмент. Чётко указывайте, что он делает и когда его следует применять.Корректно обрабатывайте ошибки
Корректно обрабатывайте ошибки
Возвращайте понятные ИИ сообщения об ошибках:
{"error": "No slots available for that date"} вместо общих ошибок 500.Делайте ответы краткими
Делайте ответы краткими
Возвращайте только то, что нужно ИИ для продолжения разговора. Большие полезные нагрузки замедляют время ответа.
Разумно используйте обязательные поля
Разумно используйте обязательные поля
Отмечайте поля как
required только при реальной необходимости. Перед вызовом инструмента ИИ запросит у пользователя обязательную информацию.Связанные материалы
Подключения приложений
Инструменты платформы для HubSpot, Salesforce, Slack, Google
Calendar, Google Sheets и Cal.com — конечная точка не требуется.
Серверы MCP
Подключите сервер MCP и разрешите агенту вызывать его инструменты.
Подключения API
Многоразовые REST-интеграции, которые можно подключать к агентам.
Проверка подписей вебхуков
Один вспомогательный инструмент проверки для вебхуков и вызовов инструментов.