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
Параметры запроса:
| Поле | Тип | Обязательно | Что указать |
|---|---|---|---|
| webhook | string | Да | URL вебхука для статусов рассылки |
| templateId | integer | Да* | ID существующего шаблона рассылки |
| payload | object | Да* | Inline-содержимое рассылки |
| recipientsList | array | Нет | Список получателей. Если не указан — используются фильтры шаблона |
| launchTime | string | Нет | Время запуска (ISO 8601). Если не указано — старт сразу после модерации |
| name | string | Нет | Название рассылки |
| description | string | Нет | Описание |
*- нужен либо
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
| Поле | Тип | Обязательно | Что указать |
|---|---|---|---|
| contentType | integer | Да | 1 — Fallback, 2 — Chat Bot, 3 — RCS Capability Check |
| contentSettings | object | Да | Настройки содержимого |
| rcsCheck | boolean | Нет | Проверять поддержку RCS перед отправкой |
Объект contentSettings:
| Поле | Тип | Что означает |
|---|---|---|
| flowSteps | array | Список шагов рассылки |
| rcsCapabilityCheck | object | Настройки проверки RCS |
| scenario | object | Настройки сценария (для Chat Bot) |
Элемент flowSteps:
| Поле | Тип | Обязательно | Что указать |
|---|---|---|---|
| channelType | integer | Да | Номер канала |
| senderId | string | Нет | Имя отправителя |
| contentPattern | object | Нет | Содержимое сообщения |
| deliveryCondition | string | Нет | SUBMIT_SUCCESS, DELIVERY_SUCCESS, DISPLAY_SUCCESS |
| timeout | integer | Нет | Секунды до перехода на следующий шаг |
| order | integer | Нет | Порядок шага |
Управление шаблонами
Список
Эндпоинт: GET /broadcast/templates
| Параметр | Тип | По умолчанию | Что указать |
|---|---|---|---|
| limit | integer | 10 | Максимум записей |
| offset | integer | 0 | Смещение |
curl --location 'https://web.otpcod.ru/api/v1/broadcast/templates?limit=2' \
--header 'X-API-Key: <ваш-ключ>'
Создание шаблона
Эндпоинт: POST /broadcast/templates
| Поле | Тип | Обязательно | Что указать |
|---|---|---|---|
| name | string | Да | Название шаблона |
| contentType | integer | Да | 1, 2 или 3 |
| content | object | Да | Конфигурация содержимого |
| description | string | Нет | Описание |
| tags | array | Нет | Теги получателей |
| filterList | array | Нет | ID фильтров |
| extraRecipientList | array | Нет | Точные номера телефонов |
| rcsCheck | boolean | Нет | Проверять поддержку 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 вебхука обязателен при запуске рассылки.
| Поле | Тип | Что означает |
|---|---|---|
| status | string | Обновлённый статус рассылки |
| webhook | string | URL вебхука |
| broadcastId | integer | ID рассылки |
| message | string | Описание ошибки (если есть) |
Коды ответов
| Код | Что означает |
|---|---|
| 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.
См. также
Нужна помощь?
- OTP-коды: support@otpcod.ru