SMPP Send
ข้อมูลอินเทอร์เฟซ
โปรโตคอลนี้กำหนดโปรโตคอลการสื่อสาร SMPP สำหรับบริการ SMS โดยมีเป้าหมายเพื่อให้เกิดการส่งข้อความและการรายงานสถานะที่มีประสิทธิภาพและเชื่อถือได้ผ่านการเชื่อมต่อ TCP ข้อมูลอินเทอร์เฟซประกอบด้วยที่อยู่ IP, พอร์ต และข้อมูลประจำตัวสำหรับการตรวจสอบสิทธิ์ โปรดตรวจสอบให้แน่ใจว่าข้อมูลประจำตัวที่ได้รับจากช่องทางที่ได้รับอนุญาตถูกกำหนดค่าอย่างถูกต้อง
ที่อยู่ SMPP
โปรดขอรับข้อมูลต่อไปนี้จากช่องทางที่ได้รับอนุญาต (เช่น ฝ่ายขายหรือฝ่ายสนับสนุนด้านเทคนิค):
- ที่อยู่ IP:
{ ip }
- พอร์ต:
{ 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
- เป้าหมายของข้อความ ต้องอยู่ในรูปแบบหมายเลขโทรศัพท์สากล (เช่น
+8613800138000
)
- เป้าหมายของข้อความ ต้องอยู่ในรูปแบบหมายเลขโทรศัพท์สากล (เช่น
- short_message
- เนื้อหาข้อความในรูปแบบ JSON ดังตัวอย่างด้านล่าง:{ "id": "xxx", // รหัสแม่แบบ "language": "default", // ภาษา ค่าเริ่มต้นคือ "default" "code": "xx", // รหัสยืนยัน ใช้เมื่อ service_type เป็น "code" "params": { // คู่คีย์-ค่าแบบกำหนดเอง "key1": "val1" // ค่าต้องเป็นสตริง } }
{ "id": "xxx", // รหัสแม่แบบ "language": "default", // ภาษา ค่าเริ่มต้นคือ "default" "code": "xx", // รหัสยืนยัน ใช้เมื่อ service_type เป็น "code" "params": { // คู่คีย์-ค่าแบบกำหนดเอง "key1": "val1" // ค่าต้องเป็นสตริง } }
โค้ดนี้โชว์เป็นหน้าต่างลอย
- เนื้อหาข้อความในรูปแบบ JSON ดังตัวอย่างด้านล่าง:
- data_coding
- ขอแนะนำให้ใช้การเข้ารหัส
UCS2
เพื่อให้แน่ใจว่าอักขระพิเศษ{}
ถูกแยกวิเคราะห์อย่างถูกต้อง - หาก
{}
สามารถส่งได้โดยตรง สามารถใช้การเข้ารหัสเริ่มต้น (0x00
)
- ขอแนะนำให้ใช้การเข้ารหัส
- header status
- ตั้งค่าเป็น
0x00000000
- ตั้งค่าเป็น
การตอบสนองของเซิร์ฟเวอร์
เซิร์ฟเวอร์จะตอบกลับคำขอการส่งข้อความด้วยคำสั่ง SUBMIT_SM_RESP
(0x80000004
)
การตอบสนองที่สำเร็จ
- ค่าในฟิลด์ header status:
0x00000000
- ฟิลด์ MESSAGE_ID: รหัสข้อความที่ใช้เชื่อมโยงกับรายงานการส่ง
การตอบสนองที่ล้มเหลว
- เซิร์ฟเวอร์จะเติมฟิลด์ header status เพื่อระบุเหตุผลของความล้มเหลว:
รหัสสถานะ | คำอธิบาย | ค่า |
---|---|---|
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 in tlv
- รหัสข้อความสำหรับการเชื่อมโยง
- MessageState in 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 สำหรับการแลกเปลี่ยนข้อความระหว่างเกตเวย์ SMS
- SUBMIT_SM: คำสั่ง SMPP สำหรับการส่งข้อความ
- DELIVER_SM: คำสั่ง SMPP สำหรับรายงานสถานะการส่งข้อความ
หากมีคำถามใดๆ โปรดติดต่อ ฝ่ายสนับสนุนด้านเทคนิค