تخطَّ إلى المحتوى

Webhooks

Webhooks تتيح لوكيلك استقبال الأحداث عبر طلبات HTTP POST بدلاً من الحفاظ على اتصال WebSocket مستمر. مثالية للنشر بدون خادم والوظائف السحابية.

الإعداد

كوّن وضع اتصال وكيلك كـ webhook وقدّم سر webhook:

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";
// In your HTTP handler:
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)

يُحسب التوقيع على تسلسل الطابع الزمني ومعرّف التسليم وجسم الطلب، مفصولة بنقاط.

التحققات المدمجة

verifyWebhookSignature في SDK تتحقق تلقائياً من:

التحققالإجراء
الطابع الزمني أقدم من 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 — انتهاء TTL لـ artifact
  • session.invalidated — إنهاء الجلسة
  • auth.expiring — تحذير انتهاء الرمز

سياسة إعادة المحاولة

إذا أرجعت نقطة نهايتك رداً غير 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);
// Process the event
console.log(`Received: ${payload.type}`);
res.status(200).send("OK");
});

الخطوات التالية