Статусы сообщений

Как получать статусы отправленных сообщений и рассылок «Мой диалог» — через push (вебхук) или pull (запрос к API)

Коротко: статусы показывают, что произошло с отправленным сообщением или рассылкой. Есть два способа их получать — push (мы отправляем) и pull (вы запрашиваете сами).

Кому подходит

  • Роль: Разработчик, Интегратор
  • Уровень: Опытный

Что это

После отправки сообщения или запуска рассылки важно знать их дальнейшую судьбу:

  • Дошло ли сообщение до получателя.
  • Прочитал ли он его.
  • Была ли ошибка и какая.
  • Сколько стоила отправка.
  • Как завершилась рассылка.

Эти данные и есть статусы. Они помогают обновлять состояние в вашей CRM, или другой системе, уведомлять менеджера, считать стоимость, запускать резервный канал (запускается автоматически в каскадной отправке сообщений).

Два способа получения статусов

СпособКто инициируетКогда использовать
PushПлатформа отправляет статусы вамКогда нужны статусы в реальном времени
PullВы запрашиваете статусы самиКогда нужны статусы пачкой — например, или вам удобно запрашивать статусы самостоятельно

Можно использовать один способ или оба одновременно.

Push — платформа отправляет статусы

Платформа сама отправляет статус на ваш URL по мере изменения состояния сообщения или рассылки.

Что нужно с вашей стороны

  1. Поднять эндпоинт, который принимает POST-запросы и отвечает кодом 200 OK. Например: https://ваш-сайт.com/webhook/iba.
  2. Указать этот URL одним из способов:
    • в поле webhook в каждом запросе;
    • в настройках имени отправителя;
    • в настройках API-ключа.
  3. Обрабатывать входящие статусы на своей стороне.

Статус сообщения

{
  "event": "messageStatus",
  "message": {
    "messageId": "4aab1947-7a34-4efe-8c51-e9c8f9b1412b",
    "omniTransactionId": "57f29fdd-1127-45b3-a7d5-260a831a4662",
    "channel": 1,
    "senderId": "sender_name",
    "status": "delivered",
    "timestamp": "2023-09-08T15:30:00Z",
    "contact": "905324546496",
    "cost": "1.00"
  }
}

Возможные статусы:

СтатусЧто означает
sentСообщение отправлено
deliveredСообщение доставлено
displayedСообщение прочитано (статус доступен не во всех каналах)
failedОшибка отправки
undeliverableСообщение не доставлено
unknownНеизвестный статус

Если от провайдера приходит ошибка (недоступен абонент, неверный номер и т. п.), статус придёт как failed или undeliverable. В поле reason будет описание ошибки.

Статус рассылки

Статус рассылки приходит только через push — на вебхук, указанный при запуске рассылки в поле webhook. Pull-эндпоинта для статуса рассылки нет.

Формат вебхука статуса рассылки описан в статье Broadcasts API.

Pull — запрашиваете статусы сами

Вы обращаетесь к API и запрашиваете статусы по нужным фильтрам. Это удобно, когда статусы нужны не сразу, или вам удобно запрашивать статусы самостоятельно.

Эндпоинт: GET /api/v1/edrs

Параметры запроса

ПараметрТипЧто указать
messageIdsstringСписок ID сообщений через запятую (1–10 штук)
timeFromstringНачало периода (например, 2024-01-01T00:00:00Z)
timeTostringКонец периода. Указывается обязательно вместе с timeFrom
phoneNumbersstringСписок номеров телефонов через запятую (1–10 штук)
broadcastRunIdintegerID запуска рассылки
offsetintegerСмещение
limitintegerМаксимум записей. По умолчанию 100

Указывайте либо messageIds, либо timeFrom + timeTo. Остальные параметры — опциональны.

Пример 1. Запрос по ID сообщений

curl --location 'https://web.mydialogi.ru/api/v1/edrs?messageIds=6719b5f4-36af-4fba-b111-49ff07f4f96b,75bb9087-fc19-4940-a004-c2723337cb2f' \
  --header 'X-API-Key: <ваш-ключ>'

Пример 2. Запрос за период

curl --location 'https://web.mydialogi.ru/api/v1/edrs?timeFrom=2024-01-01T00:00:00Z&timeTo=2024-01-02T00:00:00Z&limit=50' \
  --header 'X-API-Key: <ваш-ключ>'

Пример 3. Запрос по номеру телефона

curl --location 'https://web.mydialogi.ru/api/v1/edrs?phoneNumbers=905324546496&limit=20' \
  --header 'X-API-Key: <ваш-ключ>'

Формат ответа

{
  "count": 2,
  "limit": 100,
  "offset": 0,
  "data": [
    {
      "messageId": "6719b5f4-36af-4fba-b111-49ff07f4f96b",
      "channelType": 1,
      "senderId": "sender_name",
      "isSent": true,
      "isDelivered": true,
      "isSeen": false,
      "mdnStatus": "DELIVRD",
      "timeSent": "2024-01-01T10:00:00Z",
      "timeDelivered": "2024-01-01T10:00:05Z",
      "timeSeen": null,
      "finalCost": 0.0248,
      "country": "RU",
      "network": "MTS",
      "errorMessage": null
    }
  ]
}

Поля ответа

ПолеЧто означает
messageIdID сообщения
channelTypeНомер канала
senderIdИмя отправителя
bodyСодержимое сообщения
broadcastRunIdID запуска рассылки (если сообщение из рассылки)
clientInfoПроизвольное поле из запроса
countryСтрана получателя
countryCodeКод страны получателя
networkОператор связи
messageTypeТип сообщения
sessionIdID сессии
incomingDestNumberВходящий номер
isSentОтправлено
isDeliveredДоставлено
isSeenПрочитано (статус доступен не во всех каналах)
isBillableТарифицируется ли операция
mdnStatusСтатус от оператора
rateТариф
finalCostИтоговая стоимость
timeОбщее время обработки
timeSentВремя отправки
timeDeliveredВремя доставки
timeSeenВремя прочтения
errorMessageОшибка (если есть)

Что можно делать со статусами

  • Обновлять состояние сообщения в вашей CRM, или другой системе.
  • Уведомлять менеджера о недоставке.
  • Считать стоимость отправки.

Частые проблемы

Причина: ваш эндпоинт не отвечает кодом 200 OK или недоступен.

Решение: проверьте, что URL открыт из интернета и возвращает 200 OK. Платформа повторяет отправку при ошибке.

Причина: стоимость может быть не рассчитана на момент отправки статуса.

Решение: запросите статус повторно через GET /edrs — там поле finalCost заполняется.

Причина: по указанным фильтрам нет сообщений, или период указан неверно.

Решение: проверьте messageIds, период или номер телефона. Если запрашиваете по периоду — оба поля timeFrom и timeTo обязательны.

Причина: неверный или отсутствующий API-ключ.

Решение: проверьте заголовок X-API-Key. Подробнее: Ошибка 401.

См. также

Подключение к API

Аутентификация и базовый URL

OMNI API — отправка

Отправка сообщений, каскад, шаблоны

Broadcasts API

Запуск рассылок, шаблоны

Вебхуки

Все типы вебхуков платформы

Нужна помощь?