# Operazioni di bind e stati della sessione SMPP

> Un bind autentica e apre una sessione SMPP. bind_transmitter consente solo l'invio, bind_receiver solo la ricezione e bind_transceiver entrambi su una sola connessione. L'ESME fornisce system_id, password e system_type; l'SMSC risponde con un bind_resp. Un bind riuscito porta la sessione in stato bound fino all'unbind o alla disconnessione.

- URL canonico: https://www.broadnet.me/it/reference/smpp-bind-operations
- Lingua: it
- Ultimo aggiornamento: 2026-07-18
- Editore: BroadNet (https://www.broadnet.me)

Come si autentica una sessione SMPP: bind_transmitter, bind_receiver e bind_transceiver, i campi system_id/password/system_type, interface_version, gli stati della sessione e l'unbind.

## I tre tipi di bind

Il tipo di bind fissa la direzione del traffico per la sessione. Scegliete transmitter per il solo traffico in uscita (submit MT), receiver per il solo traffico in ingresso (MO e ricevute di consegna) o transceiver per trasportare entrambe le direzioni su un'unica connessione — la scelta abituale in v3.4, poiché dimezza il numero di connessioni da mantenere.

*Operazioni di bind*

| Operazione | command_id | La sessione può |
|---|---|---|
| bind_transmitter | 0x00000002 | Solo invio di messaggi (MT) |
| bind_receiver | 0x00000001 | Solo ricezione di messaggi / conferme di consegna (MO + DLR) |
| bind_transceiver | 0x00000009 | Sia l'invio che la ricezione avvengono tramite un'unica connessione |

## Campi della richiesta di bind

Il body del bind trasporta le credenziali e le capacità dichiarate dall'ESME. system_id e password autenticano l'account; system_type categorizza opzionalmente l'ESME; interface_version dichiara la versione SMPP; addr_ton, addr_npi e address_range consentono all'SMSC di instradare verso questo bind il traffico mobile-originated. Un address_range non corrispondente blocca silenziosamente l'instradamento di MO/DLR su un bind receiver o transceiver — un errore di integrazione frequente.

*Body di bind_transmitter/receiver/transceiver*

| Campo | Tipo | Max | Note |
|---|---|---|---|
| system_id | C-Octet String | 16 | Identificativo dell'account/di accesso |
| password | C-Octet String | 9 | Password dell'account |
| system_type | C-Octet String | 13 | Categoria ESME facoltativa (spesso vuota) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | Tipo di numero per l'instradamento MO verso questo ESME |
| addr_npi | Integer | 1 | Indicatore del piano di numerazione |
| address_range | C-Octet String | 41 | Indirizzo/regex che l'SMSC instrada a questo bind |

## Risposta di bind

L'SMSC risponde con il bind_resp corrispondente (ad esempio bind_transceiver_resp, 0x80000009). command_status è ESME_ROK in caso di successo oppure un errore come ESME_RINVPASWD (password non valida), ESME_RINVSYSID (system ID non valido) o ESME_RBINDFAIL. Il body restituisce il system_id dell'SMSC e, a partire dalla v3.4, un TLV opzionale sc_interface_version che comunica all'ESME quale versione l'SMSC supporta effettivamente.

*Scambio di bind transceiver riuscito*

```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)
```

## Stati della sessione

Una sessione SMPP è una piccola macchina a stati. Parte da OPEN dopo la connessione TCP, passa a uno stato BOUND con un bind riuscito e torna a UNBOUND e poi CLOSED con l'unbind o la disconnessione. L'invio di un'operazione illecita per lo stato corrente restituisce ESME_RINVBNDSTS (stato di bind non corretto). Un doppio bind sulla stessa connessione restituisce ESME_RALYBND (già in bind).

*Stati della sessione SMPP*

| Stato | Significato |
|---|---|
| OPEN | TCP connesso, bind non ancora eseguito |
| BOUND_TX | Associato come transmitter — può inviare |
| BOUND_RX | Associato come receiver — può ricevere |
| BOUND_TRX | Associato come transceiver — può inviare e ricevere |
| UNBOUND | Unbind inviato, in attesa di chiusura |
| CLOSED | Connessione abbattuta |

## Unbind e outbind

unbind (0x00000006) richiede una chiusura ordinata della sessione; il peer risponde con unbind_resp ed entrambe le parti chiudono la connessione TCP. outbind (0x0000000B) è il caso in direzione inversa: l'SMSC chiede a un ESME in ascolto di avviare un bind receiver, usato quando l'SMSC deve consegnare traffico MO a un ESME che normalmente resta in attesa di connessioni.

## Domande frequenti

### Meglio coppie transmitter/receiver o un transceiver?

Preferite un transceiver dove il provider lo consente — un'unica connessione trasporta sia il submit sia la ricezione, dimezzando il numero di connessioni e semplificando la correlazione delle ricevute di consegna. Usate bind transmitter e receiver separati solo quando il provider richiede la separazione direzionale.

### A cosa serve system_type?

system_type identifica opzionalmente la categoria dell'ESME (ad esempio una specifica classe applicativa). Molti provider lo lasciano vuoto. Impostatelo solo al valore esatto fornito dal provider, poiché alcuni instradano in base a esso.

### Perché il mio bind receiver non riceve le ricevute di consegna?

La causa più comune è una discrepanza in address_range / addr_ton / addr_npi: l'SMSC instrada il traffico MO e DLR verso il bind il cui address_range corrisponde, quindi un valore errato le trattiene silenziosamente. Verificate con il provider i valori esatti configurati.

### Cosa significa ESME_RALYBND?

ESME_RALYBND (0x00000005) indica che l'ESME è già in stato bound e ha tentato un nuovo bind sulla stessa sessione. Eseguite esattamente un bind per connessione; se un bind è fallito, aprite una nuova connessione anziché ripetere il bind su quella vecchia.

### Quanti bind simultanei posso aprire?

È un limite commerciale fissato dal vostro provider, non dal protocollo. Aprire più bind di quanti ne siano stati assegnati è una causa frequente di throttling o sospensione dell'account — concordate per iscritto il numero di bind e il TPS per bind prima di scalare.

## Fonti

- [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)

## Correlati

- [Riferimento submit_sm di SMPP](https://www.broadnet.me/it/reference/smpp-submit-sm)
- [SMPP enquire_link e throttling](https://www.broadnet.me/it/reference/smpp-enquire-link-throttling)
- [Checklist di integrazione SMPP (guida)](https://www.broadnet.me/it/guides/smpp-integration-checklist)
- [Gateway SMSC (operatori)](https://www.broadnet.me/it/operators/smsc-gateway)
- [Codici di errore command_status di SMPP](https://www.broadnet.me/it/reference/smpp-command-status-errors)
