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

Декодер PDU SMPP.

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

16 байт
Попробовать пример
command_length
160x00000010
command_id
enquire_link0x00000015
command_status
0x00000000

ESME_ROK — No error

sequence_number
10x00000001
Тело (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-байтового заголовка

SMPP v3.4 PDU header fields
БайтыПолеЗначение
0–3command_lengthОбщая длина PDU в октетах, включая заголовок.
4–7command_idОпределяет операцию (например, 0x00000004 = submit_sm).
8–11command_statusКод результата; 0 = ESME_ROK. Имеет значение только в ответах.
12–15sequence_numberСопоставляет запрос с его ответом.

Поля тела submit_sm / deliver_sm

После заголовка submit_sm или deliver_sm содержит обязательные поля в фиксированном порядке, за которыми могут следовать параметры TLV (необязательные). Этот инструмент перечисляет порядок; он не разбирает полностью тело переменной длины на отдельные значения, поскольку их границы зависят от нуль-терминаторов и поля sm_length.

submit_sm / deliver_sm mandatory body fields
ПолеТипЗначение
service_typeC-Octet StringУказывает на сервис SMS-приложения (пусто = по умолчанию).
source_addr_tonInteger (1)Тип номера отправителя.
source_addr_npiInteger (1)Индикатор плана нумерации отправителя.
source_addrC-Octet StringАдрес отправителя сообщения.
dest_addr_tonInteger (1)Тип номера получателя.
dest_addr_npiInteger (1)Индикатор плана нумерации получателя.
destination_addrC-Octet StringMSISDN получателя / короткий номер.
esm_classInteger (1)Режим и тип сообщения (например, 0x04 = отчёт о доставке).
protocol_idInteger (1)Идентификатор протокола (специфичен для сети).
priority_flagInteger (1)Уровень приоритета сообщения.
schedule_delivery_timeC-Octet StringЗапланированное время доставки (пусто = немедленно).
validity_periodC-Octet StringСрок действия сообщения (пусто = по умолчанию).
registered_deliveryInteger (1)Запрошен ли отчёт о доставке (DLR).
replace_if_present_flagInteger (1)Заменить существующее сообщение, если оно есть.
data_codingInteger (1)Схема кодирования (0 = GSM-7, 8 = UCS-2).
sm_default_msg_idInteger (1)Предопределённый идентификатор сообщения.
sm_lengthInteger (1)Длина поля short_message в октетах.
short_messageOctet 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+ странах. Обсудите пропускную способность и маршрутизацию с нашей командой.