Webhooks¶
يمكن لـ Gateway (البوابة) كشف نقطة نهاية HTTP Webhook صغيرة للمحفزات الخارجية.
التمكين¶
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
},
}
ملاحظات:
hooks.tokenمطلوب عندhooks.enabled=true.hooks.pathافتراضيًا إلى/hooks.
المصادقة¶
يجب أن يتضمن كل طلب رمز الـ hook. يُفضَّل استخدام الرؤوس:
Authorization: Bearer <token>(موصى به)x-openclaw-token: <token>?token=<token>(مهمَل؛ يسجّل تحذيرًا وسيُزال في إصدار رئيسي مستقبلي)
نقاط النهاية¶
POST /hooks/wake¶
الحمولة:
{ "text": "System line", "mode": "now" }
textمطلوب (string): وصف الحدث (مثل «تم استلام بريد إلكتروني جديد»).modeاختياري (now|next-heartbeat): ما إذا كان سيتم تشغيل نبضة فورية (الافتراضيnow) أو الانتظار حتى الفحص الدوري التالي.
الأثر:
- إضافة حدث نظام إلى جلسة main
- إذا كان
mode=now، يتم تشغيل نبضة فورية
POST /hooks/agent¶
الحمولة:
{
"message": "Run this",
"name": "Email",
"sessionKey": "hook:email:msg-123",
"wakeMode": "now",
"deliver": true,
"channel": "last",
"to": "+15551234567",
"model": "openai/gpt-5.2-mini",
"thinking": "low",
"timeoutSeconds": 120
}
messageمطلوب (string): الموجّه أو الرسالة التي سيعالجها الوكيل.nameاختياري (string): اسم مقروء للبشر للـ hook (مثل «GitHub»)، يُستخدم كبادئة في ملخصات الجلسة.sessionKeyاختياري (string): المفتاح المستخدم لتعريف جلسة الوكيل. افتراضيًا قيمةhook:<uuid>عشوائية. يتيح استخدام مفتاح ثابت إجراء محادثة متعددة الأدوار ضمن سياق الـ hook.wakeModeاختياري (now|next-heartbeat): ما إذا كان سيتم تشغيل نبضة فورية (الافتراضيnow) أو الانتظار حتى الفحص الدوري التالي.deliverاختياري (boolean): إذا كانtrue، فسيتم إرسال استجابة الوكيل إلى قناة المراسلة. الافتراضيtrue. يتم تخطي الاستجابات التي تكون مجرد إقرارات نبضة تلقائيًا.channelاختياري (string): قناة المراسلة للتسليم. واحدة من:last،whatsapp،telegram،discord،slack،mattermost(plugin)،signal،imessage،msteams. الافتراضيlast.toاختياري (string): مُعرِّف المستلِم للقناة (مثل رقم الهاتف لـ WhatsApp/Signal، ومعرّف الدردشة لـ Telegram، ومعرّف القناة لـ Discord/Slack/Mattermost (plugin)، ومعرّف المحادثة لـ Microsoft Teams). الافتراضي هو آخر مستلِم في جلسة main.modelاختياري (string): تجاوز النموذج (مثلanthropic/claude-3-5-sonnetأو اسم مستعار). يجب أن يكون ضمن قائمة النماذج المسموح بها إذا كانت مقيّدة.thinkingاختياري (string): تجاوز مستوى التفكير (مثلlow،medium،high).timeoutSecondsاختياري (number): المدة القصوى لتشغيل الوكيل بالثواني.
الأثر:
- تشغيل دور وكيل معزول (بمفتاح جلسة خاص)
- نشر ملخص دائمًا في جلسة main
- إذا كان
wakeMode=now، يتم تشغيل نبضة فورية
POST /hooks/<name> (مُعيَّن)¶
تُحل أسماء الـ hook المخصصة عبر hooks.mappings (انظر التهيئة). يمكن للتعيين
تحويل الحمولات التعسفية إلى إجراءات wake أو agent، مع قوالب اختيارية أو
تحويلات برمجية.
خيارات التعيين (ملخص):
hooks.presets: ["gmail"]يفعّل تعيين Gmail المضمّن.hooks.mappingsيتيح لك تعريفmatchوactionوالقوالب في التهيئة.hooks.transformsDir+transform.moduleلتحميل وحدة JS/TS لمنطق مخصص.- استخدم
match.sourceللإبقاء على نقطة إدخال عامة (توجيه قائم على الحمولة). - تتطلب تحويلات TS مُحمِّل TS (مثل
bunأوtsx) أو.jsمُسبقة التجميع وقت التشغيل. - عيّن
deliver: true+channel/toعلى التعيينات لتوجيه الردود إلى واجهة دردشة (channelافتراضيًا إلىlastويعود إلى WhatsApp). allowUnsafeExternalContent: trueيعطّل غلاف سلامة المحتوى الخارجي لذلك الـ hook (خطر؛ للاستخدام فقط مع مصادر داخلية موثوقة).openclaw webhooks gmail setupيكتب تهيئةhooks.gmailلـopenclaw webhooks gmail run. راجع Gmail Pub/Sub لسير عمل مراقبة Gmail الكامل.
الاستجابات¶
200لـ/hooks/wake202لـ/hooks/agent(بدء تشغيل غير متزامن)401عند فشل المصادقة400عند حمولة غير صالحة413عند الحمولات كبيرة الحجم
أمثلة¶
curl -X POST http://127.0.0.1:18789/hooks/wake \
-H 'Authorization: Bearer SECRET' \
-H 'Content-Type: application/json' \
-d '{"text":"New email received","mode":"now"}'
curl -X POST http://127.0.0.1:18789/hooks/agent \
-H 'x-openclaw-token: SECRET' \
-H 'Content-Type: application/json' \
-d '{"message":"Summarize inbox","name":"Email","wakeMode":"next-heartbeat"}'
استخدام نموذج مختلف¶
أضف model إلى حمولة الوكيل (أو التعيين) لتجاوز النموذج لهذا التشغيل:
curl -X POST http://127.0.0.1:18789/hooks/agent \
-H 'x-openclaw-token: SECRET' \
-H 'Content-Type: application/json' \
-d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.2-mini"}'
إذا كنت تفرض agents.defaults.models، فتأكد من تضمين نموذج التجاوز هناك.
curl -X POST http://127.0.0.1:18789/hooks/gmail \
-H 'Authorization: Bearer SECRET' \
-H 'Content-Type: application/json' \
-d '{"source":"gmail","messages":[{"from":"Ada","subject":"Hello","snippet":"Hi"}]}'
الأمان¶
- أبقِ نقاط نهاية الـ hook خلف loopback أو tailnet أو وكيل عكسي موثوق.
- استخدم رمز hook مخصصًا؛ لا تعِد استخدام رموز مصادقة Gateway.
- تجنّب تضمين حمولات خام حساسة في سجلات الـ webhook.
- تُعامَل حمولات الـ hook على أنها غير موثوقة وتُغلَّف بحدود أمان افتراضيًا.
إذا اضطررت لتعطيل ذلك لـ hook معيّن، فاضبط
allowUnsafeExternalContent: trueفي تعيين ذلك الـ hook (خطر).