Перейти к содержимому
AISARAISAR
Звонки

Звонки

Пропущенный звонок

call.missed

Отправляется, когда звонок завершился без ответа: входящий, который оператор не принял, или исходящий, который не принял клиент. Для отвеченных звонков приходит call.completed.

HTTP-запрос

AISAR отправляет подписанный POST-запрос на ваш webhook_url:

http
POST {webhook_url}
Content-Type: application/json
X-AISAR-Signature: sha256=...

{
  "event": "call.missed",
  "event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
  "timestamp": "2026-06-06T12:00:30.000000Z",
  "company_id": 1,
  "data": {
    "call_id": 124,
    "direction": "inbound",
    "status": "missed",
    "from_number": "12025550187",
    "to_number": "12025550187",
    "contact_id": 42,
    "conversation_id": 100,
    "channel_id": 5,
    "external_call_id": "wacall_def456",
    "duration_sec": null,
    "started_at": "2026-06-06T12:00:00+00:00",
    "answered_at": null,
    "ended_at": "2026-06-06T12:00:30+00:00",
    "routing": {
      "scheme_id": 7,
      "scheme_name": "Основная линия",
      "ivr_selections": [],
      "final_step": { "type": "voicemail", "node_id": "n_vm", "result": "offered" },
      "answered_by": null,
      "path": [
        { "seq": 1, "node_id": "n_hours", "type": "schedule", "result": "off", "at": "2026-06-06T12:00:00+00:00" },
        { "seq": 2, "node_id": "n_menu", "type": "ivr_menu", "result": "no_input", "attempt": 1, "at": "2026-06-06T12:00:12+00:00" },
        { "seq": 3, "node_id": "n_menu", "type": "ivr_menu", "result": "no_input", "attempt": 2, "at": "2026-06-06T12:00:20+00:00" },
        { "seq": 4, "node_id": "n_vm", "type": "voicemail", "result": "offered", "at": "2026-06-06T12:00:20+00:00" }
      ],
      "truncated": false
    }
  }
}

Заголовок X-AISAR-Signature содержит HMAC-SHA256 подпись тела запроса — используйте её, чтобы убедиться, что запрос пришёл от AISAR.

Пример payload

json
{
  "event": "call.missed",
  "event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
  "timestamp": "2026-06-06T12:00:30.000000Z",
  "company_id": 1,
  "data": {
    "call_id": 124,
    "direction": "inbound",
    "status": "missed",
    "from_number": "12025550187",
    "to_number": "12025550187",
    "contact_id": 42,
    "conversation_id": 100,
    "channel_id": 5,
    "external_call_id": "wacall_def456",
    "duration_sec": null,
    "started_at": "2026-06-06T12:00:00+00:00",
    "answered_at": null,
    "ended_at": "2026-06-06T12:00:30+00:00",
    "routing": {
      "scheme_id": 7,
      "scheme_name": "Основная линия",
      "ivr_selections": [],
      "final_step": { "type": "voicemail", "node_id": "n_vm", "result": "offered" },
      "answered_by": null,
      "path": [
        { "seq": 1, "node_id": "n_hours", "type": "schedule", "result": "off", "at": "2026-06-06T12:00:00+00:00" },
        { "seq": 2, "node_id": "n_menu", "type": "ivr_menu", "result": "no_input", "attempt": 1, "at": "2026-06-06T12:00:12+00:00" },
        { "seq": 3, "node_id": "n_menu", "type": "ivr_menu", "result": "no_input", "attempt": 2, "at": "2026-06-06T12:00:20+00:00" },
        { "seq": 4, "node_id": "n_vm", "type": "voicemail", "result": "offered", "at": "2026-06-06T12:00:20+00:00" }
      ],
      "truncated": false
    }
  }
}

Поля payload

ПолеТипОписание
call_idintegerВнутренний ID звонка (одинаковый во всех событиях жизненного цикла этого звонка)
directionstringinbound (от контакта) или outbound (инициирован оператором)
statusstringСтатус звонка: missed
from_numberstringНомер вызывающего. Для входящих — клиент; для исходящих — ваш номер WhatsApp Business
to_numberstringНомер вызываемого. Для входящих — ваш номер WhatsApp Business; для исходящих — клиент
contact_idinteger|nullID контакта
conversation_idinteger|nullID диалога
channel_idintegerID канала WhatsApp Business
external_call_idstring|nullID звонка на стороне провайдера (WhatsApp/SIP)
duration_secnullВсегда null (разговора не было)
started_atstring|nullМетка времени начала вызова в формате ISO 8601
answered_atnullВсегда null (на звонок не ответили)
ended_atstringМетка времени завершения звонка в формате ISO 8601
routingobject|nullМаршрут звонка по схеме входящих звонков: нажатия в меню, итоговый шаг, кто ответил и полный путь. null, если звонок шёл без схемы
routing.scheme_idinteger|nullID схемы, по которой шёл звонок
routing.scheme_namestring|nullНазвание схемы на момент звонка
routing.ivr_selectionsarrayПринятые нажатия в голосовом меню, по порядку. Неверные нажатия и тишина сюда не попадают, они видны в path. Пустой массив, если меню не было
routing.ivr_selections[].menu_node_idstring|nullИдентификатор узла меню на момент звонка
routing.ivr_selections[].digitstring|nullНажатая цифра
routing.ivr_selections[].labelstring|nullПодпись пункта меню (подпись ребра в схеме), если задана
routing.ivr_selections[].attemptinteger|nullНомер попытки в меню, с 1 (меню может повторяться)
routing.ivr_selections[].atstring|nullВремя нажатия, ISO 8601
routing.final_stepobject|nullПоследний значимый шаг маршрута: ring_group, responsible_manager, queue, ai_agent, voicemail, transfer или ai_escalation. Шаг hangup попадает сюда, только если до него не было ничего значимого. Формат как у элемента path, без seq и at
routing.answered_byobject|nullКто ответил: { assignee_type, user_id }. assignee_type: operator или ai_agent; user_id задан для оператора. null, если на звонок не ответили (всегда для call.missed)
routing.patharrayПолный путь по схеме, не больше 50 шагов. Шаг: seq (с 1), node_id (идентификатор узла на момент звонка; null у шагов вне графа), type, result, at (ISO 8601) и необязательные digit, attempt, label, team_ids, operator_ids, reason, from_user_id, to_user_id. Пары type и result: schedule: work | off; client_check: known | new; play: played | skipped; ivr_menu: digit | invalid | no_input | skipped; ring_group: offered; responsible_manager: offered | no_target; queue: offered | timeout; ai_agent: offered | failed | escalated | no_answer; voicemail: offered; hangup: hangup (в reason причина); transfer: transferred (from_user_id, to_user_id); ai_escalation: handed_to_operator (to_user_id)
routing.truncatedbooleantrue, если путь упёрся в потолок 50 шагов и остальные шаги не записаны