BroadNet
SMPPOperazioni

SMPP submit_sm: ogni campo obbligatorio

Aggiornato il 4 min di letturaBasato su standard
Risposta diretta

submit_sm (command_id 0x00000004) invia un messaggio mobile-terminated dall'ESME all'SMSC. Il suo body è una sequenza fissa di campi obbligatori — indirizzamento (TON/NPI + address), esm_class, protocol_id, priority_flag, pianificazione, registered_delivery, data_coding, sm_length e short_message — opzionalmente seguita da TLV. submit_sm_resp restituisce il message_id dell'SMSC.

DiagrammaUna sessione SMPP tra la vostra piattaforma e BroadNet
La vostra piattaforma (ESME)
BroadNet SMSC
Una connessione TCP/TLS persistente
  1. bind_transceiverAprire e autenticare la sessione
  2. bind_transceiver_respSessione accettata
  3. submit_smInviare un messaggio
  4. submit_sm_respAccettato, ID messaggio restituito
  5. deliver_smRicevuta di consegna o messaggio in entrata
  6. deliver_sm_respConfermato
  7. enquire_linkKeepalive durante l'inattività
§01

L'ordine completo dei campi obbligatori

Il body di submit_sm è una sequenza fissa e ordinata — non ci sono tag di campo, quindi l'ordine e la dimensione sono tutto. La tabella elenca tutti i parametri obbligatori nell'ordine di trasmissione. short_message può essere vuoto quando il testo è trasportato invece in un TLV message_payload; non popolate entrambi.

Parametri obbligatori di submit_sm (in ordine di trasmissione)
#CampoTipoNote
1service_typeC-Octet String (6)Categoria di servizio; solitamente vuota
2source_addr_tonInteger (1)Tipo di numero del mittente
3source_addr_npiInteger (1)Piano di numerazione del mittente
4source_addrC-Octet String (21)Indirizzo del mittente / ID alfanumerico
5dest_addr_tonInteger (1)Tipo di numero del destinatario
6dest_addr_npiInteger (1)Piano di numerazione del destinatario
7destination_addrC-Octet String (21)MSISDN del destinatario
8esm_classInteger (1)Modalità messaggio + tipo + flag UDHI
9protocol_idInteger (1)GSM TP-PID; solitamente 0
10priority_flagInteger (1)0 (normale) – 3 (massimo)
11schedule_delivery_timeC-Octet String (1|17)Vuoto = immediato
12validity_periodC-Octet String (1|17)Vuoto = predefinito SMSC
13registered_deliveryInteger (1)Richiedi la conferma di consegna
14replace_if_present_flagInteger (1)0 = no, 1 = sostituisci
15data_codingInteger (1)Codifica / DCS
16sm_default_msg_idInteger (1)ID del messaggio predefinito; solitamente 0
17sm_lengthInteger (1)Lunghezza di short_message (0–254)
18short_messageOctet String (0–254)Il payload del messaggio
§02

Indirizzamento: TON e NPI

source_addr e destination_addr trasportano ciascuno un Type of Number (TON) e un Numbering Plan Indicator (NPI). Per un MSISDN internazionale usate TON 1 (International) con NPI 1 (ISDN/E.164). Per un sender ID alfanumerico usate TON 5 (Alphanumeric) — source_addr contiene allora fino a 11 caratteri GSM-7. Un TON/NPI errato è una delle principali cause di traffico non consegnato o mal instradato.

Valori comuni di TON e NPI
TONSignificatoNPISignificato
0Sconosciuto0Sconosciuto
1Internazionale1ISDN (E.163/E.164)
2Nazionale3Dati (X.121)
3Specifico della rete4Telex (F.69)
4Numero di abbonato6Land Mobile (E.212)
5Alfanumerico8Nazionale
6Abbreviato9Privato
§03

esm_class

esm_class è un campo di bit che imposta la modalità di messaggistica, il tipo di messaggio e le funzionalità specifiche del GSM. Il bit più importante per i mittenti è UDHI (0x40): impostatelo quando short_message inizia con un User Data Header, ad esempio un header di concatenazione. Il bit 0x80 richiede il reply path GSM.

Significato dei bit di esm_class (selezione)
BitCampoValore → significato
1–0Modalità di messaggistica0 predefinito · 1 datagramma · 2 inoltra · 3 memorizza e inoltra
5–2Tipo di messaggio0 predefinito · 0x04 conferma di consegna · 0x08 ack di consegna · 0x10 ack utente
6UDHI0x40 = short_message begins with a UDH
7Percorso di risposta0x80 = set GSM reply path
§04

data_coding, registered_delivery e validità

data_coding seleziona la codifica del testo: 0x00 = predefinita dell'SMSC (di norma GSM 7-bit), 0x04 = binario a 8 bit, 0x08 = UCS-2 per Unicode. I due bit meno significativi di registered_delivery controllano le ricevute: 0 = nessuna, 1 = ricevuta al successo o fallimento finale, 2 = solo in caso di fallimento. validity_period e schedule_delivery_time usano la forma assoluta YYMMDDhhmmsstnnp o una forma relativa; una stringa vuota indica consegna immediata e validità predefinita dell'SMSC. Mantenete validity_period breve per gli OTP, così un codice ritardato scade invece di arrivare obsoleto.

data_coding — i valori che si usano davvero
ValoreCodifica
0x00Alfabeto predefinito SMSC (solitamente GSM a 7 bit)
0x03Latin-1 (ISO-8859-1)
0x04Binario a 8 bit (ottetto non specificato)
0x08UCS-2 (UTF-16BE) — Unicode
§05

La risposta

submit_sm_resp (0x80000004) restituisce command_status e, in caso di successo, un message_id (C-Octet String, fino a 65 caratteri) che l'SMSC assegna al messaggio. Conservatelo: è la chiave da confrontare con il receipted_message_id nella ricevuta di consegna. Attenzione alle discrepanze di formato — alcuni SMSC restituiscono l'id in esadecimale al submit e in decimale nel DLR, quindi normalizzate entrambi in fase di correlazione.

FAQ

Domande frequenti

Quali TON/NPI uso per un sender ID alfanumerico?

Usate source_addr_ton = 5 (Alphanumeric) e source_addr_npi = 0 (Unknown). source_addr contiene allora fino a 11 caratteri GSM-7. I sender ID alfanumerici sono solo di visualizzazione e non possono ricevere risposte.

Come richiedo una ricevuta di consegna in submit_sm?

Impostate registered_delivery = 1 per ottenere una ricevuta alla consegna o al fallimento finale, oppure 2 solo in caso di fallimento. Richiedete le ricevute solo dove le utilizzate effettivamente, poiché i DLR non letti sprecano throughput.

Qual è la lunghezza massima di short_message?

Il campo short_message contiene fino a 254 ottetti, con sm_length che ne indica il conteggio esatto. Per testi più lunghi, segmentate con un UDH su più PDU submit_sm oppure trasportate l'intero payload nel TLV message_payload invece che in short_message.

Posso impostare sia short_message sia message_payload?

No. Popolate l'uno o l'altro. I provider rifiutano una submit_sm che trasporta il messaggio sia nel campo obbligatorio short_message sia nel TLV message_payload.

Come invio un messaggio Unicode?

Impostate data_coding = 0x08 (UCS-2) e codificate il testo come UTF-16 big-endian in short_message. Un singolo SMS UCS-2 contiene 70 caratteri; il testo Unicode più lungo viene segmentato a 67 caratteri per parte.

Riferimenti

Specifiche della fonte

Gli standard pubblicati su cui si basa questa pagina. Si apre in una nuova scheda.

BNGestito dal team di ingegneri BroadNet·Servizi di messaggistica di livello carrier dal 2003
Mettilo sul filo

Realizzato con un vero binding SMPP e un'API REST.

Richiedi l'accesso di prova con chiavi di test reali: invia prima al tuo numero verificato, poi passa alla produzione in oltre 200 paesi una volta approvata l'identità del mittente e i percorsi.