How to configure the SMPP phone number fields
SMPP (Short Message Peer-to-Peer) is a protocol used by telecom systems to exchange SMS messages between SMSC (Short Message Service Centers) and ESMEs (External Short Messaging Entities). A key component of the protocol is how it encodes phone numbers (source and destination addresses) in the SMPP PDU (Protocol Data Unit).
Address Parameters in SMPP
The key fields used to define a phone number in SMPP are:
- addr_ton (Type of Number)
- addr_npi (Numbering Plan Indicator)
- address_range or source_addr/destination_addr
Type of Number (TON)
This field defines the format of the number. Common values include:
Value | TON | Description |
---|---|---|
0 | Unknown | Unknown format |
1 | International | Number includes country code |
2 | National | Local number format |
5 | Alphanumeric | Used for sender names like "MyCompany" |
Numbering Plan Indicator (NPI)
This field indicates the numbering format. Common values:
Value | NPI | Description |
---|---|---|
0 | Unknown | Unknown format |
1 | ISDN (E.164) | Standard international phone number format |
3 | Data | Data network (X.121) |
Encoding an Address
When encoding a phone number in SMPP, the system sends the number as a null-terminated string in ASCII, accompanied by the appropriate TON and NPI values.
Example:
Phone number: +14155552671 TON: 1 (International) NPI: 1 (ISDN/E.164) Encoded as: 31 34 31 35 35 35 35 32 36 37 31 00 (ASCII "14155552671" + NULL)
Example SMPP PDU
Below is an example of a submit_sm PDU that includes a destination number:
0000003F // Command Length (63 bytes) 00000004 // Command ID (submit_sm) 00000000 // Command Status 00000001 // Sequence Number 74657374 // service_type: "test" 01 // source_addr_ton: International 01 // source_addr_npi: ISDN 31323334 // source_addr: "1234" (ASCII) 00 // NULL terminator 01 // dest_addr_ton: International 01 // dest_addr_npi: ISDN 2B393138 // destination_addr: "+918123456789" (ASCII, without +) 31323334 35363738 3900 // NULL terminator 00 // esm_class 00 // protocol_id 00 // priority_flag 00 // schedule_delivery_time (null) 00 // validity_period (null) 00 // registered_delivery 00 // replace_if_present_flag 00 // data_coding (default GSM) 00 // sm_default_msg_id 0D // sm_length (13) 48656C6C // Short message ("Hello, World!") 6F2C2057 6F726C64 2100
Alphanumeric Sender Example
When using an alphanumeric sender name (common for one-way bulk SMS):
Sender: "MyBrand" TON: 5 (Alphanumeric) NPI: 0 (Unknown or irrelevant) Encoded: ASCII string "MyBrand" + NULL terminator
Important Notes
- Alphanumeric sender IDs must be 11 characters or fewer.
- Alphanumeric addresses are not supported in all countries.
- Always match TON and NPI correctly with your address format to avoid routing issues.
Conclusion
SMPP number encoding is critical for ensuring proper message delivery. By setting the correct TON
, NPI
, and encoding the address correctly in ASCII (null-terminated), developers can ensure compatibility with SMSCs and mobile networks.
More information
- Kako konfigurirati polje SMPP vrsta usluge
- Kako konfigurirati polja SMPP telefonskih brojeva
- Kako konfigurirati polje SMPP ESM klasa
- Kako konfigurirati polje SMPP PID
- Kako konfigurirati polje SMPP prioritet
- Kako konfigurirati polje SMPP planirano vrijeme
- Kako konfigurirati polje SMPP rok valjanosti
- Kako konfigurirati polje SMPP registrirana isporuka
- Kako konfigurirati polje SMPP zamijeni ako postoji
- Kako konfigurirati polje sm_default_msg_id
- Kako konfigurirati polje SMPP DCS
- Kako izračunati polje SMPP SM duljina
- Kako staviti podatke u SMPP SM polje