ข้อความ
ส่งข้อความตัวอักษร
ส่งข้อความตัวอักษร โดย message.text ต้องไม่ว่าง ฟิลด์เฉพาะใช้ provider_data และการตอบกลับแบบอ้างอิงใช้ reply_to ระดับบนสุด
https://api.unifyport.ai/v1/messagesช่องทางที่รองรับ
ก่อนเรียกใช้
ใช้ X-Api-Key ของ workspace เจ้าของทรัพยากรบนเซิร์ฟเวอร์ แทนค่าตัวอย่างทั้งหมดก่อนเรียกใช้
ทำขั้นตอนยืนยันตัวตนให้เสร็จและตรวจสอบ runtime_status การยืนยันกับการเชื่อมต่อเป็นคนละสถานะ HTTP สำเร็จอย่างเดียวไม่ยืนยันความพร้อม
ที่มาของพารามิเตอร์
- account_id
- รับ data.id จากการสร้างหรือค้นหาบัญชี รหัสเป็นของ workspace ที่ระบุด้วย X-Api-Key ดูบัญชี
- to.id · to.type
- เมื่อตอบกลับให้คัดลอก data.conversation.id และ data.conversation.type จาก message.received ไปยัง to.id และ to.type ผู้รับใหม่ต้องใช้กฎรหัสของช่องทางนั้น การรองรับการส่งข้อความแบบรวมศูนย์
พารามิเตอร์คำขอ
ส่วนหัว
X-Api-KeyAPI key ของพื้นที่ทำงาน ระบบจะระบุพื้นที่ทำงานจากส่วนหัวนี้
Content-Typeใช้ application/json เมื่อต้องส่งเนื้อหาของคำขอเป็น JSON
เนื้อหาของคำขอ
provider_dataobjectตัวเลือกการส่งเฉพาะ provider มีผลเฉพาะ provider และประเภทข้อความที่รองรับ seconds ของ WhatsApp audio/video ใช้จำนวนเต็มที่ไม่ติดลบ เฉพาะสำหรับ video ให้ใช้ค่า 0 ถึง 4294967295 และ waveform ใช้เฉพาะ audio หากรองรับการตอบกลับแบบอ้างอิงให้ใช้ reply_to ระดับบนสุด สำหรับ sticker ต้องละเว้น provider_data หรือใช้ออบเจ็กต์ว่าง ค่าที่ไม่ใช่ออบเจ็กต์คืน 400 invalid_request และออบเจ็กต์ที่ไม่ว่างคืน 400 provider_invalid_request
provider_dataตัวเลือกการส่งเฉพาะ provider มีผลเฉพาะ provider และประเภทข้อความที่รองรับ seconds ของ WhatsApp audio/video ใช้จำนวนเต็มที่ไม่ติดลบ เฉพาะสำหรับ video ให้ใช้ค่า 0 ถึง 4294967295 และ waveform ใช้เฉพาะ audio หากรองรับการตอบกลับแบบอ้างอิงให้ใช้ reply_to ระดับบนสุด สำหรับ sticker ต้องละเว้น provider_data หรือใช้ออบเจ็กต์ว่าง ค่าที่ไม่ใช่ออบเจ็กต์คืน 400 invalid_request และออบเจ็กต์ที่ไม่ว่างคืน 400 provider_invalid_request
secondsระยะเวลาแบบเลือกได้เป็นวินาทีสำหรับข้อความ WhatsApp audio และ video โดยใช้จำนวนเต็มที่ไม่ติดลบ เฉพาะสำหรับ video ค่าที่อนุญาตคือ 0 ถึง 4294967295
minimum: 0
waveformข้อมูล waveform แบบเลือกได้สำหรับข้อความ audio ของ WhatsApp ค่าที่ไม่ว่างต้องเข้ารหัสด้วย Base64 มาตรฐาน และเมื่อ decode แล้วต้องเป็นข้อมูล waveform แบบ JSON ที่ parse ได้ สตริงว่างจะถือว่าไม่ได้ระบุ ส่วนรูปแบบอื่นที่ไม่ถูกต้องจะส่งคืน HTTP 400 provider_invalid_request
account_idบัญชีของผู้ให้บริการที่ส่งข้อความ
minLength: 1
toobjectจำเป็นผู้รับ ประกอบด้วย id และ type
toผู้รับ ประกอบด้วย id และ type
idตัวระบุผู้รับฝั่ง provider
minLength: 1
typeประเภทบทสนทนามาตรฐาน: user, group หรือ channel กลุ่มประกาศของชุมชน WhatsApp ยังคงใช้ group
enum: user, group, channel
messageobjectจำเป็นpayload ข้อความที่ปรับเป็นมาตรฐาน ข้อความตัวอักษรใช้ message.text สื่อใช้ message.url
messagepayload ข้อความที่ปรับเป็นมาตรฐาน ข้อความตัวอักษรใช้ message.text สื่อใช้ message.url
typeประเภทข้อความ: text, image, video, audio, document, file, contact, link_preview, poll หรือ sticker
enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker
textเนื้อหาที่ไม่ว่างซึ่งจำเป็นสำหรับ text และ link_preview สำหรับ link_preview ต้องมีอักขระที่ไม่ใช่ช่องว่าง และ WhatsApp กำหนดให้มี link_preview.url ตรงตามต้นฉบับในเนื้อหาด้วย
minLength: 1
captionคำบรรยายเสริมสำหรับข้อความ image, video, document หรือ file
urlURL HTTP(S) แบบ absolute ที่ไม่ว่าง โดย media ต้องมี url, file_url หรือ file_key
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_urlURL HTTP(S) สำรองแบบ absolute ที่ไม่ว่าง โดย media ต้องมีแหล่งข้อมูลหนึ่งรายการ
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_keyข้อมูลอ้างอิงไฟล์ที่ไม่ว่าง โดย media ต้องมีแหล่งข้อมูลหนึ่งรายการ
contacts[]object[]อาร์เรย์นามบัตรที่ไม่ว่างและต้องระบุเมื่อ message.type=contact
minItems: 1
contacts[]อาร์เรย์นามบัตรที่ไม่ว่างและต้องระบุเมื่อ message.type=contact
minItems: 1
nameชื่อที่แสดงที่ไม่ว่างและต้องมีในนามบัตรทุกรายการ
minLength: 1
phones[]object[]รายการหมายเลขโทรศัพท์ในนามบัตร
phones[]รายการหมายเลขโทรศัพท์ในนามบัตร
numberหมายเลขโทรศัพท์ ต้องมีใน phone ทุกรายการ
typeป้ายกำกับโทรศัพท์ที่ไม่บังคับ เช่น CELL หรือ WORK
emails[]object[]รายการอีเมลในนามบัตร
emails[]รายการอีเมลในนามบัตร
addressที่อยู่อีเมล ต้องมีใน email ทุกรายการ
format: email
typeป้ายกำกับอีเมลที่ไม่บังคับ เช่น WORK หรือ HOME
organizationชื่อองค์กรของผู้ติดต่อที่ไม่บังคับ
titleตำแหน่งงานของผู้ติดต่อที่ไม่บังคับ
link_previewobjectใช้เฉพาะ message.type=link_preview และต้องระบุพร้อม text ห้ามผสมกับ payload อื่น โครงสร้างกลางบังคับเฉพาะ url ส่วน title และ description เป็นตัวเลือกที่ใช้สตริงว่างได้แต่ห้าม null นโยบายส่งของ API นี้สำหรับ WhatsApp บังคับ title/image_url ที่ไม่ว่าง และจำกัด title ไม่เกิน 255 และ description ไม่เกิน 1024 อักขระ Unicode
link_previewใช้เฉพาะ message.type=link_preview และต้องระบุพร้อม text ห้ามผสมกับ payload อื่น โครงสร้างกลางบังคับเฉพาะ url ส่วน title และ description เป็นตัวเลือกที่ใช้สตริงว่างได้แต่ห้าม null นโยบายส่งของ API นี้สำหรับ WhatsApp บังคับ title/image_url ที่ไม่ว่าง และจำกัด title ไม่เกิน 255 และ description ไม่เกิน 1024 อักขระ Unicode
urlลิงก์ปลายทางที่ต้องระบุ เป็น URI แบบสัมบูรณ์ HTTP(S) ที่มีชื่อโฮสต์และไม่มีช่องว่าง ที่อยู่ในวงเล็บเหลี่ยมต้องเป็น IPv6 literal เท่านั้น เก็บค่าต้นฉบับและไม่รับประกันว่าจะเข้าถึงทรัพยากรได้
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
titleชื่อพรีวิวแบบเลือกได้ ใช้สตริงว่างได้แต่ห้าม null สำหรับ WhatsApp ต้องไม่ว่างและยาวไม่เกิน 255 อักขระ Unicode
descriptionคำสรุปพรีวิวแบบเลือกได้ ใช้สตริงว่างได้แต่ห้าม null สำหรับ WhatsApp ยาวไม่เกิน 1024 อักขระ Unicode
image_urlURI รูปภาพแบบเลือกได้ แต่ WhatsApp บังคับให้ระบุและไม่ว่าง ต้องเป็น URI แบบสัมบูรณ์ HTTP(S) ที่มีชื่อโฮสต์และไม่มีช่องว่าง ที่อยู่ในวงเล็บเหลี่ยมต้องเป็น IPv6 literal เท่านั้น เก็บค่าต้นฉบับและไม่รับประกันว่าจะเข้าถึงทรัพยากรได้
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
pollobjectต้องระบุและใช้เฉพาะ message.type=poll ห้ามผสมกับ text หรือ payload อื่น ต้องมี question, options และ max_selections โดยเก็บคำถามและชื่อตัวเลือกตามต้นฉบับ โครงสร้างกลางไม่จำกัดความยาวคำถาม จำนวนตัวเลือกสูงสุด หรือชื่อซ้ำ แต่ provider อาจมีข้อจำกัดเพิ่มเติม
pollต้องระบุและใช้เฉพาะ message.type=poll ห้ามผสมกับ text หรือ payload อื่น ต้องมี question, options และ max_selections โดยเก็บคำถามและชื่อตัวเลือกตามต้นฉบับ โครงสร้างกลางไม่จำกัดความยาวคำถาม จำนวนตัวเลือกสูงสุด หรือชื่อซ้ำ แต่ provider อาจมีข้อจำกัดเพิ่มเติม
questionคำถามโพลที่ต้องระบุ ต้องมีอักขระที่ไม่ใช่ช่องว่าง และเก็บตามต้นฉบับ
minLength: 1 · pattern: \S
options[]object[]อาร์เรย์ตัวเลือกที่ต้องระบุ ต้องมีอย่างน้อยสองตัวเลือกและแต่ละตัวต้องมี title
minItems: 2
options[]อาร์เรย์ตัวเลือกที่ต้องระบุ ต้องมีอย่างน้อยสองตัวเลือกและแต่ละตัวต้องมี title
minItems: 2
titleชื่อตัวเลือกที่ต้องระบุ ต้องมีอักขระที่ไม่ใช่ช่องว่าง ส่งโดยไม่ trim ไม่เปลี่ยนตัวพิมพ์หรือรูปแบบ Unicode
minLength: 1 · pattern: \S
max_selectionsต้องระบุจำนวนตัวเลือกสูงสุดต่อผู้โหวต ไม่ใช่จำนวนผู้โหวต ต้องเป็นจำนวนเต็มตั้งแต่ 1 ถึงจำนวน options โดย API ตรวจสอบ ค่าจำนวนเต็มอย่าง 1.0 และ 1e0 เท่ากับ 1 ค่าที่ไม่ใช่จำนวนเต็มใช้ไม่ได้
minimum: 1
reply_toobjectเป้าหมายการตอบแบบอ้างอิง คัดลอก data.message.reply_token จากเหตุการณ์ข้อความที่อ้างอิงได้ หรือ data.reply_token จากผลการส่ง ไปยัง reply_to.reply_token ตามเดิม ใช้กับบัญชีและการสนทนาเดิม ห้ามแทนด้วย ID ข้อความ
reply_toเป้าหมายการตอบแบบอ้างอิง คัดลอก data.message.reply_token จากเหตุการณ์ข้อความที่อ้างอิงได้ หรือ data.reply_token จากผลการส่ง ไปยัง reply_to.reply_token ตามเดิม ใช้กับบัญชีและการสนทนาเดิม ห้ามแทนด้วย ID ข้อความ
reply_tokenแฮนเดิลทึบจาก data.message.reply_token ของเหตุการณ์ข้อความที่อ้างอิงได้ หรือ data.reply_token ของผลการส่ง ใช้ค่าเดิมกับบัญชีและการสนทนาเดิม ห้ามแทนด้วย ID ข้อความ
minLength: 1
mentions[]object[]รายการเป้าหมาย @ ของข้อความกลุ่ม type=member ใช้ id สมาชิกของ Provider ที่สอดคล้องกัน ส่วน type=all หมายถึง @ทุกคน และมีผลเฉพาะเมื่อ Provider รองรับ มิฉะนั้นจะส่งคืน unsupported_message_type
mentions[]รายการเป้าหมาย @ ของข้อความกลุ่ม type=member ใช้ id สมาชิกของ Provider ที่สอดคล้องกัน ส่วน type=all หมายถึง @ทุกคน และมีผลเฉพาะเมื่อ Provider รองรับ มิฉะนั้นจะส่งคืน unsupported_message_type
typeประเภทเป้าหมาย @ หากละไว้จะถือเป็น member เพื่อความเข้ากันได้กับคำขอเดิม type=member ต้องส่ง id ส่วน type=all ไม่ต้องส่ง id และใช้ได้เฉพาะแชตกลุ่ม
enum: member, all
idตัวระบุสมาชิก Provider ที่ต้องระบุเมื่อ type=member
minLength: 1
ทำความเข้าใจผลลัพธ์
เก็บ message_id และ provider_ref เพื่อเชื่อมโยงเหตุการณ์ภายหลังหรือตรวจสอบปัญหา accepted ไม่ได้แปลว่าส่งถึงแล้ว ยืนยันผ่านเหตุการณ์ตอบรับเฉพาะช่องทางที่รองรับ รูปแบบรหัสแตกต่างกันตามช่องทาง
reply_token — แฮนเดิลทึบที่ไม่ว่างของ WhatsApp อาจคืนหลังส่งสำเร็จเมื่อบริบทอ้างอิงครบ รวมถึงโพลที่เพิ่งส่งซึ่งข้อความธรรมดาใช้อ้างอิงได้ หากไม่มีจะละไว้โดยไม่เปลี่ยนสถานะ accepted ใช้ค่าเดิมกับบัญชีและการสนทนาเดิม ไม่ใช่ ID ข้อความ
การตอบกลับ 200 OK
{
"request_id": "<REQUEST_ID>",
"data": {
"message_id": "msg_example",
"account_id": "acc_example",
"status": "accepted",
"provider_ref": "provider_msg_example",
"reply_token": "<opaque WhatsApp reply handle>"
}
}
เนื้อหาการตอบกลับ
message_idตัวระบุข้อความของ UnifyPort (msg_...) สำหรับข้อความที่ถูกรับไว้
account_idบัญชีของผู้ให้บริการที่การตอบกลับนี้อ้างถึง
statusสถานะการรับ; accepted หมายถึงข้อความถูกเข้าคิวเพื่อนำส่งไปยังผู้ให้บริการ
provider_refreference ข้อความฝั่งผู้ให้บริการ เมื่อผู้ให้บริการกำหนดค่าให้แล้ว
reply_tokenแฮนเดิลทึบที่ไม่ว่างของ WhatsApp อาจคืนหลังส่งสำเร็จเมื่อบริบทอ้างอิงครบ รวมถึงโพลที่เพิ่งส่งซึ่งข้อความธรรมดาใช้อ้างอิงได้ หากไม่มีจะละไว้โดยไม่เปลี่ยนสถานะ accepted ใช้ค่าเดิมกับบัญชีและการสนทนาเดิม ไม่ใช่ ID ข้อความ
minLength: 1
การตอบกลับ
200200 OK
คำขอสำเร็จ ดูตัวอย่างเนื้อหาตอบกลับด้านบน
400Bad Request
เนื้อหาของคำขอ path หรือพารามิเตอร์ไม่ถูกต้อง
401Unauthorized
ส่วนหัว X-Api-Key หายไปหรือไม่ถูกต้อง
403Forbidden
ระบบระบุคำขอได้ แต่ไม่อนุญาตให้ดำเนินการนี้
404Not Found
ไม่พบทรัพยากรที่ร้องขอ โปรดตรวจสอบ error.code ร่วมกับการดำเนินการปัจจุบัน
409Conflict
การดำเนินการขัดแย้งกับบัญชีของผู้ให้บริการหรือทรัพยากรที่มีอยู่
500Internal Server Error
บริการพบข้อผิดพลาดที่ไม่คาดคิด
501Not Implemented
provider ที่เลือกยังไม่รองรับการดำเนินการนี้
502Bad Gateway
อะแดปเตอร์หรือ upstream provider ไม่สามารถทำรายการให้เสร็จได้
เมื่อคำขอล้มเหลว
ตรวจ HTTP และ error.code/numeric_code เก็บ request_id แล้วแก้พารามิเตอร์ ยืนยันตัวตนต่อ หรือตรวจ runtime ตามสาเหตุ ตรวจผลครั้งก่อนก่อนส่งหรือเขียนซ้ำ อ้างอิงรหัสข้อผิดพลาด
อ่านสถานะ HTTP, error.code และ error.numeric_code ร่วมกับคำสั่งที่เรียก รหัสตัวเลขเป็นสตริง เก็บ request_id เพื่อตรวจปัญหา ค่านี้ไม่ใช่คีย์ป้องกันการทำซ้ำหรือรหัสงาน
- invalid_reply_token · 36006 · 400
อ่านโทเค็นอ้างอิงไม่ได้ ให้คัดลอก data.message.reply_token จากเหตุการณ์ขาเข้าโดยไม่แก้ไข
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 36006
{ "request_id": "req_example", "error": { "code": "invalid_reply_token", "numeric_code": "36006", "message": "Invalid or unreadable reply_token" } }- invalid_request · 10000 · 400
ตรวจ JSON และฟิลด์ที่จำเป็น
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
ตัวอย่าง · 400 · 10000
{ "request_id": "req_message_invalid_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid message request body" } }- invalid_target_workspace · 11003 · 400
เวิร์กสเปซเป้าหมายที่กำหนดทับว่างหรือรูปแบบไม่ถูกต้อง ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- provider_invalid_request · 30001 · 400
ตรวจฟิลด์และรูปแบบเฉพาะช่องทาง
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
ตัวอย่าง · 400 · 30001
{ "request_id": "req_sticker_rejected_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "sticker upload failed: media is unsupported" } }- provider_invalid_request · 36007 · 400
สื่อสติกเกอร์ตรวจสอบไม่ผ่านก่อนเรียกส่งไปยังช่องทาง คำตอบอาจระบุเหตุผลการเตรียมที่เจาะจง numeric_code=36007 ไม่ได้หมายความว่าได้ลองส่งแล้ว
เงื่อนไข: ใช้เมื่อสื่อสติกเกอร์หรือ URL ไม่ผ่านการตรวจสอบก่อนส่งไปยังช่องทาง
วิธีจัดการและลองใหม่: แก้ปัญหาสื่อสติกเกอร์ตามที่แจ้งก่อนส่งใหม่ รหัสนี้เกิดระหว่างเตรียมสื่อก่อนเรียกส่งไปยังช่องทาง จึงไม่ใช่การส่งที่อาจเสร็จแล้วแต่ไม่ทราบผล
ตัวอย่าง · 400 · 36007
{ "request_id": "req_sticker_invalid_example", "error": { "code": "provider_invalid_request", "numeric_code": "36007", "message": "invalid sticker media: invalid WebP container length" } }- unsupported_message_type · 36000 · 400
ใช้ message.type ที่ช่องทางรองรับ
วิธีจัดการและลองใหม่: เลือกช่องทางและคำสั่งที่เอกสารระบุว่ารองรับ การส่งซ้ำไม่เพิ่มความสามารถหรือเปิดสิทธิ์เบต้า
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 36000
{ "request_id": "req_example", "error": { "code": "unsupported_message_type", "numeric_code": "36000", "message": "Message type not supported" } }- invalid_api_key · 11001 · 401
ตรวจว่า API Key ถูกต้องและเปิดใช้งานอยู่
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
เพิ่มส่วนหัว X-Api-Key
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
ตัวอย่าง · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
คำขอพยายามระบุเวิร์กสเปซทับโดย API Key นี้ไม่มีสิทธิ์ ให้ลบเฮดเดอร์กำหนดทับและใช้ API Key ของเวิร์กสเปซเป้าหมาย
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
ไม่พบเวิร์กสเปซที่กำหนดทับหรือใช้งานไม่ได้ ตรวจเจ้าของเวิร์กสเปซ ลบเฮดเดอร์กำหนดทับ และใช้ API Key ของเวิร์กสเปซเป้าหมาย การส่งซ้ำไม่เพิ่มสิทธิ์
เงื่อนไข: ใช้เมื่อคำขอมีเฮดเดอร์ X-Workspace-Id เพื่อระบุเวิร์กสเปซทับ
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_binding_not_found · 30006 · 409
บัญชียังไม่มีการผูกกับการเชื่อมต่อช่องทางที่ใช้งานอยู่ ตรวจสถานะบัญชี
วิธีจัดการและลองใหม่: ตรวจสถานะยืนยันตัวตนและ runtime แล้วเลือกรีเฟรช เริ่ม หรือเชื่อมต่อใหม่ตามเป้าหมายและความสามารถของช่องทาง ปัญหาการเชื่อมต่อเพียงอย่างเดียวไม่ได้ยืนยันว่าออกจากระบบ ตรวจให้เป็น running ก่อนทำงานที่ต้องใช้การเชื่อมต่อ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 30006
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }- provider_not_ready · 30009 · 409
การเชื่อมต่อยังไม่พร้อม ตรวจการอนุญาตและ runtime_status ก่อนลองใหม่
วิธีจัดการและลองใหม่: ตรวจสถานะยืนยันตัวตนและ runtime แล้วเลือกรีเฟรช เริ่ม หรือเชื่อมต่อใหม่ตามเป้าหมายและความสามารถของช่องทาง ปัญหาการเชื่อมต่อเพียงอย่างเดียวไม่ได้ยืนยันว่าออกจากระบบ ตรวจให้เป็น running ก่อนทำงานที่ต้องใช้การเชื่อมต่อ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- provider_not_ready · 30014 · 409
ไม่มีอินสแตนซ์ช่องทางที่บัญชีนี้ต้องใช้ เป็นปัญหาความพร้อมของ runtime ไม่ใช่หลักฐานว่าการยืนยันตัวตนหมดอายุ
วิธีจัดการและลองใหม่: ตรวจสถานะยืนยันตัวตนและ runtime แล้วเลือกรีเฟรช เริ่ม หรือเชื่อมต่อใหม่ตามเป้าหมายและความสามารถของช่องทาง ปัญหาการเชื่อมต่อเพียงอย่างเดียวไม่ได้ยืนยันว่าออกจากระบบ ตรวจให้เป็น running ก่อนทำงานที่ต้องใช้การเชื่อมต่อ
ช่องทาง: WhatsApp
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 30014
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30014", "message": "Provider instance is missing" } }- provider_not_ready · 30015 · 409
runtime ของช่องทางหยุดแล้ว ตรวจว่าตั้งใจหยุดหรือไม่ก่อนเริ่ม การหยุด runtime ไม่ได้แปลว่าออกจากระบบ
วิธีจัดการและลองใหม่: ตรวจสถานะยืนยันตัวตนและ runtime แล้วเลือกรีเฟรช เริ่ม หรือเชื่อมต่อใหม่ตามเป้าหมายและความสามารถของช่องทาง ปัญหาการเชื่อมต่อเพียงอย่างเดียวไม่ได้ยืนยันว่าออกจากระบบ ตรวจให้เป็น running ก่อนทำงานที่ต้องใช้การเชื่อมต่อ
ช่องทาง: WhatsApp
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 30015
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30015", "message": "Provider runtime is stopped" } }- send_message_failed · 20020 · 500
ตรวจ account_id และใช้ X-Api-Key ของเวิร์กสเปซเจ้าของบัญชี คีย์ปัจจุบันไม่สามารถเข้าถึงบัญชีที่ไม่พบในเวิร์กสเปซนี้
เงื่อนไข: ใช้เมื่อไม่พบบัญชี โดยคงสถานะ HTTP และ code ของคำสั่งเดิม และใช้ numeric_code ระบุว่าบัญชีไม่มีอยู่
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 20020
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "20020", "message": "Account not found" } }- send_message_failed · 30010 · 500
ช่องทางทำคำสั่งไม่สำเร็จ message อาจมีสาเหตุต้นฉบับต่อจาก “Provider operation failed:” ข้อความสาเหตุเปลี่ยนได้และไม่ใช่อินเทอร์เฟซคงที่สำหรับโปรแกรม
เงื่อนไข: ใช้เมื่อช่องทางไม่มีประเภทความล้มเหลวที่เจาะจงกว่า โดยคงข้อผิดพลาดของคำสั่งปัจจุบัน
วิธีจัดการและลองใหม่: ก่อนส่งอีกครั้ง ให้ยืนยันว่าข้อความหรือคำตอบเดิมถูกสร้างแล้วหรือไม่ เมื่อหมดเวลาหรือตอบข้อผิดพลาด ผลอาจยังไม่ทราบ และการค้นหาภายหลังไม่พบคำตอบก็ไม่พิสูจน์ว่าไม่เคยเขียน อย่าส่งซ้ำอัตโนมัติ
ช่องทาง: WhatsApp
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 30010
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "30010", "message": "Provider operation failed" } }- send_message_failed · 36001 · 500
ส่งข้อความไม่สำเร็จหรือยังยืนยันผลการส่งไม่ได้
วิธีจัดการและลองใหม่: ก่อนส่งอีกครั้ง ให้ยืนยันว่าข้อความหรือคำตอบเดิมถูกสร้างแล้วหรือไม่ เมื่อหมดเวลาหรือตอบข้อผิดพลาด ผลอาจยังไม่ทราบ และการค้นหาภายหลังไม่พบคำตอบก็ไม่พิสูจน์ว่าไม่เคยเขียน อย่าส่งซ้ำอัตโนมัติ
ตัวอย่าง · 500 · 36001
{ "request_id": "req_sticker_prepare_failed_example", "error": { "code": "send_message_failed", "numeric_code": "36001", "message": "download sticker: media download returned HTTP 503" } }- unsupported_by_provider · 30003 · 501
ช่องทางไม่รองรับการทำงานนี้ ให้เลือกจากตารางที่รองรับ
วิธีจัดการและลองใหม่: เลือกช่องทางและคำสั่งที่เอกสารระบุว่ารองรับ การส่งซ้ำไม่เพิ่มความสามารถหรือเปิดสิทธิ์เบต้า
ตัวอย่าง · 501 · 30003
{ "request_id": "req_xxx", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }- provider_adapter_not_found · 30004 · 502
บริการช่องทางไม่พร้อมใช้งาน ตรวจสถานะหรือลองภายหลัง และยืนยันผลเดิมก่อนลองเขียนข้อมูลซ้ำ
วิธีจัดการและลองใหม่: ก่อนส่งอีกครั้ง ให้ยืนยันว่าข้อความหรือคำตอบเดิมถูกสร้างแล้วหรือไม่ เมื่อหมดเวลาหรือตอบข้อผิดพลาด ผลอาจยังไม่ทราบ และการค้นหาภายหลังไม่พบคำตอบก็ไม่พิสูจน์ว่าไม่เคยเขียน อย่าส่งซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 502 · 30004
{ "request_id": "req_example", "error": { "code": "provider_adapter_not_found", "numeric_code": "30004", "message": "Provider adapter unavailable" } }- provider_unavailable · 20102 · 502
การส่งข้อความ WhatsApp แบบซิงโครนัสตรวจพบข้อจำกัดการเข้าสู่ระบบ ส่ง HTTP 502, provider_unavailable, 20102 เหตุการณ์ล้มเหลวของ WhatsApp อาจใช้ account_restricted ที่มีความหมายตัวเลขเดียวกัน การตอบ HTTP นี้ไม่เปลี่ยนสถานะบัญชีหรือสร้างเหตุการณ์เพิ่มเอง
วิธีจัดการและลองใหม่: หยุดส่งและลองใหม่อัตโนมัติ ให้ผู้ใช้ตรวจและแก้ข้อจำกัดในแอป WhatsApp ทางการ กลับมาทำงานหลังแก้ปัญหาและยืนยันตัวตนใหม่ตามที่จำเป็น สถานะ running ก่อนหน้าไม่ยืนยันว่าข้อจำกัดถูกยกเลิกแล้ว
ช่องทาง: WhatsApp
ตัวอย่าง · 502 · 20102
{ "request_id": "req_example_whatsapp_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "20102", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30002 · 502
บริการช่องทางไม่พร้อมใช้งาน ตรวจสถานะหรือลองภายหลัง และยืนยันผลเดิมก่อนลองเขียนข้อมูลซ้ำ
วิธีจัดการและลองใหม่: ก่อนส่งอีกครั้ง ให้ยืนยันว่าข้อความหรือคำตอบเดิมถูกสร้างแล้วหรือไม่ เมื่อหมดเวลาหรือตอบข้อผิดพลาด ผลอาจยังไม่ทราบ และการค้นหาภายหลังไม่พบคำตอบก็ไม่พิสูจน์ว่าไม่เคยเขียน อย่าส่งซ้ำอัตโนมัติ
ตัวอย่าง · 502 · 30002
{ "request_id": "req_example_provider_unavailable", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }- provider_unavailable · 30010 · 502
ช่องทางทำคำสั่งไม่สำเร็จ message อาจมีสาเหตุต้นฉบับต่อจาก “Provider operation failed:” ข้อความสาเหตุเปลี่ยนได้และไม่ใช่อินเทอร์เฟซคงที่สำหรับโปรแกรม
วิธีจัดการและลองใหม่: ก่อนส่งอีกครั้ง ให้ยืนยันว่าข้อความหรือคำตอบเดิมถูกสร้างแล้วหรือไม่ เมื่อหมดเวลาหรือตอบข้อผิดพลาด ผลอาจยังไม่ทราบ และการค้นหาภายหลังไม่พบคำตอบก็ไม่พิสูจน์ว่าไม่เคยเขียน อย่าส่งซ้ำอัตโนมัติ
ช่องทาง: WhatsApp
ตัวอย่าง · 502 · 30010
{ "request_id": "req_example_message_failed", "error": { "code": "provider_unavailable", "numeric_code": "30010", "message": "Provider operation failed: Example operation could not be completed" } }- provider_unavailable · 30019 · 502
แพลตฟอร์มจำกัดการส่งข้อความนี้อย่างชัดเจน โดยส่ง HTTP 502, provider_unavailable, 30019 ไม่ยืนยันว่าบัญชีถูกแบนถาวรหรือมีเวลาปลดข้อจำกัดแน่นอน
วิธีจัดการและลองใหม่: หยุดลองใหม่อัตโนมัติสำหรับข้อจำกัดข้อความนี้ ส่งต่อเมื่อยืนยันแล้วว่าข้อจำกัดถูกยกเลิก ไม่มีเวลาปลดแน่นอน และข้อผิดพลาดนี้เพียงอย่างเดียวไม่ต้องยืนยันตัวตนใหม่
ช่องทาง: WhatsApp
ตัวอย่าง · 502 · 30019
{ "request_id": "req_example_message_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30019", "message": "Message sending is restricted by the platform" } }- provider_unavailable · 30020 · 502
คำขอซิงโครนัสของ whatsapp-protocol ระบุข้อจำกัดการเข้าสู่ระบบด้วย numeric_code=30020 อาจกระทบการนำเข้าเซสชัน runtime การส่ง และค้นหารายชื่อ โดยคงสถานะ HTTP และ code ของคำสั่งปัจจุบัน อย่านำสัญญาเหตุการณ์ WhatsApp 20102 มาใช้กับช่องทางนี้
วิธีจัดการและลองใหม่: หยุดส่งและลองใหม่อัตโนมัติ ให้ผู้ใช้ตรวจและแก้ข้อจำกัดในแอป WhatsApp ทางการ กลับมาทำงานหลังแก้ปัญหาและยืนยันตัวตนใหม่ตามที่จำเป็น สถานะ running ก่อนหน้าไม่ยืนยันว่าข้อจำกัดถูกยกเลิกแล้ว
ช่องทาง: WhatsApp Protocol
ตัวอย่าง · 502 · 30020
{ "request_id": "req_example_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30020", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30021 · 502
WhatsApp ไม่ได้เชื่อมต่อขณะทำคำสั่ง โดยคงข้อความสาเหตุการเชื่อมต่อเดิม ไม่ยืนยันว่าออกจากระบบหรือการยืนยันหมดอายุ และไม่เชื่อมต่อใหม่ ส่งซ้ำ หรือเปลี่ยนสถานะบัญชีเอง
วิธีจัดการและลองใหม่: พักงานที่ต้องใช้การเชื่อมต่อ เรียก POST /v1/accounts/{account_id}/runtime/refresh ก่อน กู้คืนตามสถานะล่าสุดและยืนยัน runtime_status=running ก่อนเรียกงานธุรกิจ ตรวจผลการเขียนครั้งก่อนก่อนส่งซ้ำ
ช่องทาง: WhatsApp
ตัวอย่าง · 502 · 30021
{ "request_id": "req_example_connection_disconnected", "error": { "code": "provider_unavailable", "numeric_code": "30021", "message": "example operation: websocket not connected" } }- provider_unavailable · 34012 · 502
การส่งข้อความไปยังกลุ่ม WhatsApp นี้ต้องใช้สิทธิ์ผู้ดูแลกลุ่ม โปรดปรับบทบาทบัญชีก่อนลองใหม่ อย่าส่งคำขอเดิมซ้ำ
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
ช่องทาง: WhatsApp
ตัวอย่าง · 502 · 34012
{ "request_id": "req_example_group_admin_required", "error": { "code": "provider_unavailable", "numeric_code": "34012", "message": "Group administrator privileges are required to send messages to this group" } }