BroadNet
SMPPСессия

Операции bind и состояния сессии SMPP

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

bind аутентифицирует и открывает сессию SMPP. bind_transmitter разрешает только отправку, bind_receiver — только приём, а bind_transceiver — и то и другое по одному соединению. ESME передаёт system_id, password и system_type; SMSC отвечает bind_resp. Успешный bind переводит сессию в связанное состояние вплоть до unbind или разрыва.

Схема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

Три типа bind

Тип bind фиксирует направление трафика для сессии. Выберите transmitter для только исходящего трафика (отправка MT), receiver для только входящего (MO и отчёты о доставке) или transceiver, чтобы передавать оба направления по одному соединению — обычный выбор в v3.4, поскольку это вдвое сокращает число поддерживаемых соединений.

Операции bind
Операцияcommand_idСессия может
bind_transmitter0x00000002Только отправка сообщений (MT)
bind_receiver0x00000001Только приём сообщений / отчётов о доставке (MO + DLR)
bind_transceiver0x00000009Отправка и приём по одному соединению
§02

Поля запроса bind

Тело bind несёт учётные данные и заявленные возможности ESME. system_id и password аутентифицируют учётную запись; system_type опционально классифицирует ESME; interface_version объявляет версию SMPP; addr_ton, addr_npi и address_range позволяют SMSC маршрутизировать трафик от абонентов на этот bind. Несоответствие address_range молча блокирует маршрутизацию MO/DLR на bind типа receiver или transceiver — распространённая ошибка интеграции.

Тело bind_transmitter/receiver/transceiver
ПолеТипМакс.Примечания
system_idC-Octet String16Идентификатор учетной записи/логина
passwordC-Octet String9Пароль учетной записи
system_typeC-Octet String13Дополнительная категория ESME (часто пустая)
interface_versionInteger10x34 = v3.4, 0x50 = v5.0
addr_tonInteger1Тип номера для маршрутизации MO этому ESME
addr_npiInteger1Индикатор плана нумерации
address_rangeC-Octet String41Адрес/регулярное выражение, по которому SMSC маршрутизирует на этот bind
§03

Ответ bind

SMSC отвечает соответствующим bind_resp (например, bind_transceiver_resp, 0x80000009). command_status равен ESME_ROK при успехе либо содержит ошибку, такую как ESME_RINVPASWD (неверный пароль), ESME_RINVSYSID (неверный системный идентификатор) или ESME_RBINDFAIL. Тело возвращает system_id SMSC и, начиная с v3.4, опциональный TLV sc_interface_version, сообщающий ESME, какую версию фактически поддерживает SMSC.

Успешный обмен bind типа transceivertext
ESME → SMSC   bind_transceiver   seq=1  system_id=acme  password=****
SMSC → ESME   bind_transceiver_resp seq=1  status=ESME_ROK  system_id=smsc01
  (session now BOUND_TRX — submit_sm and deliver_sm may flow)
§04

Состояния сессии

Сессия SMPP — это небольшой конечный автомат. Она начинается в состоянии OPEN после установления TCP-соединения, переходит в связанное состояние при успешном bind и возвращается в UNBOUND, а затем CLOSED при unbind или разрыве. Отправка операции, недопустимой для текущего состояния, возвращает ESME_RINVBNDSTS (неверный статус bind). Повторный bind по одному соединению возвращает ESME_RALYBND (уже связан).

Состояния сессии SMPP
СостояниеЗначение
OPENTCP-соединение установлено, bind ещё не выполнен
BOUND_TXПривязан как transmitter — может отправлять
BOUND_RXПривязан как receiver — может получать
BOUND_TRXПривязан как transceiver — может отправлять и получать
UNBOUNDUnbind отправлен, ожидается закрытие
CLOSEDСоединение разорвано
§05

unbind и outbind

unbind (0x00000006) запрашивает корректное закрытие сессии; узел отвечает unbind_resp, и обе стороны закрывают TCP-соединение. outbind (0x0000000B) — это обратный случай: SMSC просит прослушивающий ESME инициировать bind типа receiver; используется, когда SMSC нужно доставить трафик MO на ESME, который обычно ожидает соединений.

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

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

Использовать ли пары transmitter/receiver или transceiver?

Предпочитайте transceiver, где провайдер это допускает — одно соединение несёт и отправку, и приём, вдвое сокращая число соединений и упрощая корреляцию отчётов о доставке. Отдельные bind типа transmitter и receiver используйте только когда провайдер требует разделения по направлениям.

Для чего нужен system_type?

system_type опционально определяет категорию ESME (например, конкретный класс приложения). Многие провайдеры оставляют его пустым. Задавайте его только тем значением, которое выделяет провайдер, поскольку некоторые маршрутизируют по нему.

Почему мой bind типа receiver не получает отчёты о доставке?

Самая частая причина — несоответствие address_range / addr_ton / addr_npi: SMSC маршрутизирует трафик MO и DLR на тот bind, чей address_range совпадает, поэтому неверное значение молча их удерживает. Уточните точные выданные значения у провайдера.

Что означает ESME_RALYBND?

ESME_RALYBND (0x00000005) означает, что ESME уже находится в связанном состоянии и попытался выполнить bind повторно в той же сессии. Выполняйте bind ровно один раз на соединение; если bind не удался, откройте новое соединение, а не выполняйте bind повторно на старом.

Сколько одновременных bind можно открыть?

Это коммерческое ограничение, задаваемое вашим провайдером, а не протоколом. Открытие большего числа bind, чем выделено, — частая причина троттлинга или блокировки учётной записи. Согласуйте число bind и TPS на каждый bind письменно, прежде чем масштабироваться.

Ссылки

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

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

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

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

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