СМС-шлюз
Коды подтверждения уходят через шлюз заказчика по его собственному договору с оператором связи: продукт СМС не перепродаёт, и отдельная подписка на доставку не нужна.
Писать интеграцию не придётся. Для популярных провайдеров достаточно указать учётные данные, для любого другого шлюза или собственной службы отправки — описать HTTP-запрос.
Настройки лежат в конфигурации арендатора: tenants[].factors.sms.
Известный провайдер
Заголовок раздела «Известный провайдер»Шесть провайдеров подключаются одной строкой preset: адрес, формат запроса и разбор
ответа встроены в продукт.
tenants: - id: corp factors: sms: enabled: true template: "Код подтверждения: %s. Никому его не сообщайте." gateway: preset: "smsc" login: "логин аккаунта" secret: "пароль или ключ API" sender: "" # имя отправителя, согласованное с оператором; пусто — по умолчаниюpreset | Провайдер | login | secret |
|---|---|---|---|
smsc | smsc.ru | логин аккаунта | пароль |
smsru | sms.ru | не нужен | api_id |
smsaero | smsaero.ru | e-mail аккаунта | ключ API |
sms4b | sms4b.ru | логин аккаунта | пароль |
redsms | redsms.ru | логин аккаунта | ключ API |
zagruzka | rapporto.ru | логин аккаунта | пароль; url обязателен: https://bulk9.rapporto.ru/<аккаунт>_rest |
url у любого пресета заменяет адрес провайдера, например на резервный узел.
Пресеты разбирают ответ провайдера по его формату, а не только по коду HTTP. Поэтому отказ шлюза — неверный ключ, пустой баланс, запрещённый номер — не выглядит для сотрудника как «код отправлен»: портал сообщает об ошибке, а причина пишется в журнал.
Другой шлюз или своя служба отправки
Заголовок раздела «Другой шлюз или своя служба отправки»Если провайдера нет в списке или у вас уже есть собственная служба отправки уведомлений, портал вызывает её HTTP-запросом. На вашей стороне нужен один адрес, который принимает номер и текст и отвечает, удалась ли отправка.
sms: enabled: true template: "Код подтверждения: %s" gateway: method: "POST" url: "https://notify.corp.example.ru/api/sms" body: '{"phone":"{phone}","text":"{text}"}' headers: Content-Type: "application/json" Authorization: "Bearer ЗАМЕНИТЬ" ok_substring: '"status":"ok"' # подстрока успешного ответа error_substring: '"status":"error"' # подстрока отказа; необязательно{phone}и{text}подставляются с экранированием под формат тела: в JSON — как строковый литерал, в форме — как значение параметра.- Отправка считается успешной, только если ответ пришёл с кодом 2xx и содержит
ok_substring. Так ответ200с ошибкой внутри не будет принят за доставку. - Номер берётся из атрибута каталога
tenants[].directory.ad.phone_attribute(по умолчаниюmobile).