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

> 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.

- URL canonique: https://www.broadnet.me/fr/reference/smpp-delivery-receipts-dlr
- Langue: fr
- Dernière mise à jour: 2026-07-18
- Éditeur: BroadNet (https://www.broadnet.me)

Le format texte d'accusé de réception de l'Annexe B à l'intérieur de deliver_sm : id, sub, dlvrd, submit date, done date, stat, err et Text — plus les mots-clés stat et leurs numéros message_state.

## 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
```

## 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)*

| Champ | Signification |
|---|---|
| id | SMSC message_id du submit_sm d'origine |
| sub | Nombre de messages courts soumis (segments) |
| dlvrd | Nombre de messages courts remis |
| Date d'envoi | Date et heure d'envoi du message (AAMMJJhhmm) |
| Date d'achèvement | Lorsque le message a atteint son état final (AAMMJJhhmm) |
| stat | État final du message — mot-clé de 7 caractères (voir ci-dessous) |
| err | Code d'erreur spécifique au réseau/SMSC (000 = aucun) |
| Texte | Les 20 premiers caractères du message original |

## 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*

| stat | message_state | Final ? | Signification |
|---|---|---|---|
| ENROUTE | 1 | No | En transit |
| DELIVRD | 2 | Oui | Livré au combiné |
| EXPIRED | 3 | Oui | Période de validité expirée |
| DELETED | 4 | Oui | Message supprimé |
| UNDELIV | 5 | Oui | Non livrable |
| ACCEPTD | 6 | No | Accepté / lu manuellement |
| UNKNOWN | 7 | Oui | État inconnu |
| REJECTD | 8 | Oui | Rejeté par le réseau |

## 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.

## Questions fréquentes

### 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.

## Sources

- [SMPP v3.4 specification — Appendix B (delivery receipt)](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [3GPP TS 23.040 — SMS status report](https://www.3gpp.org/dynareport/23040.htm)

## Voir aussi

- [Décodeur de DLR (outil gratuit)](https://www.broadnet.me/fr/tools/dlr-decoder)
- [deliver_sm et messages MO SMPP](https://www.broadnet.me/fr/reference/smpp-deliver-sm)
- [Paramètres optionnels TLV SMPP](https://www.broadnet.me/fr/reference/smpp-tlv-parameters)
- [Checklist d'intégration SMPP (guide)](https://www.broadnet.me/fr/guides/smpp-integration-checklist)
- [Produit API SMS](https://www.broadnet.me/fr/products/sms-api)
