command_status est le champ d'en-tête de 4 octets qui rapporte le résultat d'une opération. Dans une requête il vaut 0 (ESME_ROK) ; dans une réponse il porte un code d'erreur ESME_R*. 0x00000000 est un succès ; les valeurs non nulles indiquent des fautes précises comme un mot de passe invalide, une limitation de débit ou une file de messages pleine.
Comment fonctionne command_status
Chaque PDU de réponse renvoie le sequence_number de la requête et positionne command_status au résultat. ESME_ROK (0) signifie succès. Toute autre valeur est une erreur dont le code numérique correspond à une constante nommée ESME_R* de la spécification. Les codes 0x00000100–0x000003FF sont réservés aux extensions SMPP et 0x00000400–0x000004FF aux erreurs propres au fournisseur de SMSC ; gérez donc toujours les codes inconnus avec souplesse.
Les codes que vous verrez vraiment
Un petit ensemble de codes couvre l'essentiel du traitement réel. Regroupez-les par réaction : réémission après temporisation (throttling, file pleine, erreur système), correction de la requête (adresse invalide, TON/NPI, data_coding, longueur de message), et fatal pour la session (mot de passe ou system id invalide, échec de bind).
| Valeur | Nom | Signification | Réaction typique |
|---|---|---|---|
| 0x00000000 | ESME_ROK | Aucune erreur | Succès |
| 0x00000001 | ESME_RINVMSGLEN | Longueur du message invalide | Corriger la charge utile / segment |
| 0x00000005 | ESME_RALYBND | Bind déjà établi | Ne pas refaire de bind ; réutiliser la session |
| 0x0000000A | ESME_RINVSRCADR | Adresse source invalide | Corriger l'expéditeur / TON / NPI |
| 0x0000000B | ESME_RINVDSTADR | Adresse de destination invalide | Corriger le MSISDN du destinataire |
| 0x0000000D | ESME_RBINDFAIL | Échec du bind | Temporiser (backoff), vérifier les identifiants |
| 0x0000000E | ESME_RINVPASWD | Mot de passe invalide | Erreur fatale — corriger les identifiants |
| 0x0000000F | ESME_RINVSYSID | ID système invalide | Erreur fatale — corriger les identifiants |
| 0x00000014 | ESME_RMSGQFUL | File d'attente de messages pleine | Temporiser (backoff) et réessayer |
| 0x00000043 | ESME_RINVESMCLASS | esm_class invalide | Corriger les bits esm_class |
| 0x00000058 | ESME_RTHROTTLED | Limitation de débit — débit dépassé | Ralentir, backoff avec gigue (jitter) |
| 0x00000062 | ESME_RINVEXPIRY | validity_period invalide | Corriger le format de validité |
| 0x000000FE | ESME_RDELIVERYFAILURE | Échec de la livraison (data_sm) | Inspecter / réessayer conformément à la politique |
| 0x000000FF | ESME_RUNKNOWNERR | Erreur inconnue | Journalisation, alerte, nouvelle tentative avec prudence |
Plages réservées et propres au fournisseur
Tous les codes que vous recevez ne sont pas dans la spécification centrale. Celle-ci réserve 0x00000100–0x000003FF à un usage SMPP futur et 0x00000400–0x000004FF aux codes propres au SMSC ; votre fournisseur peut donc renvoyer une valeur que seule sa documentation explique. Faites correspondre les codes propres au fournisseur à une taxonomie interne normalisée (numéro invalide, bloqué, throttled, échec temporaire) pour que la qualité reste comparable entre routes.
| Plage | Réservé à |
|---|---|
| 0x00000100 – 0x000003FF | Extensions du protocole SMPP |
| 0x00000400 – 0x000004FF | Erreurs spécifiques au fournisseur SMSC |
| 0x00000500 – 0xFFFFFFFF | Réservé |
Questions fréquemment posées
Que signifie ESME_RTHROTTLED et comment le gérer ?
ESME_RTHROTTLED (0x00000058) signifie que vous avez dépassé votre débit de messages autorisé. Arrêtez d'augmenter la charge, suspendez les submits et temporisez avec gigue avant de réessayer. Persister au même débit risque de faire tomber le bind par le fournisseur.
ESME_RINVPASWD est-il récupérable ?
Non, pas à l'exécution. ESME_RINVPASWD (0x0000000E) indique des identifiants erronés. Ne rebouclez pas le bind à chaud ; corrigez la configuration system_id/password et reconnectez-vous. Des binds échoués répétés peuvent déclencher un blocage d'IP.
Quelle différence entre ESME_RMSGQFUL et ESME_RTHROTTLED ?
ESME_RMSGQFUL (0x00000014) signifie que la file du SMSC est temporairement pleine ; ESME_RTHROTTLED (0x00000058) signifie que vous avez dépassé votre limite de débit. Les deux appellent une temporisation, mais le throttling concerne votre TPS tandis que la file pleine concerne la capacité du SMSC.
J'ai reçu un code d'erreur absent de la spécification — pourquoi ?
Le SMPP réserve 0x400–0x4FF aux codes propres au fournisseur de SMSC ; votre fournisseur peut donc renvoyer une valeur documentée par lui seul. Consultez sa table d'erreurs et faites-la correspondre à votre taxonomie interne.
Spécifications sources
Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.