В этой статье описывается callback-метод для передачи информации об изменении статусов обработки и доставки сообщений. Callback — это запрос с информацией об изменении статусов сообщений, который мы передадим на ваш сервер. Параметры запроса передаются в теле запроса.
URL-адрес подключения
Для получения сallback-статусов сообщений при регистрации укажите API Endpoint вашей системы, который будет обрабатывать входящие POST-запросы от API edna.
Пример тела входящего POST-запроса:
{
    "requestId": "test-00135",
    "messageId": 8681748,
    "cascadeId": 11,
    "cascadeStageUUID": "001-test001",
    "subject": "test_subject",
    "subjectId": 2,
    "status": "DELIVERED",
    "statusAt": "2025-01-30T11:07:55Z",
    "error": null,
    "comment": null,
    "paymentData": {
        "@type": "WhatsAppConversationPaymentData",
        "conversationId": "test0001",
        "conversationType": "marketing",
        "chargeable": true,
        "type": "WHATSAPP_CONVERSATION"
    }
}
Формат запроса
| Параметр | Тип данных | Характер | Описание | 
requestId | string | Обязательный | Идентификатор запроса, на основании которого формируется и отправляется сообщение. | 
cascadeId | long | Обязательный | Идентификатор каскада. | 
cascadeStageUUID | string | Обязательный | null или данные. | 
subject | string | Обязательный | Название подписи. | 
subjectId | long | Обязательный | Идентификатор подписи. Можно узнать через метод получения списка каналов. | 
status | string | Обязательный | Статус сообщения. | 
statusAt | string | Обязательный | Время последнего обновления статуса сообщения. Указывается в формате ISO 8601. Например: 2023-10-31T11:07:56Z. | 
error | string | Необязательный | null или данные. Ошибка при доставке сообщения. | 
comment | string | Необязательный | Текстовый комментарий. Указывается при отправке сообщения. Значение параметра также отображается в детальном отчете. Может использоваться для маршрутизации чат-ботов. | 
paymentData | object | Обязательный | Набор параметров для канала WhatsApp, которые передают информацию о диалоге. | 
conversationId | string | Обязательный | Идентификатор диалога. Передается для канала WhatsApp. | 
conversationType | string | Обязательный | Категория диалога. Передается для канала WhatsApp. | 
chargeable | boolean | Необязательный | Тип диалога: платный или бесплатный. Передается для канала WhatsApp для статусов DELIVERED и READ. | 
messageId | integer | Обязательный | Внутренний идентификатор сообщения. | 
Формат ответа
В ответ на запрос от вашего сервера должен возвращаться статус его выполнения с кодом 200.
Если в ответ на callback-запрос не приходит код 200, edna Pulse выполняет еще 10 попыток запроса с интервалом 2*Х секунд между попытками (где Х — номер попытки), пока в ответ не придет код 200. То есть каждые 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 секунд.
Статусы доставки
| Статус | Описание | 
SENT | Сообщение отправлено адресату. | 
DELIVERED | Сообщение доставлено адресату. | 
READ | Сообщение прочитано адресатом. | 
UNDELIVERED | Сообщение отправлено, но не доставлено адресату. | 
CANCELLED | Отправка сообщения отменена. | 
EXPIRED | Сообщение не получило статус , поскольку:• истекло время, указанное при настройке каскада; • истекло время на доставку сообщения (TTL), определенное каналом по умолчанию (см. подробнее про сроки доставки сообщений).  | 
FAILED | Ошибка обработки сообщения. | 
Пример уведомления о статусе доставки:
{
    "requestId": "test-00136",
    "messageId": 8681749,
    "cascadeId": 11,
    "cascadeStageUUID": "001-test001",
    "subject": "test_subject",
    "subjectId": 2,
    "status": "READ",
    "statusAt": "2025-01-30T11:07:57Z",
    "error": null,
    "comment": null
    }
}