Стоимость SMS через SMPP зависит от числа сегментов, кодировки текста и тарифа маршрута. Короткое сообщение на латинице часто занимает один сегмент, а кириллица и длинный текст быстро увеличивают расчётный объём. В статье разберём, как определить кодировку, посчитать сегменты, учесть конкатенацию и заложить результат в бюджет бизнеса в Беларуси. После этого разработчик сможет сверить расчёт с биллингом SMPP и заранее увидеть переплату.
Из чего складывается стоимость SMS через SMPP?
Провайдер обычно считает отправленные сегменты, а не количество вызовов команды submit_sm. Если приложение отправило одно длинное сообщение, в биллинге оно может превратиться в несколько SMS-частей. Поэтому формула выглядит так:
Стоимость отправки = количество получателей × количество сегментов × цена одного сегмента.
К этой формуле иногда добавляются отдельные условия маршрута: минимальный объём, разные цены для направлений или особый тариф для сервисных сообщений. Такие параметры зависят от договора и настроек SMS-провайдера. Их нужно сверять в тарифе, а технический расчёт сегментов делать самостоятельно.
Для малого бизнеса в Беларуси удобно разделить расчёт на две части. Сначала программа определяет длину сообщения и кодировку. Затем биллинг умножает число сегментов на цену маршрута. Если эти этапы смешать, ошибка обнаружится уже после отправки счёта.
Как кодировка влияет на число SMS-сегментов?
Латинский текст может передаваться в GSM-7, если все символы входят в допустимый набор этой кодировки. Один такой сегмент вмещает до 160 знаков. При конкатенации часть места уходит на служебный заголовок, поэтому длинное сообщение обычно вмещает до 153 знаков в каждом сегменте.
Кириллица, большинство эмодзи и ряд специальных символов переводят сообщение в UCS-2. В одном коротком UCS-2-сегменте помещается до 70 знаков. Для составного сообщения лимит снижается до 67 знаков на сегмент.
| Вариант | Лимит одного сегмента | Лимит составного сообщения | Что проверить |
|---|---|---|---|
| GSM-7 | До 160 знаков | До 153 знаков на часть | Все ли символы входят в GSM-7 |
| UCS-2 | До 70 знаков | До 67 знаков на часть | Кириллицу, эмодзи и специальные знаки |
Например, фраза на русском языке длиной 120 знаков не считается одним SMS: она попадёт в два UCS-2-сегмента. Сообщение на латинице той же длины может занять один GSM-7-сегмент, если в нём нет символов, которые меняют кодировку.
Символ иногда меняет расчёт неожиданно. Кавычки, длинное тире, буквы с диакритикой или эмодзи могут перевести весь текст в UCS-2. Поэтому проверять нужно не только язык сообщения, но и фактический набор знаков. Подробнее о передаче кириллицы рассказано в материале как отправлять кириллицу в SMPP и учитывать длину SMS.
Как считать конкатенацию в SMPP?
Конкатенация позволяет показать получателю несколько частей как одно длинное сообщение. SMPP передаёт части отдельно, а телефон собирает их по служебным параметрам. Для биллинга это всё равно несколько SMS-сегментов.
При отправке через SMPP разработчик обычно задаёт текст, кодировку и параметры длинного сообщения. Провайдер или клиентская библиотека может сама разбить текст на части. Это удобно для интеграции, но не отменяет проверки: приложение должно получить корректный статус для каждой части, а система должна сохранять связь между ними.
Расчёт можно сделать вручную:
- сообщение до 160 знаков в GSM-7 — один сегмент;
- сообщение от 161 до 306 знаков в GSM-7 — два сегмента при лимите 153 знака на часть;
- сообщение до 70 знаков в UCS-2 — один сегмент;
- сообщение от 71 до 134 знаков в UCS-2 — два сегмента при лимите 67 знаков на часть;
- для более длинного текста число частей округляют вверх от длины сообщения, делённой на лимит составного сегмента.
Учитывайте и служебные данные SMPP. Для длинных сообщений применяются параметры User Data Header или механизм, который использует конкретная библиотека. Если приложение формирует части вручную и неправильно указывает номера сегментов, получатель увидит обрывки текста, а отчёты о доставке будет трудно сопоставить.
Как заложить сегменты в бюджет бизнеса?
Сначала составьте несколько реальных шаблонов: код подтверждения, уведомление о заказе, напоминание и сообщение со ссылкой. Для каждого шаблона зафиксируйте длину, кодировку и число сегментов. Один средний показатель для всех SMS даст искажённый прогноз, если в потоке есть и короткие OTP-коды, и длинные уведомления.
| Тип сообщения | Что влияет на расчёт | Практическое решение |
|---|---|---|
| Код подтверждения | Короткий текст, язык, имя отправителя | Ограничить шаблон одной частью |
| Статус заказа | Длина текста, номер заказа, ссылка | Проверить длину после подстановки переменных |
| Напоминание клиенту | Кириллица и дополнительные сведения | Сократить шаблон или заложить несколько сегментов |
| Техническое уведомление | Повторная отправка и DLR | Разделять стоимость попытки и сегмента |
Для планирования в BYN используйте фактическую цену сегмента из выбранного тарифа. Если за месяц система отправляет 12 000 сообщений, а среднее сообщение занимает 1,4 сегмента, расчётный объём составит 16 800 сегментов. Это уже тот показатель, который нужно умножать на цену, указанную для маршрута.
Среднее значение следует считать по журналу отправок, а не по числу шаблонов. В одном шаблоне переменная с длинным названием товара может увеличить сообщение на несколько десятков знаков. Поэтому тестируйте реальные подстановки: имя клиента, номер заказа, сумму и ссылку.
Какие ошибки увеличивают счёт за SMPP?
- Подсчёт сообщений вместо сегментов. Одно длинное SMS в биллинге может стать двумя или несколькими частями.
- Проверка длины до подстановки переменных. Итоговый текст часто длиннее шаблона.
- Случайный переход в UCS-2. Эмодзи или один специальный символ меняют доступный лимит.
- Ориентация на лимит короткого сообщения. Для конкатенации действуют другие пределы: 153 знака в GSM-7 и 67 в UCS-2.
- Отсутствие разбивки по статусам DLR. Без неё сложно отличить доставленные сегменты от повторных попыток отправки.
- Ручная сборка частей без теста. Ошибка в служебных параметрах нарушает порядок и склейку сообщения.
Техническую проверку удобно проводить на тестовой группе номеров: отправить каждый шаблон с пограничной длиной, проверить отображение на телефоне и сравнить число сегментов в отчёте SMPP с данными биллинга. После такой сверки шаблоны можно подключать к рабочему потоку через SMPP, а расчёт стоимости вести по сегментам, кодировке и фактическим попыткам отправки.



