# Formato delle ricevute di consegna SMPP (DLR)

> Una ricevuta di consegna (DLR) è una deliver_sm il cui esm_class la contrassegna come ricevuta. short_message trasporta un testo a formato fisso — id, sub, dlvrd, submit date, done date, stat, err, Text — definito nell'Appendice B della v3.4 di SMPP. Il campo stat (DELIVRD, EXPIRED, UNDELIV, REJECTD…) è lo stato terminale del messaggio.

- URL canonico: https://www.broadnet.me/it/reference/smpp-delivery-receipts-dlr
- Lingua: it
- Ultimo aggiornamento: 2026-07-18
- Editore: BroadNet (https://www.broadnet.me)

Il formato testuale della ricevuta di consegna dell'Appendice B all'interno di deliver_sm: id, sub, dlvrd, submit date, done date, stat, err e Text — più le parole chiave stat e i relativi numeri message_state.

## Il testo della ricevuta dell'Appendice B

Quando l'SMSC riporta l'esito di un messaggio, invia una deliver_sm con il bit di ricevuta impostato in esm_class (0x04) e inserisce una stringa di testo strutturata in short_message. Il formato è definito nell'Appendice B della specifica v3.4. Ogni campo è una chiave seguita da un valore; il campo id ricollega la ricevuta al message_id del vostro submit_sm_resp.

*Una ricevuta di consegna avvenuta (contenuto di short_message)*

```text
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4
```

## Campo per campo

La ricevuta è compatta ma ogni campo conta per la riconciliazione. Le date usano il formato YYMMDDhhmm. sub e dlvrd contano i segmenti inviati e consegnati. stat è lo stato terminale di sette caratteri. err è un codice di errore specifico della rete/SMSC (000 in caso di successo). Text è composto dai primi 20 caratteri del messaggio originale.

*Campi della ricevuta di consegna (Appendice B)*

| Campo | Significato |
|---|---|
| id | SMSC message_id del submit_sm originale |
| sub | Numero di messaggi brevi inviati (segmenti) |
| dlvrd | Numero di messaggi brevi consegnati |
| data di invio | Quando il messaggio è stato inviato (YYMMDDhhmm) |
| data di completamento | Quando il messaggio ha raggiunto lo stato finale (YYMMDDhhmm) |
| stat | Stato finale del messaggio: parola chiave di 7 caratteri (vedi sotto) |
| err | Codice errore specifico della rete/SMSC (000 = nessuno) |
| Testo | Primi 20 caratteri del messaggio originale |

## Parole chiave stat e numeri message_state

La parola chiave stat è lo stato terminale in forma leggibile; il TLV message_state (0x0427) trasporta la stessa informazione come numero. Considerate DELIVRD l'unico successo inequivocabile; EXPIRED, UNDELIV, REJECTD, DELETED e UNKNOWN sono fallimenti terminali. ACCEPTD e ENROUTE non sono finali e non dovrebbero chiudere un messaggio.

*Parole chiave stat ↔ message_state*

| stat | message_state | Finale? | Significato |
|---|---|---|---|
| ENROUTE | 1 | No | In transito |
| DELIVRD | 2 | Sì | Consegnato al terminale |
| EXPIRED | 3 | Sì | Periodo di validità scaduto |
| DELETED | 4 | Sì | Messaggio eliminato |
| UNDELIV | 5 | Sì | Non consegnabile |
| ACCEPTD | 6 | No | Accettato / letto manualmente |
| UNKNOWN | 7 | Sì | Stato sconosciuto |
| REJECTD | 8 | Sì | Rifiutato dalla rete |

## Parsing sicuro

Interpretate la ricevuta dal short_message della deliver_sm, ma correlate sul TLV receipted_message_id (0x001E) anziché solo sul testo id, e normalizzate i formati id esadecimale e decimale. Distinguete le ricevute intermedie (bit di notifica intermedia di esm_class) dagli stati finali e mappate il codice err su una tassonomia normalizzata — abbonato assente, terminale occupato, bloccato come spam, numero non valido — poiché i valori grezzi di err variano per rotta. Rispondete sempre con deliver_sm_resp.

## Domande frequenti

### Cosa significa stat:DELIVRD?

DELIVRD è lo stato terminale che indica che il messaggio ha raggiunto il terminale del destinatario. Corrisponde a message_state 2 ed è l'unico valore di stat che rappresenta inequivocabilmente un successo.

### Dove si trova nella PDU il testo della ricevuta di consegna?

Nel campo short_message di una deliver_sm il cui esm_class ha impostato il bit di ricevuta di consegna (0x04). Il testo segue il formato dell'Appendice B: id, sub, dlvrd, submit date, done date, stat, err, Text.

### Che cos'è il campo err in un DLR?

err è un codice di errore specifico della rete o dell'SMSC che indica il motivo di una mancata consegna (000 significa nessuno). Poiché i valori differiscono per rotta, mappateli su una tassonomia interna normalizzata per un reporting di qualità coerente.

### Perché l'id del mio DLR non corrisponde al message_id di submit_sm_resp?

Di solito è una discrepanza di formato: alcuni SMSC restituiscono il message_id in esadecimale in submit_sm_resp ma in decimale nella ricevuta (o viceversa). Normalizzate entrambi in un'unica rappresentazione prima del confronto e preferite il TLV receipted_message_id.

### Tutte le ricevute di consegna sono finali?

No. ENROUTE e ACCEPTD sono stati intermedi e alcune reti inviano notifiche intermedie. Chiudete un messaggio solo su uno stat finale come DELIVRD, EXPIRED, UNDELIV, REJECTD, DELETED o UNKNOWN.

## Fonti

- [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)

## Correlati

- [Decoder DLR (strumento gratuito)](https://www.broadnet.me/it/tools/dlr-decoder)
- [SMPP deliver_sm e messaggi MO](https://www.broadnet.me/it/reference/smpp-deliver-sm)
- [Parametri opzionali TLV di SMPP](https://www.broadnet.me/it/reference/smpp-tlv-parameters)
- [Checklist di integrazione SMPP (guida)](https://www.broadnet.me/it/guides/smpp-integration-checklist)
- [Prodotto SMS API](https://www.broadnet.me/it/products/sms-api)
