SMPP API

ข้อมูล API

โปรโตคอลนี้กำหนดการสื่อสาร SMPP สำหรับบริการ OTP ของ EngageLab และออกแบบมาเพื่อให้สามารถส่งข้อความและรายงานสถานะได้อย่างมีประสิทธิภาพและเชื่อถือได้ผ่านการเชื่อมต่อ TCP ข้อมูล API ประกอบด้วยที่อยู่ IP หมายเลขพอร์ต และรายละเอียดการยืนยันตัวตนที่จำเป็นสำหรับการเชื่อมต่อ โปรดตรวจสอบให้แน่ใจว่าบัญชีและรหัสผ่านที่ได้รับผ่านช่องทางที่ได้รับอนุญาตได้รับการกำหนดค่าอย่างถูกต้อง

ที่อยู่ SMPP

ที่อยู่ SMPP: otpsmpp.api.engagelab.cc

โปรดรับข้อมูลต่อไปนี้ผ่านช่องทางที่ได้รับอนุญาต เช่น ฝ่ายธุรกิจหรือฝ่ายสนับสนุนด้านเทคนิค:

  • Port: { port }
  • Account: { system_id }
  • Password: { 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": { // คู่คีย์-ค่าที่กำหนดเอง "key1": "val1" // val ต้องอยู่ในรูปแบบสตริง } }
                    
                    {
        "id": "xxx",           // ID เทมเพลต
        "language": "default", // ภาษาที่ใช้; ค่าเริ่มต้นคือ default
        "code": "xx",          // รหัสยืนยัน; ใช้เฉพาะเมื่อ service_type เป็น CODE
        "params": {            // คู่คีย์-ค่าที่กำหนดเอง
          "key1": "val1"       // val ต้องอยู่ในรูปแบบสตริง
        }
      }
      
                  
      โค้ดนี้โชว์เป็นหน้าต่างลอย
  5. data_coding

    • แนะนำให้ใช้การเข้ารหัส UCS2 เพื่อให้มั่นใจว่าสามารถแยกวิเคราะห์อักขระพิเศษ เช่น {} ได้อย่างถูกต้อง
    • หากรองรับการส่ง {} โดยตรง สามารถใช้การเข้ารหัสเริ่มต้นได้ (0x00)
  6. status in the header

    • ตั้งค่าเป็น 0x00000000

การตอบกลับจากเซิร์ฟเวอร์

เซิร์ฟเวอร์จะส่งคำสั่ง SUBMIT_SM_RESP (0x80000004) เพื่อตอบกลับผลลัพธ์การส่งข้อความ

การตอบกลับเมื่อสำเร็จ

  • ค่าของฟิลด์ status ใน header: 0x00000000
  • ฟิลด์ MESSAGE_ID: ID ข้อความตอบกลับ ใช้สำหรับเชื่อมโยงกับรายงานการส่ง

การตอบกลับเมื่อล้มเหลว

  • เซิร์ฟเวอร์จะเติมค่าใน ฟิลด์ status ใน header เพื่อระบุสาเหตุของความล้มเหลว:
Status Code Description Value
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 in TLV

    • ID ข้อความ ใช้สำหรับการเชื่อมโยงและการระบุ
  8. MessageState in TLV

    • สถานะข้อความ โดยค่าของฟิลด์คือ 0x0427

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

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

Status Meaning
DELIVRD ส่งสำเร็จแล้ว
UNDELIV การส่งล้มเหลว

หมายเหตุอื่น ๆ

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

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

  1. EnquireLink command (0x00000015)
  2. Unbind command (0x00000006)
  3. SubmitSM command (0x00000004)
  4. DeliverSMResp command (0x80000005)
  5. BindTransceiver command (0x00000009)

การคงการเชื่อมต่อ

ไคลเอนต์ต้องส่งคำสั่ง EnquireLink (0x00000015) ทุก ๆ 30 วินาที (ค่าความคลาดเคลื่อน: ±5 วินาที) เพื่อให้แน่ใจว่าการเชื่อมต่อยังคงใช้งานได้

ความหมายของสถานะการส่ง

Status Code Meaning
ESME_RINVPARAM พารามิเตอร์ไม่ถูกต้อง โปรดตรวจสอบรูปแบบเนื้อหาคำขอ
ESME_RINVNUMMSGS รูปแบบเนื้อหาในฟิลด์ short_message ไม่ถูกต้อง
ESME_RSUBMITFAIL การส่งล้มเหลว อาจเกิดจากปัญหาเทมเพลตหรือสาเหตุอื่น ๆ
ESME_RSYSERR ข้อผิดพลาดภายในบริการ แนะนำให้ลองอีกครั้งในภายหลัง
ESME_RUNKNOWNERR ข้อผิดพลาดที่ไม่ทราบสาเหตุ โปรดติดต่อฝ่ายสนับสนุนด้านเทคนิค
DELIVRD ส่งข้อความสำเร็จแล้ว
UNDELIV ไม่สามารถส่งข้อความได้

คำศัพท์

  • SMPP: โปรโตคอล Short Message Peer-to-Peer ใช้สำหรับแลกเปลี่ยนข้อความกับเกตเวย์ SMS
  • SUBMIT_SM: คำสั่ง SMPP สำหรับส่งข้อความ SMS
  • DELIVER_SM: คำสั่ง SMPP ที่เซิร์ฟเวอร์ใช้เพื่อรายงานสถานะการส่งข้อความ

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

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