Webhooks
Webhooks permitem que seu agente receba eventos via requisicoes HTTP POST em vez de manter uma conexao WebSocket persistente. Ideal para implantacoes serverless e cloud functions.
Configuracao
Configure o modo de conexao do seu agente como webhook e forneca um webhook secret:
const agent = await HasheeAgent.init({ agentId: process.env.HASHEE_AGENT_ID!, token: process.env.HASHEE_AGENT_TOKEN!, baseUrl: "https://api.hashee.ai", connectionMode: "webhook", webhookSecret: process.env.HASHEE_WEBHOOK_SECRET!,});Verificacao de Assinatura
Cada entrega de webhook inclui um header de assinatura. Sempre verifique antes de processar:
import { verifyWebhookSignature, parseWebhookPayload,} from "@hasheeai/agent-sdk-ts";
// No seu handler HTTP:const isValid = await verifyWebhookSignature( webhookSecret, request.headers, rawBody);
if (!isValid) { return new Response("Unauthorized", { status: 401 });}
const payload = parseWebhookPayload(rawBody);Algoritmo de Assinatura
HMAC-SHA256(webhook_secret, timestamp + "." + delivery_id + "." + body)A assinatura e calculada sobre a concatenacao do timestamp, delivery ID e corpo da requisicao, unidos por pontos.
Validacoes Integradas
O verifyWebhookSignature do SDK verifica automaticamente:
| Verificacao | Acao |
|---|---|
| Timestamp com mais de 5 minutos | Rejeitar (anti-replay) |
| Incompatibilidade de HMAC | Rejeitar (adulterado) |
delivery_id duplicado | Rejeitar (dentro da janela deslizante) |
Tipos de Evento
Eventos de webhook sao um subconjunto de eventos de WebSocket. Apenas eventos de mensagem e relacionamento sao entregues:
| Evento | Descricao |
|---|---|
message.new | Uma nova mensagem foi enviada ao agente |
relation.established | Um usuario comecou a usar o agente |
relation.terminated | Um usuario se desconectou do agente |
relation.suspended | Um usuario foi suspenso pelo criador |
relation.restored | Um usuario foi restaurado pelo criador |
artifact_response | Um usuario respondeu a um artifact |
Eventos nao entregues via webhook (apenas WebSocket):
agent.governance— Mudancas de status de governancareaction.update— Reacoes a mensagensgroup.updated— Mudancas de informacoes do grupoartifact.expired— Expiracao de TTL do artifactsession.invalidated— Encerramento de sessaoauth.expiring— Aviso de expiracao de token
Politica de Retentativa
Se seu endpoint retornar uma resposta nao-2xx, o Hashee retenta com backoff exponencial. Cada entrega tem um delivery_id unico para deduplicacao.
Exemplo: Handler Express
import express from "express";import { verifyWebhookSignature, parseWebhookPayload,} from "@hasheeai/agent-sdk-ts";
const app = express();
app.post("/webhook", express.raw({ type: "application/json" }), async (req, res) => { const isValid = await verifyWebhookSignature( process.env.HASHEE_WEBHOOK_SECRET!, req.headers, req.body );
if (!isValid) { return res.status(401).send("Invalid signature"); }
const payload = parseWebhookPayload(req.body);
// Processa o evento console.log(`Received: ${payload.type}`);
res.status(200).send("OK");});Proximos Passos
- Arquitetura do Agente — Compare modos de conexao
- Eventos WebSocket — Referencia completa de eventos
- Codigos de Erro — Referencia de tratamento de erros