Sessões são interações de longa duração. Embora a maioria das interações em tempo real aconteça por meio do fluxo de eventos SSE, os webhooks notificam você sobre mudanças importantes de estado.
Eventos de webhook retornam o type e o id do evento, não o objeto completo. Quando você recebe um evento de webhook, precisa buscar o objeto diretamente com uma chamada GET. Isso evita a entrega de dados desatualizados em novas tentativas e mantém cada entrega pequena.
| Evento | Gatilho |
|---|---|
session.status_run_started | A execução do agente foi iniciada. Isso é acionado a cada transição de status da sessão para running. |
session.status_idled | O agente está aguardando entrada, por exemplo, uma aprovação de permissão de ferramenta ou uma nova mensagem do usuário. |
session.status_rescheduled | Ocorreu um erro transitório e a sessão está tentando novamente de forma automática. |
session.status_terminated | A sessão encontrou um erro terminal. |
session.thread_created | Uma nova thread multiagente foi aberta, o que significa que um agente adicional chamado pelo coordenador está iniciando o trabalho. |
session.thread_idled | Um agente em uma interação multiagente está aguardando entrada. |
session.thread_terminated | Uma thread multiagente foi arquivada. |
session.outcome_evaluation_ended | A avaliação de resultado de uma única iteração foi concluída. |
session.updated | As propriedades da sessão foram alteradas (por exemplo, seu nome ou configuração foi atualizado). |
session.deleted | Sessão excluída permanentemente. Não há mais objeto para buscar, então trate o próprio evento como final. |
Acesse Manage > Webhooks no Console.
Um endpoint de webhook consiste em:
data.type que esse endpoint recebe. Um endpoint recebe apenas os eventos aos quais está inscrito, além de eventos de teste (consulte Comportamento de entrega).whsec_ gerado na criação. Ele é exibido apenas uma vez, então armazene-o com segurança para verificar as entregas de webhook.Cada entrega carrega um cabeçalho X-Webhook-Signature. Use o helper unwrap() do SDK para verificar a assinatura e fazer o parse do evento em uma única etapa. Ele lança uma exceção se a assinatura for inválida ou se o payload tiver mais de cinco minutos.
Defina ANTHROPIC_WEBHOOK_SIGNING_KEY como o segredo com prefixo whsec_ exibido na criação do endpoint.
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() lança uma exceção se a assinatura for inválida ou o payload estiver obsoleto
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)
# trate outros tipos de evento
return "", 200Faça o parse do corpo, use um switch em data.type e busque o recurso pelo ID. Retorne qualquer 2xx para confirmar o recebimento. Qualquer outra resposta (incluindo 3xx) conta como falha e aciona uma nova tentativa.
Todo payload de evento tem a mesma estrutura, incluindo o tipo do evento, o identificador e o timestamp de quando o objeto foi criado.
{
"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 "", 204O event.id de nível superior é único por evento, não por entrega. Se você receber o mesmo event.id duas vezes, trata-se de uma nova tentativa e você pode descartá-lo.
session.status_idled pode chegar antes de session.outcome_evaluation_ended mesmo que o resultado tenha sido produzido primeiro. Use o timestamp created_at para ordenar, se a ordem for importante.event.id.3xx é tratado como falha. Se o seu endpoint mudar de local, atualize a URL no Console.disabled com um disabled_reason legível por máquina após aproximadamente 20 entregas consecutivas com falha, ou imediatamente se o hostname resolver para um IP privado ou se o endpoint retornar um redirecionamento. Reative manualmente no Console após resolver o problema.Was this page helpful?