Если текст SMS превышает 160 символов (или 70 для кириллицы), оператор разбивает его на части. Но без правильного заголовка в протоколе SMPP получатель увидит отдельные фрагменты вместо одного сообщения. В статье — как настроить конкатенацию через UDH, проверить сборку и не потерять смысл. Материал для разработчиков и бизнеса, которые подключают SMS-трафик через SMPP.
Что такое конкатенированное SMS и зачем оно бизнесу
Обычное SMS — 140 байт на сообщение. В кодировке GSM 7-bit это 160 знаков, в UCS-2 (кириллица) — 70. Длинный текст оператор режет на сегменты по 153 байта (134 для кириллицы). Без служебного заголовка UDH (User Data Header) каждый сегмент — самостоятельное SMS. Получатель видит несколько сообщений, а не одно цельное.
Конкатенированные SMS решают эту проблему. В UDH прописывается идентификатор сборки, номер сегмента и общее количество частей. Телефон склеивает их в один текст. Для бизнеса это значит: полное описание акции, инструкция на 4–6 сегментов, юридический дисклеймер — всё в одном сообщении.
Как работает конкатенация в SMPP
В команде submit_sm есть поле data_coding (кодировка) и необязательное поле message_payload. Но для конкатенации используется именно short_message с префиксом в виде UDH. UDH — это байты в начале сообщения, которые оператор не показывает пользователю. Структура UDH для конкатенации:
- длина заголовка (обычно 5 байт);
- идентификатор элемента информации (0x00 — конкатенация 8-битная, 0x08 — 16-битная);
- длина данных (3 байта для 8-бит, 4 для 16-бит);
- идентификатор сообщения (1 байт для 8-бит, 2 для 16-бит);
- общее количество сегментов (1 байт);
- номер текущего сегмента (1 байт, начиная с 1).
Пример: для 8-битной конкатенации (обычно достаточно для большинства операторов Беларуси) UDH выглядит так: 05 00 03 XX MM NN, где XX — идентификатор сообщения, MM — число сегментов, NN — номер сегмента. Весь short_message = UDH + полезный текст.
Практические советы по настройке
Выбор кодировки: GSM 7-bit или UCS-2
Если текст содержит только латиницу, цифры и спецсимволы GSM 7-bit — экономьте. Один сегмент — до 153 символа (160 минус 7 байт UDH). Для кириллицы нужен UCS-2: один сегмент — 67 символов (70 минус 3 байта UDH). Разница в стоимости — каждый сегмент тарифицируется как отдельное SMS. Подробнее о выборе кодировки — в статье UCS-2 или GSM 7-bit: что выгоднее для SMS через SMPP.
Идентификатор сообщения при 16-битной конкатенации
Если ваш трафик превышает 256 уникальных сборок в секунду, используйте 16-битный UDH (0x08). Это важно для высокообъёмных рассылок. Большинство SMPP-провайдеров поддерживают оба варианта. Уточните в документации вашего сервиса.
Проверка целостности на тестовом номере
Отправьте себе SMS с текстом, заведомо длиннее 5–6 сегментов. Проверьте: приходит ли одно сообщение? Порядок сегментов? Не дублируются ли части? Если видите разбивку — перепроверьте UDH: правильная ли нумерация сегментов, не пересекаются ли идентификаторы с другими сообщениями.
Типичные ошибки при конкатенации через SMPP
- Пропущен UDH — оператор не знает, что нужно склеивать. Получатель видит «куски».
- Неправильный номер сегмента — например, начинается с 0. По стандарту — с 1.
- Разная кодировка в сегментах — один сегмент в GSM 7-bit, другой в UCS-2. Телефон не сможет собрать.
- Превышение лимита сегментов — большинство операторов поддерживают до 7–10 сегментов. Длиннее — риск, что сообщение не дойдёт целиком.
- Игнорирование поля
message_payload— некоторые SMPP-библиотеки пытаются упаковать длинный текст вmessage_payload, но не все операторы его поддерживают. Надёжнее использовать UDH вshort_message. - Дублирование идентификатора — если отправить два разных сообщения с одинаковым ID, сегменты перемешаются.
Сколько сегментов можно отправить и как это влияет на стоимость
| Кодировка | Макс. символов в 1 сегменте (с UDH) | Макс. сегментов (рекомендуется) | Пример: текст 300 знаков (кириллица) |
|---|---|---|---|
| GSM 7-bit | 153 | 7 | 2 сегмента |
| UCS-2 (кириллица) | 67 | 5 | 5 сегментов |
Каждый сегмент тарифицируется как отдельное SMS. Для кириллического текста в 300 знаков выйдет 5 SMS по цене одной короткой. Если бюджет ограничен — перепишите текст короче или используйте латиницу (где это уместно).
3 шага, которые можно сделать сегодня:
- Соберите UDH-заголовок в вашей SMPP-библиотеке (вручную или через готовый класс).
- Отправьте тестовое сообщение длиной 400–500 символов на свой номер.
- Проверьте DLR: пришёл ли финальный статус DELIVERED и не было ли ошибок сегментации.



