Декодер PDU SMPP.
Вставьте шестнадцатеричное значение PDU SMPP v3.4, чтобы декодировать его 16-байтовый заголовок — command_length, command_id (с именем), command_status и sequence_number — и увидеть обязательное расположение полей тела для submit_sm и deliver_sm. Ничего не покидает ваше устройство.
ESME_ROK — No error
PDU только с заголовком — без тела (типично для enquire_link, unbind и большинства подтверждений _resp).
Коротко
Что такое PDU SMPP?
PDU (единица данных протокола) — это одно сообщение SMPP на линии. Каждый PDU — bind, submit_sm, отчёт о доставке, enquire_link — начинается с одного и того же 16-байтового заголовка из четырёх 32-битных целых чисел в порядке big-endian: command_length (общая длина в байтах, включая заголовок), command_id (какая это операция), command_status (результат, который равен 0 / ESME_ROK при успешном ответе) и sequence_number (используется для сопоставления ответа с запросом). Любые поля тела следуют за заголовком.
Расположение 16-байтового заголовка
| Байты | Поле | Значение |
|---|---|---|
| 0–3 | command_length | Общая длина PDU в октетах, включая заголовок. |
| 4–7 | command_id | Определяет операцию (например, 0x00000004 = submit_sm). |
| 8–11 | command_status | Код результата; 0 = ESME_ROK. Имеет значение только в ответах. |
| 12–15 | sequence_number | Сопоставляет запрос с его ответом. |
Поля тела submit_sm / deliver_sm
После заголовка submit_sm или deliver_sm содержит обязательные поля в фиксированном порядке, за которыми могут следовать параметры TLV (необязательные). Этот инструмент перечисляет порядок; он не разбирает полностью тело переменной длины на отдельные значения, поскольку их границы зависят от нуль-терминаторов и поля sm_length.
| Поле | Тип | Значение |
|---|---|---|
| service_type | C-Octet String | Указывает на сервис SMS-приложения (пусто = по умолчанию). |
| source_addr_ton | Integer (1) | Тип номера отправителя. |
| source_addr_npi | Integer (1) | Индикатор плана нумерации отправителя. |
| source_addr | C-Octet String | Адрес отправителя сообщения. |
| dest_addr_ton | Integer (1) | Тип номера получателя. |
| dest_addr_npi | Integer (1) | Индикатор плана нумерации получателя. |
| destination_addr | C-Octet String | MSISDN получателя / короткий номер. |
| esm_class | Integer (1) | Режим и тип сообщения (например, 0x04 = отчёт о доставке). |
| protocol_id | Integer (1) | Идентификатор протокола (специфичен для сети). |
| priority_flag | Integer (1) | Уровень приоритета сообщения. |
| schedule_delivery_time | C-Octet String | Запланированное время доставки (пусто = немедленно). |
| validity_period | C-Octet String | Срок действия сообщения (пусто = по умолчанию). |
| registered_delivery | Integer (1) | Запрошен ли отчёт о доставке (DLR). |
| replace_if_present_flag | Integer (1) | Заменить существующее сообщение, если оно есть. |
| data_coding | Integer (1) | Схема кодирования (0 = GSM-7, 8 = UCS-2). |
| sm_default_msg_id | Integer (1) | Предопределённый идентификатор сообщения. |
| sm_length | Integer (1) | Длина поля short_message в октетах. |
| short_message | Octet String | Полезная нагрузка сообщения (до 254 октетов). |
Часто задаваемые вопросы
Какие четыре поля входят в заголовок SMPP?
Каждый PDU SMPP начинается с 16-байтового заголовка из четырёх 32-битных целых чисел в порядке big-endian: command_length (общая длина PDU в октетах, включая заголовок), command_id (операция, например 0x00000004 для submit_sm), command_status (код результата, 0 = ESME_ROK) и sequence_number (сопоставляет ответ с исходным запросом).
Почему command_status обычно равен 0 в моих запросах?
command_status имеет значение только в PDU-ответах и generic_nack. В PDU-запросах (submit_sm, bind, enquire_link) это поле зарезервировано и должно быть установлено в 0. Ненулевое значение в _resp указывает на ошибку — например, 0x00000058 — это ESME_RTHROTTLED.
Являются ли целые числа SMPP big-endian?
Да. SMPP кодирует многооктетные целые числа в сетевом порядке байт (big-endian, старший байт первым). Этот декодер читает каждое 4-байтовое поле заголовка как беззнаковое 32-битное целое число big-endian.
Декодирует ли этот инструмент текст сообщения?
Он декодирует фиксированный 16-байтовый заголовок и перечисляет порядок полей тела для submit_sm и deliver_sm, но не разбирает тело переменной длины на отдельные значения. Строки C-Octet заканчиваются нулевым символом, а длина short_message передаётся в sm_length, поэтому полный разбор тела зависит от этих границ — этот инструмент придерживается расположения заголовка на основе стандарта.
Где посмотреть незнакомый command_status?
Используйте справочник кодов ошибок SMPP, в котором перечислено каждое значение command_status SMPP v3.4 по шестнадцатеричному и символьному имени с понятным описанием, вероятной причиной и решением.
Нужен настоящий SMPP-bind?
BroadNet предлагает прямые SMPP 3.4-соединения наряду с REST API и подписанными вебхуками в 200+ странах. Обсудите пропускную способность и маршрутизацию с нашей командой.