Вебхуки звонков: поля запроса и примеры
Обновлено: 9 октября 2026 · 6 мин чтения
Каждый запрос это POST с телом в JSON. Во всех четырёх событиях одни и те же поля, значения показывают звонок на этот момент. Clomni ничего не угадывает: неизвестное поле равно null.
Шаги
-
1
Пример call_started
{ "event": "call_started", "delivery_id": "6f1c2b0e-5a7d-5e2b-9c41-8d3f0a6b7e21", "id": 512340, "provider_call_id": "3EB0C2A1F4D8", "account": { "id": 7, "name": "Example LLC" }, "inbox": { "id": 140, "name": "WhatsApp sales", "channel_type": "Channel::Whatsapp", "provider": "whatsapp_qr" }, "conversation": { "id": 2381, "status": "open" }, "message_id": 512340, "direction": "outgoing", "status": "ringing", "contact": { "id": 9921, "name": "Kamran Aliyev", "phone_number": "+994501112233", "identifier": null }, "agent": { "id": 12, "name": "Nigar Hasanova", "email": "[email protected]" }, "started_at": "2026-10-09T10:00:00Z", "answered_at": null, "ended_at": null, "duration_seconds": null, "duration_known": null, "ended_by": null, "answered_on": null, "recording_url": null, "transcript_available": false, "transcript": null, "summary": null, "language": null } -
2
Пример call_answered и call_ended
В
call_answeredполеstatusравно"in_progress", заполненыanswered_atиanswered_on. Запросcall_endedтого же звонка (account,inbox,conversation,contactиagentдля краткости не показаны, они есть в каждом запросе):{ "event": "call_ended", "delivery_id": "0b9e4d27-3c1a-5f60-8e2d-41a7c5b9f310", "id": 512340, "direction": "outgoing", "status": "completed", "started_at": "2026-10-09T10:00:00Z", "answered_at": "2026-10-09T10:00:06Z", "ended_at": "2026-10-09T10:01:41Z", "duration_seconds": 95, "duration_known": true, "ended_by": "agent", "answered_on": "app", "recording_url": null, "transcript_available": false, "transcript": null, "summary": null, "language": null } -
3
Пример call_recording_ready
{ "event": "call_recording_ready", "delivery_id": "c47a1e95-8b2f-5d03-a6e4-9f1b2c7d8e40", "id": 512340, "duration_seconds": 95, "recording_url": "https://my.clomni.co/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOn.../call-3EB0C2A1F4D8.wav", "transcript_available": true, "transcript": [ { "speaker": "agent", "at": 0.4, "text": "Hello, Clomni store, this is Nigar." }, { "speaker": "contact", "at": 3.1, "text": "Hi. I ordered yesterday, when will it arrive?" } ], "summary": { "title": "Delivery time of an order", "points": ["The customer asked when yesterday's order would arrive.", "They were told it will arrive today by 18:00."], "next_step": "Text the customer when the courier sets off." }, "language": "en" } -
4
Звонок, канал и диалог
event:call_started,call_answered,call_endedилиcall_recording_ready.delivery_id: id этого события этого звонка. При повторной отправке не меняется.id: id звонка в Clomni, один и тот же во всех событиях звонка. Сейчас совпадает с id сообщения звонка (message_id).provider_call_id: id звонка в WhatsApp или Twilio.account:id,name.inbox:id,name,channel_type,provider(whatsapp_qr,whatsapp_cloud, то есть WhatsApp Business API, илиtwilio).conversation:id(номер диалога в панели),status.direction:incoming(звонил клиент) илиoutgoing(звонили Вы).
-
5
Результат, время и длительность
status:ringing,in_progress,completed,missed(на входящий звонок не ответили),no_answer(на исходящий звонок не ответили),rejected,busy,failed.started_at,answered_at,ended_at: когда звонок начал звонить, когда ответили и когда он завершился (ISO 8601, UTC).duration_seconds: длительность разговора в секундах, с момента ответа. Только вcall_endedиcall_recording_readyотвеченного звонка.duration_known: вcall_endedиcall_recording_readyотвеченного звонкаtrue, если длительность известна, иfalse, если нет. В остальных случаяхnull.ended_by: кто завершил звонок:agent,contactилиsystem(сбой сети или сервиса). Если неизвестно,null.answered_on: где ответили:app(панель или приложение Clomni) илиphone(сам WhatsApp на телефоне).
-
6
Контакт, сотрудник, запись и краткое содержание
contact:id,name,phone_number,identifier. У клиента WhatsApp, который скрывает номер,phone_numberможет быть пустым.agent:id,name,email. В исходящем звонке тот, кто звонил, во входящем тот, кто ответил или отклонил. Если неизвестно,null.recording_url: ссылка на запись. Работает, пока запись хранится, и ведёт на временный адрес файла, действующий 5 минут. Чтобы сохранить запись, скачайте файл.transcript_available,transcript: текст разговора по строкам:speaker(agent,contact;mixed, если обе стороны в одной записи),at(секунды от начала записи),text.summary:title,points(от 2 до 5 пунктов),next_step. Только для отвеченных звонков длиннее 10 секунд.language: язык текста, напримерaz. Краткое содержание пишется на языке аккаунта.