SMPP specification
The Short Message Peer-to-Peer (SMPP) is an open, industry-standard protocol used by the telecommunication industry for exchanging SMS messages between SMS application systems and Short Message Service Centers (SMSC).
The connection between the application and the Infobip SMPP server is SMPP version 3.4 (opens in a new tab) (versions 3.3 and 5.0 are not supported).
Supported SMPP features
SMPP traffic security
It is advised not to utilize the same user for both purposes to ensure proper account administration and secure SMPP API traffic broadcast. Instead, you should have a dedicated user with credentials solely intended for SMPP API traffic broadcasting.
Since SMPP traffic is commonly transmitted through a static IP address, you will need to contact your customer success manager and provide them with a list of IP addresses that should be allowed for the user responsible for broadcasting SMPP API traffic. Send the bind request to the encrypted SSL/TLS endpoint smpp2.infobip.com:8887
to establish a secure connection.
Bind parameters
The length of the password required depends on your SMPP library rather than the SMPP v3.4 protocol itself. It is advised to use a library that enables a setup with a password length greater than 8 characters. If you need additional information, contact our Support (opens in a new tab) team to adjust the password strength policy on your account.
Name | Mandatory | Description |
---|---|---|
system_id | Yes | The user's username is created on the Infobip platform. |
password | Yes | Provided for each client. |
IP address | Yes | smpp3.infobip.com (primary)smpp1.infobip.com (secondary)smpp2.infobip.com (SSL) |
port | Yes | 8888 (primary and secondary)8887 (SSL) |
timeout(keep alive or msg) | Yes | 30 sec |
system_type | No |
You are allowed to bind as a transmitter, receiver or a transceiver. To receive delivery reports, you must bind as a transceiver or a receiver.
You will receive delivery reports only if your route provides delivery reporting. Delivery reports will be sent equally over all of your currently available sessions capable of receiving them (transceiver or receiver).
By default, you are allowed to bind with 4 sessions. There is no other throughput (TPS) limitations besides internet speed.
PDU types
bind_transmitter
bind_receiver
bind_transceiver
unbind
submit_sm
deliver_sm
enquire_link
Data coding schemes
Setting DCS to 0 or 1 will apply the IA5 / GSM7 coding scheme to the message (GSM7 being the default Infobip SMSC alphabet).
Set DCS = 3 for Latin1 (ISO-8859-1), and DCS = 8 for sending messages as Unicode/UCS-2 (ISO/IEC-10646).
Scheduled delivery
Scheduled delivery is supported over the SMPP protocol using relative time format.
070605040302100R
For example, that would would mean that the message will be delivered in 7 years, 6 months, 5 days, 4 hours, 3 minutes, 2 seconds and 1 tenth of a second from now.
Command status
Each request to our system will receive an acknowledgement as per SMPP v 3.4 standard, including command_status
. Most relevant command statuses, including Infobip-specific ones, are in the table below:
command_status | PDU | Description |
---|---|---|
0x0000000E | bind_resp | Invalid credentials |
0x00000022 / 34 | submit_sm_resp | Network not covered |
0x000000FF / 255 | submit_sm_resp | Account has insufficient balance |
0x0000000a | submit_sm_resp | Invalid source address |
0x0000000b | submit_sm_resp | Invalid destination address |
0x0000000c | submit_sm_resp | Duplicate or invalid messageID |
0x000004a1 | submit_sm_resp | System error or channel disabled |
0x0000009F | submit_sm_resp | Invalid optional parameter length |
Delivery report format
Delivery report in this format will be returned in short message field of deliver_sm PDU:
id:{message_id} sub:{message_sub} dlvrd:{message_dlvrd}
submit date:{message_submit_date} done date:{message_done_date}
stat:{message_stat} err:{message_err}
Delivery statuses
DELIVRD
EXPIRED
UNDELIV
ACCEPTD
UNKNOWN
ENROUTE
REJECTD
GSM error codes
GSM error codes are returned in DLRs and explain the status of the message (whether intermediate or final). Error code will be returned in the short_message
as a part of delivery information, or (if enabled by Infobip specialists) in Optional TLV 0x423.
Check the possible error codes.
Flash notifications
You can use your Infobip SMPP account to send Flash notifications. Such notifications are immediately displayed on the mobile phone screen upon arrival and are not stored in the memory of the device. Use your default system_id
and password to send Flash notifications by submitting messages with Data Coding set to 16 (or 24 for Unicode).
Long SMS feature is not supported for Flash notifications. Delivery reports will be sent to you using DeliverSM PDU.
Number lookup
Using the Infobip SMPP account, it is possible to request Number Lookup (opens in a new tab) data. To use Number Lookup, you can use your default system_id
and password
, setting system_type = HLR
in Bind PDU.
SubmitSM PDU is used for submitting the Number Lookup request, with the destAddress
parameter set to the required destination address. All other parameters will be ignored (srcAddress, TON/NPI, etc).
Infobip Number Lookup subsystem will respond using a regular SubmitSMResp, containing the message_id
reference.
Once the Number Lookup request has been finalized on the Infobip system, you will receive DeliverSM PDU, containing the short message with: IMSI for the required destAddress or an error code in case of failure, plus additional optional info fields, depending on your package.
Optional info fields | Type | Hex | Decimal |
---|---|---|---|
Original network name | TLVString | 0x1412 | 5138 |
Original network prefix | TLVString | 0x140B | 5131 |
Original country | TLVString | 0x1422 | 5154 |
Original country code | TLVString | 0x1423 | 5155 |
Original country prefix | TLVString | 0x1424 | 5156 |
Ported network name | TLVString | 0x1413 | 5139 |
Ported country prefix | TLVString | 0x1442 | 5186 |
Ported network prefix | TLVString | 0x143e | 5182 |
Ported network country name | TLVString | 0x143f | 5183 |
Is number ported | TLVInt | 0x1421 | 5153 |
Roaming network name | TLVString | 0x1414 | 5140 |
Roaming network prefix | TLVString | 0x1419 | 5145 |
Roaming country name | TLVString | 0x1415 | 5141 |
Roaming country code | TLVString | 0x1417 | 5143 |
Roaming country prefix | TLVString | 0x1420 | 5152 |
MCCMNC | TLVString | 0x1416 | 5142 |
Price per message(multiplied by 100 for compatibility reasons) | TLVInt | 0x1418 | 5144 |
Serving HLR | TLVString | 0x1409 | 5129 |
Is number correct | TLVInt | 0x1425 | 5157 |
Extra-optional info fields | Type | Hex | Decimal |
---|---|---|---|
IMSI | Oct | 0x1403 | 5123 |
In case that the Number Lookup request was successful, DeliverSM will be as follows (IMSI 219101100935850
):
addr: 0 0 38591xxxxxxx
addr: 0 0 0000000000
msg: id:40072910491427628 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:DELIVRD err:000
IMSI:219101100935850 MSC:38591016 HLR:38591xxxxxxx ORN:VipNet PON:VipNet RON:VipNet ROC:HR MCCMNC:21910
opt: (oct: (tlv: 1059) 030000) (byte: (tlv: 1063) 2) (str: (tlv: 30) 40072910491427628) (str: (tlv: 5129)38591xxxxxxx) (str: (tlv: 5138) VipNet) (str: (tlv: 5139) VipNet) (str: (tlv: 5140) VipNet) (str: (tlv:5141) Croatia ) (str: (tlv: 5143) HR) (str: (tlv: 5142) 21910) (int: (tlv: 5144) 1) (str: (tlv: 5145) 91) (str: (tlv: 5152) 385) (int: (tlv: 5153) 1) (str: (tlv: 5154) Croatia ) (str: (tlv: 5155) HR) (str: (tlv: 5156) 385) (int: (tlv: 5157) 1) ) (extraopt: (oct: (tlv: 5123) 323139313031313030393335383530) )
If an error occurred, DeliverSM will be as follows:
addr: 0 0 38591xxxxxxx
addr: 0 0 0000000000
msg: id:40072910491419819 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:UNDELIV err:001
IMSI: MSC: ORN:VipNet MCCMNC:
opt: (oct: (tlv: 1059) 030001) (byte: (tlv: 1063) 5) (str: (tlv: 30) 40072910491419819) (str: (tlv: 5138) VipNet) (str: (tlv: 5142) ) (int: (tlv: 5144) 1) (int: (tlv: 5153) 0) (str: (tlv: 5154) Croatia ) (str: (tlv: 5155) HR) (str: (tlv: 5156) 385) (int: (tlv: 5157) 1) )
URL Shortening
You can use your SMPP connection in conjunction with the URL Shortening (opens in a new tab) functionality using the following TLVs:
Optional fields | Type | Hex | Decimal | Value | Notes |
---|---|---|---|---|---|
Shorten Url | TLVString | 0x1494 | 5268 | Any value will enable | Not required if Custom Domain TLV set set |
Custom Domain | TLVString | 0x1495 | 5269 | http:// or https:// are not required in the custom domain | |
Remove Protocol | TLVString | 0x1496 | 5270 | Boolean |