Gateway
واجهة برمجة تطبيقات استدعاء الأدوات
يعرض Gateway في OpenClaw نقطة نهاية HTTP بسيطة لاستدعاء أداة واحدة مباشرة. وهي مفعّلة دائمًا وتستخدم مصادقة Gateway مع سياسة الأدوات. وكما هو الحال مع سطح /v1/* المتوافق مع OpenAI، تُعامل مصادقة الحامل بالسر المشترك بوصفها وصول مشغّل موثوقًا إلى Gateway بالكامل.
POST /tools/invoke- المنفذ نفسه مثل Gateway (تعدد إرسال WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
الحجم الأقصى الافتراضي للحمولة هو 2 ميغابايت.
المصادقة
تستخدم إعدادات مصادقة Gateway.
مسارات مصادقة HTTP الشائعة:
- مصادقة السر المشترك (
gateway.auth.mode="token"أو"password"):Authorization: Bearer <token-or-password> - مصادقة HTTP موثوقة حاملة للهوية (
gateway.auth.mode="trusted-proxy"): مرّر الطلب عبر الوكيل المهيأ والمدرك للهوية ودعه يحقن ترويسات الهوية المطلوبة - مصادقة مفتوحة للدخول الخاص (
gateway.auth.mode="none"): لا يلزم وجود ترويسة مصادقة
ملاحظات:
- عند
gateway.auth.mode="token"، استخدمgateway.auth.token(أوOPENCLAW_GATEWAY_TOKEN). - عند
gateway.auth.mode="password"، استخدمgateway.auth.password(أوOPENCLAW_GATEWAY_PASSWORD). - عند
gateway.auth.mode="trusted-proxy"، يجب أن يأتي طلب HTTP من مصدر وكيل موثوق مهيأ؛ وتتطلب وكلاء loopback على المضيف نفسه تفعيلًا صريحًا لـgateway.auth.trustedProxy.allowLoopback = true. - إذا كان
gateway.auth.rateLimitمهيأً وحدثت إخفاقات مصادقة كثيرة جدًا، فتعيد نقطة النهاية429معRetry-After.
حد الأمان (مهم)
تعامل مع نقطة النهاية هذه كسطح وصول كامل للمشغّل لمثيل Gateway.
- مصادقة حامل HTTP هنا ليست نموذج نطاق ضيق لكل مستخدم.
- يجب التعامل مع رمز/كلمة مرور Gateway صالحة لنقطة النهاية هذه كبيان اعتماد مالك/مشغّل.
- في أوضاع مصادقة السر المشترك (
tokenوpassword)، تستعيد نقطة النهاية افتراضيات المشغّل الكاملة المعتادة حتى إذا أرسل المستدعي ترويسةx-openclaw-scopesأضيق. - تعامل مصادقة السر المشترك أيضًا استدعاءات الأدوات المباشرة على نقطة النهاية هذه كدورات مُرسِل مالك.
- تحترم أوضاع HTTP الموثوقة الحاملة للهوية (مثل مصادقة الوكيل الموثوق أو
gateway.auth.mode="none"على دخول خاص) ترويسةx-openclaw-scopesعند وجودها، وإلا فتعود إلى مجموعة النطاقات الافتراضية المعتادة للمشغّل. - أبقِ نقطة النهاية هذه على loopback/tailnet/دخول خاص فقط؛ لا تعرضها مباشرة على الإنترنت العام.
مصفوفة المصادقة:
gateway.auth.mode="token"أو"password"+Authorization: Bearer ...- يثبت امتلاك سر مشغّل Gateway المشترك
- يتجاهل
x-openclaw-scopesالأضيق - يستعيد مجموعة نطاقات المشغّل الافتراضية الكاملة:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - يعامل استدعاءات الأدوات المباشرة على نقطة النهاية هذه كدورات مُرسِل مالك
- أوضاع HTTP الموثوقة الحاملة للهوية (مثل مصادقة الوكيل الموثوق، أو
gateway.auth.mode="none"على دخول خاص)- تصادق هوية خارجية موثوقة أو حد نشر معين
- تحترم
x-openclaw-scopesعند وجود الترويسة - تعود إلى مجموعة نطاقات المشغّل الافتراضية المعتادة عند غياب الترويسة
- لا تفقد دلالات المالك إلا عندما يضيّق المستدعي النطاقات صراحةً ويحذف
operator.admin
جسم الطلب
{
"tool": "sessions_list",
"action": "json",
"args": {},
"sessionKey": "main",
"dryRun": false
}
الحقول:
tool(سلسلة نصية، مطلوب): اسم الأداة المراد استدعاؤها.action(سلسلة نصية، اختياري): يُربط ضمن args إذا كان مخطط الأداة يدعمactionوكانت حمولة args قد حذفته.args(كائن، اختياري): وسيطات خاصة بالأداة.sessionKey(سلسلة نصية، اختياري): مفتاح الجلسة الهدف. إذا حُذف أو كان"main"، يستخدم Gateway مفتاح الجلسة الرئيسية المهيأ (يحترمsession.mainKeyوالوكيل الافتراضي، أوglobalفي النطاق العام).dryRun(قيمة منطقية، اختياري): محجوز للاستخدام المستقبلي؛ يتم تجاهله حاليًا.
سلوك السياسة والتوجيه
تُرشّح إتاحة الأدوات عبر سلسلة السياسة نفسها المستخدمة بواسطة وكلاء Gateway:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- سياسات المجموعات (إذا كان مفتاح الجلسة يطابق مجموعة أو قناة)
- سياسة الوكيل الفرعي (عند الاستدعاء بمفتاح جلسة وكيل فرعي)
إذا لم تكن الأداة مسموحة بموجب السياسة، تعيد نقطة النهاية 404.
ملاحظات مهمة حول الحدود:
- موافقات التنفيذ هي ضوابط حماية للمشغّل، وليست حد تفويض منفصلًا لنقطة نهاية HTTP هذه. إذا كان الوصول إلى أداة متاحًا هنا عبر مصادقة Gateway + سياسة الأدوات، فإن
/tools/invokeلا تضيف مطالبة موافقة إضافية لكل استدعاء. - لا تشارك بيانات اعتماد حامل Gateway مع مستدعين غير موثوقين. إذا كنت تحتاج إلى فصل عبر حدود الثقة، فشغّل Gateways منفصلة (ومن الأفضل مستخدمين/مضيفين منفصلين لنظام التشغيل).
يطبق HTTP في Gateway أيضًا قائمة منع صارمة افتراضيًا (حتى إذا كانت سياسة الجلسة تسمح بالأداة):
exec- تنفيذ أوامر مباشر (سطح RCE)spawn- إنشاء عملية فرعية عشوائية (سطح RCE)shell- تنفيذ أوامر shell (سطح RCE)fs_write- تعديل ملفات عشوائي على المضيفfs_delete- حذف ملفات عشوائي على المضيفfs_move- نقل/إعادة تسمية ملفات عشوائية على المضيفapply_patch- يمكن لتطبيق الرقع إعادة كتابة ملفات عشوائيةsessions_spawn- تنسيق الجلسات؛ إنشاء الوكلاء عن بُعد هو RCEsessions_send- حقن رسائل عبر الجلساتcron- مستوى تحكم للأتمتة المستمرةgateway- مستوى تحكم Gateway؛ يمنع إعادة التهيئة عبر HTTPnodes- يمكن لترحيل أوامر العقد الوصول إلى system.run على المضيفين المقترنينwhatsapp_login- إعداد تفاعلي يتطلب مسح QR عبر الطرفية؛ يتوقف على HTTP
يمكنك تخصيص قائمة المنع هذه عبر gateway.tools:
{
gateway: {
tools: {
// Additional tools to block over HTTP /tools/invoke
deny: ["browser"],
// Remove tools from the default deny list
allow: ["gateway"],
},
},
}
لمساعدة سياسات المجموعات على حل السياق، يمكنك اختياريًا تعيين:
x-openclaw-message-channel: <channel>(مثال:slack,telegram)x-openclaw-account-id: <accountId>(عند وجود عدة حسابات)
الاستجابات
200→{ ok: true, result }400→{ ok: false, error: { type, message } }(طلب غير صالح أو خطأ في إدخال الأداة)401→ غير مصرح429→ المصادقة محدودة المعدل (Retry-Afterمعيّن)404→ الأداة غير متاحة (غير موجودة أو غير مدرجة في قائمة السماح)405→ الطريقة غير مسموحة500→{ ok: false, error: { type, message } }(خطأ غير متوقع في تنفيذ الأداة؛ رسالة منقحة)
مثال
curl -sS http://127.0.0.1:18789/tools/invoke \
-H 'Authorization: Bearer secret' \
-H 'Content-Type: application/json' \
-d '{
"tool": "sessions_list",
"action": "json",
"args": {}
}'