PDU Details

A detailed explanation of each of the supported PDU types.

As per the SMPP 3.4 specification, each PDU has a mandatory header section that is the same for each PDU transmitted. These will not be outlined below (except for the command_status parameter in the submit_sm_resp PDUs).

Only parameters from the PDU body (mandatory parameters) and optional parameters are explained.

📘

NOTE

If an optional parameter is not mentioned below, then it is not supported/is ignored.

PDU Types

The following PDU types and their responses are supported:

Command IDValue (hex)Description
bind_receiver0x00000001Establish a receiver bind.
bind_transmitter0x00000002Establish a transmitter bind.
bind_transceiver0x00000009Establish a transceiver bind.
submit_sm0x00000004Submit message to the SMSC for onward delivery to mobile device.
deliver_sm0x00000005Send message to ESME from SMSC (typically delivery receipt or MO message).
unbind0x00000006Unbind from SMSC and close SMPP session.
enquire_link0x00000015Initiate a check to confirm ESME/SMSC is still reachable.
generic_nack0x80000000Acknowledge unrecognized or corrupt PDU.

📘

NOTE

data_sm, query_sm, cancel_sm, replace_sm and submit_sm_multi are not supported.

Bind PDU

An SMPP bind_receiver, bind_transmitter or bind_transceiver PDU request has a fixed set of fields many of which are irrelevant to us.

NameDescription
system_idYour SMPP username (maximum of 15 characters allowed)
passwordYour SMPP password (maximum of 8 characters allowed)
system_typeIgnored with the exception of "test" which is no longer supported and will be rejected.
interface_versionThe SMPP version that you want to use. Only version 3.4 (0x34) is supported.
addr_tonIgnored
addr_npiIgnored
address_rangeIgnored

enquire_link

To avoid being disconnected, you need to send at least one enquire_link PDU on every successfully established connection (bound session) every 2 minutes.

It’s recommended that you send the enquire_link PDU once every 30 seconds to timeously detect any lost connections. SMSPortal will also send an enquire_link every 30 seconds to detect any lost connections.

submit_sm

You can use the submit_sm PDU to send us your MT messages. Like a bind request, the submit_sm PDU request also has a couple of fields that are unused by our platform and can safely be ignored.

Name

Description

service_type

Ignored

source_addr_ton

Ignored but needs to be a valid value as per the SMPP specification

source_addr_npi

Ignored but needs to be a valid value as per the SMPP specification

source_addr

The sender ID or valid two-way number. If the sender ID is not valid on the network, this will be replaced by SMSPortal using a valid Sender ID. The original source_addr you provided will still be returned in the deliver_sm for matching purposes.

dest_addr_ton

Ignored but needs to be a valid value as per the SMPP specification

dest_addr_npi

Ignored but needs to be a valid value as per the SMPP specification

destination_addr

The mobile number of the handset to which the message must be delivered (MSISDN).

Note: The MSISDN needs to be in international numbering format (E.164) without any symbols (e.g. plus sign) or it will be rejected with an ESME_RINVDSTADR error response.

esm_class

Message mode and type. Refer to the SMPP specification for more information.

protocol_id

Ignored

priority_flag

Ignored

schedule_delivery_time

Not supported - Any messages with a scheduled time are overridden and sent out for immediate delivery.

validity_period

The validity period of the message. If the first attempt fails, the mobile network operator will make several delivery attempts during this timeframe. This is usually specified using the absolute time format but relative time format is also valid.

SMSPortal's default validity_period is 48 hours if no value is provided.

For One-Time Passwords, we recommend setting the validity to a shorter period (e.g. 1 hour). This will make the message expire when the content is no longer relevant and potentially force the mobile network operator to perform more retries within a short time frame after sending the message, hence increasing the chance of delivery.

registered_delivery

Set to 1 to receive delivery receipts when delivery was successful or failed.
Set to 2 to receive delivery receipts only when delivery failed.
All other values are ignored (i.e. no delivery receipt will be generated).

replace_if_present_flag

Ignored

data_coding

SMSC default character set is GSM7
See Data Coding Schemes for further information.

sm_default_msg_id

Ignored

sm_length

The length of the short_message field. Valid values are 0 – 254.

short_message

The contents of the message to be sent.

  • sarmsg_ref_num
    sar_total_segments
    sar_segment_seqnum

Optional parameters; see SMPP specification on how they should be constructed.

The sar parameters can be used to identify concatenated message parts instead of encoding UDH in the short_message field.

Customer Reference

Vendor Specific TLV Type 0x1400

Can be used when generating reports using the control panel.

Cost Center Reference

Vendor Specific TLV Type 0x1401

Can be used when generating reports using the control panel.

submit_sm_resp

NameDescription
command_statusAs per the SMPP specification
message_idThe message_id will always be returned as a 64 (or less) character string as per the SMPP specification.

deliver_sm for delivery receipts (DLR)

DLRs will be sent to you via a deliver_sm PDU. The fields are exactly the same as a submit_sm PDU, but there will be differences in which fields you are free to ignore, and which you are not.

Name

Description

service_type

Always NULL, can be ignored

source_addr_ton

Autodetected value based on the value returned by the Mobile Network Operator

source_addr_npi

Autodetected value based on the value returned by the Mobile Network Operator

source_addr

The value that you specified in the destination_addr field of the original submit_sm PDU.

dest_addr_ton

Autodetected value based on the value returned by the Mobile Network Operator

dest_addr_npi

Autodetected value based on the value returned by the Mobile Network Operator

destination_addr

The value that you specified in the source_addr field of the original submit_sm PDU.

esm_class

Usually 4 (can be used to differentiate between a DLR and MO message).

Refer to the SMPP specification for more information.

protocol_id

Always 0, can be ignored.

priority_flag

Always 0, can be ignored.

schedule_delivery_time

Always NULL, can be ignored.

validity_period

Always NULL, can be ignored.

registered_delivery

Always 0, can be ignored.

replace_if_present_flag

Always 0, can be ignored.

data_coding

Always 0, the SMSC always uses the GSM alphabet in delivery receipts.

sm_default_msg_id

Always 0, can be ignored.

sm_length

The length of the short_message field.

short_message

Informational content of the delivery receipt, see Delivery receipt short_message_format below.

receipted_message_id

Optional Parameter: The same messageid that was returned in the_submit_sm_resp PDU when the message was accepted.

🚧

IMPORTANT

If you are not bound with a receiver or transceiver, the SMSC will queue delivery receipts for a maximum of 12 hours or until a maximum queue size of 1 million PDUs has been reached, after which the oldest deliver_sm PDUs will be discarded to make room for newer deliver_sm PDUs.

deliver_sm for MO messages

MOs will also be sent to you via a deliver_sm PDU. The fields are exactly the same as a submit_sm PDU, but there will be differences in which fields you are free to ignore, and which you are not.

Name

Description

service_type

Always NULL, can be ignored

source_addr_ton

Autodetected and set according to the value of source_addr.

source_addr_npi

Autodetected and set according to the value of source_addr.

source_addr

The sender of the MO

dest_addr_ton

Autodetected and set according to the value of destination_addr.

dest_addr_npi

Autodetected and set according to the value of destination_addr.

destination_addr

The value that you specified in the source_addr field of the original submit_sm PDU.

On request, this setting can be changed to return the value that the mobile network operator provided in the source_addr field.

esm_class

Typically 0 or 64. A value of 64 (UDHI) indicates the presence of a user data header in the short_message field.

Refer to the SMPP specification for more information.

protocol_id

Always 0, can be ignored.

priority_flag

Always 0, can be ignored.

schedule_delivery_time

Always NULL, can be ignored.

validity_period

Always NULL, can be ignored.

registered_delivery

Always 0, can be ignored.

replace_if_present_flag

Always 0, can be ignored.

data_coding

Will be 0 for plain-text message content which will be in the SMSC’s default character set of GSM as per https://en.wikipedia.org/wiki/GSM_03.38

Will be 8 for Unicode message content which will be in the UCS-2 character set.

sm_default_msg_id

Always 0, can be ignored.

sm_length

The length of the short_message field.

short_message

The MO message content.

receipted_message_id

Optional Parameter: The same message_id that was returned in the submit_sm_resp PDU when the message was accepted.

🚧

IMPORTANT

If you are not bound with a receiver or transceiver, the SMSC will queue MO messages for a maximum of 12 hours or until a maximum queue size of 1 million PDUs has been reached, after which the oldest deliver_sm PDUs will be discarded to make room for newer deliver_sm PDUs.

Delivery receipt short_message format

The short_message parameter in the deliver_sm PDU for a delivery receipt will contain report information regarding the delivery result of the message. The standard format as per the SMPP specification is used:

id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:EEE Text: . . . . . . . . . .

*id:03/199440/UKQKF/5XrwwB/00004 sub:000 dlvrd:000 submit date:2111152111 done date:2111152111 stat:DELIVRD err:000 text:Hello World Test Mes*

Name

Description

id

The same message_id that was returned in the submit_sm_resp when the message was accepted.

sub

Always set to 0

dlvrd

Always set to 0

submit date

The date and time when the ESME submitted the message to the SMSC.

done date

The date and time when the SMSC received the specified status.

stat

DELIVRD, UNDELIV, BLIST, ACCEPTD or REJECTD.

See Delivery Statuses for more information.

err

Always 000 for successful and failed delivery. The only exception is 001 which indicates that number is on the DNC list and that SMS delivery is restricted due to a request by the owner or WASPA.

text

The first 20 characters of the original submit_sm as per the SMPP specification.

deliver_sm_resp

NameDescription
message_idIgnored