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.
bind_transceiverAprire e autenticare la sessionebind_transceiver_respSessione accettatasubmit_smInviare un messaggiosubmit_sm_respAccettato, ID messaggio restituitodeliver_smRicevuta di consegna o messaggio in entratadeliver_sm_respConfermatoenquire_linkKeepalive durante l'inattività
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.
id:0a1b2c3d4e sub:001 dlvrd:001 submit date:2607181432 done date:2607181433 stat:DELIVRD err:000 Text:Your code is 4Campo 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.
| 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.
| 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.
Specifiche della fonte
Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.