BroadNet
SMPPOpérations

Format des accusés de réception SMPP (DLR)

Mis à jour le 3 min de lectureFondé sur des normes
Réponse directe

Un accusé de réception (DLR) est un deliver_sm dont l'esm_class le marque comme accusé. short_message porte un texte de format fixe — id, sub, dlvrd, submit date, done date, stat, err, Text — défini dans l'Annexe B de la spécification SMPP v3.4. Le champ stat (DELIVRD, EXPIRED, UNDELIV, REJECTD…) est le statut terminal du message.

SchémaUne session SMPP entre votre plateforme et BroadNet
Votre plateforme (ESME)
BroadNet SMSC
Une connexion TCP/TLS persistante
  1. bind_transceiverOuvrir et authentifier la session
  2. bind_transceiver_respSession acceptée
  3. submit_smEnvoyer un message
  4. submit_sm_respAccepté, ID du message renvoyé
  5. deliver_smAccusé de réception ou message entrant
  6. deliver_sm_respConfirmé
  7. enquire_linkKeepalive en cas d'inactivité
§01

Le texte d'accusé de l'Annexe B

Lorsque le SMSC rapporte le sort d'un message, il envoie un deliver_sm avec le bit d'accusé positionné dans esm_class (0x04) et place une chaîne de texte structurée dans short_message. Le format est défini à l'Annexe B de la spécification v3.4. Chaque champ est une clé suivie d'une valeur ; le champ id relie l'accusé au message_id de votre submit_sm_resp.

Un accusé de remise (contenu de 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

Champ par champ

L'accusé est compact mais chaque champ compte pour la réconciliation. Les dates utilisent le format YYMMDDhhmm. sub et dlvrd comptent les segments soumis et remis. stat est l'état terminal de sept caractères. err est un code d'erreur propre au réseau/SMSC (000 en cas de succès). Text correspond aux 20 premiers caractères du message d'origine.

Champs de l'accusé de réception (Annexe B)
ChampSignification
idSMSC message_id du submit_sm d'origine
subNombre de messages courts soumis (segments)
dlvrdNombre de messages courts remis
Date d'envoiDate et heure d'envoi du message (AAMMJJhhmm)
Date d'achèvementLorsque le message a atteint son état final (AAMMJJhhmm)
statÉtat final du message — mot-clé de 7 caractères (voir ci-dessous)
errCode d'erreur spécifique au réseau/SMSC (000 = aucun)
TexteLes 20 premiers caractères du message original
§03

Mots-clés stat et numéros message_state

Le mot-clé stat est le statut terminal lisible par l'humain ; le TLV message_state (0x0427) porte la même information sous forme de nombre. Traitez DELIVRD comme le seul succès sans ambiguïté ; EXPIRED, UNDELIV, REJECTD, DELETED et UNKNOWN sont des échecs terminaux. ACCEPTD et ENROUTE ne sont pas définitifs et ne doivent pas clore un message.

Mots-clés stat ↔ message_state
statmessage_stateFinal ?Signification
ENROUTE1NoEn transit
DELIVRD2OuiLivré au combiné
EXPIRED3OuiPériode de validité expirée
DELETED4OuiMessage supprimé
UNDELIV5OuiNon livrable
ACCEPTD6NoAccepté / lu manuellement
UNKNOWN7OuiÉtat inconnu
REJECTD8OuiRejeté par le réseau
§04

Analyser en toute sûreté

Analysez l'accusé depuis le short_message du deliver_sm, mais corrélez sur le TLV receipted_message_id (0x001E) plutôt que sur le seul texte id, et normalisez les formats hexadécimal et décimal de l'id. Distinguez les accusés intermédiaires (bit de notification intermédiaire d'esm_class) des états finaux, et faites correspondre le code err à une taxonomie normalisée — abonné absent, combiné occupé, bloqué comme spam, numéro invalide — car les valeurs err brutes varient selon la route. Répondez toujours par deliver_sm_resp.

FAQ

Questions fréquemment posées

Que signifie stat:DELIVRD ?

DELIVRD est le statut terminal signifiant que le message a atteint le combiné du destinataire. Il correspond à message_state 2 et est la seule valeur de stat qui représente un succès sans ambiguïté.

Où se trouve le texte d'accusé de réception dans la PDU ?

Dans le champ short_message d'un deliver_sm dont l'esm_class a le bit d'accusé de réception (0x04) positionné. Le texte suit le format de l'Annexe B : id, sub, dlvrd, submit date, done date, stat, err, Text.

Qu'est-ce que le champ err dans un DLR ?

err est un code d'erreur propre au réseau ou au SMSC donnant la raison d'une non-remise (000 signifie aucune). Comme les valeurs diffèrent selon la route, faites-les correspondre à une taxonomie interne normalisée pour un reporting qualité cohérent.

Pourquoi l'id de mon DLR ne correspond-il pas à mon message_id submit_sm_resp ?

Généralement une divergence de format : certains SMSC renvoient le message_id en hexadécimal dans submit_sm_resp mais en décimal dans l'accusé (ou l'inverse). Normalisez les deux vers une même représentation avant de comparer, et privilégiez le TLV receipted_message_id.

Tous les accusés de réception sont-ils finaux ?

Non. ENROUTE et ACCEPTD sont des états intermédiaires, et certains réseaux envoient des notifications intermédiaires. Ne clôturez un message que sur un stat final tel que DELIVRD, EXPIRED, UNDELIV, REJECTD, DELETED ou UNKNOWN.

Références

Spécifications sources

Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.

BNMaintenu par l'équipe d'ingénierie BroadNet·Messagerie de qualité opérateur depuis 2003
Placez-le sur le fil

Conçu avec une véritable liaison SMPP et une API REST.

Demandez un accès de test avec de véritables clés de test : envoyez d’abord à votre propre numéro vérifié, puis passez en production dans plus de 200 pays une fois que votre identité d’expéditeur et vos routes seront approuvées.