Gateway
تستدعي الأدوات واجهة API
تكشف 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"): لا تلزم ترويسة مصادقة
ملاحظات:
- يستخدم
mode="token"القيمةgateway.auth.token(أوOPENCLAW_GATEWAY_TOKEN). - يستخدم
mode="password"القيمةgateway.auth.password(أوOPENCLAW_GATEWAY_PASSWORD). - يتطلب
mode="trusted-proxy"أن يأتي طلب HTTP من مصدر وكيل موثوق مهيأ؛ وتتطلب وكلاء local 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 هنا ليست نموذج نطاق ضيقًا لكل مستخدم.
- يجب التعامل مع رمز Gateway المميز/كلمة المرور الصالحة لنقطة النهاية هذه باعتبارها بيانات اعتماد للمالك/المشغّل.
- في أوضاع مصادقة السر المشترك (
tokenوpassword)، تستعيد نقطة النهاية الإعدادات الافتراضية المعتادة للوصول الكامل للمشغّل، حتى إذا أرسل المستدعي ترويسةx-openclaw-scopesأضيق نطاقًا. - تعامل مصادقة السر المشترك أيضًا الاستدعاءات المباشرة للأدوات على نقطة النهاية هذه على أنها أدوار واردة من المالك.
- تحترم أوضاع HTTP الموثوقة الحاملة للهوية (مصادقة الوكيل الموثوق، أو
gateway.auth.mode="none"عند إدخال خاص) الترويسةx-openclaw-scopesعند وجودها، وإلا تعود إلى مجموعة النطاقات الافتراضية المعتادة للمشغّل. - أبقِ نقطة النهاية هذه مقتصرة على local loopback أو شبكة Tailscale أو الإدخال الخاص؛ ولا تكشفها مباشرةً للإنترنت العام.
مصفوفة المصادقة:
| وضع المصادقة | السلوك |
|---|---|
token أو password مع Authorization: Bearer ... |
يثبت امتلاك سر مشغّل Gateway المشترك. يتجاهل x-openclaw-scopes الأضيق نطاقًا. يستعيد مجموعة نطاقات المشغّل الافتراضية الكاملة: operator.admin وoperator.approvals وoperator.pairing وoperator.read وoperator.talk.secrets وoperator.write. يعامل الاستدعاءات المباشرة للأدوات على أنها أدوار واردة من المالك. |
HTTP موثوق حامل للهوية (مصادقة وكيل موثوق، أو mode="none" عند إدخال خاص) |
يصادق هوية خارجية موثوقة أو حد النشر. يحترم x-openclaw-scopes عند وجودها. يعود إلى مجموعة نطاقات المشغّل الافتراضية المعتادة عند غياب الترويسة. لا يفقد دلالات المالك إلا عندما يضيّق المستدعي النطاقات صراحةً ويحذف operator.admin. |
نص الطلب
{ "tool": "sessions_list", "action": "json", "args": {}, "sessionKey": "main", "dryRun": false}الحقول:
tool/name(سلسلة نصية، مطلوب): اسم الأداة المراد استدعاؤها. تكون الأولوية لـnameإذا أُرسل كلاهما.action(سلسلة نصية، اختياري): يُدمج فيargs.actionإذا كان مخطط الأداة يدعم الخاصيةactionولم تكنargsقد عيّنتها بالفعل.args(كائن، اختياري): وسائط خاصة بالأداة.sessionKey(سلسلة نصية، اختياري): مفتاح الجلسة المستهدفة. إذا حُذف أو كان"main"، تستخدم Gateway مفتاح الجلسة الرئيسية المهيأ (مع مراعاةsession.mainKeyوالوكيل الافتراضي، أوglobalفي نطاق الجلسة العام).agentId(سلسلة نصية، اختياري): يحل مفتاح الجلسة لذلك الوكيل. يعيد خطأ400إذا تعارض معsessionKeyصريح مرتبط مسبقًا بوكيل مختلف.idempotencyKey(سلسلة نصية، اختياري): يُستخدم لاشتقاق معرّف ثابت لاستدعاء الأداة.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 مع مستدعين غير موثوقين. إذا احتجت إلى الفصل بين حدود الثقة، فشغّل بوابات Gateway منفصلة (ويُفضّل تشغيلها تحت مستخدمي نظام تشغيل أو مضيفين منفصلين).
يطبّق HTTP الخاص بـGateway أيضًا قائمة رفض صارمة افتراضيًا (حتى إذا سمحت سياسة الجلسة بالأداة):
| الأداة | السبب |
|---|---|
exec |
تنفيذ مباشر للأوامر (واجهة لتنفيذ التعليمات البرمجية عن بُعد) |
spawn |
إنشاء عمليات فرعية عشوائية (واجهة لتنفيذ التعليمات البرمجية عن بُعد) |
shell |
تنفيذ أوامر الصدفة (واجهة لتنفيذ التعليمات البرمجية عن بُعد) |
fs_write |
تعديل ملفات عشوائية على المضيف |
fs_delete |
حذف ملفات عشوائية على المضيف |
fs_move |
نقل/إعادة تسمية ملفات عشوائية على المضيف |
apply_patch |
يمكن لتطبيق الرقع إعادة كتابة ملفات عشوائية |
sessions_spawn |
تنسيق الجلسات؛ إنشاء الوكلاء عن بُعد يتيح تنفيذ التعليمات البرمجية عن بُعد |
sessions_send |
حقن رسائل عبر الجلسات |
cron |
مستوى تحكم للأتمتة الدائمة |
gateway |
مستوى تحكم Gateway؛ يمنع إعادة التهيئة عبر HTTP |
nodes |
يمكن لترحيل أوامر Node الوصول إلى system.run على المضيفين المقترنين |
كما أن cron وgateway وnodes مقتصرة على المالك: حتى خارج قائمة الرفض الافتراضية هذه، لا يمكن للمستدعين من غير المالك استدعاؤها عبر هذه الواجهة.
خصّص قائمة الرفض العامة عبر 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. وتظل مصادقة حامل السر المشترك تتبع قاعدة المشغّل الموثوق بالكامل المذكورة أعلاه.
للمساعدة في تمكين سياسات المجموعة من تحديد السياق، يمكنك اختياريًا تعيين:
x-openclaw-message-channel: <channel>(مثال:slack،telegram)x-openclaw-account-id: <accountId>(عند وجود حسابات متعددة)x-openclaw-message-to: <target>(هدف التسليم لسياسة أداة الرسائل)x-openclaw-thread-id: <threadId>(سياق سلسلة المحادثة لسياسة أداة الرسائل)
الاستجابات
| الحالة | المعنى |
|---|---|
200 |
{ ok: true, result } |
400 |
{ ok: false, error: { type, message } } (طلب غير صالح أو خطأ في مدخلات الأداة) |
401 |
غير مصرح |
403 |
{ ok: false, error: { type, message, requiresApproval? } } (حظرت السياسة استدعاء الأداة) |
404 |
الأداة غير متاحة (غير موجودة أو غير مدرجة في قائمة السماح) |
405 |
الطريقة غير مسموح بها |
408 |
انتهت مهلة قراءة نص الطلب |
413 |
تجاوز نص الطلب الحد الأقصى لحجم الحمولة |
429 |
فُرض حد للمعدل على المصادقة (تم تعيين Retry-After) |
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": {} }'