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) เพื่อส่งคำขอส่งข้อความ ตรรกะฝั่งเซิร์ฟเวอร์มีดังนี้:

  1. เซิร์ฟเวอร์แยกวิเคราะห์เนื้อหาคำขอ และใช้ช่องทาง SMS ในการส่งเสมอ
  2. การส่งข้อความเป็นแบบซิงโครนัส ผลลัพธ์จะตอบกลับด้วยคำสั่ง SUBMIT_SM_RESP (คือ 0x80000004)
  3. สถานะการส่งจะรายงานผ่านข้อความ ดูรายละเอียดที่ รายงานการส่ง
  4. แนะนำให้ใช้การเข้ารหัส UCS2 เพื่อรองรับอักขระพิเศษและการรองรับหลายภาษา

แพ็กเก็ตข้อมูลฝั่งไคลเอนต์

ไคลเอนต์ส่งคำสั่ง SUBMIT_SM (คือ 0x00000004) เพื่อส่งข้อความ ต้องมีฟิลด์ต่อไปนี้:

  1. service_type
    • ค่า: MSG / CODE / MRKT
    • ค่าเริ่มต้น: MSG
  2. source_addr
    • สามารถเว้นว่างได้ ปัจจุบันยังไม่ใช้ใน SMS
  3. destination_addr
    • เป้าหมายของข้อความ ต้องอยู่ในรูปแบบหมายเลขโทรศัพท์สากล (เช่น +6598765432)
  4. 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 เป็นสตริง
        }
      }
      
                  
      โค้ดนี้โชว์เป็นหน้าต่างลอย
  5. data_coding
    • แนะนำให้ใช้การเข้ารหัส UCS2 เพื่อให้แน่ใจว่าอักขระพิเศษ {} ถูกแยกวิเคราะห์อย่างถูกต้อง
    • หากรองรับการส่ง {} โดยตรง สามารถใช้การเข้ารหัสเริ่มต้นได้ (คือ 0x00)
  6. 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) ฟิลด์เฉพาะมีดังนี้:

  1. service_type
    • ค่าคงที่: MSG
  2. source_addr
    • เว้นว่าง
  3. destination_addr
    • ตรงกับ destination_addr ในคำสั่ง SUBMIT_SM
  4. data_coding
    • วิธีการเข้ารหัส: ค่าเริ่มต้น 0x00
  5. esm_class
    • ตั้งค่าเป็น 0x00
  6. short_message
    • ห่อหุ้มรายงานการส่งในรูปแบบ delivery receipt
  7. ReceiptedMessageID ใน tlv
    • ID ข้อความ ใช้สำหรับเชื่อมโยงและระบุ
  8. MessageState ใน tlv
    • สถานะข้อความ ค่าของฟิลด์ 0x0427

การแยกวิเคราะห์สถานะ

ใน ฟิลด์ short_message ความหมายของค่า stat มีดังนี้:

สถานะ ความหมาย
DELIVRD ส่งสำเร็จ
UNDELIV ส่งล้มเหลว

คำอธิบายอื่น ๆ

คำสั่งที่ไม่ถูกต้อง

สำหรับคำสั่งที่ไม่ถูกต้องที่ไคลเอนต์ส่งมา เซิร์ฟเวอร์จะส่งคำสั่ง GENERIC_NACK (คือ 0x80000000) กลับและบันทึกบันทึกที่เกี่ยวข้อง เซิร์ฟเวอร์รองรับเฉพาะคำสั่งต่อไปนี้:

  1. คำสั่ง EnquireLink (คือ 0x00000015)
  2. คำสั่ง Unbind (คือ 0x00000006)
  3. คำสั่ง SubmitSM (คือ 0x00000004)
  4. คำสั่ง DeliverSMResp (คือ 0x80000005)
  5. คำสั่ง 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 ที่เซิร์ฟเวอร์ใช้รายงานสถานะการส่งข้อความ
Icon Solid Transparent White Qiyu
ติดต่อฝ่ายขาย