Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
「Session」(工作階段)是長時間執行的互動。雖然大多數即時互動是透過 SSE 事件串流進行,但 webhook 會在重大狀態變更時通知您。
Webhook 事件會回傳事件的 type 和 id,而非完整的物件。當您收到 webhook 事件時,需要透過 GET 呼叫直接擷取該物件。這可避免在重試時傳遞過時的資料,並使每次傳遞保持精簡。
前往 Console 中的 Manage > Webhooks。
Webhook 端點包含以下項目:
data.type 值清單。端點只會接收其訂閱的事件,以及測試事件(請參閱傳遞行為)。whsec_ 為前綴的密鑰。此密鑰只會顯示一次,請妥善儲存以驗證 webhook 傳遞。每次傳遞都會帶有 X-Webhook-Signature 標頭。使用 SDK 的 unwrap() 輔助函式可一步完成簽章驗證與事件解析。如果簽章無效或酬載已超過五分鐘,此函式會擲回例外。
將 ANTHROPIC_WEBHOOK_SIGNING_KEY 設定為端點建立時顯示的、以 whsec_ 為前綴的密鑰。
解析主體內容,依據 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-..."
}
}頂層的 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?
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 "", 200if event.data.type == "session.status_idled":
session = client.beta.sessions.retrieve(event.data.id)
notify_user(session)
return "", 204