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

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

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

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

  1. service_type
    • ค่าที่รับได้: MSG / CODE / MRKT
    • ค่าเริ่มต้น: MSG
  2. source_addr
    • สามารถเว้นว่างได้ ปัจจุบัน OTP ยังไม่ได้ใช้งาน
  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: โปรโตคอลรับส่งข้อความสั้นแบบเพียร์ทูเพียร์ (Short Message Peer-to-Peer Protocol) ใช้สำหรับการแลกเปลี่ยนข้อความของเกตเวย์ SMS
  • SUBMIT_SM: คำสั่ง SMPP สำหรับส่งข้อความ SMS
  • DELIVER_SM: คำสั่ง SMPP ที่เซิร์ฟเวอร์ใช้ในการรายงานสถานะการส่งถึงของข้อความ

หากมีคำถามใด ๆ โปรดติดต่อ ฝ่ายสนับสนุนทางเทคนิค OTP

Icon Solid Transparent White Qiyu
ติดต่อฝ่ายขาย