帳號生命週期
一個帳號帶有三個彼此獨立的狀態:status(由你掌控的業務開關)、GET /v1/accounts/{id}/auth 回傳的認證狀態,以及 runtime_status(即時連線狀態)。webhook 載荷以 auth_status 與 runtime_status 暴露後兩者——注意 REST 帳號物件本身並沒有名為 auth_status 的欄位。
認證狀態機
pending_auth帳號建立後的初始狀態;尚未啟動任何流程。
awaiting_qr_scanQR 流程進行中;auth_payload 帶有要顯示的 QR 內容。
awaiting_code驗證碼流程進行中;WhatsApp 場景下把 auth_payload 裡的 verify_code 輸入到手機上。
awaiting_password渠道在驗證碼之後還要求二階段驗證密碼。
authorized認證完成。執行環境會自動啟動。
failed流程失敗;last_error 帶有原因。重新發起流程即可重試。
pending_auth→awaiting_qr_scanPOST /auth/qr/start 開始 QR 流程。
pending_auth→awaiting_codePOST /auth/start 開始驗證碼流程。
awaiting_code→awaiting_password渠道要求二階段驗證密碼。
awaiting_qr_scan→authorized渠道確認掃碼完成。
awaiting_code→authorized驗證碼(或 WhatsApp 配對)被接受。
awaiting_password→authorized密碼被接受。
authorized→pending_auth渠道使會話失效——觸發 account.auth.required 事件,需要重新發起流程。
awaiting_*→failed渠道在任一等待步驟回報失敗(account.auth.failed 事件)。
awaiting_*→pending_authPOST /auth/cancel 放棄進行中的流程。
WhatsApp Passkey 子流程
passkey_requiredWhatsApp 要求瀏覽器提供 WebAuthn 憑證後才能繼續 QR 授權。
passkey_pendingWebAuthn 憑證已提交,正在等待渠道處理。
passkey_confirmation渠道要求使用者明確確認 Passkey 操作。
passkey_confirmation_sent確認已送出,渠道正在完成授權。
authorized認證完成。執行環境會自動啟動。
failed流程失敗;last_error 帶有原因。重新發起流程即可重試。
passkey_required→passkey_pending透過託管頁面或 POST /auth/passkey-response 提交序列化的 WebAuthn 憑證。
passkey_pending→passkey_confirmation渠道要求使用者確認 Passkey 操作。
passkey_confirmation→passkey_confirmation_sentPOST /auth/passkey-confirm 送出使用者確認。
passkey_pending→authorized渠道無需額外確認,直接接受憑證。
passkey_confirmation_sent→authorized渠道接受已確認的憑證。
passkey_*→failed渠道拒絕或無法完成 Passkey 流程。
執行環境狀態機
unknown帳號建立後的初始狀態;平台缺少來自渠道的最新回報時也會處於此狀態——呼叫 /runtime/refresh 重新同步。
starting啟動進行中;渠道正在把會話帶上線。
running已連線,可正常收發訊息。
reconnecting連線中斷,自動或手動重連進行中。
disconnected渠道回報會話離線;重連或重新啟動即可恢復。
stopping停止進行中。
stopped未連線。停止完成後的狀態。
error執行環境遇到無法復原的錯誤;last_error 帶有原因。
unknown→starting授權成功後自動啟動。
stopped→starting顯式呼叫 POST /runtime/start。
starting→running渠道會話上線(account.started 事件)。
running→reconnecting連線中斷,或呼叫了 POST /runtime/reconnect。
reconnecting→running連線重新建立。
running→disconnected渠道回報會話離線(account.status.updated 事件)。
disconnected→runningPOST /runtime/reconnect 或 /runtime/start 將其帶回線上。
running→stoppingPOST /runtime/stop 開始優雅停止。
stopping→stopped停止完成。
*→error任意時點發生無法復原的渠道錯誤。
*→unknown缺少渠道的最新回報;POST /runtime/refresh 重新同步狀態值。
備註
- 帳號的 status 由你掌控(建立時或透過 PATCH 設定的業務開關)。另外兩個狀態由平台持有且唯讀:認證狀態透過 GET /v1/accounts/{id}/auth 讀取(看其 status 欄位),runtime_status 直接掛在帳號物件上。
- 授權成功通常會自動啟動執行環境。POST /runtime/start 會明確要求啟動;請先檢查實際 runtime_status,只在仍需啟動時呼叫,並處理回傳的 operation_status。
- 處於 authorized 狀態時,POST /auth/start、/auth/qr/start 與 /auth/session 會被以 409 account_already_authorized 拒絕。確實需要重走流程時,請先呼叫 POST /auth/cancel。
- account.auth.required 事件表示渠道已使會話失效:認證狀態脫離 authorized,auth_payload 帶有重新認證所需的材料(例如新的 QR)。
- account.status.updated 用於回報渠道實際觀察到的認證或執行環境變化,但不保證每個請求觸發的狀態轉移都會推送。執行動作或發生重連後,請用 GET /v1/accounts/{account_id} 或 POST /runtime/refresh 與 webhook 狀態核對。