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

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

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

Коротко: 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:

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

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

Список

Эндпоинт: 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 — обзор

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