อินเทอร์เฟซการเรียกกลับสถานะวงจรชีวิต

เอกสารนี้อธิบายโครงสร้างข้อมูลและคำอธิบายฟิลด์ของอินเทอร์เฟซการเรียกกลับสถานะวงจรชีวิตของข้อความ ระบบจะเรียกกลับข้อมูลสถานะไปยัง URL ที่ลูกค้าตั้งค่าไว้ผ่านวิธี HTTP POST เมื่อสถานะข้อความมีการเปลี่ยนแปลง

วิธีการเรียกกลับ

  • เมธอดคำขอ: POST
  • Content-Type: application/json
  • การตอบกลับสำเร็จ: สถานะ HTTP 200 หรือ 204
  • การลองใหม่เมื่อล้มเหลว: หากลูกค้าไม่คืนสถานะสำเร็จ ระบบจะลองใหม่โดยอัตโนมัติ

โครงสร้างข้อมูล

1. โครงสร้างชั้นนอก (ReportLifecycles)

{ "total": 1, "rows": [ { // ReportLifecycle 对象数组 } ] }
              
              {
  "total": 1,
  "rows": [
    {
      // ReportLifecycle 对象数组
    }
  ]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย
ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
total int64 จำนวนระเบียนทั้งหมด ใช่
rows array อาเรย์ข้อมูลสถานะวงจรชีวิต ใช่

2. ออบเจ็กต์ ReportLifecycle

แต่ละสมาชิกในอาเรย์ rows มีโครงสร้างดังนี้:

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
message_id string ID ข้อความ ใช่
to string หมายเลขผู้รับ ใช่
server string ประเภทบริการ ใช่
channel string ประเภทช่องทาง ใช่
itime int64 timestamp การเรียกกลับ (วินาที) ใช่
custom_args map[string]any พารามิเตอร์ที่กำหนดเอง (พารามิเตอร์ที่ส่งเข้ามาขณะส่ง) ไม่ใช่
status object ออบเจ็กต์รายละเอียดสถานะ ไม่ใช่

3. ออบเจ็กต์ Status

ออบเจ็กต์ข้อมูลรายละเอียดสถานะ:

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
message_status string สถานะข้อความ เช่น: sentsent_faildelivereddelivered_failverified เป็นต้น ใช่
status_data object ออบเจ็กต์ข้อมูลสถานะ ดูรายละเอียดด้านล่าง ใช่
billing object ออบเจ็กต์ข้อมูลการเรียกเก็บเงิน ดูรายละเอียดด้านล่าง ไม่ใช่
error_code int รหัสข้อผิดพลาด 0 หมายถึงไม่มีข้อผิดพลาด ใช่
error_detail object ออบเจ็กต์รายละเอียดข้อผิดพลาด ดูรายละเอียดด้านล่าง ไม่ใช่
kwai_extra object ข้อมูลส่วนขยายเฉพาะของ Kwai ดูรายละเอียดด้านล่าง ไม่ใช่

หมายเหตุ: ฟิลด์ต่อไปนี้ใช้สำหรับสถิติภายใน จะไม่ถูกเรียกกลับไปยังลูกค้า:

  • analysis - ฟิลด์การวิเคราะห์สถิติภายใน

4. ออบเจ็กต์ StatusData

ข้อมูลพื้นฐานที่เกี่ยวข้องกับสถานะ:

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
msg_time int64 timestamp การสร้างข้อความ (วินาที) ใช่
message_id string ID ข้อความ ใช่
current_send_channel string ชื่อช่องทางที่ใช้ส่งปัจจุบัน ใช่
template_key string Key การตั้งค่าเทมเพลต ใช่
business_id string ID ธุรกิจ ใช่

หมายเหตุ: ฟิลด์ต่อไปนี้เป็นข้อมูลที่ละเอียดอ่อนหรือฟิลด์ภายใน ซึ่งถูกกรองออกแล้ว จะไม่ถูกเรียกกลับไปยังลูกค้า:

  • message_content - เนื้อหาข้อความ (ข้อมูลที่ละเอียดอ่อน)
  • parts - จำนวนชิ้นส่วนข้อความ (ฟิลด์ภายใน)
  • msg_type - ประเภทข้อความ (ฟิลด์ภายใน)
  • protocol_type - ประเภทโปรโตคอล (ฟิลด์ภายใน)
  • supplier_ids - ID ผู้ให้บริการ (ข้อมูลที่ละเอียดอ่อน)

5. ออบเจ็กต์ Billing

ข้อมูลการเรียกเก็บเงิน (คืนค่าเฉพาะเมื่อมีข้อมูลการเรียกเก็บเงิน):

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
cost float64 จำนวนค่าใช้จ่าย (เก็บทศนิยม 4 ตำแหน่ง) ใช่
currency string สกุลเงิน คงที่เป็น "USD" ใช่

หมายเหตุ: ฟิลด์ต่อไปนี้เป็นฟิลด์การเรียกเก็บเงินภายใน จะไม่ถูกเรียกกลับไปยังลูกค้า:

  • cost10000 - ฟิลด์การเรียกเก็บเงินภายใน (หน่วยหนึ่งในหมื่น)
  • sender_cost10000 - ต้นทุนฝั่งผู้ส่ง (หน่วยหนึ่งในหมื่น)

6. ออบเจ็กต์ ErrorDetail

รายละเอียดข้อผิดพลาด (คืนค่าเฉพาะเมื่อเกิดข้อผิดพลาด):

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
message string คำอธิบายข้อความข้อผิดพลาด ใช่
channel_code string รหัสข้อผิดพลาดดั้งเดิมที่ช่องทางคืนมา ใช่
channel_message string ข้อความข้อผิดพลาดดั้งเดิมที่ช่องทางคืนมา ใช่

7. ออบเจ็กต์ KwaiExtra

ข้อมูลส่วนขยายเฉพาะสำหรับลูกค้า Kwai (คืนค่าเฉพาะเมื่ออยู่ในสถานะนำส่งและเป็นลูกค้า Kwai):

ชื่อฟิลด์ ประเภท คำอธิบาย จำเป็นต้องคืนค่าหรือไม่
delivered_time int64 timestamp การนำส่ง (มิลลิวินาที) ใช่
parts int จำนวนรายการที่เรียกเก็บเงิน ใช่
duration int64 ระยะเวลาการรับสาย (วินาที) มีเฉพาะข้อความ Voice เท่านั้น ไม่ใช่

คำอธิบายสถานะข้อความ

ค่าสถานะข้อความที่พบบ่อย:

ค่าสถานะ คำอธิบาย
sent ส่งไปยังช่องทางแล้ว
sent_fail ส่งล้มเหลว
delivered นำส่งถึงเครื่องผู้ใช้แล้ว
delivered_fail นำส่งล้มเหลว
verified ผู้ใช้ตรวจสอบแล้ว (เช่น รหัส OTP ถูกใช้งาน)

ตัวอย่างการเรียกกลับ

ตัวอย่าง 1: นำส่งข้อความสำเร็จ

{ "total": 1, "rows": [ { "message_id": "123456789", "to": "+6598765432", "server": "sms", "channel": "sms", "itime": 1701234567, "custom_args": { "order_id": "ORDER123", "user_id": "USER456" }, "status": { "message_status": "delivered", "status_data": { "msg_time": 1701234560, "message_id": "123456789", "current_send_channel": "CHANNEL_A", "template_key": "verify_code", "business_id": "1001" }, "billing": { "cost": 0.005, "currency": "USD" }, "error_code": 0 } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456789",
      "to": "+6598765432",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234567,
      "custom_args": {
        "order_id": "ORDER123",
        "user_id": "USER456"
      },
      "status": {
        "message_status": "delivered",
        "status_data": {
          "msg_time": 1701234560,
          "message_id": "123456789",
          "current_send_channel": "CHANNEL_A",
          "template_key": "verify_code",
          "business_id": "1001"
        },
        "billing": {
          "cost": 0.005,
          "currency": "USD"
        },
        "error_code": 0
      }
    }
  ]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ตัวอย่าง 2: ส่งข้อความล้มเหลว

{ "total": 1, "rows": [ { "message_id": "123456790", "to": "+6598765433", "server": "sms", "channel": "sms", "itime": 1701234568, "status": { "message_status": "sent_fail", "status_data": { "msg_time": 1701234561, "message_id": "123456790", "current_send_channel": "CHANNEL_B", "template_key": "verify_code", "business_id": "1001" }, "error_code": 4001, "error_detail": { "message": "Invalid phone number", "channel_code": "INVALID_NUMBER", "channel_message": "The phone number format is invalid" } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456790",
      "to": "+6598765433",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234568,
      "status": {
        "message_status": "sent_fail",
        "status_data": {
          "msg_time": 1701234561,
          "message_id": "123456790",
          "current_send_channel": "CHANNEL_B",
          "template_key": "verify_code",
          "business_id": "1001"
        },
        "error_code": 4001,
        "error_detail": {
          "message": "Invalid phone number",
          "channel_code": "INVALID_NUMBER",
          "channel_message": "The phone number format is invalid"
        }
      }
    }
  ]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ตัวอย่าง 3: นำส่งข้อความล้มเหลว (พร้อมข้อมูลการเรียกเก็บเงิน)

{ "total": 1, "rows": [ { "message_id": "123456791", "to": "+6598765434", "server": "sms", "channel": "sms", "itime": 1701234570, "custom_args": { "campaign": "new_year_promo" }, "status": { "message_status": "delivered_fail", "status_data": { "msg_time": 1701234562, "message_id": "123456791", "current_send_channel": "CHANNEL_C", "template_key": "marketing", "business_id": "1001" }, "billing": { "cost": 0.0045, "currency": "USD" }, "error_code": 5002, "error_detail": { "message": "Phone number unreachable", "channel_code": "UNREACHABLE", "channel_message": "Subscriber absent" } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456791",
      "to": "+6598765434",
      "server": "sms",
      "channel": "sms",
      "itime": 1701234570,
      "custom_args": {
        "campaign": "new_year_promo"
      },
      "status": {
        "message_status": "delivered_fail",
        "status_data": {
          "msg_time": 1701234562,
          "message_id": "123456791",
          "current_send_channel": "CHANNEL_C",
          "template_key": "marketing",
          "business_id": "1001"
        },
        "billing": {
          "cost": 0.0045,
          "currency": "USD"
        },
        "error_code": 5002,
        "error_detail": {
          "message": "Phone number unreachable",
          "channel_code": "UNREACHABLE",
          "channel_message": "Subscriber absent"
        }
      }
    }
  ]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ตัวอย่าง 4: นำส่งข้อความ Voice ของลูกค้า Kwai

{ "total": 1, "rows": [ { "message_id": "123456792", "to": "+6598765435", "server": "voice", "channel": "voice", "itime": 1701234575, "status": { "message_status": "delivered", "status_data": { "msg_time": 1701234565, "message_id": "123456792", "current_send_channel": "VOICE_CHANNEL_A", "template_key": "voice_verify", "business_id": "2001" }, "billing": { "cost": 0.012, "currency": "USD" }, "error_code": 0, "kwai_extra": { "delivered_time": 1701234575000, "parts": 1, "duration": 45 } } } ] }
              
              {
  "total": 1,
  "rows": [
    {
      "message_id": "123456792",
      "to": "+6598765435",
      "server": "voice",
      "channel": "voice",
      "itime": 1701234575,
      "status": {
        "message_status": "delivered",
        "status_data": {
          "msg_time": 1701234565,
          "message_id": "123456792",
          "current_send_channel": "VOICE_CHANNEL_A",
          "template_key": "voice_verify",
          "business_id": "2001"
        },
        "billing": {
          "cost": 0.012,
          "currency": "USD"
        },
        "error_code": 0,
        "kwai_extra": {
          "delivered_time": 1701234575000,
          "parts": 1,
          "duration": 45
        }
      }
    }
  ]
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ข้อควรทราบ

  1. กฎการคืนค่าฟิลด์

    • ฟิลด์ทั้งหมดที่ทำเครื่องหมายเป็น omitempty จะไม่ปรากฏใน JSON ที่คืนค่า เมื่อค่าว่างหรือเป็นค่าศูนย์
    • ข้อมูลที่ละเอียดอ่อนและฟิลด์ภายในถูกกรองหรือเคลียร์ก่อนการเรียกกลับ
  2. ความปลอดภัย

    • เนื้อหาข้อความ (message_content) จะไม่ถูกเรียกกลับไปยังลูกค้า
    • ข้อมูลที่ละเอียดอ่อน เช่น ID ผู้ให้บริการ (supplier_ids) ถูกกรองออกแล้ว
    • ฟิลด์การเรียกเก็บเงินภายใน (cost10000sender_cost10000) จะไม่ถูกเรียกกลับ
  3. ข้อกำหนดการรับ

    • อินเทอร์เฟซการเรียกกลับของลูกค้าต้องตอบกลับภายใน 5 วินาที
    • ต้องคืนสถานะ HTTP 200 หรือ 204 เพื่อแสดงว่ารับสำเร็จ
    • หากคืนสถานะอื่นหรือหมดเวลา ระบบจะลองใหม่โดยอัตโนมัติ
  4. กลไกการลองใหม่

    • หลังจากการเรียกกลับล้มเหลว ระบบจะลองใหม่โดยอัตโนมัติ
    • ช่วงเวลาการลองใหม่จะเพิ่มขึ้นทีละขั้น
    • ในระหว่างการลองใหม่ ข้อมูลจะถูกบันทึกไว้ใน Redis
  5. คำอธิบาย timestamp

    • itime: timestamp ที่เกิดการเรียกกลับ หน่วยเป็นวินาที
    • msg_time: timestamp การสร้างข้อความ หน่วยเป็นวินาที
    • delivered_time: ฟิลด์เฉพาะของ Kwai, timestamp การนำส่ง หน่วยเป็นมิลลิวินาที
  6. พารามิเตอร์ที่กำหนดเอง

    • ฟิลด์ custom_args จะคืนค่าพารามิเตอร์ที่กำหนดเองที่ส่งเข้ามาขณะส่งข้อความตามเดิม
    • หากไม่ได้ส่งพารามิเตอร์ที่กำหนดเองขณะส่ง ฟิลด์นี้จะไม่ปรากฏในข้อมูลการเรียกกลับ

เอกสารอ้างอิงรหัสข้อผิดพลาด

คำอธิบายรหัสข้อผิดพลาดที่พบบ่อย (สำหรับรหัสข้อผิดพลาดเฉพาะ โปรดดูเอกสารรหัสข้อผิดพลาด):

รหัสข้อผิดพลาด คำอธิบาย
0 ไม่มีข้อผิดพลาด ดำเนินการสำเร็จ
4001 รูปแบบหมายเลขไม่ถูกต้อง
4002 ไม่มีหมายเลขนี้
5001 ช่องทางปฏิเสธ
5002 ไม่สามารถเข้าถึงผู้ใช้ได้
6001 เครือข่ายหมดเวลา

สำหรับคำอธิบายรหัสข้อผิดพลาดที่ละเอียดยิ่งขึ้น โปรดดูเอกสารรหัสข้อผิดพลาดแยกต่างหาก

บันทึกการอัปเดต

  • 2024-01: เวอร์ชันแรก
  • เพิ่มฟิลด์ kwai_extra เพื่อรองรับลูกค้า Kwai
  • กรองฟิลด์ข้อมูลที่ละเอียดอ่อน เพิ่มความปลอดภัย
Icon Solid Transparent White Qiyu
ติดต่อฝ่ายขาย