Skip to main content
Инструменты функций позволяют вашим ИИ-агентам вызывать внешние API во время телефонных звонков. Используйте их для поиска данных клиентов, проверки доступности, бронирования встреч или выполнения любых действий, которые поддерживает ваш бэкенд.

Как это работает

  1. Определите инструменты со схемой (какие аргументы принимает инструмент)
  2. Укажите конфигурацию endpoint (куда ThunderPhone вызывает ваш API) или не указывайте её, чтобы получать вызовы инструментов через вебхук организации
  3. Во время звонка ИИ решает, когда использовать инструмент, на основе разговора
  4. ThunderPhone вызывает ваш эндпоинт с аргументами инструмента
  5. Ответ вашего 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 имеет приоритет.
Для подписи используется секрет webhook на уровне организации из GET /v1/webhook. Если ваша организация никогда не настраивала устаревший webhook, секрета нет, и вызовы инструментов содержат только X-ThunderPhone-Call-ID — обработчик, завершающийся ошибкой при отсутствии подписи, отклонит их. Настройте устаревший webhook, чтобы получить секрет, или добавьте собственный общий секрет в endpoint.headers.

Тело запроса

Для POST / PUT / PATCH тело содержит только аргументы инструмента (без обёртки), сериализованные канонически (отсортированные ключи, компактные разделители):
Для GET / DELETE аргументы отправляются как параметры запроса, а тело остаётся пустым — в этом случае подпись вычисляется по пустой строке байтов. См. Проверка подписей webhook.

Ответ

Верните JSON-ответ с результатом инструмента:
Ответ форматируется и передаётся ИИ для продолжения разговора. Не-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-интеграции, которые можно подключать к агентам.

Проверка подписей вебхуков

Один вспомогательный инструмент проверки для вебхуков и вызовов инструментов.