تخطي إلى المحتوى
مركز مساعدة Clevera

إعداد خطافات الويب (webhooks) لأحداث الوكيل

احصل على طلب POST موقع على نقطة نهاية https الخاصة بك عند انتهاء مهمة الوكيل أو فشلها، أو عندما ينتظر الوكيل الموافقة، أو عند نشر موقع مستندات. الأحداث، والحمولات، والتحقق من التوقيع، وإعادة المحاولات، والتعطيل التلقائي.

تم التحديث وقت القراءة 8 دقائق

يرسل خطاف الويب (webhook) طلب POST موقعاً إلى نقطة النهاية الخاصة بك في اللحظة التي يحدث فيها شيء ما، مثل انتهاء مهمة الوكيل أو انتظار الوكيل للموافقة، حتى لا تضطر أنظمتك إلى الاستقصاء. تغطي هذه المقالة إضافة نقطة نهاية، والأحداث، والحمولة، والتحقق من التوقيع، وما يحدث عند فشل عمليات التسليم.

قبل البدء

  • خطافات الويب (webhooks) متاحة في خطط Pro وBusiness وCustom ("خطافات الويب متاحة في خطة Pro وما فوق.").
  • مالك مساحة العمل والمسؤولون فقط هم من يديرون خطافات الويب. يرى الأعضاء الآخرون "المالكون والمسؤولون فقط هم من يديرون خطافات الويب".
  • تحتاج إلى عنوان https عام يستجيب بحالة 2xx في غضون 10 ثوانٍ.
  • يمكن أن تحتوي مساحة العمل على ما يصل إلى 10 خطافات ويب.

إضافة خطاف ويب (webhook)

  1. افتح علامة تبويب خطافات الويب (Webhooks)

    افتح قائمة مساحة العمل، واختر AI agents & API، ثم افتح Webhooks. انقر على خطاف ويب (webhook) جديد.

    علامة تبويب خطافات الويب مع نقطة نهاية واحدة في example.com، والأحداث التي تتلقاها، ووقت آخر إرسال.
    يعرض كل خطاف ويب أحداثه، ووقت آخر إرسال، ونهاية رمزه السري.
  2. أدخل نقطة النهاية

    • رابط نقطة النهاية (Endpoint URL): "عنوان HTTPS عام." على سبيل المثال https://example.com/clevera/webhooks.
    • الوصف: اختياري، يصل إلى 200 حرف، على سبيل المثال "ترحيل Slack".
  3. اختر الأحداث

    حدد الأحداث التي تريد تلقيها، أو جميع الأحداث، بما في ذلك الأحداث الجديدة. الأحداث المميزة بـ قريباً مقبولة ولكن "لا يوجد شيء يرسل هذا الحدث بعد."

    مربع حوار خطاف ويب (webhook) جديد: رابط نقطة النهاية، والوصف، والأحداث المراد إرسالها، مع الأحداث التي لم يتم إرسالها بعد المميزة بـ قريباً.
    الأحداث المميزة بـ قريباً مقبولة ولكن لم يتم إرسالها بعد.
  4. أنشئه وقم بتخزين الرمز السري

    انقر على إنشاء خطاف ويب. يظهر رمز التوقيع السري (يبدأ بـ whsec_) مرة واحدة: "انسخه الآن: لن تراه مرة أخرى. استخدمه للتحقق من ترويسة Clevera-Signature." قم بتخزينه مثل كلمة المرور، ثم انقر على لقد قمت بتخزينه.

  5. إرسال حدث تجريبي

    افتح قائمة ⋯ الخاصة بخطاف الويب واختر إرسال حدث تجريبي. ترسل Clevera حدث ping موقعاً مرة واحدة (بدون إعادة محاولات). تعني "تم إرسال الحدث التجريبي" أنه غادر Clevera؛ تحقق من عمليات التسليم لمعرفة رد نقطة النهاية الخاصة بك.

الأحداث

الحدث يُرسل عند
job.started بدء تشغيل مهمة بدأها وكيل.
job.needs_input انتظار المهمة لشخص ما، على سبيل المثال للموافقة. يتضمن الرابط ووقت انتهاء صلاحية الطلب.
job.succeeded انتهاء المهمة.
job.failed فشل المهمة. يتضمن رمز الخطأ.
job.canceled إلغاء المهمة، أو رفض الموافقة عليها أو انتهاء صلاحيتها.
approval.requested طلب وكيل الموافقة في طلبات الوكيل.
approval.decided موافقة شخص ما على الطلب أو رفضه، أو انتهاء صلاحيته.
site.published نشر موقع مستندات.
site.build_failed فشل نشر موقع مستندات.
ping نقرت على إرسال حدث تجريبي. لا يحتاج إلى اشتراك.

هذه الأحداث مدرجة كـ قريباً ولم يتم إرسالها بعد: job.progress، video.ready، article.ready، research.completed، insights.weekly.

تغطي أحداث المهمة المهام التي يبدأها الوكلاء (من خلال رمز API أو تطبيق متصل)، وليس مقاطع الفيديو التي يبدأها الأشخاص في التطبيق.

ما ترسله Clevera

كل عملية تسليم هي POST مع نص JSON وترويسات:

الترويسة القيمة
Content-Type application/json
User-Agent Clevera-Webhooks/1.0
Clevera-Event اسم الحدث، مثل job.succeeded
Clevera-Delivery المعرف الفريد لعملية التسليم. تكرر عملية إعادة التسليم نفس المعرف، لذا استخدمه لتجاهل التكرارات.
Clevera-Signature t=<unix time>,v1=<signature>

تحمل الحمولات معرفات، وروابط، وحالات، وأرقاماً، ولا تحمل المحتوى نفسه أبداً. لقراءة فيديو أو مقالة منتهية، اتصل بـ API باستخدام رمز.

job.succeeded
{
  "id": "6f1c2d3e-4b5a-4c6d-8e9f-0a1b2c3d4e5f",
  "event": "job.succeeded",
  "created_at": "2026-10-20T14:03:11Z",
  "data": {
    "job": {
      "id": "job_8k2m4n6p8r0t2v4x",
      "kind": "video.create",
      "status": "succeeded",
      "error_code": null,
      "subject": { "type": "video", "id": "vid_example" },
      "credits_spent": 64
    },
    "needs_input": null,
    "workspace": { "id": "tm_example" }
  }
}
approval.requested
{
  "id": "0b9a8c7d-6e5f-4a3b-9c2d-1e0f9a8b7c6d",
  "event": "approval.requested",
  "created_at": "2026-10-20T14:01:02Z",
  "data": {
    "approval": {
      "id": "apr_example",
      "kind": "spend",
      "status": "pending",
      "credits_high": 80,
      "expires_at": "2026-10-21T14:01:02Z",
      "decided_at": null,
      "url": "https://app.clevera.ai/agents?tab=requests&team=tm_example"
    },
    "job": { "id": "job_8k2m4n6p8r0t2v4x", "kind": "video.create" },
    "workspace": { "id": "tm_example" }
  }
}

التحقق من التوقيع

تحقق من كل عملية تسليم قبل الوثوق بها. التوقيع هو HMAC-SHA256، مشفر برمز التوقيع السري الخاص بك، للطابع الزمني، ونقطة، ونص الطلب الخام: <t>.<body>.

  1. اقرأ t و v1 من ترويسة Clevera-Signature.
  2. احسب HMAC-SHA256(secret, t + "." + rawBody) كـ hex.
  3. قارنه بـ v1 في وقت ثابت.
  4. ارفض عمليات التسليم التي يكون t الخاص بها قديماً لأكثر من 5 دقائق، حتى لا يمكن إعادة تشغيل طلب تم التقاطه.
verify.js
import crypto from 'node:crypto';

export function verifyClevera(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.trim().split('=')));
  const t = Number(parts.t);
  if (!parts.v1 || !Number.isInteger(t)) return false;
  if (Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return expected.length === parts.v1.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

استخدم النص كما تم استلامه تماماً. تحليل وإعادة ترميز JSON أولاً يغير البايتات ولن يتطابق التوقيع.

إعادة المحاولات والإخفاقات

تُحتسب عملية التسليم كـ "تم التسليم" عندما تستجيب نقطة النهاية الخاصة بك بحالة 2xx. أي شيء آخر يفشل في المحاولة:

  • أي حالة أخرى، بما في ذلك عمليات إعادة التوجيه (لا يتم اتباع 3xx)؛
  • عدم وجود إجابة في غضون 10 ثوانٍ (5 ثوانٍ للاتصال)؛
  • عنوان لم يعد يحل إلى الإنترنت العام.

تعيد Clevera محاولة التسليم الفاشل 5 مرات، بعد دقيقة واحدة، و5 دقائق، و30 دقيقة، وساعتين، و6 ساعات. لا تتم قراءة نص استجابة نقطة النهاية الخاصة بك أبداً.

عندما تفشل 15 عملية تسليم متتالية في كل محاولة، يتم إيقاف خطاف الويب: "تم الإيقاف بعد 15 عملية تسليم فاشلة متتالية. أصلح نقطة النهاية، ثم قم بتشغيله." يتلقى المالك والمسؤولون إشعاراً بـ "تم إيقاف خطاف الويب الخاص بـ host": "استمرت عمليات تسليمه في الفشل. أصلح نقطة النهاية، ثم قم بتشغيله مرة أخرى." الأحداث التي تحدث أثناء إيقافه لا يتم إرسالها. لا تُحتسب الأحداث التجريبية ضمن هذا.

إدارة خطاف ويب (webhook)

انقر على عمليات التسليم في خطاف ويب لرؤية سجله، أو افتح قائمة ⋯ الخاصة به للبقية:

الخيار ماذا يفعل
تعديل تغيير الرابط أو الأحداث أو الوصف.
عمليات التسليم أحدث 100 عملية تسليم مع حالتها (تم التسليم، فشل، جاري الإرسال)، والمحاولات ورمز HTTP. إعادة التسليم يرسل واحدة مرة أخرى. يتم الاحتفاظ بعمليات التسليم لمدة 30 يوماً.
إرسال حدث تجريبي يرسل ping موقعاً.
إعادة إنشاء الرمز السري "يتم توقيع عمليات التسليم بالرمز السري الجديد على الفور. قم بتحديث نقطة النهاية الخاصة بك للتحقق منه." لا يوجد تداخل، لذا قم بتحديث نقطة النهاية الخاصة بك مباشرة بعد ذلك.
إيقاف / تشغيل إيقاف واستئناف عمليات التسليم مؤقتاً.
حذف "نتوقف عن إرسال الأحداث إليه ونحذف سجل تسليمه. لا يمكن التراجع عن هذا."

إذا غادرت مساحة العمل خطة Pro

تظل خطافات الويب مدرجة ويمكن تعديلها وحذفها، ولكن لا يتم إرسال أي شيء. تنتهي عمليات التسليم التي تنتظر إعادة المحاولة كفاشلة مع plan_locked، ويقول إرسال حدث تجريبي وإعادة التسليم "خطافات الويب ليست ضمن خطتك." تؤدي الترقية مرة أخرى إلى Pro إلى بدء الإرسال مرة أخرى؛ لا يتم حذف أي شيء.

استكشاف الأخطاء وإصلاحها

الرسالة السبب الإصلاح
"خطافات الويب ليست ضمن خطتك." مساحة العمل ليست في خطة Pro أو Business أو Custom. قم بالترقية إلى Pro.
"استخدم عنوان https://." الرابط يبدأ بـ http://. قدم نقطة النهاية عبر HTTPS.
"استخدم اسم مضيف، وليس عنوان IP." الرابط يستخدم عنوان IP. استخدم اسم نطاق.
"هذا العنوان غير قابل للوصول على الإنترنت العام." المضيف يحل إلى عنوان خاص أو محلي. استخدم نقطة نهاية عامة، أو ترحيل.
"أزل اسم المستخدم وكلمة المرور من العنوان." الرابط يحتوي على user:password@. أزلهما؛ تحقق من التوقيع بدلاً من ذلك.
"أدخل عنوان ويب صالحاً." الرابط غير صالح. تحقق من وجود أخطاء مطبعية.
"اختر حدثاً واحداً على الأقل." لم يتم تحديد أي حدث. حدد حدثاً واحداً على الأقل.
"تحتوي مساحة العمل هذه بالفعل على 10 خطافات ويب." حد مساحة العمل. احذف واحداً لا تستخدمه.
"قم بتشغيل خطاف الويب أولاً." حاولت إعادة التسليم على خطاف ويب متوقف. قم بتشغيله، ثم أعد التسليم.
"لا يزال يتم إرسال عملية التسليم هذه." لا تزال عملية التسليم تعيد المحاولة. انتظر حتى تنتهي.
فشل عمليات التسليم مع رمز HTTP استجابت نقطة النهاية الخاصة بك بخطأ. تحقق من سجلات نقطة النهاية الخاصة بك وتأكد من أنها تعيد 2xx بسرعة؛ قم بالعمل البطيء بعد الإجابة.
التوقيعات لا تتطابق أبداً تم تغيير النص قبل التحقق، أو الرمز السري قديم. تحقق مقابل النص الخام؛ أعد إنشاء الرمز السري إذا لم تكن متأكداً.