Aller au contenu
OmniChannels.ai

Outil gratuit

Décodeur d'accusés de réception SMS (DLR)

Collez un accusé de réception SMPP ou tout un lot. Voyez ce que signifie chaque champ, le délai de livraison, le statut webhook correspondant et ce qu'indique une erreur command_status SMPP.

Gratuit · sans inscription · dans votre navigateur

Collez le texte short_message d'un ou plusieurs accusés deliver_sm, un par ligne. Un command_status seul, comme 0x00000058, est aussi décodé.

Accusés décodés

Accusés: 4 · Taux de remise: 25 %

Accusés
4
Taux de remise
25 %
DELIVRD ÷ accusés au stat reconnu
Délai médian
1 h 7 min
À vérifier
0

Par stat

  • DELIVRD1
  • ACCEPTD1
  • UNDELIV1
  • EXPIRED1

Par statut webhook le plus proche

  • SENT1
  • DELIVERED1
  • FAILED2
  1. Ligne 1stat:DELIVRDStatut webhook le plus proche: DELIVEREDFinal

    Remis sur le téléphone.

    Correspondance indicative avec les statuts normalisés de notre API.

    ID du message
    2610101200457381
    Correspond au message_id renvoyé dans submit_sm_resp.
    sub (soumis)
    001
    Messages soumis à l'origine, généralement 001.
    dlvrd (remis)
    001
    Messages remis, généralement 001 ou 000. Beaucoup de SMSC le renseignent approximativement : fiez-vous à stat.
    Date de soumission
    10 oct. 2026, 12:00:05261010120005
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Date de fin
    10 oct. 2026, 12:00:09261010120009
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Délai de remise
    4 s
    err
    000
    Aucune erreur.
    text
    Your code is 482913
    Les 20 premiers caractères du message d'origine, souvent tronqués ou vides.
  2. Ligne 2stat:UNDELIVStatut webhook le plus proche: FAILEDFinal

    Non distribuable : numéro invalide ou inactif, abonné bloqué ou panne réseau.

    Correspondance indicative avec les statuts normalisés de notre API.

    ID du message
    2610101200457382
    Correspond au message_id renvoyé dans submit_sm_resp.
    sub (soumis)
    001
    Messages soumis à l'origine, généralement 001.
    dlvrd (remis)
    000
    Messages remis, généralement 001 ou 000. Beaucoup de SMSC le renseignent approximativement : fiez-vous à stat.
    Date de soumission
    10 oct. 2026, 12:002610101200
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Date de fin
    10 oct. 2026, 14:152610101415
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Délai de remise
    2 h 15 min
    err
    001
    Les valeurs err non nulles dépendent du SMSC ou du réseau (souvent issues des causes réseau GSM). Consultez la liste d'erreurs de votre fournisseur.
    text
    Your order has shipp
    Les 20 premiers caractères du message d'origine, souvent tronqués ou vides.
  3. Ligne 3stat:expiredStatut webhook le plus proche: FAILEDFinal

    La période de validité a expiré avant que le téléphone soit joignable (souvent éteint ou hors couverture).

    Correspondance indicative avec les statuts normalisés de notre API.

    ID du message
    2610101200457383
    Correspond au message_id renvoyé dans submit_sm_resp.
    sub (soumis)
    001
    Messages soumis à l'origine, généralement 001.
    dlvrd (remis)
    000
    Messages remis, généralement 001 ou 000. Beaucoup de SMSC le renseignent approximativement : fiez-vous à stat.
    Date de soumission
    10 oct. 2026, 12:012610101201
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Date de fin
    11 oct. 2026, 00:012610110001
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Délai de remise
    12 h
    err
    000
    Aucune erreur.
    text
    Flash sale ends toni
    Les 20 premiers caractères du message d'origine, souvent tronqués ou vides.
  4. Ligne 4stat:ACCEPTDStatut webhook le plus proche: SENTIntermédiaire

    Accepté par le réseau. Un accusé final suit généralement.SMPP v3.4 définit formellement ACCEPTD comme un message lu manuellement par le service client pour le compte de l'abonné, mais la plupart des SMSC et agrégateurs l'envoient comme accusé intermédiaire « accepté par le réseau ».

    Correspondance indicative avec les statuts normalisés de notre API.

    ID du message
    2610101200457384
    Correspond au message_id renvoyé dans submit_sm_resp.
    sub (soumis)
    001
    Messages soumis à l'origine, généralement 001.
    dlvrd (remis)
    000
    Messages remis, généralement 001 ou 000. Beaucoup de SMSC le renseignent approximativement : fiez-vous à stat.
    Date de soumission
    10 oct. 2026, 12:022610101202
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Date de fin
    10 oct. 2026, 12:022610101202
    Horloge du SMSC. L'accusé n'indique pas de fuseau horaire (souvent UTC).
    Délai de remise
    0 s
    err
    000
    Aucune erreur.
    text
    —
    Les 20 premiers caractères du message d'origine, souvent tronqués ou vides.
  5. Ligne 5 · command_status0x00000058ESME_RTHROTTLEDTemporaire

    Throttling error (ESME has exceeded allowed message limits)

    Réessayez plus tard avec un backoff exponentiel, jamais en boucle serrée.

Codes command_status SMPP v3.4

48 codes

CodeNomSignification (spéc.)Que faire
0x00000000ESME_ROKNo errorSuccès
0x00000001ESME_RINVMSGLENMessage length is invalidRequête à corriger
0x00000002ESME_RINVCMDLENCommand length is invalidRequête à corriger
0x00000003ESME_RINVCMDIDInvalid command IDRequête à corriger
0x00000004ESME_RINVBNDSTSIncorrect bind status for given commandBind ou session
0x00000005ESME_RALYBNDESME already in bound stateBind ou session
0x00000006ESME_RINVPRTFLGInvalid priority flagRequête à corriger
0x00000007ESME_RINVREGDLVFLGInvalid registered delivery flagRequête à corriger
0x00000008ESME_RSYSERRSystem errorTemporaire
0x0000000AESME_RINVSRCADRInvalid source addressRequête à corriger
0x0000000BESME_RINVDSTADRInvalid destination addressRequête à corriger
0x0000000CESME_RINVMSGIDMessage ID is invalidRequête à corriger
0x0000000DESME_RBINDFAILBind failedBind ou session
0x0000000EESME_RINVPASWDInvalid passwordBind ou session
0x0000000FESME_RINVSYSIDInvalid system IDBind ou session
0x00000011ESME_RCANCELFAILcancel_sm failedRequête à corriger
0x00000013ESME_RREPLACEFAILreplace_sm failedRequête à corriger
0x00000014ESME_RMSGQFULMessage queue fullTemporaire
0x00000015ESME_RINVSERTYPInvalid service typeRequête à corriger
0x00000033ESME_RINVNUMDESTSInvalid number of destinationsRequête à corriger
0x00000034ESME_RINVDLNAMEInvalid distribution list nameRequête à corriger
0x00000040ESME_RINVDESTFLAGDestination flag is invalid (submit_multi)Requête à corriger
0x00000042ESME_RINVSUBREPInvalid 'submit with replace' request (submit_sm with replace_if_present_flag set)Requête à corriger
0x00000043ESME_RINVESMCLASSInvalid esm_class field dataRequête à corriger
0x00000044ESME_RCNTSUBDLCannot submit to distribution listRequête à corriger
0x00000045ESME_RSUBMITFAILsubmit_sm or submit_multi failedTemporaire
0x00000048ESME_RINVSRCTONInvalid source address TONRequête à corriger
0x00000049ESME_RINVSRCNPIInvalid source address NPIRequête à corriger
0x00000050ESME_RINVDSTTONInvalid destination address TONRequête à corriger
0x00000051ESME_RINVDSTNPIInvalid destination address NPIRequête à corriger
0x00000053ESME_RINVSYSTYPInvalid system_type fieldBind ou session
0x00000054ESME_RINVREPFLAGInvalid replace_if_present flagRequête à corriger
0x00000055ESME_RINVNUMMSGSInvalid number of messagesRequête à corriger
0x00000058ESME_RTHROTTLEDThrottling error (ESME has exceeded allowed message limits)Temporaire
0x00000061ESME_RINVSCHEDInvalid scheduled delivery timeRequête à corriger
0x00000062ESME_RINVEXPIRYInvalid message validity period (expiry time)Requête à corriger
0x00000063ESME_RINVDFTMSGIDPredefined message invalid or not foundRequête à corriger
0x00000064ESME_RX_T_APPNESME receiver temporary app error codeTemporaire
0x00000065ESME_RX_P_APPNESME receiver permanent app error codeRequête à corriger
0x00000066ESME_RX_R_APPNESME receiver reject message error codeRequête à corriger
0x00000067ESME_RQUERYFAILquery_sm request failedTemporaire
0x000000C0ESME_RINVOPTPARSTREAMError in the optional part of the PDU bodyRequête à corriger
0x000000C1ESME_ROPTPARNOTALLWDOptional parameter not allowedRequête à corriger
0x000000C2ESME_RINVPARLENInvalid parameter lengthRequête à corriger
0x000000C3ESME_RMISSINGOPTPARAMExpected optional parameter missingRequête à corriger
0x000000C4ESME_RINVOPTPARAMVALInvalid optional parameter valueRequête à corriger
0x000000FEESME_RDELIVERYFAILUREDelivery failure (used for data_sm_resp)Temporaire
0x000000FFESME_RUNKNOWNERRUnknown errorTemporaire

Les descriptions suivent la spécification SMPP v3.4, section 5.1.3 (en anglais).

Vous préférez ne pas analyser les accusés vous-même ? Notre API SMS envoie des statuts de remise normalisés à votre webhook, et des binds SMPP sont disponibles pour les gros volumes. Doc webhooksGuide SMPPAPI SMS pour entreprises

Rien de ce que vous saisissez n'est envoyé à nos serveurs.

Réponse courte

Un accusé de réception SMPP (DLR) est le reçu qu'un SMSC renvoie dans un PDU deliver_sm après l'envoi d'un SMS. Son texte suit le modèle id, sub, dlvrd, submit date, done date, stat, err et text. Le champ stat donne le résultat : DELIVRD signifie délivré sur le téléphone ; UNDELIV, EXPIRED, DELETED et REJECTD sont des échecs définitifs ; ENROUTE et ACCEPTD sont intermédiaires. Les dates suivent le format AAMMJJhhmm, parfois avec les secondes.

Comment décoder un accusé de réception SMS

  1. 1

    Copiez le texte de l'accusé

    Récupérez le short_message du PDU deliver_sm dans votre client SMPP ou les journaux du SMSC, par exemple id:… sub:001 dlvrd:001 … stat:DELIVRD err:000. Les préfixes de journal sont ignorés.

  2. 2

    Collez un accusé par ligne

    Collez un seul accusé ou des centaines. Vous pouvez aussi coller une valeur command_status, comme 0x00000058 ou ESME_RTHROTTLED, sur sa propre ligne.

  3. 3

    Lisez les champs décodés

    Chaque accusé affiche la signification du statut, son caractère final ou non, le statut webhook le plus proche, des dates lisibles, le délai de livraison et des alertes pour les champs manquants ou incohérents.

  4. 4

    Consultez la synthèse du lot

    Voyez les totaux par stat et par statut webhook, le taux de délivrance et le délai médian, puis copiez le tout en JSON pour un ticket ou un jeu de test.

Anatomie d'un accusé de réception SMPP

Quand vous envoyez un SMS avec registered_delivery à 1, le SMSC renvoie plus tard un PDU deliver_sm sur un bind récepteur ou émetteur-récepteur. Le bit 0x04 de son esm_class indique qu'il s'agit d'un accusé et non d'un message entrant, et son short_message contient un accusé texte. L'annexe B de la spécification SMPP v3.4 donne ce format en exemple, et presque tous les SMSC le suivent : id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E text:….

L'annexe B étant un exemple et non une règle stricte, les accusés réels varient : clés en minuscules, espaces en trop, submit_date avec un tiret bas, dates à 12 chiffres avec secondes ou champ text absent. Ce décodeur accepte toutes ces variantes et signale les champs manquants.

  • id : l'identifiant renvoyé par le SMSC dans submit_sm_resp. Il permet de rattacher l'accusé à votre message. L'exemple de la spécification montre 10 caractères, mais beaucoup de SMSC utilisent des identifiants plus longs, parfois en hexadécimal.
  • sub et dlvrd : le nombre de messages soumis et délivrés, sur 3 chiffres. Ils servent surtout pour les listes de diffusion ; pour un SMS unique, on voit généralement 001 et 001 (ou 000).
  • submit date et done date : la date de soumission et celle de l'état final, selon l'horloge du SMSC.
  • stat : l'état final ou intermédiaire, sous forme de code de 7 lettres comme DELIVRD.
  • err : un code d'erreur de 3 caractères, propre au réseau ou au SMSC ; 000 signifie aucune erreur.
  • text : les 20 premiers caractères du message d'origine, souvent tronqués ou vides.
  • Des TLV optionnels peuvent reprendre ces données sous une forme plus propre : receipted_message_id (0x001E), message_state (0x0427) et network_error_code (0x0423).

Les codes stat des DLR et leur signification

SMPP v3.4 définit huit états de message. ENROUTE et ACCEPTD sont intermédiaires, les autres sont finaux. Notre API normalise tous les canaux en six statuts webhook (SUBMITTED, SENT, DELIVERED, READ, FAILED, REJECTED), et le décodeur affiche la correspondance la plus proche pour chaque valeur stat. Cette correspondance est indicative : la règle exacte de votre compte est confirmée lors de la mise en service.

  • DELIVRD (message_state 2) : délivré sur le téléphone. Statut webhook le plus proche : DELIVERED.
  • ACCEPTD (6) : formellement « lu manuellement par le service client pour le compte de l'abonné », mais la plupart des SMSC l'envoient comme accusé intermédiaire « accepté par le réseau ». Le plus proche : SENT.
  • ENROUTE (1) : toujours en transit, par exemple en attente d'une nouvelle tentative. Le plus proche : SENT.
  • UNDELIV (5) : non distribuable, par exemple un numéro invalide ou inactif. Le plus proche : FAILED.
  • EXPIRED (3) : la période de validité a expiré avant que le téléphone soit joignable, souvent éteint ou hors couverture. Le plus proche : FAILED.
  • DELETED (4) : supprimé avant la livraison, par exemple via cancel_sm. Le plus proche : FAILED.
  • REJECTD (8) : refusé par le réseau ou un pare-feu SMS, par exemple un identifiant d'expéditeur (Sender ID) non enregistré ou un contenu bloqué. Le plus proche : REJECTED.
  • UNKNOWN (7) : le SMSC n'a pas d'état final. Considérez-le comme non confirmé, pas comme un échec avéré.

Codes err : pourquoi il n'existe pas de liste universelle

Le champ err fait trois caractères et la spécification SMPP n'en définit pas les valeurs. 000 signifie toujours aucune erreur, mais les autres valeurs viennent de l'éditeur du SMSC, de l'opérateur ou d'un agrégateur intermédiaire. Certains SMSC transmettent les causes d'erreur GSM MAP (par exemple, l'erreur MAP 1 correspond à un abonné inconnu et la 27 à un abonné absent), d'autres utilisent leur propre table.

Si l'accusé contient le TLV network_error_code (0x0423), il est plus fiable : son premier octet indique le type de réseau (3 pour GSM) et les deux suivants le code d'erreur. Un accusé DELIVRD avec un err non nul est incohérent et mérite d'être signalé à votre fournisseur ; le décodeur le met en évidence.

Erreurs command_status et accusés de réception

SMPP signale les problèmes à deux moments. Le command_status de submit_sm_resp arrive en quelques millisecondes et indique si le SMSC a accepté votre requête ; 0x00000000 (ESME_ROK) signifie accepté, pas délivré. L'accusé de réception arrive de quelques secondes à quelques jours plus tard et donne le résultat final.

Les valeurs command_status sont définies à la section 5.1.3 de SMPP v3.4. Les plus fréquentes en production sont 0x00000058 ESME_RTHROTTLED (vous dépassez le débit convenu : ralentissez et réessayez avec un backoff exponentiel), 0x00000014 ESME_RMSGQFUL (file pleine : temporisez), 0x0000000A et 0x0000000B (adresse source ou destination invalide) et 0x0000000D ou 0x0000000E (échec du bind ou mot de passe erroné). Les valeurs 0x00000400 à 0x000004FF sont réservées aux erreurs propres à l'éditeur du SMSC : interrogez votre fournisseur.

Dates, fuseaux horaires et délai de livraison

Les dates des accusés suivent le format AAMMJJhhmm, et beaucoup de SMSC ajoutent les secondes (AAMMJJhhmmss). Aucun fuseau horaire n'est indiqué : l'heure est celle de l'horloge du SMSC, généralement UTC. Le décodeur affiche les dates telles quelles et calcule le délai comme done date moins submit date, ce qui reste juste tant que les deux proviennent de la même horloge.

Le délai est un bon indicateur de qualité. Un OTP vers un téléphone joignable aboutit généralement en quelques secondes. De longs délais suivis d'EXPIRED signalent des téléphones éteints ou en itinérance, et une done date antérieure à la submit date indique des horloges désaccordées. Des dates à la minute ne mesurent pas un délai inférieur à la minute : privilégiez les SMSC qui envoient les secondes.

Traiter les accusés de façon fiable en production

Répondez à chaque deliver_sm par un deliver_sm_resp, même si votre traitement échoue, sinon le SMSC le renvoie et peut brider le bind. Stockez l'accusé brut, puis traitez-le de façon asynchrone et idempotente par identifiant de message, car les accusés peuvent arriver en double ou dans le désordre : un ENROUTE tardif ne doit jamais écraser un DELIVRD.

Si vous préférez ne pas analyser d'accusés, notre API SMS REST fournit les mêmes informations sous forme de statuts webhook normalisés, et les accusés manqués peuvent être renvoyés avec POST /sms/resendDlr. Des binds SMPP sur TLS sont disponibles pour les gros volumes et les revendeurs.

Questions sur les accusés de réception

Que signifie stat:DELIVRD dans un accusé de réception SMS ?

DELIVRD est l'état SMPP « délivré » : le SMSC a la confirmation que le message est arrivé sur le téléphone du destinataire. Cela ne veut pas dire qu'il a été ouvert ou lu ; le SMS classique n'a pas d'accusé de lecture. Dans nos webhooks, il correspond à DELIVERED.

Quelle différence entre UNDELIV, EXPIRED et REJECTD ?

UNDELIV signifie que le réseau n'a pas pu remettre le message, par exemple parce que le numéro est invalide ou inactif. EXPIRED signifie que les tentatives ont duré jusqu'à la fin de la période de validité, en général parce que le téléphone était éteint ou hors couverture. REJECTD signifie que le réseau ou un pare-feu a refusé le message, par exemple pour un identifiant d'expéditeur non enregistré ou un contenu bloqué.

Que signifie ACCEPTD dans un DLR SMPP ?

Dans la spécification SMPP v3.4, ACCEPTD signifie que le message a été lu manuellement par le service client pour le compte de l'abonné. En pratique, la plupart des SMSC et agrégateurs l'utilisent comme accusé intermédiaire indiquant que le réseau a accepté le message ; un accusé final DELIVRD ou d'échec suit.

Qu'est-ce que l'erreur SMPP 0x00000058 ?

0x00000058 correspond à ESME_RTHROTTLED : vous avez envoyé plus de messages par seconde que votre bind ne l'autorise. L'erreur est temporaire. Réduisez votre débit, gardez une fenêtre raisonnable de submit_sm en attente et réessayez les messages refusés avec un backoff exponentiel plutôt qu'immédiatement.

Que signifie err:000 et où trouver les autres codes err ?

err:000 signifie aucune erreur. Les valeurs err non nulles ne sont pas définies par la spécification SMPP ; elles viennent de l'éditeur du SMSC, de l'opérateur ou d'un agrégateur, et certaines reprennent les causes d'erreur GSM MAP. Demandez sa table d'erreurs à votre fournisseur et consultez le TLV network_error_code s'il est présent.

Quel format de date utilise un accusé de réception SMPP ?

submit date et done date utilisent le format AAMMJJhhmm, par exemple 2610101201 pour le 10 octobre 2026 à 12 h 01. Beaucoup de SMSC ajoutent les secondes (AAMMJJhhmmss). Aucun fuseau horaire n'est inclus : c'est l'horloge du SMSC, généralement UTC.

Pourquoi n'ai-je pas reçu d'accusé de réception ?

Causes fréquentes : registered_delivery n'est pas à 1 dans submit_sm, un bind émetteur seul sans bind récepteur, un réseau de destination qui ne renvoie pas d'accusés, ou un client qui n'acquitte pas les deliver_sm. Certaines routes ne renvoient que des accusés intermédiaires. Pour le trafic REST, vérifiez votre webhook et faites renvoyer les accusés avec /sms/resendDlr.

Le texte de mes accusés est-il envoyé quelque part ?

Non. Le décodeur fonctionne entièrement dans votre navigateur. Rien de ce que vous collez, y compris les identifiants ou le texte des messages, n'est envoyé à nos serveurs.

Plus d'outils gratuits