AISARAISAR
Все вебхуки

Сообщения

Статус доставки обновлён

message.status.updated

Отправляется при изменении статуса доставки исходящего сообщения. Статусы идут по нарастающей: pending → server_ack → sent → delivered → read → played; более низкий статус молча отбрасывается, если уже зафиксирован более высокий. failed — терминальный статус, он записывается всегда. Событие срабатывает только для исходящих сообщений; не все каналы поддерживают все статусы (например, некоторые не сообщают read).

HTTP-запрос

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

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

{
  "event": "message.status.updated",
  "event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
  "timestamp": "2026-03-26T12:00:00.000000Z",
  "company_id": 1,
  "data": {
    "message_id": 123,
    "conversation_id": 45,
    "channel_id": 2,
    "external_message_id": "3EB0ABC123456789",
    "status": {
      "name": "delivered",
      "timestamp": "2026-03-26T12:00:05+00:00",
      "error_details": null
    }
  }
}

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

Пример payload

json
{
  "event": "message.status.updated",
  "event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
  "timestamp": "2026-03-26T12:00:00.000000Z",
  "company_id": 1,
  "data": {
    "message_id": 123,
    "conversation_id": 45,
    "channel_id": 2,
    "external_message_id": "3EB0ABC123456789",
    "status": {
      "name": "delivered",
      "timestamp": "2026-03-26T12:00:05+00:00",
      "error_details": null
    }
  }
}

Поля payload

ПолеТипОписание
message_idintegerВнутренний ID сообщения
conversation_idintegerID диалога
channel_idintegerID канала
external_message_idstringПлатформенный ID сообщения
status.namestringСтатус: pending (в очереди), server_ack (принято сервером), sent (отправлено), delivered (доставлено), read (прочитано), played (воспроизведено — голосовые/видео), failed (доставка не удалась, терминальный)
status.timestampstringМетка времени фиксации статуса в формате ISO 8601
status.error_detailsstring|nullОписание ошибки. Присутствует только при name = failed