Codes d'erreur SMPP.
Chaque valeur command_status définie dans la spécification SMPP v3.4 — code hexadécimal, nom symbolique, signification en langage clair et cause probable et correction. Recherchez par code ou nom pour déboguer rapidement un échec de bind ou de submit_sm.
| Hexadécimal | Nom symbolique | Signification et cause probable / correction |
|---|---|---|
| 0x00000000 | ESME_ROK | Aucune erreur. La PDU a été acceptée. Pour submit_sm, cela signifie seulement que le SMSC a pris en charge le message, pas qu'il a été livré — suivez la livraison via l'accusé de réception (DLR) dans deliver_sm. |
| 0x00000001 | ESME_RINVMSGLEN | Longueur du message invalide. short_message ou message_payload est trop long ou vide pour l'encodage utilisé. Segmentez le contenu long ou utilisez le TLV message_payload ; vérifiez la cohérence entre data_coding et la longueur en octets. |
| 0x00000002 | ESME_RINVCMDLEN | Longueur de commande invalide. Le command_length de l'en-tête de la PDU ne correspond pas au nombre d'octets réellement envoyés. Presque toujours un bug de l'encodeur de PDU côté client ou une erreur de découpage/tampon. |
| 0x00000003 | ESME_RINVCMDID | ID de commande invalide. Le command_id est inconnu ou non pris en charge par le SMSC. Vérifiez que vous envoyez une opération valide et la bonne version de SMPP. |
| 0x00000004 | ESME_RINVBNDSTS | Statut BIND incorrect pour la commande donnée. Opération non autorisée dans le mode de bind actuel — par exemple submit_sm sur un bind receiver, ou une requête avant la fin du bind. Établissez d'abord un bind transmitter ou transceiver. |
| 0x00000005 | ESME_RALYBND | L'ESME est déjà dans un état de bind. Un second bind a été émis sur une session déjà liée. Réutilisez la session existante ou effectuez un unbind avant de relier. |
| 0x00000006 | ESME_RINVPRTFLG | Indicateur de priorité invalide. priority_flag est hors de la plage 0–3 acceptée par le SMSC. Utilisez une valeur prise en charge (généralement 0). |
| 0x00000007 | ESME_RINVREGDLVFLG | Indicateur de livraison enregistrée invalide. registered_delivery contient une valeur non prise en charge. Utilisez un masque de bits accepté par le SMSC (par ex. 0x01 pour demander un accusé de réception final). |
| 0x00000008 | ESME_RSYSERR | Erreur système. Échec générique côté SMSC empêchant le traitement. Transitoire — réessayez avec un backoff ; si persistant, contactez le fournisseur. |
| 0x0000000A | ESME_RINVSRCADR | Adresse source invalide. source_addr (l'identifiant d'expéditeur) est malformé ou non autorisé — mauvaise longueur, caractères illégaux, ou expéditeur alphanumérique non enregistré. Enregistrez ou autorisez l'expéditeur. |
| 0x0000000B | ESME_RINVDSTADR | Adresse de destination invalide. destination_addr est malformée ou non routable — format MSISDN incorrect, indicatif pays manquant, ou plage bloquée. Normalisez au format E.164. |
| 0x0000000C | ESME_RINVMSGID | ID de message invalide. Le message_id dans un query_sm, cancel_sm ou replace_sm ne correspond à aucun message connu. Utilisez l'ID exact renvoyé dans submit_sm_resp. |
| 0x0000000D | ESME_RBINDFAIL | Échec du bind. La demande de bind a été rejetée pour une raison autre que les identifiants — par ex. IP non autorisée, TLS requis, ou type de bind non permis pour ce compte. |
| 0x0000000E | ESME_RINVPASWD | Mot de passe invalide. Le mot de passe de la PDU de bind est incorrect ou expiré. Vérifiez les identifiants ; notez que le champ est limité à 8 octets en SMPP 3.4. |
| 0x0000000F | ESME_RINVSYSID | ID système invalide. Le system_id (nom d'utilisateur) est inconnu du SMSC. Vérifiez l'identifiant de compte et son activation. |
| 0x00000011 | ESME_RCANCELFAIL | Échec de Cancel SM. cancel_sm n'a pas pu supprimer le message — il a peut-être déjà été livré ou a expiré. Rien à réessayer. |
| 0x00000013 | ESME_RREPLACEFAIL | Échec de Replace SM. replace_sm n'a pas pu mettre à jour le message, généralement parce qu'il a déjà quitté la file. Soumettez un nouveau message à la place. |
| 0x00000014 | ESME_RMSGQFUL | File d'attente des messages pleine. La file de stockage-retransmission du SMSC est saturée. Ralentissez le débit de soumission et réessayez avec un backoff. |
| 0x00000015 | ESME_RINVSERTYP | Type de service invalide. La valeur de service_type n'est pas reconnue ou n'est pas autorisée. Laissez-la nulle ou utilisez une valeur convenue avec le fournisseur. |
| 0x00000033 | ESME_RINVNUMDESTS | Nombre de destinations invalide. number_of_dests dans une PDU submit_multi est hors limites. Restez dans la limite de destinations par PDU du SMSC. |
| 0x00000034 | ESME_RINVDLNAME | Nom de liste de diffusion invalide. La liste de diffusion référencée dans submit_multi n'existe pas sur le SMSC. Créez la liste ou envoyez à des adresses explicites. |
| 0x00000040 | ESME_RINVDESTFLAG | Indicateur de destination invalide. Dans submit_multi, le dest_flag d'une entrée n'est ni une adresse SME (1) ni une liste de diffusion (2). Corrigez l'indicateur par destination. |
| 0x00000042 | ESME_RINVSUBREP | Demande de « soumission avec remplacement » invalide. replace_if_present_flag a été défini sur une opération qui ne le prend pas en charge, ou combiné avec des listes de diffusion. Retirez l'indicateur. |
| 0x00000043 | ESME_RINVESMCLASS | Données du champ esm_class invalides. esm_class contient une combinaison non prise en charge — par ex. un bit UDHI ou d'accusé de réception rejeté par le SMSC. Revérifiez les bits de mode/type du message. |
| 0x00000044 | ESME_RCNTSUBDL | Impossible de soumettre à la liste de diffusion. Le compte n'est pas autorisé à soumettre à la liste de diffusion indiquée. Utilisez l'adressage direct ou demandez l'autorisation. |
| 0x00000045 | ESME_RSUBMITFAIL | Échec de submit_sm ou submit_multi. Échec générique de soumission côté SMSC. Souvent transitoire (routage/capacité) — réessayez avec un backoff ; inspectez les TLV pour une raison plus précise. |
| 0x00000048 | ESME_RINVSRCTON | TON d'adresse source invalide. source_addr_ton n'est pas valide pour le format de l'expéditeur — par ex. TON 5 (alphanumérique) requis pour un expéditeur textuel, mais un TON numérique a été envoyé. |
| 0x00000049 | ESME_RINVSRCNPI | NPI d'adresse source invalide. source_addr_npi est invalide ou incohérent avec le TON. Utilisez NPI 0 avec les expéditeurs alphanumériques et NPI 1 (E.164) pour les MSISDN. |
| 0x00000050 | ESME_RINVDSTTON | TON d'adresse de destination invalide. dest_addr_ton est invalide pour la destination. Utilisez TON 1 (international) avec un MSISDN au format E.164. |
| 0x00000051 | ESME_RINVDSTNPI | NPI d'adresse de destination invalide. dest_addr_npi est invalide ou incohérent avec le TON. NPI 1 (ISDN/E.164) est la valeur habituelle pour les numéros mobiles. |
| 0x00000053 | ESME_RINVSYSTYP | Champ system_type invalide. La valeur de system_type dans la PDU de bind n'est pas acceptée. Laissez-la nulle ou utilisez la valeur exacte assignée par le fournisseur. |
| 0x00000054 | ESME_RINVREPFLAG | Indicateur replace_if_present invalide. replace_if_present_flag est défini sur une valeur autre que 0 ou 1. Envoyez un indicateur booléen valide. |
| 0x00000055 | ESME_RINVNUMMSGS | Nombre de messages invalide. Le champ sm_count / nombre de messages est hors limites. Corrigez la valeur dans la PDU. |
| 0x00000058 | ESME_RTHROTTLED | Erreur de limitation — limite de messages dépassée. Vous soumettez plus vite que le débit autorisé pour le compte (messages par seconde). Ralentissez votre boucle de soumission et réessayez avec un backoff. Condition transitoire et réessayable. |
| 0x00000061 | ESME_RINVSCHED | Heure de livraison planifiée invalide. schedule_delivery_time est malformé ou dans le passé. Utilisez le format d'heure SMPP absolu/relatif (YYMMDDhhmmsstnnp) ou laissez le champ nul. |
| 0x00000062 | ESME_RINVEXPIRY | Période de validité du message invalide. validity_period est malformée ou hors de la fenêtre autorisée. Utilisez le format d'heure SMPP ou laissez le champ nul pour la valeur par défaut du SMSC. |
| 0x00000063 | ESME_RINVDFTMSGID | Message prédéfini invalide ou introuvable. sm_default_msg_id référence un message prédéfini que le SMSC ne possède pas. Envoyez le texte complet ou un ID prédéfini valide. |
| 0x00000064 | ESME_RX_T_APPN | Code d'erreur applicatif temporaire côté récepteur ESME. Renvoyé par votre ESME (ou un système en amont) pour signaler un échec applicatif temporaire lors du traitement de deliver_sm/data_sm. Le SMSC peut retenter la livraison plus tard. |
| 0x00000065 | ESME_RX_P_APPN | Code d'erreur applicatif permanent côté récepteur ESME. L'application réceptrice rejette définitivement le message. Le SMSC ne retentera pas — corrigez le gestionnaire en aval ou la raison du rejet. |
| 0x00000066 | ESME_RX_R_APPN | Code d'erreur de rejet de message côté récepteur ESME. L'application réceptrice demande au SMSC de rejeter le message. Utilisé pour refuser un contenu entrant spécifique. |
| 0x00000067 | ESME_RQUERYFAIL | Échec de la requête query_sm. La requête de statut n'a pas pu aboutir — le message_id est peut-être inconnu ou a expiré du stockage du SMSC. Vérifiez l'ID. |
| 0x000000C0 | ESME_RINVOPTPARSTREAM | Erreur dans la partie optionnelle du corps de la PDU. Le flux TLV (paramètre optionnel) est malformé — longueur incorrecte ou tronquée. Corrigez l'encodeur de TLV de votre client. |
| 0x000000C1 | ESME_ROPTPARNOTALLWD | Paramètre optionnel non autorisé. Un TLV a été envoyé alors que cette opération ou ce SMSC ne le permet pas. Retirez le paramètre optionnel non pris en charge. |
| 0x000000C2 | ESME_RINVPARLEN | Longueur de paramètre invalide. La longueur déclarée d'un TLV ne correspond pas à sa valeur. Corrigez le champ de longueur du paramètre optionnel. |
| 0x000000C3 | ESME_RMISSINGOPTPARAM | Paramètre optionnel attendu manquant. Un TLV requis pour cette opération n'a pas été fourni (par ex. message_payload quand short_message est vide). Ajoutez le paramètre optionnel obligatoire. |
| 0x000000C4 | ESME_RINVOPTPARAMVAL | Valeur de paramètre optionnel invalide. Un TLV porte une valeur en dehors de son ensemble autorisé. Consultez la spécification SMPP pour les valeurs permises de ce paramètre. |
| 0x000000FE | ESME_RDELIVERYFAILURE | Échec de livraison (data_sm_resp). Utilisé avec data_sm pour indiquer que le message n'a pas pu être livré au combiné. Traitez-le comme un DLR en échec et examinez le réseau/la route. |
| 0x000000FF | ESME_RUNKNOWNERR | Erreur inconnue. Valeur générique lorsque le SMSC n'a pas de code spécifique. Réessayez une fois avec un backoff ; si cela persiste, signalez-le au fournisseur avec un exemple de PDU. |
Les valeurs non listées sont réservées. Selon la spécification SMPP v3.4 : 0x00000100–0x000003FF est réservé aux extensions du protocole SMPP, 0x00000400–0x000004FF aux erreurs spécifiques au fournisseur SMSC, et 0x00000500–0xFFFFFFFF est réservé. Les écarts individuels sous 0xFF (par ex. 0x09, 0x10) sont réservés par la norme.
La réponse courte
Qu'est-ce qu'un code d'erreur SMPP ?
Un code d'erreur SMPP est la valeur du champ command_status de chaque PDU de réponse SMPP. Il indique au client (ESME) si le SMSC a accepté l'opération — 0x00000000 (ESME_ROK) signifie succès, et toute valeur non nulle identifie pourquoi un bind, submit_sm, query_sm ou une autre requête a échoué. Les codes sont définis par la spécification SMPP v3.4 et sont cohérents sur tous les SMSC conformes.
Un submit_sm_resp réussi avec ESME_ROK confirme seulement que le SMSC a accepté le message pour traitement — la livraison finale au combiné est signalée séparément dans l'accusé de réception (deliver_sm). Traitez les erreurs au moment de la soumission et les erreurs au moment de la livraison comme deux couches distinctes.
Questions fréquentes
Qu'est-ce que command_status en SMPP ?
command_status est un champ de 4 octets dans l'en-tête de chaque PDU de réponse SMPP. Dans une PDU de requête, il est à zéro ; dans une réponse, il porte le résultat — 0x00000000 (ESME_ROK) pour le succès ou un code d'erreur non nul identifiant l'échec. C'est le signal principal que votre client utilise pour décider de réessayer, corriger la PDU, ou échouer.
Que signifie ESME_RTHROTTLED (0x00000058) ?
Cela signifie que vous soumettez des messages plus vite que le débit autorisé pour votre compte (messages par seconde). Ralentissez votre boucle de soumission, appliquez un backoff exponentiel, et restez dans le débit convenu avec votre fournisseur. C'est une condition transitoire et réessayable.
Quelle est la différence entre ESME_RINVSRCADR et ESME_RINVDSTADR ?
ESME_RINVSRCADR (0x0000000A) signifie que l'adresse source — votre identifiant d'expéditeur — est malformée ou non autorisée, souvent un expéditeur alphanumérique non enregistré. ESME_RINVDSTADR (0x0000000B) signifie que le MSISDN de destination est malformé ou non routable. Normalisez les adresses au format E.164 et enregistrez les identifiants d'expéditeur si nécessaire.
ESME_ROK signifie-t-il que le message a été livré ?
Non. ESME_ROK sur submit_sm_resp confirme seulement que le SMSC a accepté le message pour traitement. La livraison finale au combiné est signalée plus tard dans l'accusé de réception (deliver_sm), qui porte son propre statut tel que DELIVRD, UNDELIV ou EXPIRED. Rapprochez toujours l'acceptation de soumission du DLR.
Quelles erreurs SMPP peuvent être réessayées en toute sécurité ?
Les codes transitoires côté système sont réessayables avec backoff : ESME_RSYSERR (0x08), ESME_RMSGQFUL (0x14), ESME_RTHROTTLED (0x58), ESME_RSUBMITFAIL (0x45) et ESME_RUNKNOWNERR (0xFF). Les erreurs de validation telles qu'adresses invalides, TON/NPI, longueur de message ou identifiants incorrects sont permanentes — corrigez la requête ou la configuration plutôt que de réessayer.
Ces codes sont-ils identiques sur tous les SMSC ?
Les codes 0x00000000–0x000000FF sont définis par la spécification SMPP v3.4 et sont cohérents sur tous les SMSC conformes. Les plages 0x00000400–0x000004FF sont réservées aux erreurs spécifiques au fournisseur, donc un SMSC donné peut y renvoyer des codes supplémentaires avec ses propres significations — vérifiez toujours la documentation de votre fournisseur pour ceux-ci.
La spécification derrière cet outil, dans la bibliothèque de référence.
SMSC de qualité opérateur sur SMPP + SS7.
REST + SMPP 3.4, authentification par jeton Bearer, webhooks de remise.
Démarrage rapide, TypeScript SDK, références et outils.
Vous établissez une session SMPP ?
BroadNet propose des liaisons SMPP 3.4 directes avec un débit prévisible et une gestion claire de command_status. Parlez à notre équipe d'une connexion.