OMNI API — отправка сообщений

OMNI API «Мой диалог» — отправка одиночных сообщений и каскадов, параметры запроса, таблица каналов, отправка шаблонов

OMNI API — отправка сообщений

Коротко: OMNI API — единый интерфейс для отправки сообщений. Поддерживает одиночную отправку и каскадную отправку с автоматическим переключением между каналами.

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

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

Эндпоинты

МетодЭндпоинтДля чего
POST/messagesОтправка одного сообщения
POST/omnimessagesКаскадная отправка

Полный URL: https://web.mydialogi.ru/api/v1/messages и https://web.mydialogi.ru/api/v1/omnimessages.

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

ПолеТипОбязательноЧто указать
contactstringДаНомер получателя с кодом страны, без «+»
channelintegerДаНомер канала (см. таблицу ниже)
senderIdstringДаИмя отправителя из «Активы → Имена отправителей»
payloadobjectДа*Содержимое сообщения. Формат зависит от канала
templateobjectДа*Содержимое шаблона: id и params
webhookstringНетURL для приёма статусов. Подробнее — Вебхуки
clientInfostringНетПроизвольное поле, сохраняется в EDR
isOtpbooleanНетЕсли true — содержимое скрывается в EDR как OTP
successOnstringНетТолько для каскада. Статус успеха: sent, delivered, seen. По умолчанию sent
timeoutintegerНетТолько для каскада. Секунды до перехода на следующий канал. По умолчанию 1200 (20 минут)
cooldownintegerНетТолько для каскада. Секунды блокировки контакта при неудаче. По умолчанию выключено
ttlintegerНетВремя жизни сообщения

*- нужен либо payload, либо template.

isOtp: true указывайте, только если сообщение содержит одноразовый код (OTP, 2FA, код верификации). Для обычных сообщений — не указывайте.

Таблица каналов

НомерКанал
1SMS
2RCS
3Viber
4WhatsApp
5VK/OK
6WeChat
7Email
8Telegram Gateway
9Telegram
10Push
11TTS
12Voice
13Mobile Push
14FlashCall

Не все каналы доступны для каждой компании. Полный список доступных каналов можно получить через эндпоинт GET /channels.

Отправка одного сообщения

Пример SMS:

curl --location 'https://web.mydialogi.ru/api/v1/messages' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "contact": "905063565285",
    "channel": 1,
    "senderId": "<senderID>",
    "payload": {
      "text": "Тестовое сообщение"
    }
  }'

Ответ придёт кодом 202 Accepted с messageId. Факт доставки — асинхронно через вебхук.

Форматы payload для каждого канала смотрите в статье Форматы payload по каналам — они одинаковые для всех сервисов.

Каскадная отправка

Запрос POST /omnimessages принимает массив messages — по объекту на каждый канал.

Для каждого сообщения (кроме последнего) можно указать:

  • successOn — статус, при котором сообщение считается успешным. Если он не наступит — платформа перейдёт к следующему сообщению.
  • timeout — секунды ожидания successOn. По умолчанию 1200 (20 минут).

Пример: RCS → SMS с двумя шаблонами

curl --location 'https://web.mydialogi.ru/api/v1/omnimessages' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "contact": "<dnis>",
    "webhook": "<webhookURL>",
    "isOtp": true,
    "cooldown": 86400,
    "messages": [
      {
        "channel": 2,
        "senderId": "<senderID>",
        "successOn": "delivered",
        "timeout": 60,
        "template": {
          "id": <rcsTemplateID>,
          "params": {
            "attribute.phoneNumber": "112332",
            "attribute.name": "test-name"
          }
        }
      },
      {
        "channel": 1,
        "senderId": "<senderID>",
        "template": {
          "id": <smsTemplateID>,
          "params": {
            "attribute.phoneNumber": "112332",
            "attribute.code": "1234"
          }
        }
      }
    ]
  }'

SMS отправится, если RCS не получит статус delivered в течение 60 секунд или если от провайдера сразу придёт статус failed / undeliverable.

У каждого канала в каскаде может быть свой шаблон или произвольный текст через payload.

Отправка шаблонов

Для отправки по шаблону используйте параметр template вместо payload.

ПолеТипОбязательноЧто указать
idintegerДаID шаблона из раздела «Активы» → «Шаблоны сообщений»
paramsobjectДаАтрибуты шаблона. Если шаблон без переменных — пустой объект {}

Пример:

curl --location 'https://web.mydialogi.ru/api/v1/messages' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "contact": "<dnis>",
    "webhook": "<webhookURL>",
    "channel": 2,
    "senderId": "<senderID>",
    "template": {
      "id": <templateID>,
      "params": {
        "attribute.phoneNumber": "112332",
        "attribute.name": "test-name"
      }
    }
  }'

Коды ответов

КодЧто означает
202 AcceptedЗапрос принят
400Ошибка параметров
401Неверный или отсутствующий API-ключ
404Ресурс не найден
500Внутренняя ошибка сервера

Пример успешного ответа:

{
  "error": false,
  "data": {
    "channel": 4,
    "transactionId": "95e3e0da-9684-4ba4-88a3-e9207ddeca05",
    "messageId": "6719b5f4-36af-4fba-b111-49ff07f4f96b"
  }
}

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

Причина: неверный ID шаблона.

Решение: откройте раздел Активы → Шаблоны сообщений, скопируйте точный ID.

Причина: неверный ключ атрибута в template.params.

Решение: проверьте формат — например, attribute.name.

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

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

Причина: в запросе указано имя отправителя, которое не привязано к этому ключу.

Решение: откройте ключ в разделе API Подключения и добавьте нужное имя отправителя.

Причина: статус, указанный в successOn, уже наступил — например, sent, а вы ждали delivered.

Решение: явно укажите successOn: "delivered" для каждого сообщения каскада.

См. также

Форматы payload по каналам

JSON-примеры для каждого канала

Broadcasts API

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

Recipients API

Контакты, атрибуты, фильтры

Обработка ошибок API

HTTP-коды и форматы ответов

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