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.

OMNI API отправляет одно сообщение одному получателю за запрос. Массив messages в эндпоинте /omnimessages — это каналы каскада для одного и того же получателя (contact), а не список получателей.

Для массовой отправки по списку номеров или фильтрам используйте Broadcasts API — эндпоинт POST /broadcast/broadcasts.

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

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

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

Параметры на уровне сообщения. Каждое сообщение в массиве messages может содержать свои поля clientInfo, cooldown и ttl — они переопределяют значения верхнего уровня для конкретного шага каскада.

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

Как это работает:

  • Получателю уходит настоящее сообщение с кодом, например: Ваш код подтверждения: 1234.
  • В EDR это же сообщение сохраняется с заменой кода на маску: Ваш код подтверждения: ******.

Так код остаётся доступен получателю, но не хранится в открытом виде в записях платформы.

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

НомерКаналДоступно через API
1SMS✅
2RCS✅
3Viber✅
4WhatsApp✅
5VK/OK✅
6WeChat✅
7Email✅
8Telegram Gateway✅
9Telegram✅
10Push✅
11TTS✅
12Voice❌
13Mobile Push✅
14FlashCall✅

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

Не все каналы отправляются через OMNI API:

  • Канал 5 (VK/OK) — отправка через API поддерживается, но информацию по настройке и параметрам нужно запросить в поддержке сервиса.
  • Канал 12 (Voice) — через OMNI API не отправляется. Доступен только в интерфейсе платформы.

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

Пример 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-коды и форматы ответов

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