อินเทอร์เฟซคอลแบ็กสถานะวงจรชีวิต
เอกสารนี้อธิบายโครงสร้างข้อมูลและคำอธิบายฟิลด์ของอินเทอร์เฟซการเรียกกลับสถานะวงจรชีวิตของข้อความ ระบบจะใช้ HTTP POST เพื่อส่งข้อมูลสถานะไปยัง URL ที่ลูกค้ากำหนดเมื่อสถานะข้อความเปลี่ยนแปลง
วิธีการเรียกกลับ
- วิธีการร้องขอ:
POST - Content-Type:
application/json - การตอบกลับสำเร็จ: รหัสสถานะ HTTP 200 หรือ 204
- การลองใหม่ในกรณีล้มเหลว: หากลูกค้าไม่ส่งคืนรหัสสถานะสำเร็จ ระบบจะลองใหม่โดยอัตโนมัติ
โครงสร้างข้อมูล
1. โครงสร้างภายนอก (ReportLifecycles)
{
"total": 1,
"rows": [
{
// อาร์เรย์ของวัตถุ ReportLifecycle
}
]
}
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
|---|---|---|---|
total |
int64 | จำนวนระเบียนทั้งหมด | ใช่ |
rows |
array | อาร์เรย์ของข้อมูลสถานะวงจรชีวิต | ใช่ |
2. วัตถุ ReportLifecycle
แต่ละองค์ประกอบในอาร์เรย์ rows มีโครงสร้างดังนี้:
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
|---|---|---|---|
message_id |
string | รหัสข้อความ | ใช่ |
to |
string | หมายเลขผู้รับ | ใช่ |
server |
string | ประเภทบริการ | ใช่ |
channel |
string | ประเภทช่องทาง | ใช่ |
itime |
int64 | เวลาการเรียกกลับ (เป็นวินาที) | ใช่ |
custom_args |
map[string]any | พารามิเตอร์ที่กำหนดเอง (พารามิเตอร์ที่ส่งในระหว่างการส่ง) | ไม่ใช่ |
status |
object | วัตถุรายละเอียดสถานะ | ไม่ใช่ |
3. วัตถุ Status
วัตถุข้อมูลรายละเอียดสถานะ:
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
|---|---|---|---|
message_status |
string | สถานะข้อความ เช่น sent, sent_fail, delivered, delivered_fail, verified เป็นต้น |
ใช่ |
status_data |
object | วัตถุข้อมูลสถานะ ดูด้านล่าง | ใช่ |
billing |
object | วัตถุข้อมูลการเรียกเก็บเงิน ดูด้านล่าง | ไม่ใช่ |
error_code |
int | รหัสข้อผิดพลาด, 0 หมายถึงไม่มีข้อผิดพลาด | ใช่ |
error_detail |
object | วัตถุรายละเอียดข้อผิดพลาด ดูด้านล่าง | ไม่ใช่ |
kwai_extra |
object | ข้อมูลขยายเฉพาะของ Kwai ดูด้านล่าง | ไม่ใช่ |
หมายเหตุ: ฟิลด์ต่อไปนี้ใช้สำหรับการวิเคราะห์ภายในและจะไม่รวมอยู่ในการเรียกกลับไปยังลูกค้า:
- ฟิลด์การวิเคราะห์ทางสถิติภายในanalysis
4. วัตถุ StatusData
ข้อมูลพื้นฐานที่เกี่ยวข้องกับสถานะ:
| ชื่อฟิลด์ | ประเภท | คำอธิบาย | จำเป็น |
|---|---|---|---|
msg_time |
int64 | เวลาสร้างข้อความ (เป็นวินาที) | ใช่ |
message_id |
string | รหัสข้อความ | ใช่ |
current_send_channel |
string | ชื่อช่องทางการส่งปัจจุบัน | ใช่ |
template_key |
string | คีย์การกำหนดค่ารูปแบบ | ใช่ |
business_id |
string | รหัสธุรกิจ | ใช่ |
หมายเหตุ: ฟิลด์ต่อไปนี้มีข้อมูลที่ละเอียดอ่อนหรือเป็นฟิลด์ภายในและถูกกรองออกไปและจะไม่รวมอยู่ในการเรียกกลับไปยังลูกค้า:
- เนื้อหาข้อความ (ข้อมูลที่ละเอียดอ่อน)message_content- จำนวนส่วนของข้อความ (ฟิลด์ภายใน)parts- ประเภทข้อความ (ฟิลด์ภายใน)msg_type- ประเภทโปรโตคอล (ฟิลด์ภายใน)protocol_type- รหัสผู้ให้บริการ (ข้อมูลที่ละเอียดอ่อน)supplier_ids
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 | เวลาการจัดส่ง (เป็นมิลลิวินาที) | ใช่ |
parts |
int | จำนวนส่วนการเรียกเก็บเงิน | ใช่ |
duration |
int64 | ระยะเวลาการโทร (เป็นวินาที), ใช้ได้เฉพาะสำหรับข้อความเสียง | ไม่ใช่ |
คำอธิบายสถานะข้อความ
ค่าของสถานะข้อความทั่วไป:
| ค่าสถานะ | คำอธิบาย |
|---|---|
sent |
ส่งไปยังช่องทาง |
sent_fail |
การส่งล้มเหลว |
delivered |
ส่งถึงอุปกรณ์ของผู้ใช้ |
delivered_fail |
การจัดส่งล้มเหลว |
verified |
ยืนยันโดยผู้ใช้ (เช่น ใช้รหัส OTP) |
ตัวอย่างการเรียกกลับ
ตัวอย่าง 1: ข้อความส่งสำเร็จ
{
"total": 1,
"rows": [
{
"message_id": "123456789",
"to": "+8613800138000",
"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": "+8613800138001",
"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": "+8613800138002",
"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: ข้อความเสียงของลูกค้า Kwai ส่งสำเร็จ
{
"total": 1,
"rows": [
{
"message_id": "123456792",
"to": "+8613800138003",
"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
}
}
}
]
}
หมายเหตุ
กฎการส่งคืนฟิลด์
- ฟิลด์ทั้งหมดที่มีการทำเครื่องหมาย
omitemptyจะไม่ปรากฏใน JSON ที่ส่งคืนหากค่าของฟิลด์นั้นว่างเปล่าหรือเป็นศูนย์ - ข้อมูลที่ละเอียดอ่อนและฟิลด์ภายในถูกกรองหรือเคลียร์ก่อนการเรียกกลับ
- ฟิลด์ทั้งหมดที่มีการทำเครื่องหมาย
ความปลอดภัย
- เนื้อหาข้อความ (
message_content) จะไม่รวมอยู่ในการเรียกกลับไปยังลูกค้า - ข้อมูลที่ละเอียดอ่อน เช่น รหัสผู้ให้บริการ (
supplier_ids) ถูกกรองออกไป - ฟิลด์การเรียกเก็บเงินภายใน (
cost10000,sender_cost10000) จะไม่รวมอยู่
- เนื้อหาข้อความ (
ข้อกำหนดการรับ
- อินเทอร์เฟซการเรียกกลับของลูกค้าต้องตอบกลับภายใน 5 วินาที
- ต้องส่งคืนรหัสสถานะ HTTP 200 หรือ 204 เพื่อแสดงการรับสำเร็จ
- หากส่งคืนรหัสสถานะอื่นหรือเกิดการหมดเวลา ระบบจะลองใหม่โดยอัตโนมัติ
กลไกการลองใหม่
- การลองใหม่โดยอัตโนมัติจะดำเนินการหลังจากการเรียกกลับล้มเหลว
- ช่วงเวลาการลองใหม่จะเพิ่มขึ้นเรื่อยๆ
- ข้อมูลจะถูกเก็บใน Redis ในช่วงเวลาการลองใหม่
คำอธิบายเวลา
itime: เวลาที่เกิดการเรียกกลับ, เป็นวินาทีmsg_time: เวลาสร้างข้อความ, เป็นวินาทีdelivered_time: ฟิลด์เฉพาะของ Kwai, เวลาการจัดส่ง, เป็นมิลลิวินาที
พารามิเตอร์ที่กำหนดเอง
- ฟิลด์
custom_argsจะส่งคืนพารามิเตอร์ที่กำหนดเองที่ส่งในระหว่างการส่งข้อความตามที่เป็น - หากไม่มีการส่งพารามิเตอร์ที่กำหนดเองในระหว่างการส่ง ฟิลด์นี้จะไม่ปรากฏในข้อมูลการเรียกกลับ
- ฟิลด์
การอ้างอิงรหัสข้อผิดพลาด
คำอธิบายรหัสข้อผิดพลาดทั่วไป (ดูเอกสารรหัสข้อผิดพลาดสำหรับรหัสข้อผิดพลาดเฉพาะ):
| รหัสข้อผิดพลาด | คำอธิบาย |
|---|---|
| 0 | ไม่มีข้อผิดพลาด, การดำเนินการสำเร็จ |
| 4001 | รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง |
| 4002 | หมายเลขโทรศัพท์ไม่มีอยู่จริง |
| 5001 | ช่องทางปฏิเสธ |
| 5002 | ผู้ใช้ไม่สามารถติดต่อได้ |
| 6001 | การหมดเวลาของเครือข่าย |
สำหรับคำอธิบายรหัสข้อผิดพลาดที่ละเอียดมากขึ้น โปรดดูเอกสารรหัสข้อผิดพลาดแยกต่างหาก
บันทึกการเปลี่ยนแปลง
- 2024-01: เวอร์ชันเริ่มต้น
- เพิ่มการสนับสนุนฟิลด์
kwai_extraสำหรับลูกค้า Kwai - กรองฟิลด์ข้อมูลที่ละเอียดอ่อนเพื่อเพิ่มความปลอดภัย










