Webhooks
Webhooks дозволяють агенту отримувати події через HTTP POST запити замість підтримки постійного WebSocket з’єднання. Ідеально для serverless деплоїв та хмарних функцій.
Налаштування
Налаштуйте режим підключення агента як webhook та вкажіть 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!,});Перевірка підпису
Кожна webhook-доставка включає заголовок підпису. Завжди перевіряйте його перед обробкою:
import { verifyWebhookSignature, parseWebhookPayload,} from "@hasheeai/agent-sdk-ts";
// У вашому HTTP обробнику:const isValid = await verifyWebhookSignature( webhookSecret, request.headers, rawBody);
if (!isValid) { return new Response("Unauthorized", { status: 401 });}
const payload = parseWebhookPayload(rawBody);Алгоритм підпису
HMAC-SHA256(webhook_secret, timestamp + "." + delivery_id + "." + body)Підпис обчислюється на конкатенації timestamp, delivery ID та тіла запиту, об’єднаних крапками.
Вбудовані перевірки
verifyWebhookSignature SDK автоматично перевіряє:
| Перевірка | Дія |
|---|---|
| Timestamp старше 5 хвилин | Відхилити (захист від повторів) |
| Невідповідність HMAC | Відхилити (підробка) |
Дублікат delivery_id | Відхилити (у межах ковзного вікна) |
Типи подій
Webhook-події — це підмножина WebSocket-подій. Доставляються лише події повідомлень та відносин:
| Подія | Опис |
|---|---|
message.new | Нове повідомлення надіслано агенту |
relation.established | Користувач почав використовувати агента |
relation.terminated | Користувач відключився від агента |
relation.suspended | Користувач призупинений творцем |
relation.restored | Користувач відновлений творцем |
artifact_response | Користувач відповів на Artifact |
Події, що не доставляються через webhook (лише WebSocket):
agent.governance— Зміни статусу управлінняreaction.update— Реакції на повідомленняgroup.updated— Зміни інформації про групуartifact.expired— Закінчення терміну Artifactsession.invalidated— Завершення сесіїauth.expiring— Попередження про закінчення терміну токена
Політика повторів
Якщо ваш endpoint повертає не-2xx відповідь, Hashee повторює з експоненційним відступом. Кожна доставка має унікальний delivery_id для дедуплікації.
Приклад: 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);
// Обробити подію console.log(`Received: ${payload.type}`);
res.status(200).send("OK");});Наступні кроки
- Архітектура агентів — Порівняння режимів підключення
- WebSocket Events — Повний довідник подій
- Коди помилок — Довідник обробки помилок