Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
「Session」(工作階段)是長時間執行的互動。雖然大多數即時互動是透過 SSE 事件串流進行,但 webhook 會在主要狀態變更時通知您。
Webhook 事件會回傳事件的 type 和 id,而非完整物件。當您收到 webhook 事件時,需要透過 GET 呼叫直接擷取該物件。這可避免在重試時傳遞過時的資料,並使每次傳遞保持精簡。
| 事件 | 觸發條件 |
|---|---|
session.status_run_started | 代理程式開始執行。每當工作階段狀態轉換為 running 時都會觸發。 |
session.status_idled | 代理程式正在等待輸入,例如工具權限核准或新的使用者訊息。 |
session.status_rescheduled | 發生暫時性錯誤,工作階段正在自動重試。 |
session.status_terminated | 工作階段遇到終止性錯誤。 |
session.thread_created | 新的多代理程式執行緒已開啟,表示由協調器呼叫的額外代理程式正在開始工作。 |
session.thread_idled | 多代理程式互動中的某個代理程式正在等待輸入。 |
session.thread_terminated | 多代理程式執行緒已封存。 |
session.outcome_evaluation_ended | 單次迭代的結果評估已完成。 |
session.updated | 工作階段屬性已變更(例如,其名稱或設定已更新)。 |
session.deleted | 工作階段已永久刪除。已無物件可供擷取,因此請將此事件本身視為最終狀態。 |
請前往 Console 中的 Manage > Webhooks。
Webhook 端點包含以下項目:
data.type 值清單。端點只會接收其訂閱的事件,以及測試事件(請參閱傳遞行為)。whsec_ 為前綴的密鑰。它只會顯示一次,因此請安全地儲存以驗證 webhook 傳遞。每次傳遞都帶有 X-Webhook-Signature 標頭。使用 SDK 的 unwrap() 輔助函式可一步完成簽章驗證和事件解析。如果簽章無效或酬載已超過五分鐘,它會擲回例外。
將 ANTHROPIC_WEBHOOK_SIGNING_KEY 設定為端點建立時顯示的、以 whsec_ 為前綴的密鑰。
from flask import Flask, request
import anthropic
client = anthropic.Anthropic() # reads ANTHROPIC_WEBHOOK_SIGNING_KEY from env
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def webhook():
try:
# 若簽章無效或酬載已過期,unwrap() 會引發例外
event = client.beta.webhooks.unwrap(
request.get_data(as_text=True),
headers=dict(request.headers),
)
except Exception:
return "invalid signature", 400
if event.data.type == "session.status_idled":
print("session idled:", event.data.id)
# 處理其他事件類型
return "", 200解析主體,根據 data.type 進行分支處理,並依 ID 擷取資源。回傳任何 2xx 以確認接收。其他任何回應(包括 3xx)都視為失敗並會觸發重試。
每個事件酬載都具有相同的結構,包括事件類型、識別碼,以及物件建立時的時間戳記。
{
"type": "event",
"id": "event_01ABC...",
"created_at": "2026-03-18T14:05:22Z",
"data": {
"type": "session.status_idled",
"id": "sesn_01XYZ...",
"organization_id": "8a3d2f1e-...",
"workspace_id": "c7b0e4d9-..."
}
}if event.data.type == "session.status_idled":
session = client.beta.sessions.retrieve(event.data.id)
notify_user(session)
return "", 204頂層的 event.id 對每個事件而言是唯一的,而非對每次傳遞而言。如果您收到相同的 event.id 兩次,表示這是重試,您可以將其捨棄。
session.status_idled 可能在 session.outcome_evaluation_ended 之前到達,即使結果是先產生的。如果順序很重要,請使用 created_at 時間戳記進行排序。event.id。3xx 會被視為失敗。如果您的端點移動了,請在 Console 中更新 URL。disabled 並附帶機器可讀的 disabled_reason;如果主機名稱解析為私有 IP 或端點回傳重新導向,則會立即停用。解決問題後,請在 Console 中手動重新啟用。Was this page helpful?