SMPP
SMPP is based on the exchange of request and response protocol data units (PDUs) between the Customer and RingRing SMSC over an underlying TCP/IP network connection.
SMPP Host/Endpoint
We offer two options for SMPP connectivity:
Option 1:
If customers have the capability of simultaneous connections to different SMPP servers, they can connect to one of these pairs:
smpp-eu-1.naxai.com
and smpp-eu-2.naxai.com
Option 2:
If customers do not have the capability of simultaneous connections to different SMPP servers, they can connect to this endpoint:
smpp-eu.naxai.com
SMPP Port
2775 Standard (Non-Encrypted)
3550 TLS/SSL encrypted
IP Access
Access to the Naxai SMPP servers is, by default, restricted to pre-registered IPs. The client IP range must be announced and added to the client account for access.
You must provide your IP addresses to our support team ([email protected]).
Supported SMP PDUs
We comply with SMPP v5. However, not all carriers support some TLV values, so they are unused.
The window size is "virtually unlimited"; however, a maximum value of SMS/s is defined (throttling), and every command has a 10s timeout value for its _resp equivalent.
Allowed commands and parameters:
bind_transceiver
: to connect a TRX session. Replies with bind_transceiver_resp.
Used parameters:
system_id: {type: string}
password: {type: string}
interface_version: {type: int8, default: 0x50}
bind_transmitter
: to connect a TX session. Replies with bind_transmitter_resp.
Used parameters:
system_id: {type: string}
password: {type: string}
interface_version: {type: int8, default: 0x50}
bind_receiver
: to connect a RX session. Replies with bind_receiver_resp.
Used parameters:
system_id: {type: string}
password: {type: string}
interface_version: {type: int8, default: 0x50}| interface_version | {type: int8, default: 0x50} |
unbind
: to close a session. Replies with unbind_resp.
enquire_link
: to keep a session alive. Replies with enquire_link_resp. We'll send an enquire_link request if no PDU is received in the last 30s, and we'll close the session if there is no traffic (an enquire_link_resp is valid traffic) in the previous 60s.
enquire_link_resp
: response to an enquire_link request from our SMPP server.
submit_sm
: to send a message. Replies with submit_sm_resp, containing message_id (hex) as parameter.
Used parameters (others are ignored):
source_addr: {type: string}: the shortcode to be used. If not in the allowed list, we'll use the shortcode defined for the customer.
destination_addr: {type: string}: the phone number to which we should send the message.
esm_class: {type: int8}: used when UDH content is present.
schedule_delivery_time: {type: string}: when the message should be sent to the destination number. It can be specified in absolute or relative time formats (see SMPP specs). Local time = CET. Defaults to "immediate"
validity_period: {type: string}: message validity (maximum delivery time). It can be specified in absolute or relative time formats (see SMPP specs). Local time = CET. Defaults to 72h.
registered_delivery: {type: int8}: used to request an SMSC delivery receipt. Possible values: 0 (no DLR), between 1 and 16 (only final status notification), > 16 (intermediate and final notifications requested).
data_coding: {type: int8}: then data coding used for the message. SMSC default data coding = GSM03.38. Valid datacoding are 0 (SMSC default),3 (Latin-1) and 8 (Unicode). Partial data_coding 4 (binary) support (not all operators support this encoding).
short_message: {type: buffer}: the message
The UDH content is forwarded "as is" when present or used to concatenate message parts if used at this purpose (esm_class = 0x40, 2nd UDH field = 00 or 08).
The following TLV optional parameters are also useable:
source_port: {id: 0x020A,type: int16}
dest_port: {id: 0x020B,type: int16}
sar_msg_ref_num: {id: 0x020C,type: int16} : if used instead of UDH for concatenated messages.
sar_total_segments: {id: 0x020E,type: int8} : if used instead of UDH for concatenated messages.
sar_segment_seqnum: {id: 0x020F,type: int8} : if used instead of UDH for concatenated messages.
message_payload: {id: 0x0424,type: buffer} : if used instead of short_message (that should be empty in this case).
deliver_sm_resp
: reponse to a deliver_sm request from our SMPP server. If the SMPP client doesn't reply with deliver_sm_resp containing an ESME_ROK value within 10s, the deliver_sm request will be resent 1 minute later.
Commands used and sent by our SMPP server:
bind_transceiver_resp
: response to bind_transceiver.
Possible replies:
ESME_ROK: bind is successful
ESME_RBINDFAIL: unable to bind a session. Wrong credentials or customer is disabled.
ESME_RALYBND: the session is already in "bind" state. No bind request is allowed.
ESME_RUNKNOWNERR: RingRing internal error. The customer should try to reconnect and contact support if issue persists.
bind_transmitter_resp
: response to bind_transmitter.
Possible replies:
ESME_ROK: bind is successful
ESME_RBINDFAIL: unable to bind a session. Wrong credentials or customer is disabled.
ESME_RALYBND: the session is already in "bind" state. No bind request is allowed.
ESME_RUNKNOWNERR: RingRing internal error. The customer should try to reconnect and contact support if issue persists.
bind_receiver_resp
: response to bind_receiver.
Possible replies:
ESME_ROK: bind is successful
ESME_RBINDFAIL: unable to bind a session. Wrong credentials or customer is disabled.
ESME_RALYBND: the session is already in "bind" state. No bind request is allowed.
ESME_RUNKNOWNERR: RingRing internal error. The customer should try to reconnect and contact support if issue persists.
unbind
: to close a session.
All following PDUs will receive ESME_RINVBNDSTS as reply from our server.
enquire_link
: to keep a session alive. Reply with enquire_link_resp. We'll send an enquire_link request if no PDU is received in the last 30s, and we'll close the session if there is no traffic (an enquire_link_resp is valid traffic) in the last 60s.
enquire_link_resp
: response to enquire_link.
Possible replies:
ESME_ROK
ESME_RINVBNDSTS: the session is closed. No PDU is accepted except bind requests.
submit_sm_resp
: reponse to submit_sm.
Possible replies:
ESME_ROK: the message is accepted by our SMPP server and will be delivered to the enduser. Please note that multipart messages are only delivered when all parts are received, and no DLR will be given for a part until all parts are received by the SMPP server.
ESME_RINVBNDSTS: the session is closed. No PDU is accepted except bind requests.
ESME_RINVDSTADR: the destination is not a valid phone number or is unable to receive SMSes (ie fixed line in Belgium)
ESME_RX_T_APPN: RingRing internal error. The customer should contact support if issue persists.
ESME_RTHROTTLED: the maximum SMS/s is reached for this session. The SMPP client should retry to send the message later and lower the delivery rate.
ESME_RINVSRCADR: the "from" shortcode is invalid, and no default shortcode is defined for the customer.
ESME_RINVEXPIRY: the validity_period is invalid.
ESME_RINVMSGLEN: the message is empty.
ESME_RUNKNOWNERR: RingRing internal error. The customer should try to reconnect and contact support if issue persists.
deliver_sm
: the DLRs and MOs will be sent to the customer using deliver_sm requests.
Used fields:
destination_addr
dest_addr_npi
dest_addr_ton
source_addr
source_addr_ton
source_addr_npi
esm_class ( = 4 in case of DLR)
data_coding: always 0 for DLR, depending on mesage content in case of MO.
message_state: only present in case of DLR.
receipted_message_id: only present in case of DLR.
network_error_code: only present in case of DLR. 000 in case of success or message is not yet delivered.
short_message: in case of MO, this is the message content. In case of DLR, the format is the following: "id:XXXXXX sub:001 dlvrd:000 submit date:YYMMDDHHMM done date:YYMMDDHHMM stat:ZZZZZZZ err:YYY text:WWWWW"; We're able to add MCC+MNC as additional value at the end (ie net:20601 for Proximus), at customer request.
source_subaddress: MCC+MNC only present if it is available for the enduser provider.
message_receipt_time: only present in case of MO.
udh: used for multipart MOs.
If the SMPP client doesn't reply with deliver_sm_resp containing an ESME_ROK value within 10s, the deliver_sm request will be resent 1 minute later.
Updated 22 days ago