SMPP คืออะไร
Short Message Peer-to-Peer หรือ SMPP อย่าพึ่งสับสนกับ SMTP หรือ SNMP นะครับ ทั้งหมดคือ protocol ที่ใช้ในการสื่อสารทั้งสิ้น แต่สำหรับบทความนี้เราจะพูดถึงว่า SMPP คืออะไร ส่วนใหญ่จะรู้จักกันในโลก telecommunication กันเพราะมันคือ protocol ที่ใช้ในการส่ง SMS นั้นเอง ซึ่งในระบบ telecom เจ้า SMPP จะทำหน้าที่ส่งข้อความ (Short message) ระหว่าง
- External Short Messaging Entities (ESMEs) คือ ระบบที่ทำหน้าที่เป็น client ติดต่อกับ Shor Message Service Center (SMSC) โดยอาศัย SMPP ในการส่งข้อความ
- Routing Entities (REs) เป็น routing ระหว่าง ESME
- Shor Message Service Center (SMSC) อุปกรณ์ Telecom ใช้เก็บและส่ง SMSC ไปยัง mobile
SMPP มักถูกใช้ในการส่ง messages จำนวนมากในลักษณะ bulk หรือ broadcast โดย SMPP สามารถที่จะใส่ข้อมูล
- Short message ข้อความสั้นๆ
- EMS ข้อความในลักษณะพิเศษ เช่น ตัวหนา,ตัวเอียง
- Voicemail
- Cell broadcast ที่ส่ง SMS ไปยัง mobile เฉพาะพื่นที่
- WAP
- MMS
- USSD
ตามมาตราฐาน GSM, UMTS, CDMA2000, TDMA ซึ่งจะทำงานอยู่บน SS7 network
การทำงานของ SMPP
SMPP ทำงานในลักษณะ Client-Server โดย Short Message Service Center (SMSC) จะทำหน้าที่เป็น server เพื่อรับข้อความมาเก็บและส่งไปยังเครื่องโทรศัพท์ ส่วน ESME ทำหน้าที่เป็น Client ในการร้องขอส่งข้อความที่ต้องการไปยัง SMSC ซึ่ง SMPP เองทำงานอยู่บน OSI layer4 ซึ่งเป็น TCP หรือ X.25 connection มี default port คือ 2775
หลังจากที่ทำการ establish connection บน TCP ได้แล้ว ก่อนที่จะส่งข้อความไป ฝั่ง Client ต้องทำการส่ง bind command หรือ ก็คือการ login เข้าสู่ server (SMSC) ก่อน โดย bind command จะตรวจสอบว่ามีสิทธิ์ในการส่งข้อความไหม ซึ่ง bind_transmitter จะอนุญาต client ส่งข้อความไปยัง server อย่างเดียว ส่วน bind_receiver หมายถึง client จะรับข้อมูล message ได้อย่างเดียว และ bind_transceiver จะยอมให้ทำได้ทั้งรับและส่ง โดยทาง ESME จะระบุตัวตนโดยใช้ system_id, system_type และ password จากนั้นทาง SMSC จะตอบ bind_response กลับมา เป็นอันเสร็จสิ้นการ bind หลังจากนั้นข้อความที่ส่งอาจจะเป็นได้ทั้ง synchronous ซึ่งต้องรอรับ response กัลบมา หรือ อาจจะเป็น asynchronous ก็ได้ เราขาส่ง message ว่า submit_sm และขา reponse ว่า submit_sm_resp
SMPP Version
- SMPP3.3 เป็น version เก่า แต่ยังคงได้รับความนิยมอยู่ทั้งๆที่มีข้อจำกัดมากมาย โดยรองรับ GSM เท่านั้น
- SMPP3.4 ได้เพิ่มค่า Tag-Length-Value (TLV) และรองรับระบบที่ไม่ใช่ GSM
- SMPP5.0 เป็น version ล่าสุดและรองรับการทำ cell broadcast
SMPP PDU header
SMPP PDU เป็นข้อมูล binary ซึ่งมีส่วนประกอบ header ด้วยกัน 4 ส่วน ก่อนส่วนข้อความดังนี้
1. command_length
ระบุความยาวของ PDU ในลักษณะเลขฐาน8 แต่ต้องมากกว่า 16 เพราะ ส่วนของ header มีค่าเท่ากับ 16
2. command_id
ระบุชนิดคำสั่งของ SMPP
3. command_status
สำหรับ request จะมีค่าเป็น 0 แต่สำหรับ reponse จะเป็นข้อมูลที่บอกผลลัพธ์ของ operation ที่ทำ
4. sequence_id
ใช่เชื่อมโยง request และ response ภายใน SMPP session เพื่อให้สามารถทำงานแบบ asynchronous ได้
ตัวอย่าง SMPP PDU
PDU Header
'command_length', (60) ... 00 00 00 3C
'command_id', (4) ... 00 00 00 04
'command_status', (0) ... 00 00 00 00
'sequence_number', (5) ... 00 00 00 05
PDU Body
'service_type', () ... 00
'source_addr_ton', (2) ... 02
'source_addr_npi', (8) ... 08
'source_addr', (555) ... 35 35 35 00
'dest_addr_ton', (1) ... 01
'dest_addr_npi', (1) ... 01
'dest_addr', (555555555) ... 35 35 35 35 35 35 35 35 35 00
'esm_class', (0) ... 00
'protocol_id', (0) ... 00
'priority_flag', (0) ... 00
'schedule_delivery_time', (0) ... 00
'validity_period', (0) ... 00
'registered_delivery', (0) ... 00
'replace_if_present_flag', (0) ... 00
'data_coding', (3) ... 03
'sm_default_msg_id', (0) ... 00
'sm_length', (15) ... 0F
'short_message', ...
Author: Suphakit Annoppornchai
Credit: https://saixiii.com, https://en.wikipedia.org