# Opérations de bind SMPP et états de session

> 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.

- URL canonique: https://www.broadnet.me/fr/reference/smpp-bind-operations
- Langue: fr
- Dernière mise à jour: 2026-07-18
- Éditeur: BroadNet (https://www.broadnet.me)

Comment une session SMPP s'authentifie : bind_transmitter, bind_receiver et bind_transceiver, les champs system_id/password/system_type, interface_version, les états de session et unbind.

## 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érations de bind*

| 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.

*Corps de bind_transmitter/receiver/transceiver*

| 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.

*Échange de bind transceiver réussi*

```text
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é).

*États de session SMPP*

| É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équentes

### 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.

## Sources

- [SMPP v3.4 specification — §4.1 bind operations](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## Voir aussi

- [Référence submit_sm SMPP](https://www.broadnet.me/fr/reference/smpp-submit-sm)
- [enquire_link et throttling SMPP](https://www.broadnet.me/fr/reference/smpp-enquire-link-throttling)
- [Checklist d'intégration SMPP (guide)](https://www.broadnet.me/fr/guides/smpp-integration-checklist)
- [Passerelle SMSC (opérateurs)](https://www.broadnet.me/fr/operators/smsc-gateway)
- [Codes d'erreur command_status SMPP](https://www.broadnet.me/fr/reference/smpp-command-status-errors)
