เอกสารอ้างอิง API

ข้อความ

ส่งข้อความตัวอักษร

ส่งข้อความตัวอักษร โดย message.text ต้องไม่ว่าง ฟิลด์เฉพาะใช้ provider_data และการตอบกลับแบบอ้างอิงใช้ reply_to ระดับบนสุด

POSThttps://api.unifyport.ai/v1/messages

ช่องทางที่รองรับ

all

ก่อนเรียกใช้

ใช้ 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-Key
stringจำเป็น

API key ของพื้นที่ทำงาน ระบบจะระบุพื้นที่ทำงานจากส่วนหัวนี้

Content-Type
stringจำเป็น

ใช้ application/json เมื่อต้องส่งเนื้อหาของคำขอเป็น JSON

เนื้อหาของคำขอ

provider_data
object

ตัวเลือกการส่งเฉพาะ provider มีผลเฉพาะ provider และประเภทข้อความที่รองรับ seconds ของ WhatsApp audio/video ใช้จำนวนเต็มที่ไม่ติดลบ เฉพาะสำหรับ video ให้ใช้ค่า 0 ถึง 4294967295 และ waveform ใช้เฉพาะ audio หากรองรับการตอบกลับแบบอ้างอิงให้ใช้ reply_to ระดับบนสุด สำหรับ sticker ต้องละเว้น provider_data หรือใช้ออบเจ็กต์ว่าง ค่าที่ไม่ใช่ออบเจ็กต์คืน 400 invalid_request และออบเจ็กต์ที่ไม่ว่างคืน 400 provider_invalid_request

seconds
integer

ระยะเวลาแบบเลือกได้เป็นวินาทีสำหรับข้อความ WhatsApp audio และ video โดยใช้จำนวนเต็มที่ไม่ติดลบ เฉพาะสำหรับ video ค่าที่อนุญาตคือ 0 ถึง 4294967295

minimum: 0

waveform
string

ข้อมูล waveform แบบเลือกได้สำหรับข้อความ audio ของ WhatsApp ค่าที่ไม่ว่างต้องเข้ารหัสด้วย Base64 มาตรฐาน และเมื่อ decode แล้วต้องเป็นข้อมูล waveform แบบ JSON ที่ parse ได้ สตริงว่างจะถือว่าไม่ได้ระบุ ส่วนรูปแบบอื่นที่ไม่ถูกต้องจะส่งคืน HTTP 400 provider_invalid_request

account_id
stringจำเป็น

บัญชีของผู้ให้บริการที่ส่งข้อความ

minLength: 1

to
objectจำเป็น

ผู้รับ ประกอบด้วย id และ type

id
stringจำเป็น

ตัวระบุผู้รับฝั่ง provider

minLength: 1

type
stringจำเป็น

ประเภทบทสนทนามาตรฐาน: user, group หรือ channel กลุ่มประกาศของชุมชน WhatsApp ยังคงใช้ group

enum: user, group, channel

message
objectจำเป็น

payload ข้อความที่ปรับเป็นมาตรฐาน ข้อความตัวอักษรใช้ message.text สื่อใช้ message.url

type
stringจำเป็น

ประเภทข้อความ: text, image, video, audio, document, file, contact, link_preview, poll หรือ sticker

enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker

text
string

เนื้อหาที่ไม่ว่างซึ่งจำเป็นสำหรับ text และ link_preview สำหรับ link_preview ต้องมีอักขระที่ไม่ใช่ช่องว่าง และ WhatsApp กำหนดให้มี link_preview.url ตรงตามต้นฉบับในเนื้อหาด้วย

minLength: 1

caption
string

คำบรรยายเสริมสำหรับข้อความ image, video, document หรือ file

url
string

URL HTTP(S) แบบ absolute ที่ไม่ว่าง โดย media ต้องมี url, file_url หรือ file_key

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_url
string

URL HTTP(S) สำรองแบบ absolute ที่ไม่ว่าง โดย media ต้องมีแหล่งข้อมูลหนึ่งรายการ

format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://

file_key
string

ข้อมูลอ้างอิงไฟล์ที่ไม่ว่าง โดย media ต้องมีแหล่งข้อมูลหนึ่งรายการ

contacts[]
object[]

อาร์เรย์นามบัตรที่ไม่ว่างและต้องระบุเมื่อ message.type=contact

minItems: 1

name
string

ชื่อที่แสดงที่ไม่ว่างและต้องมีในนามบัตรทุกรายการ

minLength: 1

phones[]
object[]

รายการหมายเลขโทรศัพท์ในนามบัตร

number
string

หมายเลขโทรศัพท์ ต้องมีใน phone ทุกรายการ

type
string

ป้ายกำกับโทรศัพท์ที่ไม่บังคับ เช่น CELL หรือ WORK

emails[]
object[]

รายการอีเมลในนามบัตร

address
string

ที่อยู่อีเมล ต้องมีใน email ทุกรายการ

format: email

type
string

ป้ายกำกับอีเมลที่ไม่บังคับ เช่น WORK หรือ HOME

organization
string

ชื่อองค์กรของผู้ติดต่อที่ไม่บังคับ

title
string

ตำแหน่งงานของผู้ติดต่อที่ไม่บังคับ

link_preview
object

ใช้เฉพาะ message.type=link_preview และต้องระบุพร้อม text ห้ามผสมกับ payload อื่น โครงสร้างกลางบังคับเฉพาะ url ส่วน title และ description เป็นตัวเลือกที่ใช้สตริงว่างได้แต่ห้าม null นโยบายส่งของ API นี้สำหรับ WhatsApp บังคับ title/image_url ที่ไม่ว่าง และจำกัด title ไม่เกิน 255 และ description ไม่เกิน 1024 อักขระ Unicode

url
string

ลิงก์ปลายทางที่ต้องระบุ เป็น URI แบบสัมบูรณ์ HTTP(S) ที่มีชื่อโฮสต์และไม่มีช่องว่าง ที่อยู่ในวงเล็บเหลี่ยมต้องเป็น IPv6 literal เท่านั้น เก็บค่าต้นฉบับและไม่รับประกันว่าจะเข้าถึงทรัพยากรได้

pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)

title
string

ชื่อพรีวิวแบบเลือกได้ ใช้สตริงว่างได้แต่ห้าม null สำหรับ WhatsApp ต้องไม่ว่างและยาวไม่เกิน 255 อักขระ Unicode

description
string

คำสรุปพรีวิวแบบเลือกได้ ใช้สตริงว่างได้แต่ห้าม null สำหรับ WhatsApp ยาวไม่เกิน 1024 อักขระ Unicode

image_url
string

URI รูปภาพแบบเลือกได้ แต่ WhatsApp บังคับให้ระบุและไม่ว่าง ต้องเป็น URI แบบสัมบูรณ์ HTTP(S) ที่มีชื่อโฮสต์และไม่มีช่องว่าง ที่อยู่ในวงเล็บเหลี่ยมต้องเป็น IPv6 literal เท่านั้น เก็บค่าต้นฉบับและไม่รับประกันว่าจะเข้าถึงทรัพยากรได้

pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)

poll
object

ต้องระบุและใช้เฉพาะ message.type=poll ห้ามผสมกับ text หรือ payload อื่น ต้องมี question, options และ max_selections โดยเก็บคำถามและชื่อตัวเลือกตามต้นฉบับ โครงสร้างกลางไม่จำกัดความยาวคำถาม จำนวนตัวเลือกสูงสุด หรือชื่อซ้ำ แต่ provider อาจมีข้อจำกัดเพิ่มเติม

question
string

คำถามโพลที่ต้องระบุ ต้องมีอักขระที่ไม่ใช่ช่องว่าง และเก็บตามต้นฉบับ

minLength: 1 · pattern: \S

options[]
object[]

อาร์เรย์ตัวเลือกที่ต้องระบุ ต้องมีอย่างน้อยสองตัวเลือกและแต่ละตัวต้องมี title

minItems: 2

title
string

ชื่อตัวเลือกที่ต้องระบุ ต้องมีอักขระที่ไม่ใช่ช่องว่าง ส่งโดยไม่ trim ไม่เปลี่ยนตัวพิมพ์หรือรูปแบบ Unicode

minLength: 1 · pattern: \S

max_selections
integer

ต้องระบุจำนวนตัวเลือกสูงสุดต่อผู้โหวต ไม่ใช่จำนวนผู้โหวต ต้องเป็นจำนวนเต็มตั้งแต่ 1 ถึงจำนวน options โดย API ตรวจสอบ ค่าจำนวนเต็มอย่าง 1.0 และ 1e0 เท่ากับ 1 ค่าที่ไม่ใช่จำนวนเต็มใช้ไม่ได้

minimum: 1

reply_to
object

เป้าหมายการตอบแบบอ้างอิง คัดลอก data.message.reply_token จากเหตุการณ์ข้อความที่อ้างอิงได้ หรือ data.reply_token จากผลการส่ง ไปยัง reply_to.reply_token ตามเดิม ใช้กับบัญชีและการสนทนาเดิม ห้ามแทนด้วย ID ข้อความ

reply_token
string

แฮนเดิลทึบจาก data.message.reply_token ของเหตุการณ์ข้อความที่อ้างอิงได้ หรือ data.reply_token ของผลการส่ง ใช้ค่าเดิมกับบัญชีและการสนทนาเดิม ห้ามแทนด้วย ID ข้อความ

minLength: 1

mentions[]
object[]

รายการเป้าหมาย @ ของข้อความกลุ่ม type=member ใช้ id สมาชิกของ Provider ที่สอดคล้องกัน ส่วน type=all หมายถึง @ทุกคน และมีผลเฉพาะเมื่อ Provider รองรับ มิฉะนั้นจะส่งคืน unsupported_message_type

type
string

ประเภทเป้าหมาย @ หากละไว้จะถือเป็น member เพื่อความเข้ากันได้กับคำขอเดิม type=member ต้องส่ง id ส่วน type=all ไม่ต้องส่ง id และใช้ได้เฉพาะแชตกลุ่ม

enum: member, all

id
string

ตัวระบุสมาชิก 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
string

ตัวระบุข้อความของ UnifyPort (msg_...) สำหรับข้อความที่ถูกรับไว้

account_id
string

บัญชีของผู้ให้บริการที่การตอบกลับนี้อ้างถึง

status
string

สถานะการรับ; accepted หมายถึงข้อความถูกเข้าคิวเพื่อนำส่งไปยังผู้ให้บริการ

provider_ref
string

reference ข้อความฝั่งผู้ให้บริการ เมื่อผู้ให้บริการกำหนดค่าให้แล้ว

reply_token
string

แฮนเดิลทึบที่ไม่ว่างของ WhatsApp อาจคืนหลังส่งสำเร็จเมื่อบริบทอ้างอิงครบ รวมถึงโพลที่เพิ่งส่งซึ่งข้อความธรรมดาใช้อ้างอิงได้ หากไม่มีจะละไว้โดยไม่เปลี่ยนสถานะ accepted ใช้ค่าเดิมกับบัญชีและการสนทนาเดิม ไม่ใช่ ID ข้อความ

minLength: 1

การตอบกลับ

200

200 OK

คำขอสำเร็จ ดูตัวอย่างเนื้อหาตอบกลับด้านบน

400

Bad Request

เนื้อหาของคำขอ path หรือพารามิเตอร์ไม่ถูกต้อง

401

Unauthorized

ส่วนหัว X-Api-Key หายไปหรือไม่ถูกต้อง

403

Forbidden

ระบบระบุคำขอได้ แต่ไม่อนุญาตให้ดำเนินการนี้

404

Not Found

ไม่พบทรัพยากรที่ร้องขอ โปรดตรวจสอบ error.code ร่วมกับการดำเนินการปัจจุบัน

409

Conflict

การดำเนินการขัดแย้งกับบัญชีของผู้ให้บริการหรือทรัพยากรที่มีอยู่

500

Internal Server Error

บริการพบข้อผิดพลาดที่ไม่คาดคิด

501

Not Implemented

provider ที่เลือกยังไม่รองรับการดำเนินการนี้

502

Bad 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"
  }
}