Почему SMS работает по принципу best-effort
В SMS нет гарантированной доставки. Между вашим вызовом API и трубкой стоят агрегаторы, международные шлюзы и оператор назначения — любой из них может задержать, отфильтровать или тихо отбросить сообщение. Трафик верификации проверяется особенно жёстко, потому что операторы борются с мошенничеством и спамом именно на этих маршрутах.
Практическое следствие: нужно проектировать под частичный сбой (повтор, запасной канал) и активно мониторить доставку, а не считать, что отправленное сообщение — это доставленное сообщение.
- Доставка зависит от политики фильтрации оператора назначения.
- Международные маршруты добавляют шлюзы, каждый — возможная точка сбоя.
- Трафик приложений (A2P) фильтруется жёстче, чем человек-человеку.
Sender ID и почему они важны
Sender ID — то, что получатель видит как «от кого» — long-code, короткий код или буквенно-цифровое имя. Страны резко различаются: одни требуют предзарегистрированных буквенно-цифровых sender ID, другие предписывают короткие коды для A2P, третьи переписывают или блокируют незарегистрированных отправителей. Использование правильного, зарегистрированного sender ID для каждой страны — один из крупнейших рычагов доставки.
- Буквенно-цифровые sender ID: брендовый текст как отправитель; во многих странах нужна предрегистрация.
- Короткие коды: наивысшая пропускная способность и доверие для A2P, но нужно одобрение оператора.
- Long-code: подходят для многих рынков, но в США нужна регистрация 10DLC.
- Использование незарегистрированного отправителя в строгой стране — частая причина тихого сбоя.
Фильтрация операторов и содержимое сообщения
Операторы оценивают содержимое сообщений. URL, особенно сокращённые ссылки, публичные сокращатели ссылок и необычное форматирование — классические триггеры фильтрации. OTP-сообщения должны быть минимальными и одинаковыми: название приложения, код и ничего больше. Одинаковость тоже помогает, потому что некоторые операторы со временем накапливают репутацию на паре «отправитель + шаблон».
- Избегайте ссылок в OTP-сообщениях; сокращённые ссылки — сильный триггер фильтрации.
- Держите шаблоны одинаковыми — хаотичное содержимое выглядит как спам.
- Не включайте маркетинг в транзакционное OTP-сообщение.
- Регистрируйте шаблоны сообщений там, где страна этого требует.
Если доставка внезапно упала в одной стране, подозревайте изменение правила по содержимому или sender ID там раньше, чем что-либо в вашем коде.
Маршрутизация по странам
Маршрут — это путь, по которому ваше сообщение идёт к оператору назначения, и качество маршрута различается по провайдеру и стране. Дешёвые серые маршруты могут выглядеть нормально в тестах, а затем тихо деградировать. Для верификации предпочитайте прямые или качественные маршруты в важные страны, даже при большей стоимости, и сообщите провайдеру, что трафик — OTP, чтобы он маршрутизировал его соответственно.
- Предпочитайте прямые/премиальные маршруты для верификации на ключевых рынках.
- Остерегайтесь серых маршрутов: низкая цена, нестабильная доставка, плохие DLR.
- Некоторые провайдеры позволяют помечать трафик как OTP для лучшей маршрутизации.
- Тестируйте каждую важную страну отдельно — средние скрывают сбой на уровне страны.
Мониторьте доставку и действуйте по ней
Нельзя починить то, что не измеряешь. Собирайте отчёты о доставке (DLR), отслеживайте долю доставки и задержку по стране и по оператору, затем оповещайте о регрессиях. Сочетайте это с запасной логикой, чтобы просадка доставки деградировала мягко, а не блокировала регистрации.
- 1
Собирайте DLR
Включите отчёты о доставке и храните их против каждой отправки, чтобы знать доставлено против сбоя, а не только отправлено.
- 2
Сегментируйте по стране и оператору
Отслеживайте долю доставки и задержку по направлению — среднее скроет один сбойный рынок.
- 3
Оповещайте о регрессиях
Запускайте оповещение, когда доля доставки или задержка страны деградируют за порог.
- 4
Переключайтесь при сбое
Автоматически переключайтесь с деградировавшего провайдера или эскалируйте на запасной канал.