Как отправить первый код через умный шлюз
Пошаговый сценарий отправки первого кода через умный шлюз OTP — одиночное сообщение или каскад, API-ключ, имя отправителя, curl и проверка статуса
Коротко: один POST-запрос отправляет код — через один канал или каскадом. Платформа сама переключает каналы, если настроен каскад.
Кому подходит
- Роль: Разработчик
- Уровень: Опытный
Что это
Пошаговый сценарий первого запуска: от получения API-ключа до проверки статуса доставки. К концу статьи вы отправите первый код через каскад WhatsApp → TTS → SMS или через один канал.
Детали параметров (successOn, timeout, cooldown, sendNextAfterFail) — в разделе API и интеграция.
Практические рекомендации по выбору этих параметров — в статье Как настроить каскад в умном шлюзе.
Два варианта отправки
Отправка может быть двух типов. Выберите подходящий — оба используют один эндпоинт /omnimessages.
| Вариант | Когда использовать | Что в messages |
|---|---|---|
| Одиночное сообщение | Задача решается одним каналом — например, только SMS | Одно сообщение — один канал |
| Каскад | Нужна повышенная доставляемость — если первый канал не сработал, сообщение уйдёт по следующему | Несколько сообщений — цепочка каналов. SMS — последний |
Доступные каналы. В умном шлюзе доступно 9 каналов OTP. Номера для поля channel — в таблице Какие каналы использовать для OTP.
Перед началом
- Есть API-ключ с правами
omni-api. - Есть имя отправителя со статусом Активно.
- Настроен endpoint для вебхука (если нужны статусы доставки через push).
- Вы определились — одиночное сообщение или каскад.
Шаги
В личном кабинете: API Подключения → Создать API подключение.
Включите права omni-api и statistics. Выберите имя отправителя.
Имя отправителя нужно для отправки сообщений по любому каналу. Дождитесь статуса Активно.
URL: https://web.otpcod.ru/api/v1/omnimessages
Заголовки:
Content-Type: application/jsonX-API-Key: <API-ключ>
Основные параметры:
| Параметр | Что указать |
|---|---|
contact | Номер получателя |
isOtp | true — флаг, что это OTP |
webhook | URL для получения статусов (push) |
cooldown | Время блокировки контакта при неудаче (секунды) |
messages | Массив сообщений — одно или несколько |
Выберите вариант — одиночное сообщение или каскад. Примеры ниже.
Выберите способ — push (вебхук) или pull (GET /edrs).
Пример 1. Одиночное сообщение — только SMS
curl --location 'https://web.otpcod.ru/api/v1/omnimessages' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <API-ключ>' \
--data-raw '{
"contact": "79991234567",
"isOtp": true,
"webhook": "https://your-site.com/webhook",
"messages": [
{
"channel": 1,
"senderId": "<имя отправителя SMS>",
"successOn": "delivered",
"timeout": 60,
"payload": {
"text": "Ваш код: 1234"
}
}
]
}'
Что происходит: платформа отправляет сообщение по SMS и ждёт delivered 60 секунд. Если статус получен — отправка завершена. Если нет — сообщение не доставлено, каскада нет.
Пример 2. Каскад — WhatsApp → TTS → SMS
curl --location 'https://web.otpcod.ru/api/v1/omnimessages' \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <API-ключ>' \
--data-raw '{
"contact": "79991234567",
"isOtp": true,
"webhook": "https://your-site.com/webhook",
"cooldown": 60,
"messages": [
{
"channel": 4,
"senderId": "<имя отправителя WhatsApp>",
"successOn": "delivered",
"timeout": 30,
"payload": {
"text": "Ваш код: 1234"
}
},
{
"channel": 11,
"senderId": "<имя отправителя TTS>",
"successOn": "delivered",
"timeout": 45,
"payload": {
"text": "Ваш код 1234",
"language": "ru",
"repeat_count": 1
}
},
{
"channel": 1,
"senderId": "<имя отправителя SMS>",
"payload": {
"text": "Ваш код: 1234"
}
}
]
}'
Что происходит:
- Платформа отправляет сообщение по WhatsApp и ждёт
delivered30 секунд. - Если статус получен — каскад завершён. Статус
deliveredфинальный. - Если не получен — переход на TTS, ожидание
delivered45 секунд. - Если не получен — переход на SMS — последний канал цепочки.
- Если SMS тоже не доставлено — контакт блокируется на 60 секунд (
cooldown).
Если от провайдера приходит статус «абонент недоступен», «номер не существует» или «отклонено» — платформа переключается на следующий канал немедленно, без ожидания таймаута.
Для OTP скорость критична. Пользователь ждёт код — если он не приходит за 30–60 секунд, он запросит новый. Поэтому таймауты для OTP измеряются в секундах, а не в минутах.
Подробнее о выборе таймаутов и других параметров — в статье Как настроить каскад в умном шлюзе.
Результат
Сообщение отправлено — одиночное или по каскаду. Статусы доставки вы получаете двумя способами на выбор — через push (вебхук) или pull (GET /edrs).
Частые проблемы
Причина: в запросе указано имя отправителя, которое не привязано к API-ключу.
Решение: откройте ключ в разделе API Подключения и добавьте нужное имя отправителя.
Причина: статус, указанный в successOn, уже наступил. По умолчанию successOn = sent — переход не происходит.
Решение: явно укажите successOn: "delivered" для каждого сообщения каскада.
Причина: не указан webhook, или ваш сервер недоступен извне.
Решение: два варианта.
- Push: укажите
webhookв запросе, в настройках имени отправителя или в настройках API-ключа. Убедитесь, что ваш сервер отвечает кодом200 OK. - Pull: запрашивайте статусы самостоятельно через
GET /edrs.
См. также
Нужна помощь?
- OTP-коды: support@otpcod.ru