Les sessions sont des interactions de longue durée. Alors que la plupart des interactions en temps réel passent par le flux d'événements SSE, les webhooks vous notifient des changements d'état majeurs.
Les événements webhook renvoient le type et l'id de l'événement, et non l'objet complet. Lorsque vous recevez un événement webhook, vous devez récupérer l'objet directement avec un appel GET. Cela évite de livrer des données obsolètes lors des nouvelles tentatives et garantit que chaque livraison reste légère.
| Événement | Déclencheur |
|---|---|
session.status_run_started | L'exécution de l'agent a démarré. Cet événement se déclenche à chaque transition du statut de la session vers running. |
session.status_idled | L'agent attend une entrée, par exemple une approbation d'autorisation d'outil ou un nouveau message utilisateur. |
session.status_rescheduled | Une erreur transitoire s'est produite et la session effectue automatiquement une nouvelle tentative. |
session.status_terminated | La session a rencontré une erreur terminale. |
session.thread_created | Un nouveau thread multi-agent a été ouvert, ce qui signifie qu'un agent supplémentaire appelé par le coordinateur commence son travail. |
session.thread_idled | Un agent dans une interaction multi-agent attend une entrée. |
session.thread_terminated | Un thread multi-agent a été archivé. |
session.outcome_evaluation_ended | L'évaluation de résultat pour une seule itération est terminée. |
session.updated | Les propriétés de la session ont changé (par exemple, son nom ou sa configuration a été mis à jour). |
session.deleted | La session a été définitivement supprimée. Il n'y a plus d'objet à récupérer, traitez donc l'événement lui-même comme final. |
Rendez-vous dans Manage > Webhooks dans la Console.
Un point de terminaison webhook se compose de :
data.type que ce point de terminaison reçoit. Un point de terminaison ne reçoit que les événements auxquels il est abonné, ainsi que les événements de test (voir Comportement de livraison).whsec_, généré à la création. Il n'est affiché qu'une seule fois, stockez-le donc de manière sécurisée pour vérifier les livraisons de webhooks.Chaque livraison comporte un en-tête X-Webhook-Signature. Utilisez l'assistant unwrap() du SDK pour vérifier la signature et analyser l'événement en une seule étape. Il lève une exception si la signature est invalide ou si la charge utile date de plus de cinq minutes.
Définissez ANTHROPIC_WEBHOOK_SIGNING_KEY avec le secret préfixé par whsec_ affiché lors de la création du point de terminaison.
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() lève une exception si la signature est invalide ou si la charge utile est périmée
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)
# gérer les autres types d'événements
return "", 200Analysez le corps, effectuez un branchement sur data.type et récupérez la ressource par son ID. Renvoyez n'importe quel code 2xx pour accuser réception. Tout autre code (y compris 3xx) est considéré comme un échec et déclenche une nouvelle tentative.
Chaque charge utile d'événement a la même structure, incluant le type d'événement, l'identifiant et l'horodatage de création de l'objet.
{
"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 "", 204L'event.id de niveau supérieur est unique par événement, et non par livraison. Si vous recevez le même event.id deux fois, il s'agit d'une nouvelle tentative et vous pouvez l'ignorer.
session.status_idled peut arriver avant session.outcome_evaluation_ended même si le résultat a été produit en premier. Utilisez l'horodatage created_at pour trier si l'ordre est important.event.id.3xx est traité comme un échec. Si votre point de terminaison change d'adresse, mettez à jour l'URL dans la Console.disabled avec un disabled_reason lisible par machine après environ 20 livraisons échouées consécutives, ou immédiatement si le nom d'hôte se résout en une adresse IP privée ou si le point de terminaison renvoie une redirection. Réactivez-le manuellement dans la Console après avoir résolu le problème.Was this page helpful?