Панель управления покрывает большинство задач с инструментами без этого API: Подключения
→ Приложения подключает Slack, HubSpot, Salesforce, Google Calendar,
Google Sheets и Cal.com несколькими OAuth-кликами; Подключения →
API превращает любой HTTP API в действие агента (вставьте команду cURL,
и мастер на основе ИИ создаст черновик инструмента со встроенной функцией «Тестовый запрос»); а
Подключения → MCP добавляет MCP-серверы. См.
Подключения. В этом руководстве описан базовый
API, лежащий в основе раздела API.
Структура инструмента
Две части:- Схема — определение функции в стиле OpenAI
(
{type: "function", function: {name, description, parameters}}), которое сообщает LLM, что делает инструмент и какие аргументы он принимает. - Конечная точка — URL, который серверы ThunderPhone вызывают, когда LLM решает использовать инструмент. Запрос представляет собой JSON POST, а тело содержит аргументы, выбранные LLM.
1. Выберите стратегию хранения
Встроенный в агента
Добавьте разовый инструмент в массив
tools агента. Это просто, но
не подходит для повторного использования.Сохранённая интеграция
Сохраните инструмент как повторно используемую интеграцию
и привяжите его к нескольким агентам. Рекомендуется для всего, что используется
более одного раза.
2. Создайте интеграцию
id (UUID).
3. Протестируйте конечную точку в песочнице
Прежде чем привязывать интеграцию к агенту, отправьте подписанный запрос с серверов ThunderPhone, чтобы подтвердить подключение:Response
400 code=url_not_allowed.
4. Привяжите интеграцию к агенту
Добавьтеintegration_ids при создании или обновлении агента:
get_weather, когда звонящий спрашивает
о погодных условиях» — либо агент может неявно обнаружить их по
описаниям схем.
5. Реализуйте эндпоинт
Когда агент вызывает инструмент, ThunderPhone отправляет подписанный POST на вашendpoint_url:
6. Протестируйте цикл
Запустите сеанс с микрофоном для агента и задайте вопрос, который обрабатывает ваш инструмент («Какая погода в 94110?»). В расшифровке звонка отображается полный цикл:GET /v1/calls/{call_id}/transcript;
поток необработанных событий (со временем для каждой записи и смещениями аудио) доступен по адресу
GET /v1/calls/{call_id}/history.
Распространённые проблемы
Агент никогда не вызывает инструмент
Агент никогда не вызывает инструмент
LLM принимает решение на основе описания инструмента. Если вопрос звонящего
не соответствует описанию, модель не вызовет инструмент. Уточните описание
(добавьте распространённые синонимы и формулировки) или явно укажите это
в промпте агента («Когда звонящий спрашивает о погоде, используй
get_weather.»).Инструмент возвращает слишком много данных
Инструмент возвращает слишком много данных
Ответы размером более 6 кБ обрезаются в предпросмотре расшифровки. Возвращайте
только поля, нужные LLM, а не всю запись.
Тайм-ауты
Тайм-ауты
Для эндпоинтов инструментов по умолчанию установлен тайм-аут 10 секунд. Если нужно больше времени,
обрабатывайте запрос асинхронно: верните
{"status": "pending", "request_id": "..."}
и передайте результат через отдельный вызов инструмента.Версионирование
Версионирование
Каждый
PATCH интеграции создаёт новую ревизию. Проверьте
GET /v1/integrations/{id}/versions,
чтобы узнать, кто и что изменил. Если вы нарушили схему инструмента, можно
вручную откатить изменения, передав через PATCH более ранний снимок.Следующие шаги
Справочник по интеграциям
CRUD, передача, история версий.
Спецификация инструментов-функций
Полная грамматика схемы JSON и контракт подписанного эндпоинта.
Проверка подписей
Применяйте шаблон подписи вебхука к эндпоинтам инструментов.
API расшифровки и истории
Просматривайте полный цикл вызова инструмента.