Gateway
واجهة API لاستدعاء الأدوات
تعرض Gateway في OpenClaw نقطة نهاية HTTP بسيطة لاستدعاء أداة واحدة مباشرة. تكون مفعلة دائمًا وتستخدم مصادقة Gateway إضافة إلى سياسة الأدوات. وكما هو الحال مع سطح /v1/* المتوافق مع OpenAI، تُعامل مصادقة Bearer بالسر المشترك بوصفها وصول مشغّل موثوقًا إلى Gateway بالكامل.
POST /tools/invoke- المنفذ نفسه مثل Gateway (تعدد إرسال WS + HTTP):
http://<gateway-host>:<port>/tools/invoke
الحد الأقصى الافتراضي لحجم الحمولة هو 2 MB.
المصادقة
تستخدم إعدادات مصادقة 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.password/OPENCLAW_GATEWAY_PASSWORDكبديل محلي مباشر. أي دليل من ترويساتForwardedأوX-Forwarded-*أوX-Real-IPيُبقي الطلب بدلًا من ذلك على مسار الوكيل الموثوق. - إذا كان
gateway.auth.rateLimitمهيأ وحدث عدد كبير جدًا من إخفاقات المصادقة، فستُرجع نقطة النهاية429معRetry-After.
حد الأمان (مهم)
تعامل مع نقطة النهاية هذه كسطح وصول مشغّل كامل لمثيل Gateway.
- مصادقة HTTP Bearer هنا ليست نموذج نطاق ضيقًا لكل مستخدم.
- يجب التعامل مع رمز/كلمة مرور 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.
ملاحظات مهمة على الحد:
- موافقات exec هي حواجز أمان للمشغّل، وليست حد تفويض منفصلًا لنقطة نهاية HTTP هذه. إذا كانت أداة قابلة للوصول هنا عبر مصادقة Gateway + سياسة الأدوات، فإن
/tools/invokeلا يضيف مطالبة موافقة إضافية لكل استدعاء. - إذا كان
execقابلًا للوصول هنا، فتعامل معه كسطح صدفة قادر على التغيير. إن رفضwriteأوeditأوapply_patchأو أدوات HTTP التي تكتب إلى نظام الملفات لا يجعل تنفيذ الصدفة للقراءة فقط. - لا تشارك بيانات اعتماد Gateway Bearer مع متصلين غير موثوقين. إذا كنت تحتاج إلى فصل عبر حدود الثقة، فشغّل Gateways منفصلة (ويُفضّل أيضًا مستخدمين/مضيفين منفصلين على نظام التشغيل).
تطبق Gateway HTTP أيضًا قائمة منع صارمة افتراضيًا (حتى إذا سمحت سياسة الجلسة بالأداة):
exec- تنفيذ أوامر مباشر (سطح RCE)spawn- إنشاء عمليات فرعية عشوائية (سطح RCE)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 for owner/admin callers allow: ["gateway"], }, },}gateway.tools.allow هو تجاوز للتعرّض، وليس ترقية للنطاق. في
أوضاع HTTP التي تحمل هوية، تظل cron وgateway وnodes غير متاحة
للمتصلين الذين لا يملكون هوية مالك/مسؤول (operator.admin) حتى عندما
تكون مدرجة في gateway.tools.allow. لا تزال مصادقة Bearer بالسر المشترك
تتبع قاعدة المشغّل الموثوق الكاملة أعلاه.
لمساعدة سياسات المجموعة على حل السياق، يمكنك اختياريًا ضبط:
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": {} }'