วงจรชีวิตของบัญชี
บัญชีหนึ่งมีสถานะอิสระสามชุด: status (สวิตช์เชิงธุรกิจที่คุณตั้งเอง), สถานะการยืนยันตัวตนที่ได้จาก GET /v1/accounts/{id}/auth และ runtime_status (การเชื่อมต่อจริง) ส่วน payload ของ webhook เปิดเผยสองค่าหลังเป็น auth_status และ runtime_status — โปรดสังเกตว่าออบเจ็กต์บัญชีฝั่ง REST เองไม่มีฟิลด์ชื่อ auth_status
สเตตแมชชีนของการยืนยันตัวตน
pending_authสถานะเริ่มต้นหลังสร้างบัญชี ยังไม่มีโฟลว์ใดเริ่มทำงาน
awaiting_qr_scanโฟลว์ QR กำลังทำงาน auth_payload มีเนื้อหา QR สำหรับนำไปเรนเดอร์
awaiting_codeโฟลว์รหัสยืนยันกำลังทำงาน สำหรับ WhatsApp ให้กรอก verify_code จาก auth_payload ในโทรศัพท์
awaiting_passwordผู้ให้บริการต้องการรหัสผ่าน 2FA หลังขั้นรหัสยืนยัน
authorizedการยืนยันตัวตนเสร็จสมบูรณ์ รันไทม์จะถูกเริ่มอัตโนมัติ
failedโฟลว์ล้มเหลว last_error บอกสาเหตุ เริ่มโฟลว์ใหม่เพื่อลองอีกครั้ง
pending_auth→awaiting_qr_scanPOST /auth/qr/start เริ่มโฟลว์ QR
pending_auth→awaiting_codePOST /auth/start เริ่มโฟลว์รหัสยืนยัน
awaiting_code→awaiting_passwordผู้ให้บริการเรียกขอรหัสผ่าน 2FA
awaiting_qr_scan→authorizedผู้ให้บริการยืนยันการสแกน QR แล้ว
awaiting_code→authorizedรหัสยืนยัน (หรือการจับคู่ WhatsApp) ได้รับการยอมรับ
awaiting_password→authorizedรหัสผ่านได้รับการยอมรับ
authorized→pending_authผู้ให้บริการทำให้ session ใช้ไม่ได้ — อีเวนต์ account.auth.required จะถูกส่งและต้องเริ่มโฟลว์ใหม่
awaiting_*→failedผู้ให้บริการรายงานความล้มเหลวที่ขั้นรอใดก็ได้ (อีเวนต์ account.auth.failed)
awaiting_*→pending_authPOST /auth/cancel ยกเลิกโฟลว์ที่กำลังทำงาน
สเตตแมชชีนของรันไทม์
unknownสถานะเริ่มต้นหลังสร้างบัญชี และทุกครั้งที่แพลตฟอร์มไม่มีรายงานล่าสุดจากผู้ให้บริการ — เรียก /runtime/refresh เพื่อซิงก์ใหม่
startingกำลังเริ่มทำงาน ผู้ให้บริการกำลังนำ session ขึ้นออนไลน์
runningเชื่อมต่อแล้วและพร้อมส่งและรับข้อความ
reconnectingการเชื่อมต่อหลุดและกำลังเชื่อมต่อใหม่ ไม่ว่าจะอัตโนมัติหรือสั่งเอง
disconnectedผู้ให้บริการรายงานว่า session ออฟไลน์ ใช้ reconnect หรือ start เพื่อกู้คืน
stoppingกำลังหยุดทำงาน
stoppedไม่ได้เชื่อมต่อ เป็นสถานะหลังการหยุด
errorรันไทม์พบข้อผิดพลาดที่กู้คืนไม่ได้ last_error บอกสาเหตุ
unknown→startingเริ่มอัตโนมัติหลังการให้สิทธิ์สำเร็จ
stopped→startingการเรียก POST /runtime/start โดยตรง
starting→runningsession ของผู้ให้บริการขึ้นออนไลน์ (อีเวนต์ account.started)
running→reconnectingการเชื่อมต่อหลุด หรือมีการเรียก POST /runtime/reconnect
reconnecting→runningการเชื่อมต่อกลับมาเป็นปกติ
running→disconnectedผู้ให้บริการรายงานว่า session ออฟไลน์ (อีเวนต์ account.status.updated)
disconnected→runningPOST /runtime/reconnect หรือ /runtime/start นำกลับมาออนไลน์
running→stoppingPOST /runtime/stop เริ่มการหยุดแบบ graceful
stopping→stoppedการหยุดเสร็จสมบูรณ์
*→errorข้อผิดพลาดที่กู้คืนไม่ได้จากผู้ให้บริการ ณ จุดใดก็ได้
*→unknownไม่มีรายงานล่าสุดจากผู้ให้บริการ POST /runtime/refresh จะซิงก์ค่าใหม่
หมายเหตุ
- Account.status เป็นของคุณ (สวิตช์เปิด/ปิดเชิงธุรกิจ ตั้งตอนสร้างหรือผ่าน PATCH) อีกสองสถานะเป็นของแพลตฟอร์มและอ่านได้อย่างเดียว: สถานะการยืนยันตัวตนผ่าน GET /v1/accounts/{id}/auth (ฟิลด์ status ของมัน) และ runtime_status บนออบเจ็กต์บัญชี
- การให้สิทธิ์ที่สำเร็จจะเริ่มรันไทม์อัตโนมัติ — การเรียก POST /runtime/start ตามหลังเป็น no-op ที่ไม่มีผลเสีย
- ระหว่างอยู่ในสถานะ authorized การเรียก POST /auth/start, /auth/qr/start และ /auth/session จะถูกปฏิเสธด้วย 409 account_already_authorized หากต้องการเริ่มโฟลว์ใหม่จริง ๆ ให้เรียก POST /auth/cancel ก่อน
- อีเวนต์ account.auth.required หมายความว่าผู้ให้บริการทำให้ session ใช้ไม่ได้: สถานะ auth หลุดจาก authorized และ auth_payload จะมีข้อมูล (เช่น QR ใหม่) สำหรับยืนยันตัวตนอีกครั้ง
- ทุกการเปลี่ยนแปลงของรันไทม์จะถูกส่งเป็นอีเวนต์ account.status.updated ที่มีทั้ง auth_status และ runtime_status — อัปเดตสำเนาในระบบของคุณจาก webhook แทนการ polling