SMS для SaaS-сервиса: вход, биллинг и критичные уведомления

SMS для SaaS-сервиса стоит использовать избирательно: для подтверждения входа, важных изменений безопасности, проблем с оплатой и событий, которые пользователь не должен пропустить. Обычные продуктовые подсказки лучше показывать внутри интерфейса или отправлять по email. Так SMS сохраняет высокий приоритет и не превращается в шум.
Карта событий SaaS-продукта
Разделите события по срочности:
- безопасность: код входа, восстановление доступа, смена телефона;
- биллинг: успешная оплата, ошибка списания, окончание оплаченного периода;
- лимиты: критическое приближение к ограничению, остановка функции;
- инциденты: недоступность важного сервиса, восстановление;
- аккаунт: приглашение администратора, блокировка, удаление.
Для каждого события задайте основной канал, резерв, срок полезности и лимит повторов.
Коды подтверждения
QUICKTEL Cloud: код входа 482913. Действует 5 минут. Никому не сообщайте код.
Код должен быть одноразовым, короткоживущим и связанным с конкретной попыткой. Ограничьте частоту запросов по номеру, аккаунту, IP и устройству. Не подтверждайте в тексте, существует ли пользователь, если это помогает перебору учётных записей.
Полная схема защиты описана в статье про OTP SMS. Сервису также нужен резервный способ восстановления, который не сводится к бесконечной повторной отправке кода.
Биллинг и подписка
Оплата тарифа Pro получена. Период продлён до 31 августа. Чек и документы доступны в разделе «Биллинг».
Не удалось продлить тариф Pro. Доступ сохранится до 3 августа. Проверьте способ оплаты: [ссылка].
Первое сообщение подтверждает фактический платёж, второе — ошибку конкретной попытки. Не пишите «подписка отключена», пока действует льготный период. После успешной оплаты все напоминания и повторные попытки должны остановиться.
Связанные правила раскрывают материалы про SMS после оплаты и напоминания о продлении.
Лимиты использования
Уведомление полезно, если пользователь может повлиять на ситуацию. Вместо «использовано 80%» объясните ресурс, расчётный период и действие:
В проекте «Магазин» использовано 90% лимита API-запросов за июль. Посмотреть потребление и настроить лимит: [ссылка].
Не отправляйте SMS на каждый процент. Установите пороги и не повторяйте один уровень после временного снижения и роста. Получателем должен быть администратор или владелец биллинга, а не каждый участник команды.
Инциденты сервиса
SMS оставляют для клиентов и сотрудников, которым действительно важно немедленное уведомление. Сообщение содержит затронутую функцию, начало, обходной путь и страницу статуса.
С 14:20 недоступна отправка отчётов в проекте «Магазин». Команда устраняет проблему. Обновления: [страница статуса].
После восстановления отправьте закрывающее сообщение. Не называйте причину до подтверждения и не раскрывайте технические детали, которые могут повысить риск безопасности.
Архитектура отправки
Продукт публикует событие в очередь. Отдельный сервис уведомлений проверяет настройки пользователя, приоритет, дедупликацию и локальное время, затем вызывает HTTP API QUICKTEL. Результат сохраняется с correlation ID.
Идемпотентный ключ включает аккаунт, объект, событие и версию. Для OTP ключ и срок жизни особые; для инцидента несколько обновлений могут иметь разные версии. Статусы доставки не смешивают с бизнес-статусом оплаты или аккаунта.
Настройки пользователя и команды
Разрешите администратору выбрать телефоны и типы операционных уведомлений, но не отключать обязательное подтверждение безопасности без альтернативы. При удалении сотрудника его номер сразу исключается из проектов и эскалаций.
Рекламные сообщения требуют отдельного управления. Регистрация в продукте сама по себе не должна включать пользователя во все маркетинговые кампании.
Международные номера и локализация
Если продукт работает в нескольких странах, номер хранится в международном формате, а язык определяется настройкой аккаунта, не кодом страны. Один пользователь может находиться в другой стране или использовать корпоративную SIM-карту.
Шаблон учитывает формат даты, часовой пояс и локальные условия тарифа. Нельзя переводить только текст, оставляя ссылку на неподходящий домен или время сервера. Для транзакционных сообщений полезно иметь утверждённый fallback-язык, если локализация отсутствует.
Доступность имени отправителя и правила маршрута могут различаться по направлениям. Эти ограничения проверяют до запуска страны, а не после массовых недоставок.
Ограничения и защита API
Сервис уведомлений должен ограничивать скорость по пользователю, аккаунту и типу события. Это защищает от программной ошибки и злоупотребления формой восстановления. Массовый всплеск OTP или уведомлений о лимите автоматически приостанавливается и создаёт сигнал команде.
Секреты доступа к SMS-платформе хранятся на сервере, регулярно меняются и не попадают в мобильное приложение или клиентский JavaScript. Журнал не должен сохранять одноразовые коды и полные тексты с чувствительными подстановками.
Перед релизом проведите нагрузочный тест очереди без реальной отправки, а затем ограниченный тест на разрешённых номерах. Проверьте повтор worker, задержку callback и восстановление после недоступности платформы.
Проверка и метрики
Протестируйте повтор OTP, истёкший код, успешную оплату после ошибки, несколько администраторов, достижение лимита дважды, завершение инцидента и удалённого сотрудника. Контролируйте доставку, время до события, дубли, успешные входы после кода, восстановленные платежи и жалобы.
Начните с безопасности и биллинга. Лимиты и инциденты подключайте после того, как роли и приоритеты уведомлений формализованы внутри продукта.