The Short Message Peer-to-Peer (SMPP) protocol is a telecommunications industry protocol for exchanging SMS messages between Short Message Service Centers (SMSCs) and/or External Short Messaging Entities (ESMEs). It is a level-7 TCP/IP protocol that allows fast and efficient delivery of SMS messages. Here’s a glossary of some common SMPP commands:
- bind_transmitter (0x00000002): Initiate a bind operation with an SMSC as a transmitter.
- bind_transmitter_resp (0x80000002): Response to the bind_transmitter command.
- bind_receiver (0x00000001): Initiate a bind operation with an SMSC as a receiver.
- bind_receiver_resp (0x80000001): Response to the bind_receiver command.
- bind_transceiver (0x00000009): Initiate a bind operation with an SMSC as both a transmitter and receiver.
- bind_transceiver_resp (0x80000009): Response to the bind_transceiver command.
- unbind (0x00000006): Close an active SMPP session.
- unbind_resp (0x80000006): Response to the unbind command.
- submit_sm (0x00000004): Submit a short message to an SMSC for onward delivery.
- submit_sm_resp (0x80000004): Response to the submit_sm command.
- deliver_sm (0x00000005): Deliver a short message to an ESME for onward delivery.
- deliver_sm_resp (0x80000005): Response to the deliver_sm command.
- data_sm (0x00000103): Exchange data between an ESME and an SMSC.
- data_sm_resp (0x80000103): Response to the data_sm command.
- query_sm (0x00000003): Query the status of a previously submitted short message.
- query_sm_resp (0x80000003): Response to the query_sm command.
- cancel_sm (0x00000007): Cancel a previously submitted short message.
- cancel_sm_resp (0x80000007): Response to the cancel_sm command.
- replace_sm (0x00000008): Replace the contents of a previously submitted short message.
- replace_sm_resp (0x80000008): Response to the replace_sm command.
- enquire_link (0x00000015): Check the status of an active SMPP session.
- enquire_link_resp (0x80000015): Response to the enquire_link command.
- alert_notification (0x00000102): Notify an ESME of an event.
- generic_nack (0x80000000): Indicate an error or an inability to process an unrecognized or unsupported SMPP command.
Note that the command IDs are provided in hexadecimal format – which can be used with wireshark – eg smpp.command_id=0x002 for filtering down to only bind_transmitter PDUs.
-
bind_transmitter:
- system_id: Identifies the ESME system requesting to bind.
- password: The password used to authenticate the ESME system.
- system_type: Indicates the ESME’s type or role.
- interface_version: The SMPP version supported by the ESME.
- addr_ton: The Type of Number of the ESME’s address range.
- addr_npi: The Numbering Plan Indicator of the ESME’s address range.
- address_range: The ESME’s address range.
-
bind_receiver:
- (Same parameters as bind_transmitter)
-
bind_transceiver:
- (Same parameters as bind_transmitter)
-
unbind:
- No additional parameters required.
-
submit_sm:
- service_type: Indicates the SMS service type.
- source_addr_ton: The Type of Number of the sender’s address.
- source_addr_npi: The Numbering Plan Indicator of the sender’s address.
- source_addr: The sender’s address.
- dest_addr_ton: The Type of Number of the recipient’s address.
- dest_addr_npi: The Numbering Plan Indicator of the recipient’s address.
- destination_addr: The recipient’s address.
- esm_class: Indicates the message mode and type.
- protocol_id: Protocol identifier.
- priority_flag: Sets the priority of the message.
- schedule_delivery_time: Scheduled time for message delivery.
- validity_period: Validity period of the message.
- registered_delivery: Indicates if a delivery receipt is required.
- replace_if_present_flag: Replace an existing message with the same ID.
- data_coding: Defines the encoding scheme of the message.
- sm_default_msg_id: Indicates a pre-defined message.
- sm_length: The length of the short message.
- short_message: The short message text.
-
deliver_sm:
- (Same parameters as submit_sm, except for replace_if_present_flag and sm_default_msg_id)
-
data_sm:
- (Same parameters as submit_sm, except for protocol_id, priority_flag, schedule_delivery_time, validity_period, and sm_default_msg_id)
-
query_sm:
- message_id: The message identifier assigned by the SMSC.
- source_addr_ton: The Type of Number of the sender’s address.
- source_addr_npi: The Numbering Plan Indicator of the sender’s address.
- source_addr: The sender’s address.
-
cancel_sm:
- service_type: Indicates the SMS service type.
- message_id: The message identifier assigned by the SMSC.
- source_addr_ton: The Type of Number of the sender’s address.
- source_addr_npi: The Numbering Plan Indicator of the sender’s address.
- source_addr: The sender’s address.
- dest_addr_ton: The Type of Number of the recipient’s address.
- dest_addr_npi: The Numbering Plan Indicator of the recipient’s address.
- destination_addr: The recipient’s address.
-
replace_sm:
- message_id: The message identifier assigned by the SMSC.
- source_addr_ton: The Type of Number of the sender’s address.
- source_addr_npi: The Numbering Plan Indicator of the sender’s address.
- source_addr: The sender’s address.
- schedule_delivery_time: Scheduled time for message delivery.
- validity_period: Validity period of the message.
- registered_delivery: Indicates if a delivery receipt is required.
- sm_default_msg_id: Indicates a pre-defined message.
- sm_length: The length of the short message.
- short_message: The short message text.
-
enquire_link:
- No additional parameters required.
- alert_notification:
- source_addr_ton: The Type of Number of the sender’s address.
- source_addr_npi: The Numbering Plan Indicator of the sender’s address.
- source_addr: The sender’s address.
- esme_addr_ton: The Type of Number of the ESME’s address.
- esme_addr_npi: The Numbering Plan Indicator of the ESME’s address.
- esme_addr: The ESME’s address.
Please note that for each command, there is a corresponding response PDU. The response PDUs typically contain a command_status field indicating the result of the original command (0 for success, or an error code for failure), and in some cases, additional information related to the request.
For example, bind_transmitter_resp, bind_receiver_resp, and bind_transceiver_resp PDUs include an additional system_id parameter, which is a copy of the system_id value provided in the original bind command.
The submit_sm_resp and data_sm_resp PDUs include a message_id parameter, which is the message identifier assigned by the SMSC for the submitted short message.
Other response PDUs, like deliver_sm_resp, query_sm_resp, cancel_sm_resp, and replace_sm_resp, do not require additional parameters beyond the command_status field.