Vòng đời tài khoản
Một tài khoản mang ba trạng thái độc lập: status (công tắc nghiệp vụ do bạn đặt), trạng thái xác thực trả về bởi GET /v1/accounts/{id}/auth, và runtime_status (kết nối trực tiếp). Payload webhook lộ hai trạng thái sau dưới tên auth_status và runtime_status — lưu ý bản thân đối tượng tài khoản REST không có trường tên auth_status.
Máy trạng thái xác thực
pending_authTrạng thái ban đầu sau khi tạo tài khoản; chưa có luồng nào được bắt đầu.
awaiting_qr_scanMột luồng QR đang hoạt động; auth_payload mang nội dung QR để hiển thị.
awaiting_codeMột luồng mã xác nhận đang hoạt động; với WhatsApp, verify_code trong auth_payload được nhập trên điện thoại.
awaiting_passwordProvider yêu cầu mật khẩu hai yếu tố sau bước nhập mã.
authorizedXác thực hoàn tất. Runtime được khởi động tự động.
failedLuồng thất bại; last_error mang lý do. Bắt đầu một luồng mới để thử lại.
pending_auth→awaiting_qr_scanPOST /auth/qr/start bắt đầu một luồng QR.
pending_auth→awaiting_codePOST /auth/start bắt đầu một luồng mã xác nhận.
awaiting_code→awaiting_passwordProvider yêu cầu mật khẩu hai yếu tố.
awaiting_qr_scan→authorizedProvider xác nhận thao tác quét QR.
awaiting_code→authorizedMã (hoặc ghép cặp WhatsApp) được chấp nhận.
awaiting_password→authorizedMật khẩu được chấp nhận.
authorized→pending_authProvider vô hiệu hóa phiên — sự kiện account.auth.required được phát và cần bắt đầu một luồng mới.
awaiting_*→failedProvider báo thất bại ở bất kỳ bước chờ nào (sự kiện account.auth.failed).
awaiting_*→pending_authPOST /auth/cancel hủy luồng đang hoạt động.
Máy trạng thái runtime
unknownTrạng thái ban đầu sau khi tạo tài khoản, và bất cứ khi nào nền tảng không có báo cáo mới từ provider — gọi /runtime/refresh để đồng bộ lại.
startingĐang khởi động; provider đang đưa phiên online.
runningĐã kết nối, có thể gửi và nhận.
reconnectingKết nối bị rớt và việc kết nối lại (tự động hoặc thủ công) đang diễn ra.
disconnectedProvider báo phiên đã offline; kết nối lại hoặc khởi động để khôi phục.
stoppingĐang dừng.
stoppedKhông kết nối. Trạng thái sau khi dừng.
errorRuntime gặp lỗi không thể khôi phục; last_error mang lý do.
unknown→startingTự khởi động sau khi ủy quyền thành công.
stopped→startingGọi POST /runtime/start một cách tường minh.
starting→runningPhiên của provider lên online (sự kiện account.started).
running→reconnectingKết nối bị rớt, hoặc POST /runtime/reconnect được gọi.
reconnecting→runningKết nối được thiết lập lại.
running→disconnectedProvider báo phiên offline (sự kiện account.status.updated).
disconnected→runningPOST /runtime/reconnect hoặc /runtime/start đưa nó trở lại.
running→stoppingPOST /runtime/stop bắt đầu dừng êm.
stopping→stoppedViệc dừng hoàn tất.
*→errorLỗi provider không thể khôi phục, tại bất kỳ thời điểm nào.
*→unknownKhông có báo cáo mới từ provider; POST /runtime/refresh đồng bộ lại giá trị.
Ghi chú
- Account.status thuộc về bạn (công tắc bật/tắt nghiệp vụ, đặt khi tạo hoặc qua PATCH). Hai trạng thái còn lại do nền tảng sở hữu và chỉ đọc: trạng thái xác thực qua GET /v1/accounts/{id}/auth (trường status của nó), runtime_status trên đối tượng tài khoản.
- Ủy quyền thành công sẽ tự khởi động runtime — gọi POST /runtime/start sau đó là một no-op vô hại.
- Khi đang authorized, POST /auth/start, /auth/qr/start và /auth/session bị từ chối với 409 account_already_authorized. Hãy gọi POST /auth/cancel trước nếu bạn thật sự cần một luồng mới.
- Sự kiện account.auth.required nghĩa là provider đã vô hiệu hóa phiên: trạng thái xác thực rời khỏi authorized và auth_payload mang dữ liệu (chẳng hạn QR mới) để xác thực lại.
- Mọi thay đổi runtime đều được đẩy dưới dạng sự kiện account.status.updated mang cả auth_status lẫn runtime_status — hãy đồng bộ bản sao cục bộ từ webhook thay vì poll.