การเรียกกลับ API
API คอลแบ็ค
ภาพรวม
ข้อมูลสถานะข้อความจะถูกส่งกลับไปยังระบบธุรกิจขององค์กร และสามารถทำการวิเคราะห์สถิติตามข้อมูลที่ได้รับ
ที่อยู่คอลแบ็ค
องค์กรต้องตั้งค่าที่อยู่คอลแบ็คเพื่อรับการเปลี่ยนแปลงสถานะของข้อความ ขณะนี้ยังไม่มีส่วนติดต่อผู้ใช้ผ่านเว็บ โปรดติดต่อเจ้าหน้าที่เทคนิคของ EngageLab เพื่อกำหนดที่อยู่คอลแบ็ค
การตรวจสอบความถูกต้องของที่อยู่คอลแบ็ค
เมื่อกำหนดที่อยู่คอลแบ็คในการจัดการหลังบ้านของ Push ภายใต้การตั้งค่าแอปพลิเคชัน จะมีการส่งคำขอ POST พร้อมด้วยพารามิเตอร์ echostr ที่สร้างขึ้นแบบสุ่มเป็นสตริง 8 ตัวอักษรในเนื้อหาคำขอ คุณต้องส่งคืนค่าของ echostr ในตัวตอบกลับดังตัวอย่างด้านล่าง:
เนื้อหาคำขอ (Request Body):
{
"echostr": "12345678"
}
เนื้อหาตอบกลับ (Response Body):
12345678
กลไกการรักษาความปลอดภัย
ใช้สำหรับการยืนยันตัวตนของลูกค้า (ไม่บังคับ)
เพื่อให้มั่นใจว่าแหล่งที่มาของข้อความมาจาก EngageLab คุณสามารถเลือกที่จะตรวจสอบแหล่งที่มาของข้อมูล POST ได้ หรือคุณสามารถแยกข้อมูล POST โดยไม่ต้องตรวจสอบตัวตน
วิธีการยืนยันตัวตนคือ:
- กำหนดชื่อผู้ใช้คอลแบ็ค (
username) และรหัสลับคอลแบ็ค (secret) ในคอนโซลของ EngageLab สำหรับที่อยู่คอลแบ็ค
รับค่า X-CALLBACK-ID จากส่วนหัวของคำขอ ตามตัวอย่างด้านล่าง:
X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b
ในที่นี้:
timestampคือ เวลาของข้อความคอลแบ็ค (ในรูปแบบมาตรฐาน)nonceคือ หมายเลขสุ่มsignatureคือ ข้อมูลลายเซ็น
วิธีการลายเซ็นคือ:
signature=HMAC-SHA256(secret, timestamp+nonce+username)
กลไกการตอบกลับ
หลังจากที่บริการนักพัฒนารับข้อความคอลแบ็คจาก EngageLab แล้ว จำเป็นต้องตอบกลับภายใน 3 วินาทีตามข้อกำหนดดังนี้:
- ได้รับข้อความสำเร็จ: รหัสสถานะ HTTP ควรคืนค่า
200หรือ204และไม่จำเป็นต้องมีข้อความตอบกลับ - ไม่ได้รับข้อความ: รหัสสถานะ HTTP ควรคืนค่า
5XXหรือ4XXและมีข้อความตอบกลับ ข้อความควรมีรูปแบบดังนี้:
{
"code": 2002,
"message": "error"
}
| ฟิลด์ | ประเภท | จำเป็น/ไม่จำเป็น | คำอธิบาย |
|---|---|---|---|
code |
int | ไม่จำเป็น | รหัสข้อผิดพลาด |
message |
string | ไม่จำเป็น | รายละเอียดข้อผิดพลาด |
คำอธิบายฟิลด์คอลแบ็ค
เนื้อหาข้อความ
| ชื่อฟิลด์ | ประเภท | จำเป็น/ไม่จำเป็น | คำอธิบาย |
|---|---|---|---|
total |
int | จำเป็น | จำนวนข้อความที่รวมอยู่ในคอลแบ็คนี้ |
rows |
array | จำเป็น | รายการข้อมูลรายละเอียดเกี่ยวกับการเปลี่ยนแปลงสถานะของข้อความ รวมฟิลด์ด้านล่าง: |
ฟิลด์ในอาร์เรย์ rows
| ชื่อฟิลด์ | ประเภท | จำเป็น/ไม่จำเป็น | คำอธิบาย |
|---|---|---|---|
message_id |
string | จำเป็น | รหัสเฉพาะของข้อความ |
from |
string | ไม่จำเป็น | ผู้ส่ง (ค่าเริ่มต้นคือ appkey) |
to |
string | ไม่จำเป็น | รหัสผู้รับ (เช่น registrationID) |
server |
string | จำเป็น | ชื่อบริการข้อความ ค่าที่เป็นไปได้: AppPush, WebPush |
channel |
string | จำเป็น | ช่องทางข้อความ ค่าที่เป็นไปได้: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs |
custom_args |
object | ไม่จำเป็น | พารามิเตอร์ที่ส่งเพิ่มเติมในระหว่างการสร้างข้อความ จะถูกส่งคืนตามค่าเดิม |
itime |
int | จำเป็น | เวลาที่เกิดเหตุการณ์สถานะของข้อความ สามารถใช้ร่วมกับ message_status เพื่อให้ได้เวลาของสถานะข้อความแต่ละสถานะ |
status |
object | จำเป็น | ข้อมูลสถานะข้อความ รวมถึงฟิลด์ด้านล่าง: |
ฟิลด์ในอ็อบเจ็กต์ status
| ชื่อฟิลด์ | ประเภท | จำเป็น/ไม่จำเป็น | คำอธิบาย |
|---|---|---|---|
message_status |
string | จำเป็น | สถานะข้อความ ค่าที่เป็นไปได้: target_valid, sent, delivered, click, target_invalid, sent_failed, delivered_failed, no_click |
status_data |
object | ไม่จำเป็น | ข้อมูลสถานะที่กำหนดเอง มีฟิลด์ดังนี้: |
channel_message_id |
string | ไม่จำเป็น | รหัสข้อความจากช่องทางของบุคคลที่สาม |
ntf_msg |
int | จำเป็น | ประเภทข้อความ ค่าที่เป็นไปได้: 1: Notification, 2: Custom Message, 5: iOS Real-Time Activity, 6: iOS VOIP Message, 7: In-App Message |
platform |
string | จำเป็น | แพลตฟอร์มของการส่งข้อความ ค่าที่เป็นไปได้: a: Android, i: iOS, b: Web |
uid |
int | จำเป็น | UID ของผู้รับข้อความ |
app_version |
string | จำเป็น | เวอร์ชันของแอปที่รวม SDK ที่ได้รับข้อมูลจากการรายงาน SDK |
channel |
string | จำเป็น | ช่องทางแอปที่รวม SDK ที่ได้รับข้อมูลจากการรายงาน SDK |
msg_time |
int | จำเป็น | เวลาในการส่งข้อความ เวลาเมื่อคำขอ API ส่งข้อความสำเร็จ |
time_zone |
string | จำเป็น | โซนเวลาองค์กร |
loss_valid_type |
int | ไม่จำเป็น | ฟิลด์นี้ไม่มีความสำคัญและไม่จำเป็นต้องประมวลผล |
plan_user_total |
int | ไม่จำเป็น | ฟิลด์นี้ไม่มีความสำคัญและไม่จำเป็นต้องประมวลผล |
callback_type |
int | ไม่จำเป็น | ฟิลด์นี้ไม่มีความสำคัญและไม่จำเป็นต้องประมวลผล |
error_code |
int | ไม่จำเป็น | รหัสข้อผิดพลาด เฉพาะในกรณีที่เกิดความล้มเหลว |
error_detail |
object | ไม่จำเป็น | ข้อมูลข้อผิดพลาดที่ละเอียด เฉพาะในกรณีที่เกิดความล้มเหลว มีฟิลด์ดังนี้: |
message |
string | ไม่จำเป็น | คำอธิบายเหตุผลข้อผิดพลาด ใช้ได้เฉพาะสำหรับช่องทาง FCM |
loss |
object | ไม่จำเป็น | ข้อมูลการสูญเสีย มีฟิลด์ดังนี้: |
loss_source |
string | ไม่จำเป็น | แหล่งที่มาของการสูญเสีย ค่าที่เป็นไปได้: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs |
loss_step |
int | ไม่จำเป็น | ขั้นตอนการสูญเสีย ค |
คำอธิบายฟิลด์ Callback
่าที่เป็นไปได้: 1: Plan Target → Valid Target, 2: Valid Target → Sent Quantity, 3: Sent Quantity → Delivered Quantity, 4: Delivered Quantity → Click Quantity |
ค่าของสถานะข้อความ
| ค่าของสถานะ | ความหมาย | คำอธิบาย |
|---|---|---|
target_valid |
เป้าหมายที่ใช้ได้ | ถือว่าใช้ได้หากมีการใช้งานใน 365 วันที่ผ่านมา |
sent |
ส่งสำเร็จ | ส่งสำเร็จไปยังเซิร์ฟเวอร์ |
delivered |
ส่งมอบสำเร็จ | สำหรับ EngageLab, XiaoMi, OPPO, VIVO — ส่งมอบตามคอลแบ็คจริง; สำหรับ FCM และ APNs — ส่งมอบเมื่อส่งไปยังเซิร์ฟเวอร์ของผู้ให้บริการสำเร็จ; สำหรับ HuaWei, MeiZu, HONOR, หากไม่ได้กำหนดคอลแบ็คของผู้ให้บริการ จะถือว่าส่งมอบเมื่อส่งไปยังเซิร์ฟเวอร์ของผู้ให้บริการสำเร็จ; ถ้ากำหนดแล้ว ส่งมอบตามคอลแบ็คจริงจากผู้ให้บริการ |
click |
ผู้ใช้คลิก | ผู้ใช้คลิกตามที่ SDK รายงาน |
target_invalid |
เป้าหมายไม่ใช้ได้ | ถือว่าไม่ใช้ได้ตามขั้นตอนการสูญเสีย 1 ที่กำหนดในตารางการสูญเสีย |
sent_failed |
ส่งล้มเหลว | ถือว่าไม่ใช้ได้ตามขั้นตอนการสูญเสีย 2 ที่กำหนดในตารางการสูญเสีย |
delivered_failed |
ส่งมอบล้มเหลว | ถือว่าไม่สำเร็จตามขั้นตอนการสูญเสีย 3 ที่กำหนดในตารางการสูญเสีย |
no_click |
คลิกล้มเหลว | ถือว่าไม่สำเร็จตามขั้นตอนการสูญเสีย 4 ที่กำหนดในตารางการสูญเสีย ใช้กับข้อความในแอปเท่านั้น |
คำอธิบายเนื้อหาคอลแบ็ค
วิธีคอลแบ็ค: POST
ประเภทเนื้อหา: application/json
ตัวอย่าง
ส่วนหัวคำขอ
POST /developer_define_url HTTP/1.1
Content-Type: application/json
เนื้อหาคำขอ
{
"total": 1,
"rows": [
{
"message_id": "1666165485030094861",
"from": "",
"to": "",
"server": "AppPush",
"channel": "FCM",
"custom_args": {},
"itime": 1640707579,
"status": {
"message_status": "delivered",
"status_data": {
"channel_message_id": "wamid.123321abcdefed==",
"ntf_msg": 1,
"platform": "a",
"uid": 100,
"app_version": "",
"channel": "",
"msg_time": 1640707579,
"time_zone": "+8",
"loss_valid_type": 0,
"plan_user_total": 0,
"callback_type": 0
},
"error_code": 0,
"error_detail": {
"message": ""
},
"loss": {
"loss_source": "vivo",
"loss_step": 1
}
}
}
]
}
คำอธิบายพารามิเตอร์
| ค่าของสถานะ | ความหมาย |
|---|---|
target_valid |
เป้าหมายที่ใช้ได้ |
sent |
ส่งสำเร็จ |
delivered |
ส่งมอบสำเร็จ |
click |
ผู้ใช้คลิก |
target_invalid |
เป้าหมายไม่ใช้ได้ |
sent_failed |
ส่งล้มเหลว |
delivered_failed |
ส่งมอบล้มเหลว |
ขั้นตอนการสูญเสีย
- เป้าหมายที่วางแผน → เป้าหมายที่ใช้ได้
- เป้าหมายที่ใช้ได้ → ส่ง
- ส่ง → ส่งมอบ
- ส่งมอบ → คลิก
หมายเหตุ:
- การคลิกและการส่งมอบในบางช่องทางอาจซ้ำกัน คุณสามารถทำการกำจัดข้อมูลซ้ำได้ด้วยตัวเอง
- จำนวนการส่งมอบและการแสดงจะไม่ถูกปรับหลังจากการส่งมอบสำเร็จ 5 วัน








