BroadNet
Бесплатный инструмент для разработчиков · Протокол

Симулятор SMPP сессии.

Просмотрите реальный диалог SMPP 3.4 — фактический обмен блоками PDU между ESME и SMSC, байт за байтом. Выберите любой PDU, чтобы увидеть его поля, сопоставленные с октетами в сети.

Это никогда не отправляет сообщение.

Все данные на этой странице вычисляются в вашем браузере. Нет сокета, нет запроса к BroadNet или кому-либо еще, и никакие сообщения не отправляются ни в одну сеть. Идентификаторы сообщений и метки времени формируются на основе ваших входных данных, поэтому одни и те же входные данные всегда дают один и тот же результат — они являются иллюстративными, а не реальными.

не связан
провод — ESME ⇄ SMSC0 PDU
ESMESMSC

Пока ничего не передано по сети. Запустите сессию, чтобы отследить обмен данными между PDU, ESME и SMSC, затем выберите любой из них, чтобы увидеть его байты.

Как на самом деле работает сессия SMPP

  1. 1 · Связать. Ваше приложение устанавливает TCP-соединение с SMSC и отправляет команду bind_transceiver с system_id и паролем. Пока SMSC не ответит командой command_status 0, никакие другие данные не принимаются.
  2. 2 · Отправить. Каждое сообщение представляет собой PDU submit_sm. Ответ содержит message_id — это подтверждение принятия, а не доставки.
  3. 3 · Чек. Если вы запросили его, SMSC позже отправит deliver_sm с идентификатором esm_class 0x04 и телом отчёта о доставке, ссылающимся на этот message_id.
  4. 4. Оставайтесь в живых. enquire_link каждые 30–60 секунд подтверждает работоспособность сокета. Если вы пропустите этот запрос, SMSC разорвет соединение.
  5. 5 · Развязать. Завершите процесс вежливо, чтобы оператор не посчитал это нештатным отключением.

Вопросы, которые задают инженеры

Этот симулятор отправляет настоящие SMS ?
Нет. Ничто на этой странице не устанавливает соединение и не отправляет сообщение куда-либо. Каждый PDU и каждый ответ SMSC вычисляются в вашем браузере на основе введенных вами значений, поэтому одни и те же входные данные всегда приводят к одному и тому же результату. Это обучающий инструмент для протокола, а не инструмент для отправки сообщений.
Что такое привязка (bind) в SMPP ?
Привязка (bind) — это рукопожатие сессии между ESME (вашим приложением) и SMSC (центром обмена сообщениями оператора). bind_transmitter может только отправлять данные, bind_receiver — только получать, а bind_transceiver делает и то, и другое по одному соединению — именно это используется в большинстве интеграций. Никакие другие данные не принимаются в сессии до тех пор, пока привязка не будет успешно завершена.
Что делает функция registered_delivery?
Установка параметра registered_delivery в значение 1 запрашивает у SMSC подтверждение окончательного результата. Это подтверждение поступает позже в виде отдельного PDU deliver_sm содержащего esm_class 0x04 — отчёт о доставке, — который ссылается на message_id, предоставленный вам в submit_sm_resp. Без него вы узнаете только о том, что SMSC принял сообщение, а не о том, что телефон его получил.
Почему моё сообщение разбивается на несколько частей?
Один PDU SMS содержит 160 символов в алфавите GSM-7 или 70 в UCS-2. Более длинный текст объединяется: каждая часть отдает 6 октетов заголовку пользовательских данных, чтобы телефон мог собрать их заново, в результате чего на сегмент приходится 153 или 67 символов. Один арабский символ или один эмодзи заставляет все сообщение соответствовать стандарту UCS-2, поэтому 100-символьное сообщение на арабском языке стоит два сегмента.
В чём разница между submit_sm_resp и отчётом о доставке?
submit_sm_resp — синхронное событие, означающее лишь то, что SMSC принял PDU и присвоил ему message_id. Подтверждение доставки приходит асинхронно, часто через несколько секунд или минут, и сообщает о реальном результате — DELIVRD, UNDELIV, EXPIRED, REJECTD. Рассматривать submit_sm_resp как подтверждение доставки — самая распространенная ошибка при первой интеграции SMPP.
Что такое окно SMPP и почему оно ограничивает мою пропускную способность?
Окно определяет, сколько PDU вы могли отправить, но не получить подтверждение по одному из запросов одновременно. Поскольку SMPP является асинхронным протоколом, вы не ждете каждого submit_sm_resp перед отправкой следующего — но окно ограничивает, насколько далеко вперед вы можете продвинуться. Если оставить значение по умолчанию равным 1, запрос переходит в режим запрос/ответ, и ваша пропускная способность снижается до одного сообщения за один цикл обмена данными, независимо от скорости, согласованной оператором.