Gateway
ابزارها API را فراخوانی میکنند
Gateway در OpenClaw یک نقطهٔ پایانی HTTP ساده برای فراخوانی مستقیم یک ابزار واحد ارائه میکند. این نقطهٔ پایانی همیشه فعال است و از احراز هویت Gateway بههمراه سیاست ابزار استفاده میکند. مانند سطح سازگار با OpenAI در /v1/*، احراز هویت 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.rateLimitپیکربندی شده باشد و شکستهای احراز هویت بیش از حد رخ دهد، نقطهٔ پایانی429را باRetry-Afterبرمیگرداند.
مرز امنیتی (مهم)
با این نقطهٔ پایانی بهعنوان سطح دسترسی کامل اپراتور برای نمونهٔ Gateway برخورد کنید.
- احراز هویت bearer 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(رشته، اختیاری): اگر طرحوارهٔ ابزار ازactionپشتیبانی کند و بارargsآن را حذف کرده باشد، در 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در اینجا قابل دسترسی باشد، با آن بهعنوان سطح shell تغییردهنده برخورد کنید. رد کردنwrite،edit،apply_patchیا ابزارهای نوشتن فایلسیستم از طریق HTTP اجرای shell را فقطخواندنی نمیکند. - اعتبارنامههای bearer Gateway را با فراخوانندگان نامطمئن به اشتراک نگذارید. اگر به جداسازی میان مرزهای اعتماد نیاز دارید، Gatewayهای جداگانه اجرا کنید (و ترجیحاً کاربران/میزبانهای سیستمعامل جداگانه).
HTTP در Gateway همچنین بهصورت پیشفرض یک فهرست رد سختگیرانه اعمال میکند (حتی اگر سیاست نشست ابزار را مجاز بداند):
exec- اجرای مستقیم فرمان (سطح RCE)spawn- ایجاد پردازهٔ فرزند دلخواه (سطح RCE)shell- اجرای فرمان shell (سطح RCE)fs_write- تغییر دلخواه فایل روی میزبانfs_delete- حذف دلخواه فایل روی میزبانfs_move- جابهجایی/تغییرنام دلخواه فایل روی میزبانapply_patch- اعمال وصله میتواند فایلهای دلخواه را بازنویسی کندsessions_spawn- هماهنگسازی نشست؛ ایجاد عاملها از راه دور RCE استsessions_send- تزریق پیام میاننشستیcron- صفحهٔ کنترل خودکارسازی پایدارgateway- صفحهٔ کنترل Gateway؛ از پیکربندی دوباره از طریق HTTP جلوگیری میکندnodes- انتقال فرمان Node میتواند به 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": {} }'