อินเทอร์เฟซ SMPP
ข้อมูลอินเทอร์เฟซ
โปรโตคอลนี้กำหนดโปรโตคอลการสื่อสาร SMPP ของบริการ EngageLab OTP โดยมีจุดมุ่งหมายเพื่อให้สามารถส่งข้อความและรายงานสถานะได้อย่างมีประสิทธิภาพและเชื่อถือได้ผ่านการเชื่อมต่อ TCP ข้อมูลอินเทอร์เฟซประกอบด้วยที่อยู่ IP หมายเลขพอร์ต และข้อมูลการยืนยันตัวตนที่จำเป็นสำหรับการเชื่อมต่อ โปรดตรวจสอบว่าได้กำหนดค่าด้วยบัญชีและรหัสผ่านที่ได้รับจากช่องทางที่ได้รับอนุญาตอย่างถูกต้อง
ที่อยู่ SMPP
ที่อยู่ 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
- สามารถเว้นว่างได้ ปัจจุบัน OTP ยังไม่ได้ใช้งาน
- 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: โปรโตคอลรับส่งข้อความสั้นแบบเพียร์ทูเพียร์ (Short Message Peer-to-Peer Protocol) ใช้สำหรับการแลกเปลี่ยนข้อความของเกตเวย์ SMS
- SUBMIT_SM: คำสั่ง SMPP สำหรับส่งข้อความ SMS
- DELIVER_SM: คำสั่ง SMPP ที่เซิร์ฟเวอร์ใช้ในการรายงานสถานะการส่งถึงของข้อความ
หากมีคำถามใด ๆ โปรดติดต่อ ฝ่ายสนับสนุนทางเทคนิค OTP










