Broadcasts API — рассылки и шаблоны

Broadcasts API OTP-кодов — запуск рассылок, управление шаблонами, параметры запроса, вебхук статусов

Коротко: Broadcasts API OTP-сервиса запускает рассылки и управляет их шаблонами. Рассылка может использовать готовый шаблон или inline-содержимое.

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

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

Эндпоинты

МетодЭндпоинтДля чего
POST/broadcast/broadcastsЗапуск рассылки
GET/broadcast/templatesСписок шаблонов рассылок
POST/broadcast/templatesСоздать шаблон
GET/broadcast/templates/{id}Детали шаблона
PUT/broadcast/templates/{id}Обновить шаблон
DELETE/broadcast/templates/{id}Удалить шаблон

Полный URL: https://web.otpcod.ru/api/v1/broadcast/....

Запуск рассылки

Эндпоинт: POST /broadcast/broadcasts

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

ПолеТипОбязательноЧто указать
webhookstringДаURL вебхука для статусов рассылки
templateIdintegerДа*ID существующего шаблона рассылки
payloadobjectДа*Inline-содержимое рассылки
recipientsListarrayНетСписок получателей. Если не указан — используются фильтры шаблона
launchTimestringНетВремя запуска (ISO 8601). Если не указано — старт сразу после модерации
namestringНетНазвание рассылки
descriptionstringНетОписание

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

Пример 1. Запуск по шаблону:

curl --location 'https://web.otpcod.ru/api/v1/broadcast/broadcasts' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "templateId": 3091,
    "launchTime": "",
    "webhook": "https://webhook.site/9a9a9a9a-9a9a-9a9a-9a9a-9a9a9a9a9a9a"
  }'

Пример 2. Отложенная рассылка с указанием получателей:

curl --location 'https://web.otpcod.ru/api/v1/broadcast/broadcasts' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "templateId": 3091,
    "launchTime": "2024-08-30T09:14:45.410958Z",
    "webhook": "https://webhook.site/9a9a9a9a-9a9a-9a9a-9a9a-9a9a9a9a9a9a",
    "recipientsList": [
      { "phoneNumber": "4915735987904" }
    ]
  }'

Пример 3. Рассылка без шаблона (inline):

curl --location 'https://web.otpcod.ru/api/v1/broadcast/broadcasts' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "name": "Рассылка кодов",
    "launchTime": "2025-08-30T09:14:45.410958Z",
    "webhook": "https://webhook.site/9a9a9a9a-9a9a-9a9a-9a9a-9a9a9a9a9a9a",
    "recipientsList": [
      { "phoneNumber": "4915735987904" }
    ],
    "payload": {
      "contentType": 1,
      "contentSettings": {
        "flowSteps": [
          {
            "channelType": 1,
            "senderId": "smsGate",
            "timeout": 172800,
            "deliveryCondition": "SUBMIT_SUCCESS",
            "contentPattern": "Ваш код: 1234"
          }
        ]
      }
    }
  }'

recipientsList принимает объекты с полем phoneNumber. Если phoneNumber не указан — API вернёт 400.

Формат payload

ПолеТипОбязательноЧто указать
contentTypeintegerДа1 — Fallback, 2 — Chat Bot, 3 — RCS Capability Check
contentSettingsobjectДаНастройки содержимого
rcsCheckbooleanНетПроверять поддержку RCS перед отправкой

Объект contentSettings:

ПолеТипЧто означает
flowStepsarrayСписок шагов рассылки
rcsCapabilityCheckobjectНастройки проверки RCS
scenarioobjectНастройки сценария (для Chat Bot)

Шаги рассылки — flowSteps

Элемент flowSteps — это один шаг каскада: канал, содержимое, условие перехода.

ПолеТипОбязательноЧто указать
channelTypeintegerДаНомер канала
senderIdstringНетИмя отправителя
contentPatternstring или objectНетСодержимое сообщения. Может быть строкой с текстом или объектом — например, JSON-шаблоном сообщения с переменными {{...}}
deliveryConditionstringНетSUBMIT_SUCCESS, DELIVERY_SUCCESS, DISPLAY_SUCCESS
timeoutintegerНетСекунды до перехода на следующий шаг
orderintegerНетПорядок шага

contentPattern — это JSON-узел (JsonNode). Если шаблон простой текстовый — передайте строку. Если нужны переменные или структура — передайте объект в формате канала.

Проверка поддержки RCS — rcsCapabilityCheck

Используется, когда contentType: 3 — RCS Capability Check. Позволяет проверить, поддерживает ли устройство получателя RCS.

ПолеТипЧто указать
senderIdstringИмя отправителя, от которого выполняется проверка

Пример:

{
  "contentType": 3,
  "contentSettings": {
    "rcsCapabilityCheck": {
      "senderId": "rcs_sender"
    }
  }
}

Сценарий чат-бота — scenario

Используется, когда contentType: 2 — Chat Bot. Запускает двустороннюю рассылку со сценарием чат-бота.

ПолеТипЧто указать
channelIdintegerНомер канала, в котором работает чат-бот
flowIdintegerID чат-бота (сценария)
senderIdstringИмя отправителя, от которого работает чат-бот

Пример:

{
  "contentType": 2,
  "contentSettings": {
    "scenario": {
      "channelId": 4,
      "flowId": 42,
      "senderId": "wa_sender"
    }
  }
}

Управление шаблонами

Список

Эндпоинт: GET /broadcast/templates

ПараметрТипПо умолчаниюЧто указать
limitinteger10Максимум записей
offsetinteger0Смещение
curl --location 'https://web.otpcod.ru/api/v1/broadcast/templates?limit=2' \
  --header 'X-API-Key: <ваш-ключ>'

Создание шаблона

Эндпоинт: POST /broadcast/templates

ПолеТипОбязательноЧто указать
namestringДаНазвание шаблона
contentTypeintegerДа1, 2 или 3
contentobjectДаКонфигурация содержимого
descriptionstringНетОписание
tagsarrayНетТеги получателей
filterListarrayНетID фильтров
extraRecipientListarrayНетТочные номера телефонов
rcsCheckbooleanНетПроверять поддержку RCS
curl --location 'https://web.otpcod.ru/api/v1/broadcast/templates' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "name": "Рассылка кодов",
    "contentType": 1,
    "content": {
      "flowSteps": [
        {
          "channelType": 1,
          "senderId": "sms_sender",
          "contentPattern": "Ваш код: {{code}}",
          "deliveryCondition": "DELIVERY_SUCCESS",
          "timeout": 259200
        }
      ]
    }
  }'

Детали / обновление / удаление

# Детали
curl --location 'https://web.otpcod.ru/api/v1/broadcast/templates/1670' \
  --header 'X-API-Key: <ваш-ключ>'

# Обновление (частичное)
curl --location --request PUT 'https://web.otpcod.ru/api/v1/broadcast/templates/1670' \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <ваш-ключ>' \
  --data-raw '{
    "name": "Рассылка кодов 2024"
  }'

# Удаление — возвращает 204 No Content
curl --location --request DELETE 'https://web.otpcod.ru/api/v1/broadcast/templates/1670' \
  --header 'X-API-Key: <ваш-ключ>'

При обновлении поддерживается частичное изменение: переданные поля обновляются, null игнорируются. Для смены contentType нужно передать полностью новый content.

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

URL вебхука обязателен при запуске рассылки.

ПолеТипЧто означает
statusstringОбновлённый статус рассылки
webhookstringURL вебхука
broadcastIdintegerID рассылки
messagestringОписание ошибки (если есть)

Коды ответов

КодЧто означает
200 OKУспешно
204 No ContentУспешно, тело пустое
400Ошибка параметров
401Неверный или отсутствующий API-ключ
403Нет прав
404Шаблон не найден
500Внутренняя ошибка сервера

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

Причина: в recipientsList есть объект без поля phoneNumber.

Решение: убедитесь, что в каждом объекте указан phoneNumber.

Причина: templateId не существует или не принадлежит вашей компании.

Решение: проверьте ID через GET /broadcast/templates.

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

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

Причина: у ключа нет scope broadcasts.

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

См. также

OMNI API — отправка кодов

Эндпоинты /messages, /omnimessages, 2FA

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

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

Вебхуки

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

Обзор API OTP

OMNI, Broadcasts, 2FA — обзор

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