SMPP
โปรโตคอลนี้กำหนดโปรโตคอลการสื่อสาร SMPP ของบริการ EngageLab SMS โดยมีจุดมุ่งหมายเพื่อให้การส่งข้อความและการรายงานสถานะเป็นไปอย่างมีประสิทธิภาพและน่าเชื่อถือผ่านการเชื่อมต่อ TCP ข้อมูลอินเทอร์เฟซประกอบด้วยที่อยู่ IP หมายเลขพอร์ต และข้อมูลการยืนยันตัวตนที่จำเป็นสำหรับการเชื่อมต่อ โปรดตรวจสอบให้แน่ใจว่าได้กำหนดค่าอย่างถูกต้องตามบัญชีและรหัสผ่านที่ได้รับจากช่องทางที่ได้รับอนุญาต
ที่อยู่ SMPP
otpsmpp.api.engagelab.cc
โปรดรับข้อมูลต่อไปนี้จากช่องทางที่ได้รับอนุญาต (เช่น ฝ่ายธุรกิจหรือฝ่ายสนับสนุนทางเทคนิค):
- พอร์ต:
{ port } - บัญชี:
{ system_id } - รหัสผ่าน:
{ password }
การสร้างการเชื่อมต่อ
แพ็กเก็ตข้อมูลฝั่งไคลเอนต์
หลังจากสร้างการเชื่อมต่อ TCP แล้ว แพ็กเก็ตข้อมูลแรกต้องส่งคำสั่ง BindTransceiver (คือ 0x00000009) เพื่อตรวจสอบการยืนยันตัวตน แพ็กเก็ตข้อมูลนี้ต้องมีฟิลด์ต่อไปนี้:
- system_id: บัญชีระบบที่กำหนดให้กับลูกค้า ใช้สำหรับระบุตัวตน
- password: รหัสผ่านการเข้าถึงที่ตรงกับบัญชีระบบ ใช้สำหรับการยืนยันตัวตน
การตอบกลับฝั่งเซิร์ฟเวอร์
การตอบกลับเมื่อสำเร็จ
- เซิร์ฟเวอร์จะส่งคำสั่ง
BindTransceiverResp(คือ0x80000009) เพื่อตอบกลับ - เติมฟิลด์
system_idโดยมีค่าตรงกับฟิลด์system_idที่ได้รับ
การตอบกลับเมื่อล้มเหลว
- หากการยืนยันตัวตนล้มเหลว เซิร์ฟเวอร์จะตัดการเชื่อมต่อ TCP นั้น และบันทึกสาเหตุของความล้มเหลว
การส่งข้อความ
ตรรกะฝั่งเซิร์ฟเวอร์
การส่งข้อความใช้คำสั่ง SUBMIT_SM (คือ 0x00000004) เพื่อส่งคำขอส่งข้อความ ตรรกะฝั่งเซิร์ฟเวอร์มีดังนี้:
- เซิร์ฟเวอร์แยกวิเคราะห์เนื้อหาคำขอ และใช้ช่องทาง SMS ในการส่งเสมอ
- การส่งข้อความเป็นแบบซิงโครนัส ผลลัพธ์จะตอบกลับด้วยคำสั่ง
SUBMIT_SM_RESP(คือ0x80000004) - สถานะการส่งจะรายงานผ่านข้อความ ดูรายละเอียดที่ รายงานการส่ง
- แนะนำให้ใช้การเข้ารหัส
UCS2เพื่อรองรับอักขระพิเศษและการรองรับหลายภาษา
แพ็กเก็ตข้อมูลฝั่งไคลเอนต์
ไคลเอนต์ส่งคำสั่ง SUBMIT_SM (คือ 0x00000004) เพื่อส่งข้อความ ต้องมีฟิลด์ต่อไปนี้:
- service_type
- ค่า:
MSG/CODE/MRKT - ค่าเริ่มต้น:
MSG
- ค่า:
- source_addr
- สามารถเว้นว่างได้ ปัจจุบันยังไม่ใช้ใน SMS
- destination_addr
- เป้าหมายของข้อความ ต้องอยู่ในรูปแบบหมายเลขโทรศัพท์สากล (เช่น
+6598765432)
- เป้าหมายของข้อความ ต้องอยู่ในรูปแบบหมายเลขโทรศัพท์สากล (เช่น
- short_message
- เนื้อหาข้อความ ใช้รูปแบบ JSON ดังนี้:{ "id": "xxx", // ID เทมเพลต "language": "default", // ภาษาที่ใช้ ค่าเริ่มต้นเป็น default "code": "xx", // รหัสยืนยัน ใช้เฉพาะเมื่อ service_type เป็น code "params": { // คู่ key-value ที่กำหนดเอง "key1": "val1" // รูปแบบของ val เป็นสตริง } }
{ "id": "xxx", // ID เทมเพลต "language": "default", // ภาษาที่ใช้ ค่าเริ่มต้นเป็น default "code": "xx", // รหัสยืนยัน ใช้เฉพาะเมื่อ service_type เป็น code "params": { // คู่ key-value ที่กำหนดเอง "key1": "val1" // รูปแบบของ val เป็นสตริง } }โค้ดนี้โชว์เป็นหน้าต่างลอย
- เนื้อหาข้อความ ใช้รูปแบบ JSON ดังนี้:
- data_coding
- แนะนำให้ใช้การเข้ารหัส
UCS2เพื่อให้แน่ใจว่าอักขระพิเศษ{}ถูกแยกวิเคราะห์อย่างถูกต้อง - หากรองรับการส่ง
{}โดยตรง สามารถใช้การเข้ารหัสเริ่มต้นได้ (คือ0x00)
- แนะนำให้ใช้การเข้ารหัส
- status ใน header
- ตั้งค่าเป็น
0x00000000
- ตั้งค่าเป็น
การตอบกลับฝั่งเซิร์ฟเวอร์
เซิร์ฟเวอร์ส่งคำสั่ง SUBMIT_SM_RESP (คือ 0x80000004) เพื่อตอบกลับผลการส่งข้อความ
การตอบกลับเมื่อสำเร็จ
- ค่าของฟิลด์ status ใน header:
0x00000000 - ฟิลด์ MESSAGE_ID: ID ของข้อความตอบกลับ ใช้สำหรับเชื่อมโยงรายงานการส่ง
การตอบกลับเมื่อล้มเหลว
- เซิร์ฟเวอร์เติม ฟิลด์ status ใน header เพื่อแจ้งสาเหตุของความล้มเหลว:
| รหัสสถานะ | คำอธิบาย | ค่า |
|---|---|---|
ESME_RINVPARAM |
พารามิเตอร์ไม่ถูกต้อง โปรดตรวจสอบรูปแบบเนื้อหาคำขอ | 0x00000032 |
ESME_RSYSERR |
ข้อผิดพลาดของบริการภายใน แนะนำให้ลองใหม่ภายหลัง | 0x00000008 |
ESME_RSUBMITFAIL |
การส่งล้มเหลว อาจเกิดจากปัญหาเทมเพลตหรือสาเหตุอื่น | 0x00000045 |
ESME_RINVNUMMSGS |
รูปแบบเนื้อหาของฟิลด์ short_message ผิดพลาด |
0x00000055 |
ESME_RUNKNOWNERR |
ข้อผิดพลาดที่ไม่ทราบสาเหตุ โปรดติดต่อฝ่ายสนับสนุนทางเทคนิค | 0x000000FF |
รายงานการส่ง
เซิร์ฟเวอร์รายงานสถานะการส่งผ่านคำสั่ง DELIVER_SM (คือ 0x00000005) ฟิลด์เฉพาะมีดังนี้:
- service_type
- ค่าคงที่:
MSG
- ค่าคงที่:
- source_addr
- เว้นว่าง
- destination_addr
- ตรงกับ
destination_addrในคำสั่งSUBMIT_SM
- ตรงกับ
- data_coding
- วิธีการเข้ารหัส: ค่าเริ่มต้น
0x00
- วิธีการเข้ารหัส: ค่าเริ่มต้น
- esm_class
- ตั้งค่าเป็น
0x00
- ตั้งค่าเป็น
- short_message
- ห่อหุ้มรายงานการส่งในรูปแบบ
delivery receipt
- ห่อหุ้มรายงานการส่งในรูปแบบ
- ReceiptedMessageID ใน tlv
- ID ข้อความ ใช้สำหรับเชื่อมโยงและระบุ
- MessageState ใน tlv
- สถานะข้อความ ค่าของฟิลด์
0x0427
- สถานะข้อความ ค่าของฟิลด์
การแยกวิเคราะห์สถานะ
ใน ฟิลด์ short_message ความหมายของค่า stat มีดังนี้:
| สถานะ | ความหมาย |
|---|---|
DELIVRD |
ส่งสำเร็จ |
UNDELIV |
ส่งล้มเหลว |
คำอธิบายอื่น ๆ
คำสั่งที่ไม่ถูกต้อง
สำหรับคำสั่งที่ไม่ถูกต้องที่ไคลเอนต์ส่งมา เซิร์ฟเวอร์จะส่งคำสั่ง GENERIC_NACK (คือ 0x80000000) กลับและบันทึกบันทึกที่เกี่ยวข้อง เซิร์ฟเวอร์รองรับเฉพาะคำสั่งต่อไปนี้:
- คำสั่ง
EnquireLink(คือ0x00000015) - คำสั่ง
Unbind(คือ0x00000006) - คำสั่ง
SubmitSM(คือ0x00000004) - คำสั่ง
DeliverSMResp(คือ0x80000005) - คำสั่ง
BindTransceiver(คือ0x00000009)
การรักษาการเชื่อมต่อให้ทำงานอยู่
ไคลเอนต์ต้องส่งคำสั่ง EnquireLink (คือ 0x00000015) ทุก 30 วินาที (ความคลาดเคลื่อน ±5 วินาที) เพื่อให้แน่ใจว่าการเชื่อมต่อยังทำงานอยู่
ความหมายของสถานะการส่ง
| รหัสสถานะ | ความหมาย |
|---|---|
ESME_RINVPARAM |
พารามิเตอร์ไม่ถูกต้อง โปรดตรวจสอบรูปแบบเนื้อหาคำขอ |
ESME_RINVNUMMSGS |
รูปแบบเนื้อหาของฟิลด์ short_message ผิดพลาด |
ESME_RSUBMITFAIL |
การส่งล้มเหลว อาจเกิดจากปัญหาเทมเพลตหรือสาเหตุอื่น |
ESME_RSYSERR |
ข้อผิดพลาดของบริการภายใน แนะนำให้ลองใหม่ภายหลัง |
ESME_RUNKNOWNERR |
ข้อผิดพลาดที่ไม่ทราบสาเหตุ โปรดติดต่อฝ่ายสนับสนุนทางเทคนิค |
DELIVRD |
ส่งข้อความสำเร็จ |
UNDELIV |
ไม่สามารถส่งข้อความได้ |
คำอธิบายศัพท์
- SMPP: โปรโตคอลข้อความสั้นแบบ Peer-to-Peer (Short Message Peer-to-Peer Protocol) ใช้สำหรับการแลกเปลี่ยนข้อความของเกตเวย์ SMS
- SUBMIT_SM: คำสั่ง SMPP สำหรับส่งข้อความ SMS
- DELIVER_SM: คำสั่ง SMPP ที่เซิร์ฟเวอร์ใช้รายงานสถานะการส่งข้อความ










