Un bind authentifie et ouvre une session SMPP. bind_transmitter n'autorise que l'émission, bind_receiver que la réception, et bind_transceiver les deux sur une même connexion. L'ESME fournit system_id, password et system_type ; le SMSC répond par un bind_resp. Un bind réussi fait passer la session à un état lié jusqu'à l'unbind ou la déconnexion.
bind_transceiverOuvrir et authentifier la sessionbind_transceiver_respSession acceptéesubmit_smEnvoyer un messagesubmit_sm_respAccepté, ID du message renvoyédeliver_smAccusé de réception ou message entrantdeliver_sm_respConfirméenquire_linkKeepalive en cas d'inactivité
Les trois types de bind
Le type de bind fixe le sens du trafic pour la session. Choisissez transmitter pour l'émission seule (submit MT), receiver pour la réception seule (MO et accusés de réception), ou transceiver pour porter les deux sens sur une seule connexion — le choix habituel en v3.4, car il divise par deux le nombre de connexions à maintenir.
| Opération | command_id | La session peut |
|---|---|---|
| bind_transmitter | 0x00000002 | Envoyer des messages (MT) uniquement |
| bind_receiver | 0x00000001 | Réception des messages/accusés (MO + DLR) uniquement |
| bind_transceiver | 0x00000009 | Envoi et réception sur une seule connexion |
Champs de la requête de bind
Le corps du bind porte les identifiants et les capacités déclarées de l'ESME. system_id et password authentifient le compte ; system_type catégorise éventuellement l'ESME ; interface_version déclare la version SMPP ; addr_ton, addr_npi et address_range permettent au SMSC de router le trafic mobile-originated vers ce bind. Un address_range mal renseigné bloque silencieusement le routage MO/DLR sur un bind receiver ou transceiver — un bug d'intégration fréquent.
| Champ | Type | Max | Notes |
|---|---|---|---|
| system_id | C-Octet String | 16 | Identifiant de compte/connexion |
| password | C-Octet String | 9 | Mot de passe du compte |
| system_type | C-Octet String | 13 | Catégorie ESME facultative (souvent vide) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | Type de numéro pour l'acheminement du MO vers cet ESME |
| addr_npi | Integer | 1 | Indicateur de plan de numérotation |
| address_range | C-Octet String | 41 | Adresse/regex que le SMSC achemine vers ce bind |
Réponse au bind
Le SMSC répond par le bind_resp correspondant (par exemple bind_transceiver_resp, 0x80000009). command_status vaut ESME_ROK en cas de succès, ou une erreur telle que ESME_RINVPASWD (mot de passe invalide), ESME_RINVSYSID (system ID invalide) ou ESME_RBINDFAIL. Le corps renvoie le system_id du SMSC et, en v3.4+, un TLV optionnel sc_interface_version indiquant à l'ESME la version réellement prise en charge par le SMSC.
ESME → SMSC bind_transceiver seq=1 system_id=acme password=****
SMSC → ESME bind_transceiver_resp seq=1 status=ESME_ROK system_id=smsc01
(session now BOUND_TRX — submit_sm and deliver_sm may flow)États de session
Une session SMPP est une petite machine à états. Elle démarre à OPEN après la connexion TCP, passe à un état BOUND sur un bind réussi, puis revient à UNBOUND puis CLOSED à l'unbind ou à la déconnexion. Émettre une opération illégale pour l'état courant renvoie ESME_RINVBNDSTS (état de bind incorrect). Un double bind sur une même connexion renvoie ESME_RALYBND (déjà lié).
| État | Signification |
|---|---|
| OPEN | Connecté en TCP, pas encore lié (bind) |
| BOUND_TX | Lié en tant qu'émetteur — peut soumettre |
| BOUND_RX | Lié en tant que récepteur — peut recevoir |
| BOUND_TRX | Lié en tant qu'émetteur-récepteur — peut soumettre et recevoir |
| UNBOUND | Unbind émis, en attente de fermeture |
| CLOSED | Connexion interrompue |
Unbind et outbind
unbind (0x00000006) demande une fermeture gracieuse de la session ; le pair répond unbind_resp et les deux côtés ferment la connexion TCP. outbind (0x0000000B) est le cas en sens inverse : le SMSC demande à un ESME en écoute d'initier un bind receiver, utilisé lorsque le SMSC doit remettre du trafic MO à un ESME qui attend normalement les connexions.
Questions fréquemment posées
Faut-il utiliser des paires transmitter/receiver ou un transceiver ?
Privilégiez un transceiver quand le fournisseur l'autorise — une seule connexion porte l'émission et la réception, ce qui divise par deux le nombre de connexions et simplifie la corrélation des accusés de réception. N'utilisez des binds transmitter et receiver séparés que lorsque le fournisseur exige une séparation directionnelle.
À quoi sert system_type ?
system_type identifie éventuellement la catégorie de l'ESME (par exemple une classe d'application donnée). De nombreux fournisseurs le laissent vide. Ne le renseignez qu'avec la valeur exacte provisionnée par le fournisseur, car certains routent en fonction de ce champ.
Pourquoi mon bind receiver ne reçoit-il pas d'accusés de réception ?
La cause la plus fréquente est une incohérence d'address_range / addr_ton / addr_npi : le SMSC route le trafic MO et DLR vers le bind dont l'address_range correspond, si bien qu'une valeur erronée les retient silencieusement. Confirmez les valeurs exactes provisionnées auprès du fournisseur.
Que signifie ESME_RALYBND ?
ESME_RALYBND (0x00000005) signifie que l'ESME est déjà dans un état lié et a tenté un nouveau bind sur la même session. Faites exactement un bind par connexion ; en cas de bind échoué, ouvrez une nouvelle connexion plutôt que de rebinder l'ancienne.
Combien de binds simultanés puis-je ouvrir ?
C'est une limite commerciale fixée par votre fournisseur, pas par le protocole. Ouvrir plus de binds que provisionné est une cause fréquente de throttling ou de suspension de compte — convenez du nombre de binds et du TPS par bind par écrit avant de monter en charge.
Spécifications sources
Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.