# Декодер PDU SMPP.

- Канонический URL: https://www.broadnet.me/ru/tools/smpp-pdu-decoder
- Язык: ru
- Последнее обновление: 2026-10-21
- Издатель: BroadNet (https://www.broadnet.me)
- Markdown-версия страницы, созданная из опубликованной страницы.

SMPP v3.4 · работает в вашем браузере

Вставьте шестнадцатеричное значение PDU SMPP v3.4, чтобы декодировать его 16-байтовый заголовок — command_length, command_id (с именем), command_status и sequence_number — и увидеть обязательное расположение полей тела для submit_sm и deliver_sm. Ничего не покидает ваше устройство.

16 байт

Попробовать пример

command_length

16 0x00000010

command_id

enquire_link 0x00000015

command_status

0x00000000

ESME_ROK — No error

sequence_number

1 0x00000001

Тело (0 байт после 16-байтового заголовка)

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 Найдите любое значение command_status с причиной и решением.](https://www.broadnet.me/ru/tools/smpp-error-codes) [Декодер DLR SMPP Декодируйте отчёт о доставке из PDU deliver_sm.](https://www.broadnet.me/ru/tools/dlr-decoder) [Протокол SMPP Как связаны binds, окна и PDU.](https://www.broadnet.me/ru/answers/smpp-protocol)

## Нужен настоящий SMPP-bind?

BroadNet предлагает прямые SMPP 3.4-соединения наряду с REST API и подписанными вебхуками в 200+ странах. Обсудите пропускную способность и маршрутизацию с нашей командой.

[Центр разработчиков](https://www.broadnet.me/ru/developers) [Связаться с отделом продаж](https://www.broadnet.me/ru/contact)
