Отчёт о доставке (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…) — это конечный статус сообщения.
bind_transceiverОткрыть и аутентифицировать сессиюbind_transceiver_respСессия принятаsubmit_smОтправить сообщениеsubmit_sm_respПринято, возвращен ID сообщенияdeliver_smПодтверждение доставки или входящее сообщениеdeliver_sm_respПодтвержденоenquire_linkKeepalive в режиме ожидания
Текст отчёта из Приложения B
Когда SMSC сообщает о судьбе сообщения, он отправляет deliver_sm с установленным битом отчёта в esm_class (0x04) и помещает структурированную текстовую строку в short_message. Формат определён в Приложении B спецификации v3.4. Каждое поле — это ключ, за которым следует значение; поле id связывает отчёт с message_id из вашего submit_sm_resp.
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4Поле за полем
Отчёт компактен, но каждое поле важно для сверки. Даты используют формат YYMMDDhhmm. sub и dlvrd подсчитывают отправленные и доставленные сегменты. stat — это семисимвольное конечное состояние. err — это код ошибки, специфичный для сети/SMSC (000 при успехе). Text — это первые 20 символов исходного сообщения.
| Поле | Значение |
|---|---|
| id | SMSC message_id от исходного submit_sm |
| sub | Количество отправленных коротких сообщений (сегментов) |
| dlvrd | Количество доставленных коротких сообщений |
| Дата отправки | Время отправки сообщения (YYMMDDhhmm) |
| Дата завершения | Когда сообщение достигло итогового состояния (YYMMDDhhmm) |
| stat | Итоговое состояние сообщения — ключевое слово из 7 символов (см. ниже) |
| err | Код ошибки сети/SMSC (000 = нет) |
| Текст | Первые 20 символов исходного сообщения |
Ключевые слова stat и номера message_state
Ключевое слово stat — это человекочитаемый конечный статус; TLV message_state (0x0427) несёт ту же информацию числом. Считайте DELIVRD единственным однозначным успехом; EXPIRED, UNDELIV, REJECTD, DELETED и UNKNOWN — конечные сбои. ACCEPTD и ENROUTE не являются окончательными и не должны закрывать сообщение.
| stat | message_state | Окончательно? | Значение |
|---|---|---|---|
| ENROUTE | 1 | No | В пути |
| DELIVRD | 2 | Да | Доставлено на мобильный телефон |
| EXPIRED | 3 | Да | Срок действия истек |
| DELETED | 4 | Да | Сообщение удалено |
| UNDELIV | 5 | Да | Не доставлено |
| ACCEPTD | 6 | No | Принято / прочитано вручную |
| UNKNOWN | 7 | Да | Состояние неизвестно |
| REJECTD | 8 | Да | Отклонено сетью |
Безопасный разбор
Разбирайте отчёт из 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.
Технические характеристики источника
На этой странице представлены опубликованные стандарты, на которых они основаны. (Открывается в новой вкладке)