การอนุญาตบัญชี
ตรวจสถานะ QR
ตรวจผลของ flow QR จนกว่าผู้ให้บริการจะรายงานสำเร็จหรือไม่สำเร็จ QR ที่รอสแกนจะส่ง auth_payload.qr_code ล่าสุด ส่วน WhatsApp อาจส่ง passkey_required พร้อม auth_payload.public_key สำหรับขั้นตอน WebAuthn ถัดไปแทน
https://api.unifyport.ai/v1/accounts/{account_id}/auth/qr/checkช่องทางที่รองรับ
ก่อนเรียกใช้
ใช้ X-Api-Key ของ workspace เจ้าของทรัพยากรบนเซิร์ฟเวอร์ แทนค่าตัวอย่างทั้งหมดก่อนเรียกใช้
ที่มาของพารามิเตอร์
- account_id
- รับ data.id จากการสร้างหรือค้นหาบัญชี รหัสเป็นของ workspace ที่ระบุด้วย X-Api-Key ดูบัญชี
พารามิเตอร์คำขอ
ส่วนหัว
X-Api-KeyAPI key ของพื้นที่ทำงาน ระบบจะระบุพื้นที่ทำงานจากส่วนหัวนี้
Content-Typeใช้ application/json เมื่อต้องส่งเนื้อหาของคำขอเป็น JSON
พารามิเตอร์ใน path
account_idตัวระบุที่ใช้ใน route ของ authentication
เนื้อหาของคำขอ
จุดเชื่อมต่อนี้รับออบเจ็กต์ JSON ว่าง โปรดส่ง {} ตามตัวอย่างคำขอ
ทำความเข้าใจผลลัพธ์
อ่าน status/auth_status และ auth_payload ที่ส่งกลับจริงสำหรับคำสั่งยืนยันตัวตนนี้ หากต้องให้ผู้ใช้ดำเนินการ ให้ทำตามคู่มือช่องทาง authorized หมายถึงยืนยันตัวตนเสร็จ แต่ก่อนส่งข้อความต้องตรวจ runtime_status ด้วย
การตอบกลับ awaiting_qr_scan
{
"request_id": "<REQUEST_ID>",
"data": {
"provider": "whatsapp",
"action": "check_qr_auth",
"status": "awaiting_qr_scan",
"auth_status": "awaiting_qr_scan",
"auth_payload": {
"qr_code": "<QR_CODE>"
}
}
}
การตอบกลับ passkey_required
{
"request_id": "<REQUEST_ID>",
"data": {
"provider": "whatsapp",
"action": "check_qr_auth",
"status": "passkey_required",
"auth_status": "passkey_required",
"auth_payload": {
"type": "passkey",
"public_key": {
"challenge": "<BASE64URL_CHALLENGE>"
}
}
}
}
เนื้อหาการตอบกลับ
providerรหัสช่องทาง ใช้ค่าที่ API ส่งกลับโดยไม่แก้ไขในการเรียกครั้งต่อไป ดูค่าที่ API นี้คืนได้จาก enum ด้านล่าง
enum: telegram, whatsapp, line, twitter, zalo, tiktok, whatsapp-protocol
actionการดำเนินการที่ร้องขอในการเรียกครั้งนี้
statusสถานะ flow การให้สิทธิ์ปัจจุบัน เช่น pending_auth, awaiting_qr_scan, awaiting_code, pending, passkey_required, passkey_pending, passkey_confirmation, passkey_confirmation_sent, authorized หรือ failed
auth_statusสถานะการยืนยันตัวตนมาตรฐานปัจจุบัน เช่น awaiting_qr_scan, awaiting_code, passkey_required, authorized หรือ failed ให้ดำเนินขั้นตอนอนุญาตของช่องทางที่เกี่ยวข้องต่อตามค่านี้
auth_payloadobjectpayload มาตรฐานที่ต้องใช้ในขั้นปัจจุบัน QR ใช้ qr_code; ขั้นยืนยัน code ใช้ type=code; Passkey ใช้ type=passkey และ public_key payload ของขั้นที่แยกกันจะไม่ปรากฏพร้อมกัน
auth_payloadpayload มาตรฐานที่ต้องใช้ในขั้นปัจจุบัน QR ใช้ qr_code; ขั้นยืนยัน code ใช้ type=code; Passkey ใช้ type=passkey และ public_key payload ของขั้นที่แยกกันจะไม่ปรากฏพร้อมกัน
typeชนิด payload ของขั้นปัจจุบัน code หมายถึงขั้นยืนยัน code และ passkey หมายถึงขั้น Passkey
qr_codeเนื้อหา QR สำหรับแสดงเฉพาะเมื่อ auth_status เป็น awaiting_qr_scan
public_keyWebAuthn PublicKeyCredentialRequestOptions ที่ส่งให้ browser credentials API เมื่อ auth_status เป็น passkey_required
account_idบัญชีของผู้ให้บริการที่การตอบกลับนี้อ้างถึง
expires_attimestamp แบบ RFC3339 ที่หลังจากนั้น auth_payload ปัจจุบันจะไม่ใช้ได้แล้ว
การตอบกลับ
200200 OK
คำขอสำเร็จ ดูตัวอย่างเนื้อหาตอบกลับด้านบน
400Bad Request
เนื้อหาของคำขอ path หรือพารามิเตอร์ไม่ถูกต้อง
401Unauthorized
ส่วนหัว X-Api-Key หายไปหรือไม่ถูกต้อง
403Forbidden
ระบบระบุคำขอได้ แต่ไม่อนุญาตให้ดำเนินการนี้
404Not Found
ไม่พบทรัพยากรที่ร้องขอ โปรดตรวจสอบ error.code ร่วมกับการดำเนินการปัจจุบัน
409Conflict
การดำเนินการขัดแย้งกับบัญชีของผู้ให้บริการหรือทรัพยากรที่มีอยู่
500Internal Server Error
บริการพบข้อผิดพลาดที่ไม่คาดคิด
502Bad Gateway
อะแดปเตอร์หรือ upstream provider ไม่สามารถทำรายการให้เสร็จได้
เมื่อคำขอล้มเหลว
ตรวจ HTTP และ error.code/numeric_code เก็บ request_id แล้วแก้พารามิเตอร์ ยืนยันตัวตนต่อ หรือตรวจ runtime ตามสาเหตุ ตรวจผลครั้งก่อนก่อนส่งหรือเขียนซ้ำ อ้างอิงรหัสข้อผิดพลาด
อ่านสถานะ HTTP, error.code และ error.numeric_code ร่วมกับคำสั่งที่เรียก รหัสตัวเลขเป็นสตริง เก็บ request_id เพื่อตรวจปัญหา ค่านี้ไม่ใช่คีย์ป้องกันการทำซ้ำหรือรหัสงาน
- invalid_request · 10000 · 400
ตรวจ JSON และฟิลด์ที่จำเป็น
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 10000
{ "request_id": "req_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid request parameters" } }- 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
ตรวจฟิลด์และรูปแบบเฉพาะช่องทาง
วิธีจัดการและลองใหม่: แก้พารามิเตอร์ตามคำสั่งและเงื่อนไขช่องทางก่อนเรียกใหม่ การส่งคำขอผิดแบบเดิมซ้ำไม่ช่วยแก้ข้อผิดพลาด
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 30001
{ "request_id": "req_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "Provider rejected the request" } }- unsupported_action · 30005 · 400
ไม่รู้จักการทำงานของบัญชีนี้ ให้ใช้การทำงานตามเอกสาร
วิธีจัดการและลองใหม่: เลือกช่องทางและคำสั่งที่เอกสารระบุว่ารองรับ การส่งซ้ำไม่เพิ่มความสามารถหรือเปิดสิทธิ์เบต้า
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 400 · 30005
{ "request_id": "req_example", "error": { "code": "unsupported_action", "numeric_code": "30005", "message": "Action 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" } }- duplicate_provider_account · 20015 · 409
ตัวตนช่องทางนี้ผูกกับอีกบัญชีในเวิร์กสเปซแล้ว
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 20015
{ "request_id": "req_example", "error": { "code": "duplicate_provider_account", "numeric_code": "20015", "message": "A provider account with the same identity already exists in this workspace" } }- provider_account_mismatch · 20017 · 409
ตัวตนช่องทางในคำขอไม่ตรงกับบัญชีที่ผูกไว้
วิธีจัดการและลองใหม่: เก็บ request_id และรหัสแบบมีโครงสร้าง ตรวจคำสั่งปัจจุบันก่อนเลือกการดำเนินการถัดไป
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 409 · 20017
{ "request_id": "req_example", "error": { "code": "provider_account_mismatch", "numeric_code": "20017", "message": "Authenticated provider account does not match the bound account; re-scan with the original account" } }- 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" } }- run_auth_action_failed · 20010 · 500
ดำเนินคำสั่งยืนยันตัวตน: คำสั่งยืนยันตัวตนล้มเหลว ตรวจขั้นตอนเดิมก่อน อย่าสรุปว่าต้องเริ่มยืนยันใหม่
วิธีจัดการและลองใหม่: ตรวจขั้นตอนยืนยันตัวตนปัจจุบันว่าต้องให้ผู้ใช้ทำอะไรหรือไม่ อย่าเริ่มยืนยันใหม่เพียงเพราะคำขอนี้ล้มเหลว และอย่าส่งซ้ำไปยังเซสชันที่หมดอายุหรือจบแล้ว
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 20010
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20010", "message": "Failed to run auth action" } }- run_auth_action_failed · 20020 · 500
ตรวจ account_id และใช้ X-Api-Key ของเวิร์กสเปซเจ้าของบัญชี คีย์ปัจจุบันไม่สามารถเข้าถึงบัญชีที่ไม่พบในเวิร์กสเปซนี้
เงื่อนไข: ใช้เมื่อไม่พบบัญชี โดยคงสถานะ HTTP และ code ของคำสั่งเดิม และใช้ numeric_code ระบุว่าบัญชีไม่มีอยู่
วิธีจัดการและลองใหม่: ตรวจรหัสเป้าหมาย เจ้าของทรัพยากร และเวิร์กสเปซปัจจุบัน อย่าถือว่าเป้าหมายที่ยืนยันแล้วว่าไม่มีหรือเข้าไม่ถึงเป็นความขัดข้องชั่วคราวที่ควรลองซ้ำอัตโนมัติ
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 20020
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "20020", "message": "Account not found" } }- run_auth_action_failed · 30010 · 500
ช่องทางทำคำสั่งไม่สำเร็จ message อาจมีสาเหตุต้นฉบับต่อจาก “Provider operation failed:” ข้อความสาเหตุเปลี่ยนได้และไม่ใช่อินเทอร์เฟซคงที่สำหรับโปรแกรม
เงื่อนไข: ใช้เมื่อช่องทางไม่มีประเภทความล้มเหลวที่เจาะจงกว่า โดยคงข้อผิดพลาดของคำสั่งปัจจุบัน
วิธีจัดการและลองใหม่: ตรวจขั้นตอนยืนยันตัวตนปัจจุบันว่าต้องให้ผู้ใช้ทำอะไรหรือไม่ อย่าเริ่มยืนยันใหม่เพียงเพราะคำขอนี้ล้มเหลว และอย่าส่งซ้ำไปยังเซสชันที่หมดอายุหรือจบแล้ว
ช่องทาง: WhatsApp
JSON ตัวอย่าง โดย message เปลี่ยนตามสาเหตุจริง · 500 · 30010
{ "request_id": "req_example", "error": { "code": "run_auth_action_failed", "numeric_code": "30010", "message": "Provider operation failed" } }- 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 · 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_operation_failed", "error": { "code": "provider_unavailable", "numeric_code": "30010", "message": "Provider operation failed: Example operation could not be completed" } }- 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" } }