BroadNet
SMPPОперации

Формат отчётов о доставке SMPP (DLR)

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

Отчёт о доставке (DLR) — это deliver_sm, чей esm_class помечает его как отчёт. short_message несёт текст фиксированного формата — id, sub, dlvrd, submit date, done date, stat, err, Text — определённый в Приложении B спецификации SMPP v3.4. Поле stat (DELIVRD, EXPIRED, UNDELIV, REJECTD…) — это конечный статус сообщения.

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

Текст отчёта из Приложения B

Когда SMSC сообщает о судьбе сообщения, он отправляет deliver_sm с установленным битом отчёта в esm_class (0x04) и помещает структурированную текстовую строку в short_message. Формат определён в Приложении B спецификации v3.4. Каждое поле — это ключ, за которым следует значение; поле id связывает отчёт с message_id из вашего submit_sm_resp.

Отчёт о доставленном сообщении (содержимое short_message)text
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4
§02

Поле за полем

Отчёт компактен, но каждое поле важно для сверки. Даты используют формат YYMMDDhhmm. sub и dlvrd подсчитывают отправленные и доставленные сегменты. stat — это семисимвольное конечное состояние. err — это код ошибки, специфичный для сети/SMSC (000 при успехе). Text — это первые 20 символов исходного сообщения.

Поля отчёта о доставке (Приложение B)
ПолеЗначение
idSMSC message_id от исходного submit_sm
subКоличество отправленных коротких сообщений (сегментов)
dlvrdКоличество доставленных коротких сообщений
Дата отправкиВремя отправки сообщения (YYMMDDhhmm)
Дата завершенияКогда сообщение достигло итогового состояния (YYMMDDhhmm)
statИтоговое состояние сообщения — ключевое слово из 7 символов (см. ниже)
errКод ошибки сети/SMSC (000 = нет)
ТекстПервые 20 символов исходного сообщения
§03

Ключевые слова stat и номера message_state

Ключевое слово stat — это человекочитаемый конечный статус; TLV message_state (0x0427) несёт ту же информацию числом. Считайте DELIVRD единственным однозначным успехом; EXPIRED, UNDELIV, REJECTD, DELETED и UNKNOWN — конечные сбои. ACCEPTD и ENROUTE не являются окончательными и не должны закрывать сообщение.

Ключевые слова stat ↔ message_state
statmessage_stateОкончательно?Значение
ENROUTE1NoВ пути
DELIVRD2ДаДоставлено на мобильный телефон
EXPIRED3ДаСрок действия истек
DELETED4ДаСообщение удалено
UNDELIV5ДаНе доставлено
ACCEPTD6NoПринято / прочитано вручную
UNKNOWN7ДаСостояние неизвестно
REJECTD8ДаОтклонено сетью
§04

Безопасный разбор

Разбирайте отчёт из short_message в deliver_sm, но корреляцию выполняйте по TLV receipted_message_id (0x001E), а не только по тексту id, и нормализуйте шестнадцатеричный и десятичный форматы идентификатора. Отличайте промежуточные отчёты (бит промежуточного уведомления в esm_class) от конечных состояний и сопоставляйте код err с нормализованной таксономией — абонент отсутствует, аппарат занят, заблокировано как спам, неверный номер — поскольку исходные значения err различаются по маршрутам. Всегда отвечайте deliver_sm_resp.

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

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

Что означает stat:DELIVRD?

DELIVRD — это конечный статус, означающий, что сообщение достигло аппарата получателя. Он соответствует message_state 2 и является единственным значением stat, однозначно представляющим успех.

Где в PDU находится текст отчёта о доставке?

В поле short_message того deliver_sm, чей esm_class имеет установленный бит отчёта о доставке (0x04). Текст следует формату Приложения B: id, sub, dlvrd, submit date, done date, stat, err, Text.

Что такое поле err в DLR?

err — это код ошибки, специфичный для сети или SMSC, дающий причину недоставки (000 означает отсутствие ошибки). Поскольку значения различаются по маршрутам, сопоставляйте их с нормализованной внутренней таксономией для согласованной отчётности о качестве.

Почему id в моём DLR не совпадает с message_id из submit_sm_resp?

Обычно это несоответствие формата: некоторые SMSC возвращают message_id в шестнадцатеричном виде в submit_sm_resp, но в десятичном в отчёте (или наоборот). Нормализуйте оба к одному представлению перед сравнением и предпочитайте TLV receipted_message_id.

Все ли отчёты о доставке являются конечными?

Нет. ENROUTE и ACCEPTD — промежуточные состояния, а некоторые сети отправляют промежуточные уведомления. Закрывайте сообщение только по конечному stat, такому как DELIVRD, EXPIRED, UNDELIV, REJECTD, DELETED или UNKNOWN.

Ссылки

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

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

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

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

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