Как одноразовый код доходит до телефона
Содержание
- Четыре участника доставки любого кода
- Почему A2P-сообщения идут не так, как обычная переписка
- Что видно со стороны получателя, а что нет
- Что такое имя отправителя, маршруты и агрегаторы?
- Проследим путь одного кода по сети шаг за шагом
- Почему доставка отличается в разных сервисах и странах
- Как найти причину, если код так и не приходит?
- Частые вопросы о доставке одноразовых кодов по SMS
Вы нажимаете «Отправить код», и телефон несколько секунд молчит. За это время сообщение проходит через четыре системы, ни одна из которых с вами напрямую не общается. Приложение генерирует одноразовый код и передаёт текст провайдеру рассылок. Этот провайдер, агрегатор, выбирает маршрут доставки. Маршрут заканчивается на мобильном операторе, который доставляет SMS на телефон через сигнальную сеть. На каждом переходе сообщение может встать в очередь, получить другого отправителя или вовсе потеряться.
Путь одноразового кода
| Этап | Кто выполняет | Что может пойти не так |
|---|---|---|
| Ваше приложение или backend | Вы | Лимиты запросов, валидация, повторные отправки |
| SMS-провайдер или агрегатор | Поставщик услуг | Выбор маршрута, постановка в очередь |
| Оптовый маршрут | Операторы связи между двумя сетями | Серые маршруты, незаметные потери |
| Оператор-получатель | Оператор связи | Фильтрация отправителя, спам-правила |
| Телефон | Пользователь | Выключен, переполнен ящик, роуминг |
Четыре участника доставки любого кода
| Участник | Что делает | Что может сломать |
|---|---|---|
| Приложение | Генерирует OTP, задаёт срок действия (обычно от 60 до 300 секунд) | Ограничивает частоту запросов, повторно выдаёт устаревший код |
| Агрегатор | Выбирает маршрут, оформляет идентификатор отправителя | Отправляет по дешёвому маршруту с плохой доставляемостью |
| Оператор | Доставляет на SIM-карту, применяет антиспам-фильтры | Блокирует неизвестных отправителей, задерживает трафик |
| Телефон | Отображает сообщение, подставляет код автоматически | Отключает уведомления по ветке, отправляет сообщение в спам |
Почему A2P-сообщения идут не так, как обычная переписка
Сообщение от друга начинается на SIM-карте внутри сети оператора и по этим же операторским путям и остаётся. A2P-сообщение начинается на сервере, попадает в сеть через SMS-шлюз и ещё до прихода в сеть назначения классифицируется как коммерческий трафик. А коммерческий трафик регистрируют, ограничивают по скорости и фильтруют. Плюс он тарифицируется посегментно, и это подталкивает отправителей к экономии на маршрутах. Дешёвая маршрутизация, самая частая причина, по которой код приходит на 40-й секунде, а не на 4-й.
Что видно со стороны получателя, а что нет
С телефона вы видите три вещи: пришло ли сообщение, какая в нём строка отправителя и время получения. Вы не видите, какой агрегатор его отправил, каким маршрутом оно шло и держал ли его оператор в очереди 20 секунд. Отчёты о доставке остаются на стороне отправителя.
С арендованным номером таймер виден явно. Номера MarioSMS стоят от $0.04, держат одну верификацию за раз и показывают код в приложении или в панели управления, обычно в пределах минуты. Если до окончания окна активации ничего не пришло, активация отменяется, а деньги возвращаются на баланс.
Что такое имя отправителя, маршруты и агрегаторы?
Больше всего путаницы создают три понятия. Имя отправителя показывается в поле From. Маршрутом называют коммерческий путь, по которому сообщение идёт от отправителя до вашего оператора. Агрегатор это посредник, который оптом покупает такие пути и перепродаёт их по цене за сообщение.
Агрегаторы стоят между платформами приложений и сотнями операторов и подключаются к ним через оборудование вроде того, что показано на изображении выше. Одно сообщение может пройти через два или три агрегатора, прежде чем попадёт в сеть, которая обслуживает вашу SIM-карту. Отчёт о доставке возвращается по той же цепочке, и на каждом переходе его содержимое могут переписать.
Типы имени отправителя: буквенно-цифровое, короткий номер, длинный номер
Буквенно-цифровое имя отправителя показывает название бренда и не может принимать ответы. Короткий номер состоит из 4 до 6 цифр, регистрируется отдельно в каждой стране и обычно рассчитан на высокую пропускную способность. Длинный номер выглядит как обычная мобильная линия, и именно такой тип используют арендованные номера.
Как агрегатор выбирает маршрут и что меняет least-cost routing
- Платформа передаёт сообщение своему шлюзу вместе с префиксом получателя.
- Шлюз ранжирует доступные маршруты по цене, а затем по свежему проценту доставки.
- Побеждает самый дешёвый приемлемый маршрут, если только отправитель не оплатил прямой.
- Если этот маршрут отклоняет сообщение или не отвечает вовремя, попытка повторяется на следующем маршруте по списку.
Least-cost routing уводит трафик к тому поставщику, который дешевле всего в текущий час. Прямые маршруты идут от оператора к оператору. Серые маршруты попадают к оператору через чёрный ход, стоят дешевле и блокируются без предупреждения, как только оператор их замечает.
Где происходит фильтрация и оценка на спам
Фильтрация работает как минимум в трёх точках. Отправляющая платформа блокирует собственные помеченные аккаунты. Агрегатор отсекает контент, который совпадает с известными спам-шаблонами. Принимающий оператор оценивает сообщение по репутации отправителя, содержанию и объёму, а затем доставляет его, задерживает или молча отбрасывает.
Почему статус Delivered может быть неверным
| Статус | Что он означает | Что он не означает |
|---|---|---|
| Submitted | Шлюз принял сообщение | Что его увидел оператор |
| Sent | Оно ушло от агрегатора в сторону маршрута | Что оно попало в сеть оператора |
| Delivered | Кто-то ниже по цепочке вернул код успеха | Что телефон показал сообщение |
| Failed | Какой-то узел вернул ошибку | Что номер недействителен |
На некоторых маршрутах этот код успеха формируется ещё до того, как сообщение доходит до телефона, а отфильтрованные сообщения всё равно могут отмечаться как доставленные. Относитесь к такому отчёту как к подсказке о маршрутизации, а не как к доказательству того, что код дошёл.
Проследим путь одного кода по сети шаг за шагом
Код, который приходит за три секунды, и код, который не приходит вовсе, идут одним и тем же маршрутом. Разница в том, на каком участке он застревает или теряется. В таблице ниже перечислены все звенья цепочки, кто ими управляет и какой сбой чаще всего случается именно там.
Что подтверждает отчёт о доставке, а что нет
| Статус | Что это означает | Чего это не означает |
|---|---|---|
| Принято | Агрегатор принял сообщение | Оператор доставит его |
| Отправлено | Оно ушло к оператору | Телефон получил его |
| Доставлено | Оператор подтвердил доставку | Пользователь увидел его или код действителен |
| Ошибка | Кто-то отклонил его | Вы знаете, на каком этапе |
[TABLE: Путь, который проходит одноразовый код]
Шаги с 1 по 8: от вызова API до телефона
- Вы нажимаете «Отправить», приложение делает запрос к собственному бэкенду.
- Бэкенд обращается к API своего SMS-шлюза или провайдера.
- Провайдер выбирает маршрут для нужной страны и идентификатора отправителя.
- Сообщение попадает к агрегатору с локальными стыками.
- Агрегатор передаёт его на SMSC оператора.
- SMSC ставит сообщение в очередь по записи абонента.
- Телефон принимает сообщение по сигнальному каналу.
- Квитанция о доставке возвращается обратно по той же цепочке.
Куда на самом деле уходят секунды
Шаги с 1 по 4, это вызовы API между дата-центрами, обычно они укладываются в 500 миллисекунд. Переменная величина, шаг 5. Загруженный SMSC может держать сообщение 10 секунд, а если телефон вне сети, то и несколько минут.
[IMAGE: Типичный тайминг одноразового кода]
Большинство кодов проходит всю цепочку за 2, 20 секунд. Длинный хвост приходится на международные маршруты, на номера, недавно сменившие оператора, и на телефоны, которые только что вышли из авиарежима и ещё регистрируются в сети.
Как повторная отправка выглядит со стороны оператора
Когда вы нажимаете «Отправить ещё раз», приложение генерирует новый код и отправляет второе сообщение. Оператор видит две отправки на один номер с разницей в секунды и почти одинаковым текстом. Фильтры расценивают такой паттерн как близкий к спаму. Три быстрых повтора могут привести к тому, что ваш номер ограничат на 10, 30 минут на этом маршруте.
Выдерживайте 60 секунд между повторами. Если первое сообщение было поставлено в очередь, а не потеряно, оно часто приходит как раз за это время.
Как то же самое сообщение получает арендованный номер
Арендованный номер стоит на настоящей SIM-карте внутри сети оператора, поэтому шаги с 5 по 7 ничем не отличаются от вашего собственного телефона. Разница начинается на шаге 8. Вместо экрана блокировки сообщение приходит в панель управления.
В MarioSMS вы арендуете номер под одну верификацию за раз, от $0.04. Код появляется в приложении или на app.mariosms.com, обычно в течение минуты. Если SMS не приходит до истечения времени активации, активация отменяется, а деньги автоматически возвращаются на баланс.
Почему доставка отличается в разных сервисах и странах
Одно и то же приложение может доставить код за 6 секунд в одной стране и словить таймаут в другой. Содержимое сообщения при этом одинаковое. Меняется набор правил, через которые сообщение должно пройти на входе.
Регистрация отправителя и правила отдельных стран
Ряд стран требует, чтобы отправитель прошёл регистрацию до того, как будет принят хоть какой-то трафик A2P. Регистрация охватывает компанию, образцы шаблонов сообщений и строку sender ID. Незарегистрированный трафик фильтруется, переписывается на обезличенный номер или отбрасывается без отчёта о доставке, поэтому сервис, который работает по всей Европе, может не работать на одном рынке, пока не оформлены документы.
Поверх накладываются и другие правила. Некоторые регуляторы блокируют буквенно-цифровые sender ID и заставляют использовать цифрового отправителя. Некоторые требуют номера в местном формате. Некоторые запрещают ссылки в теле сообщения, а это важно, когда приложение отправляет магическую ссылку вместо кода из 6 цифр.
Сервисы, которые шлют с коротких номеров, и сервисы с длинными номерами
| Тип отправителя | Типичное применение | Что заметно на практике |
|---|---|---|
| Короткий номер (5 или 6 цифр) | Большие объёмы OTP в одной стране | Быстро, стабильно, только одна страна |
| Длинный виртуальный номер | Трансграничные OTP и ответы | Работает широко, медленнее при дальней маршрутизации |
| Буквенно-цифровой ID | Брендированные уведомления | В части стран блокируется или переписывается |
Короткие номера арендуются под конкретную страну и конкретного оператора, поэтому сервис, который использует их дома, за границей откатывается на длинный номер. Такой запасной маршрут проходит через большее число узлов, и каждый узел добавляет время ожидания в очереди.
Набор стран, наличие номеров и разброс цен
Номера, это товарный запас. Диапазоны вырабатываются, попадают в блокировки и выводятся из оборота, а операторы выпускают новые блоки с разной скоростью. Страна со свежими диапазонами и мягкими правилами по отправителям обходится дешевле, чем та, где чистых номеров мало. Именно поэтому цены MarioSMS начинаются от $0.04 за номер и отличаются в зависимости от сервиса и страны, при 35+ странах и сотнях сервисов в наличии.
Тестирование одного и того же сценария в 35+ странах
- Выберите один сервис и арендуйте номер в стране A.
- Засеките время от отправки до появления кода в панели управления.
- Повторите в странах B и C, тот же сервис, тот же час.
- Сравните время прихода и долю отмен по каждой стране.
- Автоматизируйте цикл через REST API на Python, Node.js, Go или PHP.
Каждый номер рассчитан на одну активацию. Если ничего не пришло до окончания таймера, активация отменяется и деньги возвращаются на баланс, так что неудачный тест страны стоит времени, а не денег.
Как найти причину, если код так и не приходит?
У пропавшего кода есть три возможных места, где он мог застрять: отправитель, маршрут или получатель. Проверяйте их именно в таком порядке, потому что проблемы на стороне отправителя встречаются чаще всего и проверяются проще всего.
Сначала проверьте сторону отправителя
- Убедитесь, что сервис принял номер в нужном формате: с кодом страны и без пробелов.
- Проверьте, показал ли сервис статус «код отправлен» или сообщение об ошибке.
- Подождите 60 секунд, прежде чем запрашивать код повторно: многие платформы ставят второй запрос в очередь за первым.
- Посчитайте, сколько раз вы уже запрашивали код заново. Некоторые сервисы ограничивают отправку после 3 попыток в час и молча отбрасывают остальные.
- Проверьте, поддерживает ли сервис SMS для выбранной вами страны в принципе.
Если сервис так и не передал сообщение своему SMS-шлюзу, всё, что происходит дальше, уже не имеет значения.
Исключите маршрут и фильтрацию
Фильтры операторов отбрасывают сообщения, похожие на спам, обычно не уведомляя об этом отправителя. Сообщение может быть принято агрегатором, помечено как отправленное и при этом никогда не дойти до телефона. Признаки фильтрации: один и тот же сервис нормально доставляет коды в одной стране и не доставляет в другой, либо коды приходят на одни префиксы и не приходят на другие.
| Симптом | Вероятная причина | Что делать |
|---|---|---|
| Кода нет ни в одной стране | Отправитель отклонил номер | Перепроверьте формат и поддержку сервиса |
| Код приходит в стране A, тишина в стране B | Маршрут или фильтр в стране B | Смените страну |
| Код приходит с задержкой от 5 до 15 минут | Очередь или повторная отправка | Дождитесь окончания таймера |
| Первый код пришёл, второй не приходит | Лимит на стороне отправителя | Подождите час |
Исключите телефон и номер
При аренде номера телефон вам не принадлежит, поэтому сторона получателя сводится к одному вопросу: зафиксировала ли платформа входящее сообщение. Обновите панель, проверьте приложение и веб-версию на app.mariosms.com и убедитесь, что смотрите на нужную активацию, а не на более раннюю.
Когда стоит отменить активацию и начать новую
Отменяйте, когда на таймере осталось меньше 30 секунд, а сообщение так и не пришло. Стоимость автоматически вернётся на баланс. После этого арендуйте новый номер, желательно в другой стране, и отправьте один запрос вместо трёх.
Частые вопросы о доставке одноразовых кодов по SMS
Сколько времени идёт одноразовый код?
Большинство кодов приходят меньше чем за минуту. Если прошло больше 90 секунд, обычно дело в очереди, фильтре или повторной отправке, а не в потерянном сообщении.
Могут ли два сервиса использовать одно имя отправителя?
Да. Буквенные имена отправителя не во всех странах уникальны глобально, поэтому два приложения могут одинаково отображаться как «VERIFY». Смотрите на текст сообщения, а не на заголовок.
Значит ли отчёт о доставке, что пользователь увидел код?
Нет. Отчёт о доставке подтверждает, что телефон принял сообщение. О том, прочитал ли кто-то текст на экране, он ничего не говорит.
Почему некоторые коды приходят не по порядку?
Разные сообщения идут разными маршрутами и по-разному переотправляются. Запросите три кода за 20 секунд, и третий может прийти первым. Сопоставляйте каждый код с его запросом, прежде чем использовать самый свежий.
Что будет, если на арендованный номер не придёт SMS?
Таймер активации истечёт, аренда отменится, а деньги вернутся на баланс. За молчащий номер вы не платите. Возьмите новый номер, лучше в другой стране, и отправьте один запрос.
Можно ли получать коды через API, а не через личный кабинет?
Да. REST API возвращает код в формате JSON, есть примеры на Python, Node.js, Go и PHP. Рабочий цикл опроса смотрите в руководстве приём SMS на Python.
Какие способы использования арендованного номера допустимы?
Забота о приватности, вторые аккаунты по обоснованным причинам, а также тестирование QA и OTP. Никакого обхода блокировок и выдачи себя за другого. Полный список есть на странице допустимое использование.