BroadNet
SMPPОперации

SMPP submit_sm: все обязательные поля

Обновлено 3 мин чтенияна основе стандартов
Прямой ответ

submit_sm (command_id 0x00000004) отправляет сообщение на абонента (mobile-terminated) от ESME к SMSC. Его тело — фиксированная последовательность обязательных полей: адресация (TON/NPI + адрес), esm_class, protocol_id, priority_flag, планирование, registered_delivery, data_coding, sm_length и short_message — за которыми могут идти TLV. submit_sm_resp возвращает message_id, присвоенный SMSC.

СхемаSMPP-сессия между вашей платформой и BroadNet
Ваша платформа (ESME)
BroadNet SMSC
Одно постоянное TCP/TLS-соединение
  1. bind_transceiverОткрыть и аутентифицировать сессию
  2. bind_transceiver_respСессия принята
  3. submit_smОтправить сообщение
  4. submit_sm_respПринято, возвращен ID сообщения
  5. deliver_smПодтверждение доставки или входящее сообщение
  6. deliver_sm_respПодтверждено
  7. enquire_linkKeepalive в режиме ожидания
§01

Полный порядок обязательных полей

Тело submit_sm — это фиксированная упорядоченная последовательность; тегов полей нет, поэтому порядок и размер имеют решающее значение. В таблице перечислены все обязательные параметры в порядке передачи. short_message может быть пустым, когда текст передаётся в TLV message_payload; не заполняйте оба поля одновременно.

Обязательные параметры submit_sm (в порядке передачи)
#ПолеТипПримечания
1service_typeC-Octet String (6)Категория услуги; обычно пусто
2source_addr_tonInteger (1)Тип номера отправителя
3source_addr_npiInteger (1)План нумерации отправителя
4source_addrC-Octet String (21)Адрес отправителя / буквенно-цифровой идентификатор
5dest_addr_tonInteger (1)Тип номера получателя
6dest_addr_npiInteger (1)План нумерации получателя
7destination_addrC-Octet String (21)MSISDN получателя
8esm_classInteger (1)Режим сообщения + тип + флаг UDHI
9protocol_idInteger (1)GSM TP-PID; обычно 0
10priority_flagInteger (1)0 (норма) – 3 (максимум)
11schedule_delivery_timeC-Octet String (1|17)Пусто = немедленно
12validity_periodC-Octet String (1|17)Пусто = значение по умолчанию SMSC
13registered_deliveryInteger (1)Запросить отчёт о доставке
14replace_if_present_flagInteger (1)0 = нет, 1 = заменить
15data_codingInteger (1)Кодировка / DCS
16sm_default_msg_idInteger (1)Идентификатор шаблонного сообщения; обычно 0
17sm_lengthInteger (1)Длина short_message (0–254)
18short_messageOctet String (0–254)Полезная нагрузка сообщения
§02

Адресация: TON и NPI

source_addr и destination_addr несут тип номера (TON) и индикатор плана нумерации (NPI). Для международного MSISDN используйте TON 1 (International) с NPI 1 (ISDN/E.164). Для буквенно-цифрового идентификатора отправителя используйте TON 5 (Alphanumeric) — тогда source_addr содержит до 11 символов GSM-7. Неверные TON/NPI — одна из главных причин недоставленного или неправильно маршрутизированного трафика.

Распространённые значения TON и NPI
TONЗначениеNPIЗначение
0Неизвестно0Неизвестно
1Международный1ISDN (E.163/E.164)
2Национальный3Данные (X.121)
3Зависит от сети4Телекс (F.69)
4Номер абонента6Мобильная связь (E.212)
5Буквенно-цифровой8Национальный
6Сокращенный9Частный
§03

esm_class

esm_class — это битовое поле, задающее режим обмена сообщениями, тип сообщения и специфичные для GSM функции. Самый важный бит для отправителей — UDHI (0x40): устанавливайте его, когда short_message начинается с User Data Header, например с заголовка конкатенации. Бит 0x80 запрашивает путь ответа GSM.

Значения битов esm_class (выборка)
БитыПолеЗначение → смысл
1–0Режим передачи сообщений0 по умолчанию · 1 датаграмма · 2 пересылка · 3 сохранение и пересылка
5–2Тип сообщения0 по умолчанию · 0x04 отчёт о доставке · 0x08 подтверждение доставки (delivery ack) · 0x10 подтверждение пользователя
6UDHI0x40 = short_message begins with a UDH
7Путь ответа0x80 = set GSM reply path
§04

data_coding, registered_delivery и validity

data_coding выбирает кодировку текста: 0x00 = значение по умолчанию SMSC (обычно GSM 7-bit), 0x04 = 8-битный двоичный формат, 0x08 = UCS-2 для Unicode. Младшие два бита registered_delivery управляют отчётами: 0 = нет, 1 = отчёт при окончательной доставке или сбое, 2 = только при сбое. validity_period и schedule_delivery_time используют абсолютный формат YYMMDDhhmmsstnnp либо относительный; пустая строка означает немедленную доставку и период действия по умолчанию SMSC. Для OTP держите validity_period коротким, чтобы задержанный код истёк, а не пришёл устаревшим.

data_coding — реально используемые значения
ЗначениеКодировка
0x00Алфавит по умолчанию SMSC (обычно 7-битный GSM)
0x03Latin-1 (ISO-8859-1)
0x048-битные двоичные данные (октеты без спецификации)
0x08UCS-2 (UTF-16BE) — Unicode
§05

Ответ

submit_sm_resp (0x80000004) возвращает command_status и, при успехе, message_id (C-Octet String, до 65 символов), который SMSC присваивает сообщению. Сохраняйте его: это ключ для сопоставления с receipted_message_id в отчёте о доставке. Остерегайтесь расхождений формата — некоторые SMSC возвращают идентификатор в шестнадцатеричном виде при отправке и в десятичном в DLR, поэтому нормализуйте оба при корреляции.

Часто задаваемые вопросы

Часто задаваемые вопросы

Какие TON/NPI использовать для буквенно-цифрового идентификатора отправителя?

Используйте source_addr_ton = 5 (Alphanumeric) и source_addr_npi = 0 (Unknown). Тогда source_addr содержит до 11 символов GSM-7. Буквенно-цифровые идентификаторы отправителя предназначены только для отображения и не могут принимать ответы.

Как запросить отчёт о доставке в submit_sm?

Установите registered_delivery = 1, чтобы получить отчёт при окончательной доставке или сбое, либо 2 только при сбое. Запрашивайте отчёты только там, где вы их действительно обрабатываете, поскольку непрочитанные DLR расходуют пропускную способность.

Какова максимальная длина short_message?

Поле short_message вмещает до 254 октетов, а sm_length задаёт точное число. Для более длинного текста либо сегментируйте с UDH в нескольких PDU submit_sm, либо передавайте всю полезную нагрузку в TLV message_payload вместо short_message.

Можно ли задать и short_message, и message_payload?

Нет. Заполняйте одно из двух. Провайдеры отклоняют submit_sm, где сообщение передано и в обязательном поле short_message, и в TLV message_payload.

Как отправить сообщение в Unicode?

Установите data_coding = 0x08 (UCS-2) и закодируйте текст как UTF-16 в обратном порядке байтов в short_message. Одно SMS в UCS-2 вмещает 70 символов; более длинный текст в Unicode сегментируется по 67 символов на часть.

Ссылки

Технические характеристики источника

На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)

BNПоддерживается инженерной командой BroadNet·Обмен сообщениями операторского класса с 2003 года.
Прикрепите это к проводу

Разработано с использованием реального SMPP подключения и REST API.

Запросите тестовый доступ с реальными тестовыми ключами: сначала отправьте их на свой подтвержденный номер, а затем, после утверждения вашей личности отправителя и маршрутов, переходите к использованию в производственной среде более чем в 200 странах.