Как отправлять миллионы SMS в сутки: руководство
Миллионы SMS в сутки: расчёт TPS, SMPP-бинды и окно, очереди и троттлинг, обработка DLR, Sender ID, тихие часы и KPI для мониторинга массовой SMS-рассылки.
Автор: OmniChannels.ai Editorial Team · Проверил: BroadNet Messaging Solutions Team
SMS и OTP
Короткий ответ
Чтобы отправлять миллионы SMS в сутки, рассчитывайте пропускную способность по пику, а не по среднесуточному значению: разделите число сегментов на секунды окна отправки, добавьте запас на OTP-трафик и задайте окно SMPP не меньше TPS, умноженного на время кругового обмена. Используйте несколько биндов, очереди по операторам и ограничитель скорости с паузами при троттлинге, обрабатывайте отчёты о доставке отдельно и разделяйте OTP и рекламный трафик.
На этой странице
- Сколько SMS в секунду нужно для миллионов в сутки?
- Как планировать пропускную способность по самому загруженному часу, а не по среднему?
- Что такое SMPP-бинд и сколько их нужно?
- Как работает окно SMPP?
- Как строить очереди и ограничивать скорость в масштабе?
- Как маршрутизировать по операторам в масштабе?
- Как обрабатывать отчёты о доставке в масштабе?
- Что нужно зарегистрировать по странам до отправки?
- Как соблюдать тихие часы при больших объёмах?
- Зачем разделять OTP и рекламный трафик?
- Какие KPI мониторить?
- Каков чек-лист запуска многомиллионной отправки?
- Чем помогает OmniChannels.ai
Главное
- Десять миллионов сообщений в сутки дают в среднем всего около 116 в секунду, но акция, сжатая в четырёхчасовое окно, требует около 694 в секунду, а каждый дополнительный сегмент умножает эту цифру.
- Спецификация SMPP позволяет отправителю отправлять много запросов, не дожидаясь ответов; число неподтверждённых запросов определяет реализация, поэтому окно нужно согласовать и настроить. Хорошее начальное правило: окно не меньше TPS, умноженного на время кругового обмена в секундах.
- Троттлинг (ESME_RTHROTTLED, 0x58) и переполнение очереди (ESME_RMSGQFUL, 0x14) — сигналы замедлиться и повторить с нарастающей паузой, а не отправлять сразу заново.
- Отчёты о доставке — второй поток большого объёма: планируйте для них потребителей, хранилище и сверку так же тщательно, как для отправки.
- Мощность согласуется на уровне аккаунта и маршрута с вашим провайдером; запросите пиковые значения в письменном виде и проверьте их до запуска.
Это руководство для инженеров, руководителей по операциям в сфере сообщений и закупщиков, которые отправляют или собираются отправлять от одного до десяти миллионов SMS в сутки. Здесь показано, как перевести суточный объём в целевую пропускную способность, как настроить SMPP-бинды и окна, как строить очереди и ограничивать скорость, как обрабатывать отчёты о доставке в масштабе и что подготовить по странам. Цифры в примерах — условные плановые значения, а не утверждения о мощности какого-либо провайдера.
Сколько SMS в секунду нужно для миллионов в сутки?
Нужно число сегментов, делённое на секунды в окне, в котором вы реально можете отправлять. Пропускная способность, измеряемая в TPS (сообщений или сегментов в секунду), — это пиковое значение, а не суточное среднее. См. пропускная способность (TPS).
Сначала посчитайте среднее, затем пик для реального окна отправки:
| Сообщений в сутки | Среднее в секунду за 24 ч | Если отправить за 4 часа | Если отправить за 2 часа |
|---|---|---|---|
| 1 000 000 | 11,6 | 69,4 | 138,9 |
| 5 000 000 | 57,9 | 347,2 | 694,4 |
| 10 000 000 | 115,7 | 694,4 | 1 388,9 |
Таблицу меняют два множителя:
- Сегменты. Сообщение длиннее одного сегмента отправляется несколькими частями, и большинство платформ считает каждую часть. 10 миллионов сообщений в среднем по 1,5 сегмента — это 15 миллионов отправок. Контролируйте это с помощью материалов про лимиты символов SMS и счётчика символов. Для русского текста это особенно важно: кириллица — это Unicode, и в одном сегменте помещается 70 символов вместо 160.
- Запас. Добавьте трафик, не входящий в кампанию, например OTP, и запас на повторы и медленных операторов. Тридцать процентов — распространённая плановая надбавка, а не правило.
Как планировать пропускную способность по самому загруженному часу, а не по среднему?
Планируйте по часу или окну с наибольшим трафиком, потому что именно тогда растут очереди и появляется троттлинг. Используйте формулу:
Нужный TPS = (сегменты кампании ÷ секунды окна + пиковый TPS OTP и уведомлений) × (1 + запас).
Пример: региональный ритейлер
Условный ритейлер отправляет 6 миллионов рекламных сообщений в сутки клиентам в странах Персидского залива, в среднем по 1,4 сегмента. Он хочет закончить отправку за четыре часа внутри разрешённого дневного окна.
- Сегменты: 6 000 000 × 1,4 = 8 400 000.
- Окно: 4 часа = 14 400 секунд, то есть 8 400 000 ÷ 14 400 = 583 в секунду.
- Пиковый трафик OTP и уведомлений во время кампании: 40 в секунду (собственное измерение).
- Запас: 30 процентов.
- Нужно: (583 + 40) × 1,3 ≈ 810 в секунду.
Эту цифру ритейлер просит провайдера подтвердить по каждому маршруту в письменном виде до запуска. Это входное значение для планирования; оно ничего не говорит о том, что способна выдержать какая-либо платформа.
Что такое SMPP-бинд и сколько их нужно?
SMPP-бинд — это долгоживущая TCP-сессия между вашей системой и SMSC провайдера, аутентифицируемая учётными данными и разрешённым IP-адресом. SMPP (Short Message Peer-to-Peer) — телеком-протокол обмена SMS, рассчитанный на устойчивый объём. См. SMPP-бинд и SMPP и REST API.
Бывает три типа бинда: transmitter (только отправка), receiver (только отчёты и входящие) и transceiver (и то и другое в одной сессии). Большинство отправителей используют transceiver.
Сколько биндов нужно:
- Возьмите нужный пиковый TPS.
- Разделите на скорость на бинд, которую провайдер согласует для вашего аккаунта.
- Округлите вверх и добавьте минимум один запасной бинд, чтобы обрыв соединения не остановил отправку.
- OTP-трафик разместите на отдельных биндах или аккаунте.
Бинды выделяются на аккаунт, поэтому запросите количество, скорость на бинд и разрешённые исходные IP-адреса. Подключение описывают страница SMPP-шлюза и документация SMPP для разработчиков.
Как работает окно SMPP?
Окно — это число запросов submit_sm, которые могут быть неподтверждёнными одновременно. SMPP асинхронен: по спецификации отправитель может отправлять несколько запросов, не дожидаясь ответов, а sequence_number в каждом PDU позволяет сопоставить ответ с запросом. Максимальное число неподтверждённых операций спецификация не определяет; его задаёт реализация с каждой стороны.
Правило, следующее из арифметики очередей:
Окно ≥ целевой TPS × время кругового обмена (секунды).
| Целевой TPS | Круговой обмен 50 мс | Круговой обмен 150 мс | Круговой обмен 300 мс |
|---|---|---|---|
| 100 | 5 | 15 | 30 |
| 400 | 20 | 60 | 120 |
| 810 | 41 | 122 | 243 |
Окно 1 означает, что отправитель ждёт каждый ответ, а это ограничивает пропускную способность единицей, делённой на время кругового обмена. Увеличение окна помогает, пока вы не достигнете скорости, разрешённой провайдером; сверх неё вы только вызываете троттлинг. Рассматривайте это число как значение, которое нужно согласовать с провайдером и проверить, а не максимизировать. При нескольких биндах делите TPS между ними: четыре бинда при общих 810 TPS несут примерно по 203.
Как строить очереди и ограничивать скорость в масштабе?
Поставьте между приложением и SMPP-соединением надёжную очередь и разбирайте её ограничителем скорости, который можно менять во время работы. Очередь поглощает всплески, ограничитель удерживает согласованную скорость.
- Token bucket на каждый бинд и маршрут. Пополняйте с согласованной скоростью TPS; на каждый submit_sm берите токен, считая каждый сегмент.
- Одна очередь на приоритет. Сначала OTP и уведомления, затем транзакционные, затем рекламные.
- Пауза при ошибках. При ESME_RTHROTTLED (0x58) или ESME_RMSGQFUL (0x14) остановитесь, затем повторяйте с экспоненциальной паузой и jitter. Не отправляйте повторно в плотном цикле.
- Переподключайтесь с паузой после разрыва и отслеживайте неподтверждённые порядковые номера, чтобы сверить, что было принято.
- Поддерживайте сессии. Спецификация определяет таймер enquire_link для проверки, что у партнёра есть активная сессия, и таймер неактивности, после которого сессию могут разорвать. Отправляйте enquire_link в простое.
- Идемпотентная отправка. Сохраняйте собственный идентификатор сообщения до отправки, чтобы повтор не привёл к двойной отправке.
Как маршрутизировать по операторам в масштабе?
Выстраивайте очереди и ограничивайте скорость не только по биндам, но и по оператору назначения, потому что медленный оператор не должен блокировать остальных. Операторы могут ограничивать A2P-трафик по отправителю или маршруту, поэтому реальный лимит для страны может быть ниже скорости аккаунта.
- Определите оператора для каждого номера. Помогает проверка номеров; см. HLR-запросы.
- Держите очередь и ограничитель на оператора или группу маршрутов.
- Следите за долей доставки и задержкой отчётов по операторам и замедляйте тех, кто деградирует.
- Спросите провайдера, используются ли прямые маршруты; см. прямые и серые маршруты.
Как обрабатывать отчёты о доставке в масштабе?
Рассматривайте отчёты о доставке как второй поток, не уступающий первому. Отчёт приходит как deliver_sm на вашем бинде, и на каждый нужно ответить deliver_sm_resp. Спецификация определяет в отчёте такие конечные и промежуточные состояния: DELIVRD, EXPIRED, DELETED, UNDELIV, ACCEPTD, UNKNOWN и REJECTD. См. отчёты о доставке и статусы доставки сообщений.
Надёжная схема:
- Подтверждайте быстро. Отвечайте deliver_sm_resp, как только отчёт попал в очередь.
- Обрабатывайте асинхронно воркерами, которые сопоставляют отчёт с исходным сообщением по идентификатору.
- Делайте обработку идемпотентной. Отчёты могут повторяться, а доставка не по порядку возможна.
- Учитывайте сегменты. В зависимости от маршрута вы можете получать отчёт на каждую часть или на сообщение; проверьте это.
- Задайте тайм-аут для сообщений, которые так и не получили конечный статус, и помечайте их неизвестными.
- Держите потребителей отчётов вне пути отправки, чтобы отставание не замедляло отправку.
Что нужно зарегистрировать по странам до отправки?
Правила Sender ID различаются по странам, а в некоторых странах незарегистрированных отправителей блокируют или заменяют. Примеры: в ОАЭ и Саудовской Аравии нужна регистрация у операторов, Индия требует регистрации на DLT заголовка и каждого шаблона, а США вместо буквенных отправителей используют 10DLC или toll-free. Сроки составляют от нескольких рабочих дней до примерно месяца на рынках, которые мы отслеживаем.
Начинайте регистрации в первую очередь: они на критическом пути запуска. Изучите правила SMS-маркетинга по странам, проверку Sender ID и руководство по Sender ID для ОАЭ и Саудовской Аравии. Мы вместе с вами готовим и подаём заявки на регистрацию через наш сервис регистрации; решения об одобрении остаются за регуляторами и операторами.
Как соблюдать тихие часы при больших объёмах?
Планируйте рекламу по местному времени каждого получателя и правилам страны, а нерекламный трафик в это ограничение не включайте. Некоторые рынки публикуют окна: ОАЭ запрещают рекламные тексты с 21:00 до 07:00, а Саудовская Аравия — с 22:00 до 09:00 и с 01:00 до 12:00 в Рамадан. См. тихие часы.
- Сгруппируйте список по странам и часовым поясам до постановки в очередь.
- Выпускайте каждую группу в свою очередь, когда открывается её окно.
- Останавливайте рекламные очереди в конце окна и переносите остаток на следующий день.
- Спланируйте последовательность с помощью планировщика времени отправки.
Узкое окно повышает нужный TPS, поэтому учитывайте его в формуле планирования.
Зачем разделять OTP и рекламный трафик?
OTP и уведомления критичны по времени, а рекламные кампании массовые; если они делят очередь или бинд, кампания может задержать код входа. Используйте отдельные бинды или аккаунты, отдельные Sender ID там, где этого требуют правила, отдельные очереди со строгим приоритетом и отдельный мониторинг. OTP не рекламные, поэтому тихие часы на них не распространяются. Защищайте и OTP-маршруты от злоупотреблений: см. защита от SMS-пампинга и руководство по OTP.
Какие KPI мониторить?
Следите за состоянием отправки, возрастом очереди, итогами отчётов и задержкой отчётов с разбивкой по странам и операторам. Настройте оповещения по отклонению от вашей базовой линии.
| KPI | Формула | О чём говорит |
|---|---|---|
| Доля успешной отправки | Принятые submit_sm_resp ÷ отправленные submit_sm | Состояние бинда и аккаунта |
| Доля троттлинга | Ответы ESME_RTHROTTLED ÷ отправленные submit_sm | Слишком высокая скорость или окно |
| Возраст очереди (p95) | Время от постановки в очередь до отправки | Нехватка мощности |
| Доля доставленных | DELIVRD ÷ сообщения с конечным статусом | Качество маршрута и контента |
| Доля неудачных и истёкших | (UNDELIV + EXPIRED + REJECTD) ÷ конечные статусы | Валидность номеров, Sender ID, фильтрация |
| Задержка отчёта (медиана и p95) | Время отчёта − время отправки | Медлительность оператора |
| Покрытие отчётами | Конечные статусы ÷ отправленные сообщения | Потерянные отчёты |
| Доля отказов | Ответы STOP ÷ доставленные рекламные сообщения | Соответствие аудитории и контента |
О диагностике читайте в материале как повысить доставляемость SMS.
Каков чек-лист запуска многомиллионной отправки?
- Нужный пиковый TPS рассчитан по сегментам, окну и нагрузке OTP.
- Скорость на бинд, число биндов, окно и исходные IP письменно подтверждены провайдером.
- Sender ID зарегистрированы для каждой страны, с шаблонами там, где это требуется.
- Нагрузочный тест на доле объёма, затем наращивание шагами; не начинайте с максимума.
- Очереди, ограничитель, паузы и идемпотентность проверены, включая принудительный разрыв соединения.
- Конвейер отчётов проверен при полном объёме отчётов.
- Планирование по тихим часам проверено по каждой стране.
- OTP-трафик отделён и мониторится.
- Дашборды и оповещения работают, дежурный назначен.
- Есть кнопка остановки, мгновенно прекращающая рекламные очереди.
Чем помогает OmniChannels.ai
BroadNet доставляет SMS по прямым подключениям к операторам и поддерживает SMPP 3.4 по TLS с биндами на аккаунт, а также REST API, массовую отправку, двусторонние SMS, Unicode и арабский, HLR-запросы и отчёты о доставке. Мощность рассчитывается на аккаунт и маршрут: сообщите нам направления, пиковый объём, окна отправки и Sender ID, и мы согласуем с вами пропускную способность, бинды и регистрации. Наша команда готовит регистрации Sender ID. Свяжитесь с отделом продаж и приложите план по объёмам или изучите оптовую программу.
Часто задаваемые вопросы
Сколько SMS в секунду нужно, чтобы отправить миллион сообщений?
Разделите число сегментов на секунды в окне отправки. Миллион односегментных сообщений за час требует около 278 в секунду, за четыре часа — около 69, а если растянуть на целые сутки — около 12. Многосегментные сообщения на большинстве платформ считаются по сегментам, поэтому двухсегментное сообщение удваивает нужную скорость.
Что такое размер окна SMPP и как его задать?
Окно — это число запросов submit_sm, которые могут быть неподтверждёнными: отправленными, но без ответа. Спецификация SMPP допускает асинхронные запросы, но оставляет лимит на усмотрение реализации. Практическое правило: окно не меньше целевого TPS, умноженного на время кругового обмена в секундах; увеличивайте его только до лимита, согласованного с провайдером, потому что превышение вызывает троттлинг.
Сколько SMPP-биндов нужно для большого объёма?
Это зависит от пиковой скорости, лимита на бинд, согласованного с провайдером, и требований к резервированию. Разделите пиковый TPS на согласованную скорость на бинд, округлите вверх и добавьте минимум один запасной, чтобы обрыв соединения не остановил отправку. OTP-трафик держите на отдельных биндах или аккаунтах. Бинды выделяются на аккаунт.
Что делать при получении ESME_RTHROTTLED?
Замедлиться. Спецификация определяет ESME_RTHROTTLED (0x58) как превышение отправителем допустимых лимитов сообщений. Приостановите или сократите отправку, повторите отклонённые сообщения с экспоненциальной паузой и случайным разбросом (jitter) и никогда не повторяйте в плотном цикле: так троттлинг только затягивается. Если это происходит регулярно, ваше окно или скорость выше согласованного лимита.
Как обрабатывать миллионы отчётов о доставке?
Немедленно подтверждайте каждый deliver_sm ответом deliver_sm_resp, ставьте отчёт в очередь и обрабатывайте асинхронно, сохраняя в хранилище по идентификатору сообщения. Делайте обработку идемпотентной, потому что отчёты могут повторяться. Запускайте потребителей отчётов отдельно от пути отправки и следите за их отставанием.
Можно ли отправлять рекламные SMS ночью?
Во многих странах нельзя. ОАЭ запрещают рекламные тексты с 21:00 до 07:00, Саудовская Аравия — с 22:00 до 09:00, а в Рамадан с 01:00 до 12:00. Планируйте рекламу по местному времени каждого получателя, а OTP и уведомления отправляйте отдельно, так как они не рекламные.
Источники
Читайте дальше
Ещё руководстваSMS и OTP
Оптовые A2P SMS: как выбрать провайдера и проверить маршруты
Оптовые A2P SMS: кто их покупает, как работают SMPP bind, что о маршруте говорят DLR и задержка, а также какие KYC и антифрод-меры нужно требовать.
9 мин чтения
SMS и OTP
Что такое SMS-шлюз: как работает, виды и как выбрать
Что такое SMS-шлюз? Как сообщение идёт от приложения к телефону, какие бывают виды (API, SMPP, email-to-SMS, GSM-модем), ключевые функции и как выбрать шлюз.
10 мин чтения
Интеграции
Как выбрать API для обмена сообщениями: чек-лист для CTO
Как выбрать API для сообщений: чек-лист для CTO по каналам, качеству маршрутов, вебхукам, безопасности, лимитам, повторам, SMPP, MCP, комплаенсу и ценам.
13 мин чтения
