API การเรียกกลับข้อความ
ภาพรวม
ส่งข้อมูลสถานะข้อความและการตอบสนองข้อความกลับไปยังระบบธุรกิจของบริษัท เพื่อนำไปใช้รวบรวมสถิติ ตอบกลับผู้ใช้ หรือดำเนินการอื่น ๆ
URL สำหรับการเรียกกลับ
บริษัทต้องตั้งค่า URL สำหรับรับการเรียกกลับสถานะข้อความและการตอบสนองข้อความ ดูรายละเอียดที่การตั้งค่าการเรียกกลับ
รูปแบบการเรียกกลับ
ใช้คำขอแบบ POST โดยมีเนื้อหาคำขอเป็น JSON และประเภทข้อมูล Content-Type: application/json คำขอหนึ่งครั้งจะส่งข้อมูลหลายรายการเป็นชุด
กลไกความปลอดภัย
อยู่ระหว่างเตรียมเปิดใช้งาน ปัจจุบันการเรียกกลับยังไม่มีข้อมูลยืนยันตัวตน จึงไม่ควรตั้งค่าการตรวจสอบสิทธิ์ที่ปลายทางของผู้พัฒนาซึ่งรับการเรียกกลับ
การตอบรับ
เมื่อบริการของผู้พัฒนาได้รับการเรียกกลับจาก EngageLab ต้องตอบรับภายใน 3 วินาที หากรับสำเร็จ ให้ส่งสถานะ HTTP 200 โดยไม่ต้องมีเนื้อหาการตอบกลับ
การลองใหม่
อยู่ระหว่างเตรียมเปิดใช้งาน
พารามิเตอร์คำขอ
พารามิเตอร์ที่ EngageLab ส่งไปยัง URL การเรียกกลับของระบบธุรกิจมีดังนี้:
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| total | int | จำเป็น | จำนวนข้อมูลในการเรียกกลับ |
| rows | JSON Array | จำเป็น | รายละเอียดของการเรียกกลับ |
พารามิเตอร์ภายใน rows:
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| message_id | string | ไม่จำเป็น | ส่งกลับในการเรียกกลับสถานะข้อความและการตอบสนองข้อความ |
| from | string | ไม่จำเป็น | ผู้ส่ง ในการเรียกกลับสถานะข้อความ หมายถึงหมายเลขผู้ส่งของธุรกิจ ในการเรียกกลับข้อความขาเข้าจากผู้ใช้ หมายถึงตัวระบุผู้ใช้ โดยส่งหมายเลขโทรศัพท์หากมี หรืออาจส่ง BSUID หากไม่มีหมายเลขโทรศัพท์ |
| to | string | ไม่จำเป็น | ผู้รับ ในการเรียกกลับสถานะข้อความ เป็นหมายเลขโทรศัพท์หรือ BSUID หรือสตริงว่างหากไม่สามารถรับตัวระบุได้ ในการเรียกกลับข้อความขาเข้าจากผู้ใช้ เป็นหมายเลขผู้ส่งของธุรกิจ |
| recipient_phone | string | ไม่จำเป็น | หมายเลขโทรศัพท์ของผู้รับในการเรียกกลับสถานะข้อความ ละเว้นฟิลด์นี้เมื่อไม่มีค่า |
| server | string | จำเป็น | บริการผลิตภัณฑ์ของข้อมูลการเรียกกลับ มีค่าคงที่เป็น whatsapp |
| channel | string | ไม่จำเป็น | ช่องทางของสถานะหรือการตอบสนอง มีค่าคงที่เป็น whatsapp |
| itime | int | จำเป็น | เวลาที่ข้อมูลการเรียกกลับถูกสร้างขึ้นจริงในรูปแบบไทม์สแตมป์ ใช้ร่วมกับ message_status เพื่อระบุเวลาร้องขอ ส่ง ส่งถึง และอ่าน |
| custom_args | JSON Object | ไม่จำเป็น | ฟิลด์ที่กำหนดเองขณะส่งข้อความ จะส่งกลับตามเดิมในการเรียกกลับสถานะข้อความ |
| status | JSON Object | ไม่จำเป็น | ฟิลด์สถานะข้อความ |
| response | JSON Object | ไม่จำเป็น | ฟิลด์การตอบสนองข้อความ |
| notification | JSON Object | ไม่จำเป็น | ฟิลด์การแจ้งเตือนข้อความ |
ฟิลด์ BSUID
BSUID จะส่งกลับผ่านฟิลด์ที่ไม่จำเป็นต่อไปนี้ในเนื้อหาการเรียกกลับที่มีอยู่:
| ประเภทการเรียกกลับ | เส้นทาง JSON | ประเภท | คำอธิบาย |
|---|---|---|---|
| การเรียกกลับสถานะข้อความ | rows[].status.status_data.recipient_user_id |
String | BSUID ของผู้รับ |
| การเรียกกลับข้อความขาเข้าจากผู้ใช้ | rows[].response.response_data.contact.user_id |
String | BSUID ของผู้ใช้ที่ส่งข้อความ |
- หากไม่มี BSUID หรือไม่สามารถใช้ได้ จะไม่ส่งฟิลด์ที่เกี่ยวข้อง ระบบฝั่งลูกค้าต้องรองรับกรณีที่ไม่มีฟิลด์นี้
- หากต้องการแสดงทั้งหมายเลขโทรศัพท์และ BSUID ให้ใช้
recipient_phoneและstatus_data.recipient_user_idสำหรับการเรียกกลับสถานะข้อความ หรือcontact.wa_idและcontact.user_idสำหรับการเรียกกลับข้อความขาเข้าจากผู้ใช้
สถานะข้อความ - status
พารามิเตอร์การเรียกกลับ
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| message_status | string | จำเป็น | สถานะของข้อความ |
| status_data | JSON Object | ไม่จำเป็น | ข้อมูลรายละเอียดของสถานะนี้ |
| error_code | int | ไม่จำเป็น | รหัสข้อผิดพลาด ส่งกลับเมื่อล้มเหลว |
| error_detail | JSON Object | ไม่จำเป็น | รายละเอียดข้อผิดพลาด ส่งกลับเมื่อล้มเหลว |
| loss | JSON Object | ไม่จำเป็น | ขั้นตอนและแหล่งที่มาของความล้มเหลว |
message_status
| ค่า | คำอธิบาย | รายละเอียด |
|---|---|---|
| plan | วางแผนส่ง | บันทึกเป้าหมายที่วางแผนส่งหนึ่งรายการสำหรับหมายเลขที่อยู่ในรายชื่อหมายเลขผู้รับที่ส่งมา |
| target_valid | เป้าหมายถูกต้อง | ผ่านการตรวจสอบ โดย EngageLab และบริการ Meta WhatsApp ระบุว่าหมายเลขถูกต้อง |
| sent | ส่งสำเร็จ | EngageLab ส่งหมายเลขไปยังบริการ Meta WhatsApp และได้รับผลสำเร็จ |
| delivered | ส่งถึงสำเร็จ | บริการ Meta WhatsApp ยืนยันว่าข้อความส่งถึงผู้ใช้แล้ว |
| read | อ่านแล้ว | บริการ Meta WhatsApp ยืนยันว่าผู้ใช้อ่านข้อความแล้ว |
| target_invalid | เป้าหมายไม่ถูกต้อง | EngageLab หรือบริการ Meta WhatsApp ระบุว่าหมายเลขไม่ถูกต้อง |
| sent_failed | ส่งไม่สำเร็จ | ส่งหมายเลขไปยังบริการ Meta WhatsApp แล้วได้รับผลล้มเหลว |
| delivered_failed | ส่งถึงไม่สำเร็จ | ส่งไปยังบริการ Meta WhatsApp สำเร็จ แต่ Meta แจ้งผ่านการเรียกกลับว่าล้มเหลว |
| delivered_timeout | หมดเวลาการส่งถึง | ส่งไปยังบริการ Meta WhatsApp สำเร็จ แต่ไม่มีการเรียกกลับจาก Meta แจ้งผลสำเร็จหรือล้มเหลวภายใน 5 นาที จึงนับว่าหมดเวลา |
status_data
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| msg_time | int | จำเป็น | เวลาที่เรียก API เพื่อส่งข้อความสำเร็จ |
| channel_message_id | String | จำเป็น | ID ข้อความที่ WhatsApp ส่งกลับ |
| whatsapp_business_account_id | String | จำเป็น | ID ของ WhatsApp Business Account (WABA) ที่หมายเลขผู้ส่งสังกัดอยู่ |
| timezone | String | จำเป็น | เขตเวลาขององค์กร |
| plan_user_total | int | ไม่จำเป็น | จำนวนเป้าหมายที่วางแผนไว้ทั้งหมด มีค่าเฉพาะเมื่อ message_status=plan |
| country_code | String | จำเป็น | รหัสประเทศหรือภูมิภาคของหมายเลขโทรศัพท์ผู้รับ |
| from_phone_id | String | จำเป็น | ID ของหมายเลขผู้ส่ง (from) |
| recipient_user_id | String | ไม่จำเป็น | BSUID ของผู้รับ ส่งกลับเมื่อมีค่า และละเว้นเมื่อไม่มีค่า |
| conversation | JSON Object | ไม่จำเป็น | ข้อมูลการสนทนา |
| pricing | JSON Object | ไม่จำเป็น | ข้อมูลราคา |
โดยทั่วไป recipient_user_id จะส่งกลับในสถานะ sent, delivered และ read เมื่อระบบมี BSUID ของผู้รับแล้ว ฟิลด์นี้อาจไม่ปรากฏในสถานะประมวลผลเบื้องต้น สถานะล้มเหลว ข้อความย้อนหลัง หรือข้อมูลจากกระบวนการเดิม
conversation
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| id | String | ไม่จำเป็น | ID การสนทนาของ Meta ที่ข้อความนี้สังกัดอยู่ |
| origin | JSON Object | ไม่จำเป็น | ระบุผู้เริ่มการสนทนาด้วย type ตัวอย่าง: "origin":{"type":"business_initiated"} business_initiated: ธุรกิจส่งข้อความแรกให้ลูกค้า โดยใช้เมื่อเกิน 24 ชั่วโมงนับจากข้อความล่าสุดของลูกค้า customer_initiated: ธุรกิจตอบกลับภายใน 24 ชั่วโมงนับจากข้อความของลูกค้า referral_conversion: การสนทนาจากจุดเข้าใช้งานฟรี ซึ่งลูกค้าเป็นผู้เริ่มเสมอ |
pricing
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| pricing_model | String | ไม่จำเป็น | ค่าคงที่คือ CBP |
| category | String | ไม่จำเป็น | หมวดหมู่ราคาการสนทนา: business_initiated คือการสนทนาที่ธุรกิจเริ่ม; customer_initiated คือการสนทนาที่ผู้ใช้เริ่ม; referral_conversion คือการสนทนาจากจุดเข้าใช้งานฟรี |
error_detail
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| message | String | จำเป็น | สาเหตุของข้อผิดพลาด |
loss
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| loss_step | int | จำเป็น | ขั้นตอนที่ล้มเหลว 1: จากเป้าหมายที่วางแผนไว้ไปเป็นเป้าหมายที่ถูกต้อง คือเป้าหมายไม่ถูกต้อง 2: จากเป้าหมายที่ถูกต้องไปสู่การส่ง คือส่งไม่สำเร็จ 3: จากการส่งไปสู่การส่งถึง คือส่งถึงไม่สำเร็จ |
| loss_source | String | จำเป็น | แหล่งที่มาของความล้มเหลว: engagelab คือความล้มเหลวจากการตรวจสอบของบริการ EngageLab WhatsApp; meta คือข้อผิดพลาดที่ Meta ส่งกลับ |
ตัวอย่างการเรียกกลับ
{
"total": 1,
"rows": [
{
"message_id": "1666165485030094861",
"from": "",
"to": "US.13491208655302741918",
"recipient_phone": "12025550123",
"server": "whatsapp",
"channel": "whatsapp",
"itime": 1640707579,
"custom_args": {},
"status": {
"message_status": "delivered",
"status_data": {
"msg_time": 1663432355,
"channel_message_id": "wamid.123321abcdefed==",
"whatsapp_business_account_id": "",
"timezone": "",
"plan_user_total": 2007,
"country_code": "US",
"from_phone_id": "111111",
"recipient_user_id": "US.13491208655302741918",
"conversation": {
"id": "ebe2398cdaa37a0899ca5268b987b0c8",
"origin": {
"type": "business_initiated"
}
},
"pricing": {
"pricing_model": "CBP",
"category": "business_initiated"
}
},
"error_code": 0,
"error_detail": {
"message": ""
},
"loss": {
"loss_step": 1,
"loss_source": "aa"
}
}
}
]
}
การตอบสนองข้อความ - response
พารามิเตอร์การเรียกกลับ
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| event | string | ไม่จำเป็น | เหตุการณ์ตอบสนอง |
| response_data | JSON Object | ไม่จำเป็น | เนื้อหาข้อความตอบกลับหรือข้อความโต้ตอบขาเข้า |
event
| ค่า | คำอธิบาย | รายละเอียด |
|---|---|---|
| received | ได้รับข้อความผู้ใช้ | ผู้ใช้ส่งข้อความโดยตรง |
| reply | ผู้ใช้ตอบกลับข้อความ | ธุรกิจส่งข้อความให้ผู้ใช้ก่อน และผู้ใช้เลือกตอบกลับข้อความนั้น |
| order | ผู้ใช้สั่งซื้อ | - |
| deleted | ผู้ใช้ลบข้อความ | ผู้ใช้ลบข้อความที่ตนส่ง (อยู่ระหว่างเตรียมเปิดใช้งาน) |
response_data
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| channel_message_id | String | จำเป็น | ID ข้อความที่ WhatsApp ส่งกลับ |
| whatsapp_business_account_id | String | จำเป็น | ID ของ WhatsApp Business Account (WABA) ที่หมายเลขผู้ส่งสังกัดอยู่ |
| contact | JSON Object | ไม่จำเป็น | ข้อมูลผู้ส่ง |
| message | JSON Object | จำเป็น | เนื้อหาข้อความ |
| message_context | JSON Object | ไม่จำเป็น | บริบทข้อความ ปรากฏในเหตุการณ์ reply เพื่อระบุว่าผู้ใช้ตอบกลับข้อความใด |
contact
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| profile | JSON Object | ไม่จำเป็น | โปรไฟล์ผู้ส่ง (ลูกค้า) ฟิลด์ name คือชื่อลูกค้า ส่วน username คือชื่อผู้ใช้ (User Username) ซึ่งแตกต่างจาก name และจะละเว้นเมื่อไม่มีค่า ตัวอย่าง: "profile": {"name": "bob", "username": "example_user"} |
| wa_id | String | ไม่จำเป็น | ตัวระบุหมายเลขโทรศัพท์ของผู้ส่ง อาจเป็นสตริงว่างเมื่อมีเฉพาะ BSUID |
| user_id | String | ไม่จำเป็น | BSUID ของผู้ใช้ที่ส่งข้อความ ส่งกลับเมื่อมีค่า และละเว้นเมื่อไม่มีค่า |
contact.wa_id ยังคงหมายถึงหมายเลขโทรศัพท์ ส่วน contact.user_id ใช้ส่ง BSUID หากต้องการระบุผู้ใช้ด้วย BSUID ให้ใช้ contact.user_id เป็นหลัก และอย่าใช้ contact.wa_id เป็น BSUID
message
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ค่าที่รองรับ: text, image, audio, video, document, sticker, button, interactive, unknown, order |
| text | JSON Object | ไม่จำเป็น | ดูคำอธิบาย text object |
| image | JSON Object | ไม่จำเป็น | ดูคำอธิบาย image object |
| audio | JSON Object | ไม่จำเป็น | ดูคำอธิบาย audio object |
| video | JSON Object | ไม่จำเป็น | ดูคำอธิบาย video object |
| document | JSON Object | ไม่จำเป็น | ดูคำอธิบาย document object |
| sticker | JSON Object | ไม่จำเป็น | ดูคำอธิบาย sticker object |
message_context
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| origin_from_phone | String | จำเป็น | หมายเลขผู้ส่งของข้อความที่อ้างอิง ไม่มีช่องว่างหรือเครื่องหมาย + |
| origin_channel_message_id | String | จำเป็น | ID เฉพาะของข้อความที่อ้างอิง |
| origin_from_phone_id | String | ไม่จำเป็น | ID หมายเลขผู้ส่งของข้อความที่อ้างอิง โดยปกติจะมีฟิลด์นี้ |
| origin_message_id | String | ไม่จำเป็น | ID ข้อความของข้อความที่อ้างอิง โดยปกติจะมีฟิลด์นี้ |
ตัวอย่างการเรียกกลับ
{
"total": 1,
"rows": [
{
"message_id": "1666165485030094861",
"from": "",
"to": "",
"server": "whatsapp",
"channel": "whatsapp",
"itime": 1640707579,
"response": {
"event": "",
"response_data": {
"channel_message_id": "wamid.123321abcdefed==",
"whatsapp_business_account_id": "123321",
"contact": {
"profile": {
"name": "bob",
"username": "example_user"
},
"wa_id": "8613800138000",
"user_id": "ID.1234567890123456"
},
"message": {
"type": "text",
"text": {
"body": "here is the message content text"
}
}
}
}
}
]
}
การแจ้งเตือนข้อความ - notification
พารามิเตอร์การเรียกกลับ
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| event | string | ไม่จำเป็น | เหตุการณ์ตอบสนอง |
| notification_data | JSON Object | ไม่จำเป็น | เนื้อหารายละเอียดของการแจ้งเตือนข้อความระบบ |
event
| ค่า | คำอธิบาย | รายละเอียด |
|---|---|---|
| insufficient_balance | ยอดเงินไม่เพียงพอ | ยอดเงินปัจจุบันต่ำกว่าเกณฑ์ที่ตั้งไว้ (ค่าเริ่มต้น 10 ดอลลาร์สหรัฐ) |
| template_update | เทมเพลตเปลี่ยนแปลง | สถานะหรือคุณภาพของเทมเพลตเปลี่ยนแปลง |
| phone_number_update | หมายเลขผู้ส่งเปลี่ยนแปลง | ปัจจุบัน Meta รองรับเฉพาะการเปลี่ยนขีดจำกัดการส่งข้อความ TIER_50: ลูกค้า 50 ราย/24 ชั่วโมง TIER_250: ลูกค้า 250 ราย/24 ชั่วโมง TIER_1K: ลูกค้า 1,000 ราย/24 ชั่วโมง TIER_10K: ลูกค้า 10,000 ราย/24 ชั่วโมง TIER_100K: ลูกค้า 100,000 ราย/24 ชั่วโมง TIER_UNLIMITED: ไม่จำกัด |
| whatsapp_business_update | บัญชี WABA เปลี่ยนแปลง | บัญชี WABA ถูกระงับ ถูกเตือน เป็นต้น |
notification_data
| ฟิลด์ | ประเภท | ข้อกำหนด | คำอธิบาย |
|---|---|---|---|
| whatsapp_business_account_id | String | จำเป็น | ID ของ WhatsApp Business Account (WABA) |
| remain_balance | int | ไม่จำเป็น | มีเมื่อ event=insufficient_balance ยอดเงินปัจจุบัน (ดอลลาร์สหรัฐ) |
| balance_threshold | int | ไม่จำเป็น | มีเมื่อ event=insufficient_balance เกณฑ์แจ้งเตือนยอดเงินที่ตั้งไว้ (ดอลลาร์สหรัฐ) |
| template_id | String | ไม่จำเป็น | มีเมื่อ event=template_update ID เทมเพลต |
| template_name | String | ไม่จำเป็น | มีเมื่อ event=template_update ชื่อเทมเพลต |
| template_language | String | ไม่จำเป็น | มีเมื่อ event=template_update ภาษาของเทมเพลต |
| template_status | String | ไม่จำเป็น | มีเมื่อ event=template_update สถานะเทมเพลต: APPROVED/REJECTED/PENDING/DISABLED/FLAGGED/REINSTATED |
| template_status_reason | String | ไม่จำเป็น | มีเมื่อ event=template_update เหตุผลที่เปลี่ยนแปลง โดยทั่วไปใช้เมื่อเทมเพลตถูกปฏิเสธ กรณีอื่นจะเป็นสตริง NONE หรือไม่มีฟิลด์นี้ |
| template_quality_score | String | ไม่จำเป็น | มีเมื่อ event=template_update คะแนนคุณภาพ: GREEN คือสูง, YELLOW คือปานกลาง, RED คือต่ำ, UNKNOWN คือยังไม่ยืนยัน |
| new_category | String | ไม่จำเป็น | มีเมื่อ event=template_update หมวดหมู่เทมเพลตที่อัปเดต |
| phone_number_id | String | ไม่จำเป็น | มีเมื่อ event=phone_number_update ID หมายเลขผู้ส่ง |
| display_phone_number | String | ไม่จำเป็น | มีเมื่อ event=phone_number_update หมายเลขโทรศัพท์ผู้ส่ง เช่น +1 320-302-7083 หรือ +86 183 7981 2430 |
| current_limit | String | ไม่จำเป็น | มีเมื่อ event=phone_number_update ขีดจำกัดปัจจุบันของหมายเลขผู้ส่ง: TIER_50/TIER_250/TIER_1K/TIER_10K/TIER_100K/TIER_UNLIMITED |
| waba_event | String | ไม่จำเป็น | มีเมื่อ event=whatsapp_business_update ค่า DISABLED_UPDATE คือบัญชีถูกปิดใช้งาน และ ACCOUNT_VIOLATION คือบัญชีละเมิดข้อกำหนด |
| ban_state | String | ไม่จำเป็น | มีค่าเมื่อ event=whatsapp_business_update และ waba_event=DISABLED_UPDATE ปัจจุบันค่า DISABLE หมายถึงถูกปิดใช้งาน |
| violation_type | String | ไม่จำเป็น | มีค่าเมื่อ event=whatsapp_business_update และ waba_event=ACCOUNT_VIOLATION ค่า SPAM คือข้อความสแปมหรือรบกวน และ SCAM คือข้อความหลอกลวง |
| decision | String | ไม่จำเป็น | ผลการอัปเดตชื่อที่แสดงของหมายเลขผู้ส่ง: APPROVED คืออนุมัติ, DEFERRED คือเลื่อนการตัดสิน, PENDING คือรอการตรวจสอบเพิ่มเติม, REJECTED คือปฏิเสธ |
| requested_verified_name | String | ไม่จำเป็น | ชื่อที่แสดงที่ระบุเมื่อสร้างหมายเลขโทรศัพท์ธุรกิจ หรือชื่อที่ส่งเมื่อแก้ไขชื่อที่แสดงซึ่งได้รับอนุมัติแล้ว |
| rejection_reason | String | ไม่จำเป็น | เหตุผลที่ชื่อที่แสดงของหมายเลขโทรศัพท์ธุรกิจถูกปฏิเสธ NAME_EMPLOYEE_ISSUE: มีชื่อบุคคลหรือรหัสพนักงาน NAME_ENDCLIENT_NOTRELATED: มีชื่อธุรกิจที่ไม่เกี่ยวข้อง NAME_FORMAT_UNACCEPTABLE: รูปแบบไม่เป็นที่ยอมรับ NAME_INDIVIDUAL_ISSUE: มีชื่อบุคคลหรือรหัสพนักงาน NAME_NOT_CONSISTENT: ไม่สอดคล้องกับแบรนด์ธุรกิจ null: ชื่อได้รับการยอมรับ UNKNOWN: ไม่ทราบสาเหตุ โปรดติดต่อฝ่ายสนับสนุน |
ตัวอย่างการเรียกกลับ
{
"total": 1,
"rows": [
{
"server": "whatsapp",
"itime": 1640707579,
"notification": {
"event": "insufficient_balance",
"notification_data": {
"whatsapp_business_account_id": "",
"remain_balance": 5.1234,
"balance_threshold": 10
}
}
}
]
}
การเรียกกลับเมื่อสถานะเทมเพลตข้อความเปลี่ยนแปลง
เมื่อสถานะเทมเพลตข้อความ WhatsApp เปลี่ยนแปลง Webhook จะส่งข้อมูลการเรียกกลับตามโครงสร้างต่อไปนี้
เงื่อนไขการส่ง
- เทมเพลตได้รับอนุมัติ
- เทมเพลตถูกปฏิเสธ
- เทมเพลตถูกปิดใช้งาน
โครงสร้างข้อมูลการเรียกกลับ
disable_info มีเฉพาะเมื่อเทมเพลตถูกปิดใช้งาน ส่วน other_info มีเฉพาะเมื่อเทมเพลตถูกล็อกหรือปลดล็อก และ rejection_info มีเฉพาะเมื่อถูกปฏิเสธด้วย INVALID_FORMAT
{
"entry": [
{
"id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
"time": <WEBHOOK_TRIGGER_TIMESTAMP>,
"changes": [
{
"value": {
"event": "<EVENT>",
"message_template_id": <TEMPLATE_ID>,
"message_template_name": "<TEMPLATE_NAME>",
"message_template_language": "<TEMPLATE_LANGUAGE_AND_LOCALE_CODE>",
"reason": "<REASON>",
"message_template_category": <TEMPLATE_CATEGORY>,
"disable_info": {
"disable_date": "<DISABLE_TIMESTAMP>"
},
"other_info": {
"title": "<TITLE>",
"description": "<DESCRIPTION>"
}
},
"rejection_info": {
"reason": "<REASON_INFO>",
"recommendation": "<RECOMMENDATION_INFO>"
},
"field": "message_template_status_update"
}
]
}
],
"object": "whatsapp_business_account"
}
คำอธิบายพารามิเตอร์
| ข้อความตัวแทน | ประเภท | คำอธิบาย | ค่าตัวอย่าง |
|---|---|---|---|
<DESCRIPTION> |
String | เหตุผลที่ล็อกหรือปลดล็อกเทมเพลต | เทมเพลตข้อความ WhatsApp ของคุณกลับมาใช้งานได้แล้ว |
<DISABLE_TIMESTAMP> |
Integer | เวลา Unix ที่เทมเพลตถูกปิดใช้งาน | 1751234563 |
<EVENT> |
String | ประเภทเหตุการณ์สถานะเทมเพลต ดูรายละเอียดด้านล่าง | APPROVED |
<TEMPLATE_ID> |
Integer | ID เทมเพลต | 1689556908129832 |
<TEMPLATE_NAME> |
String | ชื่อเทมเพลต | order_confirmation |
<TEMPLATE_LANGUAGE_AND_LOCALE_CODE> |
String | ภาษาและรหัสภูมิภาคของเทมเพลต | en-US |
<REASON> |
String | เหตุผลที่เทมเพลตถูกปฏิเสธหรือปิดใช้งาน ดูด้านล่าง | INVALID_FORMAT |
<TITLE> |
String | ชื่อเหตุการณ์หยุดชั่วคราวหรือยกเลิกการหยุด ดูด้านล่าง | FIRST_PAUSE |
<WEBHOOK_TRIGGER_TIMESTAMP> |
Integer | เวลา Unix ที่เรียก Webhook | 1739321024 |
<WHATSAPP_BUSINESS_ACCOUNT_ID> |
String | ID ของ WhatsApp Business Account (WABA) | 102290129340398 |
<MESSAGE_TEMPLATE_CATEGORY> |
String | หมวดหมู่เทมเพลต ดูด้านล่าง | MARKETING |
<REASON_INFO> |
String | เหตุผลโดยละเอียดที่เทมเพลตไม่ผ่านการตรวจสอบ | Your template has parameters placed next to each other ... |
<RECOMMENDATION_INFO> |
String | คำแนะนำในการแก้ไขเทมเพลตเพื่อให้ผ่านการตรวจสอบ | Separate parameters with descriptive text ... |
ค่าที่เป็นไปได้ของ <EVENT>
| ค่า | คำอธิบาย |
|---|---|
| APPROVED | อนุมัติแล้ว ใช้ส่งข้อความได้ |
| ARCHIVED | เก็บถาวรแล้ว |
| DELETED | ลบแล้ว |
| DISABLED | ถูกปิดใช้งานเนื่องจากความคิดเห็นของผู้ใช้ |
| FLAGGED | ได้รับความคิดเห็นเชิงลบและเสี่ยงต่อการถูกปิดใช้งาน |
| IN_APPEAL | อยู่ระหว่างอุทธรณ์ |
| LIMIT_EXCEEDED | จำนวนเทมเพลตถึงขีดจำกัด |
| LOCKED | ถูกล็อก ไม่สามารถแก้ไขได้ |
| PAUSED | หยุดชั่วคราว |
| PENDING | อยู่ระหว่างตรวจสอบ |
| REINSTATED | ยกเลิกการทำเครื่องหมายหรือปิดใช้งานแล้ว ส่งได้อีกครั้ง |
| PENDING_DELETION | ลบแล้ว รอลบอย่างถาวร |
| REJECTED | ถูกปฏิเสธ แก้ไขแล้วส่งตรวจสอบใหม่หรืออุทธรณ์ได้ |
ค่าที่เป็นไปได้ของ <REASON>
| ค่า | คำอธิบาย |
|---|---|
| ABUSIVE_CONTENT | มีเนื้อหาละเมิดข้อกำหนด |
| CATEGORY_NOT_AVAILABLE | เทมเพลตยืนยันตัวตนสำหรับภูมิภาคที่ไม่รองรับ (เลิกใช้แล้ว) |
| INCORRECT_CATEGORY | เนื้อหาไม่ตรงกับหมวดหมู่ที่ระบุ |
| INVALID_FORMAT | รูปแบบไม่ถูกต้อง |
| NONE | เทมเพลตถูกหยุดใช้งานชั่วคราว |
| PROMOTIONAL | มีเนื้อหาส่งเสริมการขายที่ละเมิดข้อกำหนด |
| SCAM | มีเนื้อหาหลอกลวง |
| TAG_CONTENT_MISMATCH | เนื้อหาไม่ตรงกับหมวดหมู่ที่ระบุ |
| null | กำหนดเวลาลบแล้ว |
ค่าที่เป็นไปได้ของ <TITLE>
| ค่า | คำอธิบาย |
|---|---|
| FIRST_PAUSE | หยุดชั่วคราวครั้งแรก |
| SECOND_PAUSE | หยุดชั่วคราวครั้งที่สอง |
| RATE_LIMITING_PAUSE | หยุดชั่วคราวเนื่องจากการจำกัดอัตรา |
| UNPAUSE | ยกเลิกการหยุดชั่วคราว |
| DISABLED | ปิดใช้งานแล้ว |
ค่าที่เป็นไปได้ของ <MESSAGE_TEMPLATE_CATEGORY>
| ค่า | คำอธิบาย |
|---|---|
| MARKETING | การตลาด |
| UTILITY | การแจ้งเตือนเพื่อประโยชน์ใช้สอย |
| AUTHENTICATION | การยืนยันตัวตน |
ตัวอย่าง
ตัวอย่าง Webhook เมื่อเทมเพลตได้รับอนุมัติ
{
"entry": [
{
"id": "102290129340398",
"time": 1751247548,
"changes": [
{
"value": {
"event": "APPROVED",
"message_template_id": 1689556908129832,
"message_template_name": "order_confirmation",
"message_template_language": "en-US",
"reason": "NONE",
"message_template_category": "UTILITY"
},
"field": "message_template_status_update"
}
]
}
],
"object": "whatsapp_business_account"
}
ตัวอย่าง Webhook เมื่อเทมเพลตถูกปฏิเสธด้วย INVALID_FORMAT
{
"entry": [
{
"id": "102290129340398",
"time": 1751247548,
"changes": [
{
"value": {
"event": "REJECTED",
"message_template_id": 1689556908129835,
"message_template_name": "abandoned_cart",
"message_template_language": "en",
"reason": "INVALID_FORMAT",
"message_template_category": "MARKETING",
"rejection_info": {
"reason": "Your template has parameters placed next to each other (like ) without text or punctuation between them.",
"recommendation": "Separate parameters with descriptive text and ensure each parameter is clearly contextualized."
}
},
"field": "message_template_status_update"
}
]
}
],
"object": "whatsapp_business_account"
}










