{"__v":0,"_id":"556c2b56d5b7ff0d00c6f060","initVersion":{"_id":"54eb63b859b1172100334fae","version":"1"},"project":"54eb50e5615ffc1900305a16","user":{"_id":"54eb4fdedf7add210007b29b","username":"","name":"Infobip"},"hidden":false,"createdAt":"2015-06-01T09:52:22.109Z","fullscreen":false,"htmlmode":false,"html":"","body":"The Short Message Peer-to-Peer (SMPP) is an open, industry standard protocol used by the telecommunication industry for exchanging SMS messages between Short Message Service Centres (SMSC) and  an SMS application systems.\n\nThe protocol is a level-7 TCP/IP protocol, which allows fast delivery of SMS messages.\n\nThe connection between the application and the Infobip SMPP server is **SMPP version 3.4** (version 3.3 is not supported).\n\n# SMPP parameters\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Name\",\n    \"h-1\": \"Description\",\n    \"0-0\": \"**system_id**\",\n    \"0-1\": \"***Required.*** Provided for each client.\",\n    \"1-0\": \"**password**\",\n    \"1-1\": \"***Required.*** Provided for each client. Maximum password length is 8 characters.\",\n    \"2-0\": \"**IP address**\",\n    \"2-1\": \"***Required.*** Primary connection point: [smpp3.infobip.com](smpp3.infobip.com)\\nSecondary connection point: [smpp1.infobip.com](smpp1.infobip.com)\\nSSL Connection point: [smpp2.infobip.com](smpp2.infobip.com)\",\n    \"3-0\": \"**port**\",\n    \"3-1\": \"***Required.*** `8888` (primary and secondary) / `8887` (ssl)\",\n    \"4-0\": \"**timeout** (keep alive or msg)\",\n    \"4-1\": \"***Required.*** 30 sec\",\n    \"5-0\": \"**system_type**\",\n    \"5-1\": \"*Optional.* `<r:route_code>`\",\n    \"h-2\": \"\",\n    \"0-2\": \"\",\n    \"1-2\": \"\",\n    \"2-2\": \"\",\n    \"3-2\": \"****\",\n    \"4-2\": \"\",\n    \"5-2\": \"\"\n  },\n  \"cols\": 2,\n  \"rows\": 6\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Important:\",\n  \"body\": \"You are allowed to bind as **transmitter**, **receiver** or **transceiver**. In order to receive delivery reports, you must bind as **transceiver** or **receiver**.\"\n}\n[/block]\nYou’ll 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**).\n\nBy default, you are allowed to bind with **4 sessions**. There are no other throughput (TPS) limitations besides internet speed.\n\n## PDUs supported:\n\n- **`bind_transmitter`** \n- **`bind_receiver`** \n- **`bind_transceiver`**\n- **`unbind`** \n- **`submit_sm`** \n- **`deliver_sm`**\n- **`enquire_link`**\n\n## Delivery report format\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"“id:<message_id> sub:<message_sub> dlvrd:<message_dlvrd>\\nsubmit date:<message_submit_date> done date:<message_done_date> \\nstat:<message_stat> err:<message_err>”\",\n      \"language\": \"xml\",\n      \"name\": \"Format\"\n    }\n  ]\n}\n[/block]\n\n## Delivery statuses (`message_stat`):\n\n- **`DELIVRD`**\n- **`EXPIRED`**\n- **`UNDELIV`**\n- **`ACCEPTD`**\n- **`UNKNOWN`**\n- **`ENROUTE`**\n- **`REJECTD`**\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Data coding scheme\",\n  \"body\": \"If you set **`DCS 0`** or **`DCS 1`** when sending messages, we will treat that as **default GSM7 encoding** (SMSC Default Alphabet or IA5).\\n\\nFor **Latin1** (ISO-8859-1) please use **`DCS 3`** and **`DCS 8`** for sending messages as **Unicode** (ISO/IEC-10646).\"\n}\n[/block]\n## Command status & GSM Error Codes\n\nEach request sent to our system is to receive an acknowledgement in `submit_sm resp PDU` and it is fully compliant with SMPP v 3.4 standard. A few proprietary platform command statuses which are described **[here](http://dev.infobip.com/v1/page/command-status-gsm-error-codes)** along with platform specific delivery report **[error codes](http://dev.infobip.com/v1/page/command-status-gsm-error-codes)** you may encounter in `deliver_sm PDU`.\n\n\n## Scheduled delivery\n\nScheduled delivery is supported over SMPP protocol using the **relative time format**. \n\n***Example:*** \n\n**`“070605040302100R”`** - this would mean that message will be delivered in 7 years, 6 months, 5 days, 4 hours, 3 minutes, 2 seconds and 1 tenth of second from now.\n\n\n## National Language Shift over SMPP\n\nAlong with the standard features of SMPP 3.4, we also provide [national language shift](/page/national-language-shift-tables-over-smpp) functionality which enables you to use special characters from language-specific character sets. \n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Number Context over SMPP specification\"\n}\n[/block]\nUsing Infobip SMPP account, it is possible to request **Number Context** data (IMSI). \n\nIn order to use Number Context, you can use your default `system_id` and `password`, setting **`system_type = “HLR”`** (without quotation marks) in Bind PDU.\n\n**SubmitSM PDU** is used for submitting the Number Context request, having `destAddress` parameter set to the required destination address. All other parameters will be ignored (srcAddress, TON/NPI, etc). \n\nInfobip Number Context subsystem will respond using a regular **SubmitSMResp**, containing message-id reference.\n\nOnce the Number Context request is being finalised on the Infobip system, you will receive **DeliverSM PDU**, containing: \n- **IMSI** for the required destAddress **or** \n- **error code** in case of failure. \n\n**DeliverSM** will contain: \n- short message data with our regular delivery report\n- IMSI part (`“IMSI:xxxxxxxxx”`) \n- serving MSC \n- additional **optional info fields** depending on your package.\n[block:parameters]\n{\n  \"data\": {\n    \"h-1\": \"Type\",\n    \"h-0\": \"Optional info fields\",\n    \"h-2\": \"Hex\",\n    \"h-3\": \"Decimal\",\n    \"0-0\": \"**Original network name**\",\n    \"0-1\": \"TLVString\",\n    \"0-2\": \"0x1412\",\n    \"0-3\": \"5138\",\n    \"1-0\": \"**Original network prefix**\",\n    \"1-1\": \"TLVString\",\n    \"1-2\": \"0x140B\",\n    \"1-3\": \"5131\",\n    \"2-0\": \"**Original country**\",\n    \"2-1\": \"TLVString\",\n    \"2-2\": \"0x1422\",\n    \"2-3\": \"5154\",\n    \"3-0\": \"**Original country code**\",\n    \"3-1\": \"TLVString\",\n    \"3-2\": \"0x1423\",\n    \"3-3\": \"5155\",\n    \"4-0\": \"**Original country prefix**\",\n    \"4-1\": \"TLVString\",\n    \"4-2\": \"0x1424\",\n    \"4-3\": \"5156\",\n    \"5-0\": \"**Ported network name**\",\n    \"5-1\": \"TLVString\",\n    \"5-2\": \"0x1413\",\n    \"5-3\": \"5139\",\n    \"6-0\": \"**Ported country prefix**\",\n    \"6-1\": \"TLVString\",\n    \"6-2\": \"0x1442\",\n    \"6-3\": \"5186\",\n    \"7-0\": \"**Ported network prefix**\",\n    \"7-1\": \"TLVString\",\n    \"7-2\": \"0x143e\",\n    \"7-3\": \"5182\",\n    \"8-0\": \"**Ported network country name**\",\n    \"8-1\": \"TLVString\",\n    \"8-2\": \"0x143f\",\n    \"8-3\": \"5183\",\n    \"9-0\": \"**Is number ported**\",\n    \"9-1\": \"TLVInt\",\n    \"9-2\": \"0x1421\",\n    \"9-3\": \"5153\",\n    \"10-0\": \"**Roaming network name**\",\n    \"10-1\": \"TLVString\",\n    \"10-2\": \"0x1414\",\n    \"10-3\": \"5140\",\n    \"11-0\": \"**Roaming network prefix**\",\n    \"11-1\": \"TLVString\",\n    \"11-2\": \"0x1419\",\n    \"11-3\": \"5145\",\n    \"12-0\": \"**Roaming country name**\",\n    \"12-1\": \"TLVString\",\n    \"12-2\": \"0x1415\",\n    \"12-3\": \"5141\",\n    \"13-0\": \"**Roaming country code**\",\n    \"13-1\": \"TLVString\",\n    \"13-2\": \"0x1417\",\n    \"13-3\": \"5143\",\n    \"14-0\": \"**Roaming country prefix**\",\n    \"14-1\": \"TLVString\",\n    \"14-2\": \"0x1420\",\n    \"14-3\": \"5152\",\n    \"15-0\": \"**MCCMNC**\",\n    \"15-1\": \"TLVString\",\n    \"15-3\": \"5142\",\n    \"15-2\": \"0x1416\",\n    \"16-0\": \"**Price per message**\\n*For compatibility reasons, price per message is multiplied by 100*\",\n    \"16-1\": \"TLVInt\",\n    \"16-2\": \"0x1418\",\n    \"16-3\": \"5144\",\n    \"17-0\": \"**Serving HLR**\",\n    \"17-1\": \"TLVString\",\n    \"17-2\": \"0x1409\",\n    \"17-3\": \"5129\",\n    \"18-0\": \"**Is number correct**\\n\",\n    \"18-1\": \"TLVInt\",\n    \"18-2\": \"0x1425\",\n    \"18-3\": \"5157\"\n  },\n  \"cols\": 4,\n  \"rows\": 19\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Info:\",\n  \"body\": \"Besides DeliverSM.shortMessage, we included IMSI also as an extra-optional parameter:\\n\\n**`SMPP_VENDOR_SPECIFIC_IMSI = 0x1403`**\"\n}\n[/block]\n## Example:\n\nIn case that Number Context request was successful, DeliverSM will be as follows (`IMSI 21910110053751`):\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"addr: 0 0 38591xxxxxxx\\n\\naddr: 0 0 0000000000\\n\\nmsg: id:40072910491427628 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:DELIVRD err:000\\nIMSI:219101100935850 MSC:38591016 HLR:38591xxxxxxx ORN:VipNet PON:VipNet RON:VipNet ROC:HR MCCMNC:21910\\n\\nopt: (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) (oct: (tlv: 5126) 3338353931303136) )\",\n      \"language\": \"groovy\"\n    }\n  ]\n}\n[/block]\nIf an error occurred, DeliverSM will be as follows:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"addr: 0 0 385915369423\\n\\naddr: 0 0 0000000000\\n\\nmsg: id:40072910491419819 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:UNDELIV err:001\\nIMSI: MSC: ORN:VipNet MCCMNC:\\n\\nopt: (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) )\",\n      \"language\": \"groovy\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Flash notifications over SMPP specification\"\n}\n[/block]\nYou can use your Infobip SMPP account to send **Flash notifications**.  Such notifications are immediately displayed on a mobile phone screen upon arrival and aren't stored in the memory of the device. \n\nIn order to use Flash notifications, you can use your default `system_id` and `password`, setting **`system_type = “NSMS”`** (without quotation marks) in Bind PDU.\n\nProcedure for submitting Flash notifications is exactly the same as for normal SMS, using **SubmitSM PDU**. Infobip system will automatically convert your message into the Flash notification using message parameters you have submitted.\n\nDelivery reports will be sent to you using **DeliverSM PDU**.\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Note:\",\n  \"body\": \"Long SMS feature is not supported for Flash notifications.\"\n}\n[/block]","slug":"smpp-specification","title":"SMPP specification"}

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 Short Message Service Centres (SMSC) and an SMS application systems. The protocol is a level-7 TCP/IP protocol, which allows fast delivery of SMS messages. The connection between the application and the Infobip SMPP server is **SMPP version 3.4** (version 3.3 is not supported). # SMPP parameters [block:parameters] { "data": { "h-0": "Name", "h-1": "Description", "0-0": "**system_id**", "0-1": "***Required.*** Provided for each client.", "1-0": "**password**", "1-1": "***Required.*** Provided for each client. Maximum password length is 8 characters.", "2-0": "**IP address**", "2-1": "***Required.*** Primary connection point: [smpp3.infobip.com](smpp3.infobip.com)\nSecondary connection point: [smpp1.infobip.com](smpp1.infobip.com)\nSSL Connection point: [smpp2.infobip.com](smpp2.infobip.com)", "3-0": "**port**", "3-1": "***Required.*** `8888` (primary and secondary) / `8887` (ssl)", "4-0": "**timeout** (keep alive or msg)", "4-1": "***Required.*** 30 sec", "5-0": "**system_type**", "5-1": "*Optional.* `<r:route_code>`", "h-2": "", "0-2": "", "1-2": "", "2-2": "", "3-2": "****", "4-2": "", "5-2": "" }, "cols": 2, "rows": 6 } [/block] [block:callout] { "type": "warning", "title": "Important:", "body": "You are allowed to bind as **transmitter**, **receiver** or **transceiver**. In order to receive delivery reports, you must bind as **transceiver** or **receiver**." } [/block] You’ll 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 are no other throughput (TPS) limitations besides internet speed. ## PDUs supported: - **`bind_transmitter`** - **`bind_receiver`** - **`bind_transceiver`** - **`unbind`** - **`submit_sm`** - **`deliver_sm`** - **`enquire_link`** ## Delivery report format [block:code] { "codes": [ { "code": "“id:<message_id> sub:<message_sub> dlvrd:<message_dlvrd>\nsubmit date:<message_submit_date> done date:<message_done_date> \nstat:<message_stat> err:<message_err>”", "language": "xml", "name": "Format" } ] } [/block] ## Delivery statuses (`message_stat`): - **`DELIVRD`** - **`EXPIRED`** - **`UNDELIV`** - **`ACCEPTD`** - **`UNKNOWN`** - **`ENROUTE`** - **`REJECTD`** [block:callout] { "type": "info", "title": "Data coding scheme", "body": "If you set **`DCS 0`** or **`DCS 1`** when sending messages, we will treat that as **default GSM7 encoding** (SMSC Default Alphabet or IA5).\n\nFor **Latin1** (ISO-8859-1) please use **`DCS 3`** and **`DCS 8`** for sending messages as **Unicode** (ISO/IEC-10646)." } [/block] ## Command status & GSM Error Codes Each request sent to our system is to receive an acknowledgement in `submit_sm resp PDU` and it is fully compliant with SMPP v 3.4 standard. A few proprietary platform command statuses which are described **[here](http://dev.infobip.com/v1/page/command-status-gsm-error-codes)** along with platform specific delivery report **[error codes](http://dev.infobip.com/v1/page/command-status-gsm-error-codes)** you may encounter in `deliver_sm PDU`. ## Scheduled delivery Scheduled delivery is supported over SMPP protocol using the **relative time format**. ***Example:*** **`“070605040302100R”`** - this would mean that message will be delivered in 7 years, 6 months, 5 days, 4 hours, 3 minutes, 2 seconds and 1 tenth of second from now. ## National Language Shift over SMPP Along with the standard features of SMPP 3.4, we also provide [national language shift](/page/national-language-shift-tables-over-smpp) functionality which enables you to use special characters from language-specific character sets. [block:api-header] { "type": "basic", "title": "Number Context over SMPP specification" } [/block] Using Infobip SMPP account, it is possible to request **Number Context** data (IMSI). In order to use Number Context, you can use your default `system_id` and `password`, setting **`system_type = “HLR”`** (without quotation marks) in Bind PDU. **SubmitSM PDU** is used for submitting the Number Context request, having `destAddress` parameter set to the required destination address. All other parameters will be ignored (srcAddress, TON/NPI, etc). Infobip Number Context subsystem will respond using a regular **SubmitSMResp**, containing message-id reference. Once the Number Context request is being finalised on the Infobip system, you will receive **DeliverSM PDU**, containing: - **IMSI** for the required destAddress **or** - **error code** in case of failure. **DeliverSM** will contain: - short message data with our regular delivery report - IMSI part (`“IMSI:xxxxxxxxx”`) - serving MSC - additional **optional info fields** depending on your package. [block:parameters] { "data": { "h-1": "Type", "h-0": "Optional info fields", "h-2": "Hex", "h-3": "Decimal", "0-0": "**Original network name**", "0-1": "TLVString", "0-2": "0x1412", "0-3": "5138", "1-0": "**Original network prefix**", "1-1": "TLVString", "1-2": "0x140B", "1-3": "5131", "2-0": "**Original country**", "2-1": "TLVString", "2-2": "0x1422", "2-3": "5154", "3-0": "**Original country code**", "3-1": "TLVString", "3-2": "0x1423", "3-3": "5155", "4-0": "**Original country prefix**", "4-1": "TLVString", "4-2": "0x1424", "4-3": "5156", "5-0": "**Ported network name**", "5-1": "TLVString", "5-2": "0x1413", "5-3": "5139", "6-0": "**Ported country prefix**", "6-1": "TLVString", "6-2": "0x1442", "6-3": "5186", "7-0": "**Ported network prefix**", "7-1": "TLVString", "7-2": "0x143e", "7-3": "5182", "8-0": "**Ported network country name**", "8-1": "TLVString", "8-2": "0x143f", "8-3": "5183", "9-0": "**Is number ported**", "9-1": "TLVInt", "9-2": "0x1421", "9-3": "5153", "10-0": "**Roaming network name**", "10-1": "TLVString", "10-2": "0x1414", "10-3": "5140", "11-0": "**Roaming network prefix**", "11-1": "TLVString", "11-2": "0x1419", "11-3": "5145", "12-0": "**Roaming country name**", "12-1": "TLVString", "12-2": "0x1415", "12-3": "5141", "13-0": "**Roaming country code**", "13-1": "TLVString", "13-2": "0x1417", "13-3": "5143", "14-0": "**Roaming country prefix**", "14-1": "TLVString", "14-2": "0x1420", "14-3": "5152", "15-0": "**MCCMNC**", "15-1": "TLVString", "15-3": "5142", "15-2": "0x1416", "16-0": "**Price per message**\n*For compatibility reasons, price per message is multiplied by 100*", "16-1": "TLVInt", "16-2": "0x1418", "16-3": "5144", "17-0": "**Serving HLR**", "17-1": "TLVString", "17-2": "0x1409", "17-3": "5129", "18-0": "**Is number correct**\n", "18-1": "TLVInt", "18-2": "0x1425", "18-3": "5157" }, "cols": 4, "rows": 19 } [/block] [block:callout] { "type": "info", "title": "Info:", "body": "Besides DeliverSM.shortMessage, we included IMSI also as an extra-optional parameter:\n\n**`SMPP_VENDOR_SPECIFIC_IMSI = 0x1403`**" } [/block] ## Example: In case that Number Context request was successful, DeliverSM will be as follows (`IMSI 21910110053751`): [block:code] { "codes": [ { "code": "addr: 0 0 38591xxxxxxx\n\naddr: 0 0 0000000000\n\nmsg: id:40072910491427628 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:DELIVRD err:000\nIMSI:219101100935850 MSC:38591016 HLR:38591xxxxxxx ORN:VipNet PON:VipNet RON:VipNet ROC:HR MCCMNC:21910\n\nopt: (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) (oct: (tlv: 5126) 3338353931303136) )", "language": "groovy" } ] } [/block] If an error occurred, DeliverSM will be as follows: [block:code] { "codes": [ { "code": "addr: 0 0 385915369423\n\naddr: 0 0 0000000000\n\nmsg: id:40072910491419819 sub:001 dlvrd:001 submit date:1007291049 done date:1007291049 stat:UNDELIV err:001\nIMSI: MSC: ORN:VipNet MCCMNC:\n\nopt: (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) )", "language": "groovy" } ] } [/block] [block:api-header] { "type": "basic", "title": "Flash notifications over SMPP specification" } [/block] You can use your Infobip SMPP account to send **Flash notifications**. Such notifications are immediately displayed on a mobile phone screen upon arrival and aren't stored in the memory of the device. In order to use Flash notifications, you can use your default `system_id` and `password`, setting **`system_type = “NSMS”`** (without quotation marks) in Bind PDU. Procedure for submitting Flash notifications is exactly the same as for normal SMS, using **SubmitSM PDU**. Infobip system will automatically convert your message into the Flash notification using message parameters you have submitted. Delivery reports will be sent to you using **DeliverSM PDU**. [block:callout] { "type": "info", "title": "Note:", "body": "Long SMS feature is not supported for Flash notifications." } [/block]