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.
bind_transceiverAprire e autenticare la sessionebind_transceiver_respSessione accettatasubmit_smInviare un messaggiosubmit_sm_respAccettato, ID messaggio restituitodeliver_smRicevuta di consegna o messaggio in entratadeliver_sm_respConfermatoenquire_linkKeepalive durante l'inattività
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.
| 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.
| 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.
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).
| 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.
Specifiche della fonte
Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.