Каталог событий
Все типы событий вебхуков, которые отправляет ThunderPhone.
Каждое тело вебхука содержит поле type, значение которого — один из типов
событий на этой странице. Когда вы подписываетесь на
эндпоинт, массив events должен содержать нужные вам
типы событий (или быть пустым, чтобы подписаться на всё —
за исключением событий каждого хода telephony.turn /
web.turn, которые доставляются только на эндпоинты, явно
указывающие их).
Эти события передаются в двух стилях:
- Доставки на эндпоинт всегда являются неблокирующими уведомлениями
с повторными попытками: ответьте
любым кодом 2xx; конверт содержит
event_idдля дедупликации. - Блокирующие обмены выполняются только через
устаревший вебхук с одним URL: запрос конфигурации
telephony.incoming/web.incoming(номера в режиме вебхука и ключи виджета, тайм-аут 10 с) и диспетчеризация инструментов в режиме вебхука. Ваш ответ влияет на текущий звонок.
Примеры полезных нагрузок ниже показывают конверт эндпоинта в порядке передачи
(ключи отсортированы по алфавиту: data, event_id, type); устаревшие
доставки содержат те же data без event_id.
События звонков
telephony.incoming
Отправляется, когда входящий звонок поступает на один из ваших
номеров телефона. Доставки на конечную точку являются
уведомлениями без ожидания ответа и отправляются для каждого входящего звонка,
независимо от того, настроен ли номер для агента или вебхука. Номера без
назначенного агента дополнительно получают блокирующий запрос конфигурации
на устаревший вебхук — полную схему запроса и ответа см. в разделе
telephony.incoming / web.incoming.
{
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
},
"event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
"type": "telephony.incoming"
}telephony.complete
Отправляется при завершении входящего или исходящего телефонного звонка. Неблокирующее.
Включает расшифровку, URL записи при наличии и сводку по тарификации. Схему
полезной нагрузки см. в разделе
telephony.complete / web.complete.
telephony.tool
Отправляется после вызова в телефонном звонке инструмента функции. Неблокирующее уведомление для аудита — к моменту доставки этого события инструмент уже выполнен; оно охватывает ваши собственные инструменты функций, но не встроенные инструменты, инструменты базы знаний, подключения приложений или инструменты MCP.
{
"data": {
"arguments": { "date": "2026-04-21" },
"call_id": 987654321,
"from_number": "+14155550199",
"response": {
"response": { "available_slots": ["9:00 AM", "2:00 PM"] },
"status": 200
},
"to_number": "+15551234567",
"tool_name": "search_appointments"
},
"event_id": "1f0a7c3e-52d4-4a0e-8f4b-b1a6a1c0d9e2",
"type": "telephony.tool"
}response — это результат выполнения: {"status": <http status>, "response": <your endpoint's JSON>} при успехе или
{"status": <status>, "error": "<message>"} при ошибке.
telephony.turn
Отправляется во время активного звонка, один раз для каждого
содержащего речь хода по мере его возникновения — для произнесённых ответов
агента и расшифрованных ходов звонящего. Позволяет отслеживать разговор в реальном
времени через обычные вебхуки вместо опроса
GET /v1/calls/{call_id}/transcript.
Неблокирующее.
{
"data": {
"call_id": 987654321,
"entry_type": "completion",
"from_number": "+14155550199",
"position": 7,
"role": "assistant",
"start_ms": 15200,
"text": "How many employees does your company have?",
"to_number": "+15551234567"
},
"event_id": "8d3f5a2c-7b1e-4c9a-b6d0-2e4f6a8c0d1e",
"type": "telephony.turn"
}| Поле | Тип | Описание |
|---|---|---|
position | integer | Индекс хода в истории звонка — стабильный идентификатор для сортировки |
role | string | assistant (речь агента) или user (речь звонящего) |
text | string | Текст расшифровки хода, известный на момент отправки |
entry_type | string | Базовый тип записи истории: completion (агент) или user_turn / span (звонящий) |
start_ms, end_ms | integer | Смещения аудио в мс с начала звонка; присутствуют только если время воспроизведения уже было известно на момент отправки |
web.incoming
Эквивалент telephony.incoming для веб-канала, отправляемый при запуске
сеанса веб-виджета или тестового звонка с микрофона в конструкторе.
Доставки на конечную точку являются уведомлениями без ожидания ответа для каждого веб-сеанса.
Публикуемые ключи в mode="webhook" дополнительно получают блокирующий запрос
конфигурации на устаревший вебхук — этот блокирующий запрос имеет другую структуру
(origin_domain, publishable_key_prefix; без номеров телефона). См.
telephony.incoming / web.incoming.
{
"data": {
"call_id": 987654322,
"from_number": "web",
"origin_domain": "https://example.com",
"publishable_key_prefix": "pk_live_a1b2",
"to_number": "+15551234567"
},
"event_id": "9a2b4c6d-8e0f-4a1b-9c2d-3e4f5a6b7c8d",
"type": "web.incoming"
}from_number всегда содержит литерал "web". Для сеансов виджета в режиме вебхука
to_number пуст (номер агента для сеанса назначается после конфигурации); для
тестовых звонков с микрофона в конструкторе пусты origin_domain и
publishable_key_prefix.
web.complete
Эквивалент telephony.complete для веб-канала, охватывающий звонки веб-виджета
(direction: "web") и тестовые звонки с микрофона в конструкторе
(direction: "test"). Неблокирующее. Имеет ту же структуру полезной нагрузки, что и
telephony.complete, с дополнительным origin_domain
и значением "web" в from_number.
web.tool
Эквивалент telephony.tool для веб-канала. data содержит
origin_domain вместо from_number / to_number.
web.turn
Эквивалент telephony.turn для веб-канала, охватывающий
звонки веб-виджета и тестовые звонки с микрофона в конструкторе. Имеет ту же
структуру полезной нагрузки, но содержит origin_domain вместо from_number /
to_number. Как и telephony.turn, требует явной подписки — оно никогда
не доставляется через пустой массив events.
События голосов
Создание пользовательского голоса выполняется асинхронно. Эти неблокирующие события позволяют реагировать на конечный результат вместо опроса эндпоинта сведений о клоне.
voice.ready
Отправляется, когда пользовательский голос завершает обработку и может быть назначен агенту.
{
"data": {
"voice": {
"created_at": "2026-07-30T14:12:08.317Z",
"display_name": "Support voice",
"failure_reason": "",
"gender": "female",
"id": "cv_2f6f90b0e9a34ee8b39be7d1",
"language": "en",
"name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
"status": "ready",
"updated_at": "2026-07-30T14:13:31.605Z"
}
},
"event_id": "2d5f0a61-e9b5-4a3c-b684-29d7d9e4b214",
"type": "voice.ready"
}voice.failed
Отправляется, когда обработка пользовательского голоса завершается необратимой ошибкой.
{
"data": {
"reason": "audio sample could not be processed",
"voice": {
"created_at": "2026-07-30T14:12:08.317Z",
"display_name": "Support voice",
"failure_reason": "audio sample could not be processed",
"gender": "female",
"id": "cv_2f6f90b0e9a34ee8b39be7d1",
"language": "en",
"name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
"status": "failed",
"updated_at": "2026-07-30T14:13:31.605Z"
}
},
"event_id": "3493e985-1a75-4f77-a10a-e74af440cd31",
"type": "voice.failed"
}| Поле | Тип | Описание |
|---|---|---|
voice.id | string | Публичный идентификатор пользовательского голоса |
voice.name | string | Значение голоса агента в формате custom:<public_id> |
voice.display_name | string | Название голоса для организации |
voice.language | string | Код единственного языка клона |
voice.gender | string | male, female или пустая строка |
voice.status | string | ready для voice.ready; failed для voice.failed |
voice.failure_reason | string | Пусто при успехе; сведения об ошибке обработки при сбое |
voice.created_at, voice.updated_at | timestamp | Метки времени ISO 8601 |
reason | string | Сведения об ошибке; присутствует только в voice.failed |
События качества
call.graded
Отправляется при завершении запуска оценки звонка ИИ. Не блокирует выполнение.
{
"data": {
"call_id": 987654321,
"grade": {
"call_outcome": "success",
"created_at": "2026-04-20T18:25:11.002Z",
"detected_issues": [],
"graded_at": "2026-04-20T18:25:11.002Z",
"grader_model": "heuristic-v1",
"id": 5512,
"score": 92,
"status": "completed",
"summary": "Caller asked about their policy and got a full answer…"
}
},
"event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
"type": "call.graded"
}| Поле | Тип | Описание |
|---|---|---|
grade.id | integer | Идентификатор оценки |
grade.score | integer | null | 0–100 |
grade.call_outcome | string | success, failure, unknown или no_conversation |
grade.summary | string | Краткое описание в одном абзаце |
grade.detected_issues | array | Строки с проблемами, найденными оценщиком |
grade.status | string | Всегда completed — события отправляются только для завершённых запусков |
grade.grader_model | string | Модель оценщика, сформировавшая результат (например, heuristic-v1) |
grade.graded_at, grade.created_at | timestamp |
issue.reported
Отправляется при создании отчёта о проблеме —
либо пользователем в панели управления (source: "user"), либо
автоматически при оценке звонка (source: "system"). Не блокирует выполнение.
{
"data": {
"call_id": 987654321,
"issue_report": {
"created_at": "2026-04-20T18:25:11.002Z",
"description": "Five-second silence before responding to the main question.",
"id": 4321,
"severity": "warning",
"source": "system",
"status": "open",
"title": "Agent paused too long"
}
},
"event_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
"type": "issue.reported"
}| Поле | Тип | Описание |
|---|---|---|
issue_report.severity | string | critical, warning или info |
issue_report.status | string | open или resolved |
issue_report.source | string | user (создан пользователем в панели управления) или system (создан при оценке) |
События тестовых звонков
test-call.completed
Отправляется, когда
запуск тестового звонка
достигает конечного статуса — completed или failed, включая запуски,
завершившиеся ошибкой при старте и не создавшие звонок. Не блокирует выполнение.
Полезно для подключения пакетных запусков CI к вашим системам чатов и уведомлений.
{
"data": {
"test_call_run": {
"call_id": 987654321,
"completed_at": "2026-04-20T18:25:04.822Z",
"error_message": "",
"id": 7110,
"status": "completed",
"target_id": 12,
"target_type": "agent"
}
},
"event_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
"type": "test-call.completed"
}| Поле | Тип | Описание |
|---|---|---|
test_call_run.target_type | string | agent или phone_number |
test_call_run.target_id | integer | Идентификатор агента или номера телефона, на который был нацелен запуск, в соответствии с target_type |
test_call_run.status | string | completed или failed |
test_call_run.call_id | integer | null | null, если запуск завершился ошибкой до совершения звонка |
test_call_run.error_message | string | Пусто при успешном выполнении |
События оповещений
alert.triggered
Отправляется, когда правило оповещения с включённым каналом Доставка в вебхуки разработчика пересекает свой порог. Не блокирует выполнение. Правило срабатывает один раз, а затем соблюдает период ожидания, поэтому при длительном нарушении создаётся одно событие на каждое окно периода ожидания.
{
"data": {
"comparator": "lt",
"event_id": "b8e6a1d4-2c3f-4a5b-9c8d-7e6f5a4b3c2d",
"fired_at": "2026-04-20T18:00:00+00:00",
"metric": "success_rate",
"metric_value": 71.4,
"rule_id": "d2c3b4a5-6f7e-4d8c-9b0a-1c2d3e4f5a6b",
"rule_name": "Success rate below 80%",
"threshold": 80.0,
"window_hours": 24
},
"event_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
"type": "alert.triggered"
}| Поле | Тип | Описание |
|---|---|---|
event_id (в data) | UUID | Идентификатор срабатывания оповещения — отличается от event_id доставки в оболочке события |
rule_id, rule_name | UUID, строка | Сработавшее правило |
metric | строка | success_rate, failure_rate, avg_score, call_volume или suite_regression |
comparator | строка | lt, lte, gt или gte |
metric_value | число | Значение метрики за окно, когда сработало правило |
threshold | число | Настроенный порог |
window_hours | целое число | Предшествующее окно оценки |
fired_at | временная метка |
Сведения о создании правил, метриках, периодах ожидания и каналах email / Slack см. в руководстве по оповещениям.
Связанные материалы
Блокирующая полезная нагрузка входящего звонка, на которую необходимо ответить.
Расшифровка и метрики после звонка.
Подпишите URL на подмножество этих событий.
Как создаются события telephony.tool / web.tool.