Вебхуки звонков: поля запроса и примеры

Обновлено: 9 октября 2026 · 6 мин чтения

Каждый запрос это POST с телом в JSON. Во всех четырёх событиях одни и те же поля, значения показывают звонок на этот момент. Clomni ничего не угадывает: неизвестное поле равно null.

Шаги

  1. 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. 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. 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. 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. 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. 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. Краткое содержание пишется на языке аккаунта.

Документ