Сообщение
Сначала бренд, затем код и только необходимые сведения: ACME: ваш код 493 201. Срок действия — 10 минут. Уложите текст в один сегмент GSM-7. Не добавляйте ссылки: операторы особенно строго фильтруют сообщения с кодами и ссылками. Размещайте код ближе к началу, чтобы он был виден в уведомлении.
Настройки API
Пометьте транзакционный трафик параметром "window": { "quiet_hours": "bypass" }, чтобы отправлять его круглосуточно. Установите validity равным сроку действия кода, например 10 минутам, вместо стандартных 48 часов: просроченный код не должен приходить пользователю. Формируйте Idempotency-Key из идентификатора пользователя и номера попытки, чтобы повтор запроса с вашей стороны не отправил второй код.
Логика повторной отправки
Разрешайте запросить новый код через 30 секунд, затем через 60 и 120 секунд. При выпуске нового кода делайте предыдущий недействительным. Если вебхук сообщает message.failed из-за неизвестного номера, предложите пользователю проверить номер, а не отправляйте ещё одно сообщение.
Защита конечной точки
Конечная точка без ограничений позволяет злоумышленнику быстро израсходовать ваш баланс. Ограничивайте частоту по номеру, IP-адресу и аккаунту, после второго запроса требуйте пройти проверку и блокируйте направления, которые не обслуживаете. API бесплатно отклоняет неподдерживаемые префиксы, но поток запросов на действительные номера оплачивается.
Что измерять
Измеряйте по каждому направлению долю отправленных кодов, которые пользователи затем ввели. Этот показатель полезнее отчёта о доставке: он учитывает телефон, уведомление и действия пользователя. Направление, где конверсия на десять процентных пунктов ниже остальных, требует проверки.
Что-то непонятно или устарело? Напишите на [email protected]. Мы внесём исправления в руководство и обновим дату.
