Gateway
التكوين
OpenClaw يقرأ إعدادًا اختياريًا بصيغة JSON5 من ~/.openclaw/openclaw.json.
يجب أن يكون مسار الإعداد النشط ملفًا عاديًا. تخطيطات openclaw.json
المرتبطة رمزيًا غير مدعومة لعمليات الكتابة المملوكة لـ OpenClaw؛ فقد تستبدل
الكتابة الذرية المسار بدلًا من الحفاظ على الرابط الرمزي. إذا كنت تحتفظ بالإعداد خارج
دليل الحالة الافتراضي، فوجّه OPENCLAW_CONFIG_PATH مباشرة إلى الملف الحقيقي.
إذا كان الملف مفقودًا، يستخدم OpenClaw إعدادات افتراضية آمنة. الأسباب الشائعة لإضافة إعداد:
- ربط القنوات والتحكم بمن يمكنه مراسلة البوت
- تعيين النماذج والأدوات والعزل أو الأتمتة (cron، الخطافات)
- ضبط الجلسات والوسائط والشبكات أو واجهة المستخدم
راجع المرجع الكامل لكل حقل متاح.
ينبغي للوكلاء والأتمتة استخدام config.schema.lookup للحصول على توثيق دقيق
على مستوى الحقول قبل تعديل الإعداد. استخدم هذه الصفحة للإرشاد الموجّه للمهام و
مرجع الإعداد لخريطة الحقول الأوسع
والقيم الافتراضية.
الحد الأدنى للإعداد
// ~/.openclaw/openclaw.json{ agents: { defaults: { workspace: "~/.openclaw/workspace" } }, channels: { whatsapp: { allowFrom: ["+15555550123"] } },}تعديل الإعداد
Interactive wizard
openclaw onboard # full onboarding flowopenclaw configure # config wizardCLI (one-liners)
openclaw config get agents.defaults.workspaceopenclaw config set agents.defaults.heartbeat.every "2h"openclaw config unset plugins.entries.brave.config.webSearch.apiKeyControl UI
افتح http://127.0.0.1:18789 واستخدم تبويب Config.
تعرض Control UI نموذجًا من مخطط الإعداد الحي، بما في ذلك بيانات تعريف
توثيق الحقول title / description بالإضافة إلى مخططات Plugin والقنوات عند
توفرها، مع محرر Raw JSON كمخرج بديل. لواجهات التنقل التفصيلي
والأدوات الأخرى، يوفّر Gateway أيضًا config.schema.lookup لجلب
عقدة مخطط واحدة محددة بالمسار مع ملخصات الأبناء المباشرين.
Direct edit
عدّل ~/.openclaw/openclaw.json مباشرة. يراقب Gateway الملف ويطبّق التغييرات تلقائيًا (راجع إعادة التحميل الساخنة).
التحقق الصارم
يطبع openclaw config schema مخطط JSON Schema المعياري المستخدم من Control UI
والتحقق. يجلب config.schema.lookup عقدة واحدة محددة بالمسار مع
ملخصات الأبناء لأدوات التنقل التفصيلي. تنتقل بيانات تعريف توثيق الحقول
title/description عبر الكائنات المتداخلة، وفروع wildcard (*) وعناصر المصفوفة ([]) و anyOf/
oneOf/allOf. تندمج مخططات Plugin والقنوات وقت التشغيل عند تحميل
سجل البيان.
عند فشل التحقق:
- لا يبدأ Gateway
- تعمل أوامر التشخيص فقط (
openclaw doctor،openclaw logs،openclaw health،openclaw status) - شغّل
openclaw doctorلرؤية المشكلات الدقيقة - شغّل
openclaw doctor --fix(أو--yes) لتطبيق الإصلاحات
يحتفظ Gateway بنسخة موثوقة من آخر إعداد سليم معروف بعد كل بدء تشغيل ناجح،
لكن بدء التشغيل وإعادة التحميل الساخنة لا يستعيدانها تلقائيًا. إذا فشل openclaw.json
في التحقق (بما في ذلك التحقق المحلي الخاص بـ Plugin)، يفشل بدء Gateway أو
يتم تخطي إعادة التحميل ويحتفظ وقت التشغيل الحالي بآخر إعداد مقبول.
شغّل openclaw doctor --fix (أو --yes) لإصلاح الإعداد ذي البادئة/المتضرر أو
استعادة نسخة آخر إعداد سليم معروف. يتم تخطي الترقية إلى آخر إعداد سليم معروف عندما
يحتوي المرشح على عناصر نائبة لأسرار منقّحة مثل ***.
المهام الشائعة
Set up a channel (WhatsApp, Telegram, Discord, etc.)
لكل قناة قسم إعداد خاص بها تحت channels.<provider>. راجع صفحة القناة المخصصة لخطوات الإعداد:
- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
تشترك جميع القنوات في نمط سياسة الرسائل المباشرة نفسه:
{ channels: { telegram: { enabled: true, botToken: "123:abc", dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["tg:123"], // only for allowlist/open }, },}Choose and configure models
عيّن النموذج الأساسي والبدائل الاختيارية:
{ agents: { defaults: { model: { primary: "anthropic/claude-sonnet-4-6", fallbacks: ["openai/gpt-5.4"], }, models: { "anthropic/claude-sonnet-4-6": { alias: "Sonnet" }, "openai/gpt-5.4": { alias: "GPT" }, }, }, },}- يعرّف
agents.defaults.modelsكتالوج النماذج ويعمل كقائمة سماح لـ/model؛ وتقوم إدخالاتprovider/*بتصفية/modelو/modelsومنتقيات النماذج إلى المزودين المحددين مع الاستمرار في استخدام اكتشاف النماذج الديناميكي. - استخدم
openclaw config set agents.defaults.models '<json>' --strict-json --mergeلإضافة إدخالات قائمة السماح دون إزالة النماذج الحالية. يتم رفض الاستبدالات العادية التي قد تزيل إدخالات ما لم تمرر--replace. - تستخدم مراجع النماذج تنسيق
provider/model(مثلanthropic/claude-opus-4-6). - يتحكم
agents.defaults.imageMaxDimensionPxفي تصغير صور النصوص/الأدوات (الافتراضي1200)؛ عادةً ما تقلل القيم الأصغر استخدام رموز الرؤية في التشغيلات كثيفة لقطات الشاشة. - راجع CLI النماذج لتبديل النماذج في الدردشة وتجاوز فشل النموذج لتدوير المصادقة وسلوك البدائل.
- للمزودين المخصصين/المستضافين ذاتيًا، راجع المزودون المخصصون في المرجع.
Control who can message the bot
يتم التحكم في الوصول إلى الرسائل المباشرة لكل قناة عبر dmPolicy:
"pairing"(افتراضي): يحصل المرسلون غير المعروفين على رمز اقتران لمرة واحدة للموافقة"allowlist": المرسلون الموجودون فيallowFromفقط (أو مخزن السماح المقترن)"open": السماح بكل الرسائل المباشرة الواردة (يتطلبallowFrom: ["*"])"disabled": تجاهل كل الرسائل المباشرة
للمجموعات، استخدم groupPolicy + groupAllowFrom أو قوائم السماح الخاصة بالقنوات.
راجع المرجع الكامل للتفاصيل الخاصة بكل قناة.
Set up group chat mention gating
تتطلب رسائل المجموعات افتراضيًا وجود إشارة. اضبط أنماط التشغيل لكل وكيل. تُنشر الردود العادية في المجموعات/القنوات تلقائيًا؛ فعّل مسار أداة الرسائل للغرف المشتركة التي ينبغي للوكيل أن يقرر فيها متى يتحدث:
{ messages: { visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere groupChat: { visibleReplies: "message_tool", // opt-in; visible output requires message(action=send) unmentionedInbound: "room_event", // unmentioned always-on group chatter is quiet context }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"], }, }, ], }, channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}- إشارات البيانات الوصفية: إشارات @ الأصلية (إشارة WhatsApp باللمس، Telegram @bot، وما إلى ذلك)
- أنماط النص: أنماط regex آمنة في
mentionPatterns - الردود المرئية: يمكن لـ
messages.visibleRepliesأن يطلب إرسال أدوات الرسائل عالميًا؛ ويتجاوزmessages.groupChat.visibleRepliesذلك للمجموعات/القنوات. - راجع المرجع الكامل لأوضاع الردود المرئية، والتجاوزات لكل قناة، ووضع الدردشة الذاتية.
Restrict skills per agent
استخدم agents.defaults.skills كأساس مشترك، ثم تجاوز وكلاء محددين
باستخدام agents.list[].skills:
{ agents: { defaults: { skills: ["github", "weather"], }, list: [ { id: "writer" }, // inherits github, weather { id: "docs", skills: ["docs-search"] }, // replaces defaults { id: "locked-down", skills: [] }, // no skills ], },}- احذف
agents.defaults.skillsلجعل Skills غير مقيّدة افتراضيًا. - احذف
agents.list[].skillsلوراثة الإعدادات الافتراضية. - عيّن
agents.list[].skills: []لعدم وجود Skills. - راجع Skills، وإعداد Skills، و مرجع الإعداد.
Tune gateway channel health monitoring
تحكّم في مدى شدة إعادة تشغيل Gateway للقنوات التي تبدو قديمة:
{ gateway: { channelHealthCheckMinutes: 5, channelStaleEventThresholdMinutes: 30, channelMaxRestartsPerHour: 10, }, channels: { telegram: { healthMonitor: { enabled: false }, accounts: { alerts: { healthMonitor: { enabled: true }, }, }, }, },}- عيّن
gateway.channelHealthCheckMinutes: 0لتعطيل عمليات إعادة تشغيل مراقبة الصحة عالميًا. - ينبغي أن يكون
channelStaleEventThresholdMinutesأكبر من أو مساويًا لفاصل الفحص. - استخدم
channels.<provider>.healthMonitor.enabledأوchannels.<provider>.accounts.<id>.healthMonitor.enabledلتعطيل إعادة التشغيل التلقائي لقناة أو حساب واحد دون تعطيل المراقبة العالمية. - راجع فحوصات الصحة لتصحيح التشغيل والمرجع الكامل لكل الحقول.
Tune gateway WebSocket handshake timeout
امنح العملاء المحليين وقتًا أطول لإكمال مصافحة WebSocket قبل المصادقة على المضيفات المحمّلة أو منخفضة القدرة:
{ gateway: { handshakeTimeoutMs: 30000, },}- القيمة الافتراضية هي
15000مللي ثانية. - لا يزال
OPENCLAW_HANDSHAKE_TIMEOUT_MSله الأولوية لتجاوزات الخدمة أو الصدفة لمرة واحدة. - يفضّل إصلاح توقفات بدء التشغيل/حلقة الأحداث أولًا؛ هذا المقبض للمضيفات السليمة لكنها بطيئة أثناء الإحماء.
Configure sessions and resets
تتحكم الجلسات في استمرارية المحادثة وعزلها:
{ session: { dmScope: "per-channel-peer", // recommended for multi-user threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, }, reset: { mode: "daily", atHour: 4, idleMinutes: 120, }, },}dmScope:main(مشترك) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: الإعدادات الافتراضية العامة لتوجيه الجلسات المرتبطة بالسلاسل (يدعم Discord أوامر/focusو/unfocusو/agentsو/session idleو/session max-age).- راجع إدارة الجلسات لمعرفة النطاق، وروابط الهوية، وسياسة الإرسال.
- راجع المرجع الكامل للاطلاع على جميع الحقول.
تفعيل وضع العزل
شغّل جلسات الوكيل في أوقات تشغيل معزولة داخل صندوق عزل:
{ agents: { defaults: { sandbox: { mode: "non-main", // off | non-main | all scope: "agent", // session | agent | shared }, }, },}ابنِ الصورة أولاً - من نسخة مصدرية شغّل scripts/sandbox-setup.sh، أو من تثبيت npm راجع أمر docker build المضمّن في وضع العزل § الصور والإعداد.
راجع وضع العزل للدليل الكامل والمرجع الكامل لكل الخيارات.
تفعيل الدفع المدعوم بالمرحل لبُنى iOS الرسمية
يستخدم الدفع المدعوم بالمرحل لبُنى App Store العامة مرحل OpenClaw المستضاف: https://ios-push-relay.openclaw.ai.
تتطلب عمليات نشر المرحل المخصصة مسار بناء/نشر iOS منفصلاً عمداً يكون فيه عنوان URL للمرحل مطابقاً لعنوان URL لمرحل Gateway. إذا كنت تستخدم بنية مرحل مخصصة، فاضبط هذا في تكوين Gateway:
{ gateway: { push: { apns: { relay: { baseUrl: "https://relay.example.com", // Optional. Default: 10000 timeoutMs: 10000, }, }, }, },}مكافئ CLI:
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.comما يفعله هذا:
- يسمح لـ Gateway بإرسال
push.testوتنبيهات الإيقاظ وإيقاظات إعادة الاتصال عبر المرحل الخارجي. - يستخدم منحة إرسال محددة بنطاق التسجيل يمررها تطبيق iOS المقترن. لا يحتاج Gateway إلى رمز مرحل على مستوى النشر.
- يربط كل تسجيل مدعوم بالمرحل بهوية Gateway التي اقترن بها تطبيق iOS، حتى لا يتمكن Gateway آخر من إعادة استخدام التسجيل المخزن.
- يُبقي بُنى iOS المحلية/اليدوية على APNs مباشرة. تنطبق عمليات الإرسال المدعومة بالمرحل فقط على البُنى الموزعة الرسمية التي سجلت عبر المرحل.
- يجب أن يطابق عنوان URL الأساسي للمرحل المضمّن في بنية iOS، لكي تصل حركة التسجيل والإرسال إلى نشر المرحل نفسه.
التدفق من البداية إلى النهاية:
- ثبّت تطبيق iOS الرسمي.
- اختياري: اضبط
gateway.push.apns.relay.baseUrlعلى Gateway فقط عند استخدام بنية مرحل مخصصة منفصلة عمداً. - اربط تطبيق iOS بـ Gateway ودع كلاً من جلسات العقدة والمشغل تتصل.
- يجلب تطبيق iOS هوية Gateway، ويسجل لدى المرحل باستخدام App Attest مع إيصال التطبيق، ثم ينشر حمولة
push.apns.registerالمدعومة بالمرحل إلى Gateway المقترن. - يخزن Gateway مقبض المرحل ومنحة الإرسال، ثم يستخدمهما من أجل
push.testوتنبيهات الإيقاظ وإيقاظات إعادة الاتصال.
ملاحظات تشغيلية:
- إذا بدّلت تطبيق iOS إلى Gateway مختلف، فأعد توصيل التطبيق حتى يتمكن من نشر تسجيل مرحل جديد مرتبط بذلك Gateway.
- إذا شحنت بنية iOS جديدة تشير إلى نشر مرحل مختلف، فسيحدّث التطبيق تسجيل المرحل المخزن مؤقتاً بدلاً من إعادة استخدام أصل المرحل القديم.
ملاحظة التوافق:
- لا يزال
OPENCLAW_APNS_RELAY_BASE_URLوOPENCLAW_APNS_RELAY_TIMEOUT_MSيعملان كتجاوزات مؤقتة عبر متغيرات البيئة. - يجب أن تطابق عناوين URL المخصصة لمرحل Gateway عنوان URL الأساسي للمرحل المضمّن في بنية iOS. يرفض مسار إصدار App Store العام تجاوزات عنوان URL لمرحل iOS المخصص.
- يبقى
OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueمنفذ هروب تطويرياً مقتصراً على local loopback؛ لا تحفظ عناوين URL لمرحل HTTP في التكوين.
راجع تطبيق iOS للتدفق من البداية إلى النهاية وتدفق المصادقة والثقة لنموذج أمان المرحل.
إعداد Heartbeat (عمليات تسجيل وصول دورية)
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", }, }, },}every: سلسلة مدة (30m،2h). اضبط0mللتعطيل.target:last|none|<channel-id>(مثلاًdiscordأوmatrixأوtelegramأوwhatsapp)directPolicy:allow(افتراضي) أوblockلأهداف Heartbeat بأسلوب الرسائل المباشرة- راجع Heartbeat للدليل الكامل.
تكوين مهام Cron
{ cron: { enabled: true, maxConcurrentRuns: 8, // default; cron dispatch + isolated cron agent-turn execution sessionRetention: "24h", runLog: { maxBytes: "2mb", keepLines: 2000, }, },}sessionRetention: يشذّب جلسات التشغيل المعزولة المكتملة منsessions.json(الافتراضي24h؛ اضبطfalseللتعطيل).runLog: يشذّب صفوف سجل تشغيل Cron المحتفظ بها لكل مهمة. يظلmaxBytesمقبولاً لسجلات التشغيل القديمة المدعومة بالملفات.- راجع مهام Cron للاطلاع على نظرة عامة على الميزة وأمثلة CLI.
إعداد Webhook (خطافات)
فعّل نقاط نهاية Webhook عبر HTTP على Gateway:
{ hooks: { enabled: true, token: "shared-secret", path: "/hooks", defaultSessionKey: "hook:ingress", allowRequestSessionKey: false, allowedSessionKeyPrefixes: ["hook:"], mappings: [ { match: { path: "gmail" }, action: "agent", agentId: "main", deliver: true, }, ], },}ملاحظة أمنية:
- تعامل مع كل محتوى حمولات الخطافات/Webhook كمدخلات غير موثوقة.
- استخدم
hooks.tokenمخصصاً؛ لا تعِد استخدام أسرار مصادقة Gateway النشطة (gateway.auth.token/OPENCLAW_GATEWAY_TOKENأوgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD). - مصادقة الخطاف عبر الرؤوس فقط (
Authorization: Bearer ...أوx-openclaw-token)؛ تُرفض رموز سلسلة الاستعلام. - لا يمكن أن يكون
hooks.pathهو/؛ أبقِ دخول Webhook على مسار فرعي مخصص مثل/hooks. - أبقِ علامات تجاوز المحتوى غير الآمن معطلة (
hooks.gmail.allowUnsafeExternalContent،hooks.mappings[].allowUnsafeExternalContent) إلا عند إجراء تصحيح أخطاء محدود النطاق بإحكام. - إذا فعّلت
hooks.allowRequestSessionKey، فاضبط أيضاًhooks.allowedSessionKeyPrefixesلتقييد مفاتيح الجلسة التي يختارها المستدعي. - بالنسبة إلى الوكلاء المدفوعين بالخطافات، فضّل مستويات نماذج حديثة قوية وسياسة أدوات صارمة (مثلاً المراسلة فقط مع وضع العزل حيثما أمكن).
راجع المرجع الكامل لكل خيارات التعيين وتكامل Gmail.
تكوين توجيه متعدد الوكلاء
شغّل عدة وكلاء معزولين بمساحات عمل وجلسات منفصلة:
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}راجع متعدد الوكلاء والمرجع الكامل لقواعد الربط وملفات تعريف الوصول لكل وكيل.
تقسيم التكوين إلى ملفات متعددة ($include)
استخدم $include لتنظيم التكوينات الكبيرة:
// ~/.openclaw/openclaw.json{ gateway: { port: 18789 }, agents: { $include: "./agents.json5" }, broadcast: { $include: ["./clients/a.json5", "./clients/b.json5"], },}- ملف واحد: يستبدل الكائن المحتوي
- مصفوفة ملفات: تُدمج دمجاً عميقاً بالترتيب (اللاحق يفوز)
- المفاتيح الشقيقة: تُدمج بعد التضمينات (تتجاوز القيم المضمّنة)
- التضمينات المتداخلة: مدعومة حتى عمق 10 مستويات
- المسارات النسبية: تُحل نسبةً إلى الملف الذي يتضمنها
- تنسيق المسار: يجب ألا تحتوي مسارات التضمين على بايتات null ويجب أن تكون أقصر بصرامة من 4096 حرفاً قبل الحل وبعده
- كتابات مملوكة لـ OpenClaw: عندما يغير إجراء كتابة قسماً واحداً فقط من المستوى الأعلى
مدعوماً بتضمين ملف واحد مثل
plugins: { $include: "./plugins.json5" }، يحدّث OpenClaw ذلك الملف المضمّن ويتركopenclaw.jsonدون تغيير - تمرير الكتابة غير المدعوم: التضمينات الجذرية، ومصفوفات التضمين، والتضمينات ذات التجاوزات الشقيقة تفشل بشكل مغلق في الكتابات المملوكة لـ OpenClaw بدلاً من تسطيح التكوين
- الحصر: يجب أن تُحل مسارات
$includeتحت الدليل الذي يحتويopenclaw.json. لمشاركة شجرة عبر أجهزة أو مستخدمين، اضبطOPENCLAW_INCLUDE_ROOTSإلى قائمة مسارات (:على POSIX، و;على Windows) من أدلة إضافية قد تشير إليها التضمينات. تُحل الروابط الرمزية وتُفحص مرة أخرى، لذلك لا يزال المسار الذي يقع نصياً داخل دليل تكوين ولكن هدفه الحقيقي يخرج من كل جذر مسموح مرفوضاً. - معالجة الأخطاء: أخطاء واضحة للملفات المفقودة، وأخطاء التحليل، والتضمينات الدائرية، وتنسيق المسار غير الصالح، والطول المفرط
إعادة تحميل التكوين الفوري
يراقب Gateway الملف ~/.openclaw/openclaw.json ويطبق التغييرات تلقائياً - لا حاجة إلى إعادة تشغيل يدوية لمعظم الإعدادات.
تُعامل تعديلات الملفات المباشرة كغير موثوقة حتى يتم التحقق من صحتها. ينتظر المراقب
حتى يهدأ اضطراب الكتابة المؤقتة/إعادة التسمية من المحرر، ويقرأ الملف النهائي، ويرفض
التعديلات الخارجية غير الصالحة دون إعادة كتابة openclaw.json. تستخدم كتابات التكوين
المملوكة لـ OpenClaw بوابة المخطط نفسها قبل الكتابة؛ تُرفض عمليات الاستبدال المدمرة مثل
إسقاط gateway.mode أو تقليص الملف بأكثر من النصف، وتُحفظ كـ .rejected.* للفحص.
إذا رأيت config reload skipped (invalid config) أو أبلغ بدء التشغيل عن Invalid config، فافحص التكوين، وشغّل openclaw config validate، ثم شغّل openclaw doctor --fix للإصلاح. راجع استكشاف أخطاء Gateway وإصلاحها
للحصول على قائمة التحقق.
أوضاع إعادة التحميل
| الوضع | السلوك |
|---|---|
hybrid (افتراضي) |
يطبق التغييرات الآمنة فورياً دون إعادة تشغيل. يعيد التشغيل تلقائياً للتغييرات الحرجة. |
hot |
يطبق التغييرات الآمنة فورياً فقط. يسجل تحذيراً عند الحاجة إلى إعادة تشغيل - تتولاه أنت. |
restart |
يعيد تشغيل Gateway عند أي تغيير في التكوين، سواء كان آمناً أم لا. |
off |
يعطّل مراقبة الملفات. تسري التغييرات عند إعادة التشغيل اليدوية التالية. |
{ gateway: { reload: { mode: "hybrid", debounceMs: 300 }, },}ما يُطبق فورياً مقابل ما يحتاج إلى إعادة تشغيل
تُطبّق معظم الحقول فورياً دون توقف. في وضع hybrid، تُعالَج التغييرات التي تتطلب إعادة تشغيل تلقائياً.
| الفئة | الحقول | هل يلزم إعادة التشغيل؟ |
|---|---|---|
| القنوات | channels.*، web (WhatsApp) - جميع القنوات المدمجة وقنوات Plugin |
لا |
| الوكيل والنماذج | agent، agents، models، routing |
لا |
| الأتمتة | hooks، cron، agent.heartbeat |
لا |
| الجلسات والرسائل | session، messages |
لا |
| الأدوات والوسائط | tools، browser، skills، mcp، audio، talk |
لا |
| واجهة المستخدم ومتفرقات | ui، logging، identity، bindings |
لا |
| خادم Gateway | gateway.* (port، bind، auth، tailscale، TLS، HTTP) |
نعم |
| البنية التحتية | discovery، plugins |
نعم |
تخطيط إعادة التحميل
عندما تعدل ملف مصدر تتم الإشارة إليه عبر $include، يخطط OpenClaw
لإعادة التحميل من التخطيط المؤلف في المصدر، وليس من العرض المسطح في الذاكرة.
هذا يجعل قرارات إعادة التحميل الساخنة (التطبيق الساخن مقابل إعادة التشغيل) قابلة للتوقع حتى عندما
يعيش قسم واحد من المستوى الأعلى في ملف مضمن خاص به مثل
plugins: { $include: "./plugins.json5" }. يفشل تخطيط إعادة التحميل بإغلاق آمن إذا كان
تخطيط المصدر ملتبسًا.
RPC للتكوين (تحديثات برمجية)
بالنسبة للأدوات التي تكتب التكوين عبر واجهة API الخاصة بـ Gateway، فضّل هذا المسار:
config.schema.lookupلفحص شجرة فرعية واحدة (عقدة مخطط سطحية + ملخصات الأبناء)config.getلجلب اللقطة الحالية بالإضافة إلىhashconfig.patchللتحديثات الجزئية (تصحيح دمج JSON: الكائنات تندمج، وnullيحذف، والمصفوفات تُستبدل عند تأكيد ذلك صراحة باستخدامreplacePathsإذا كانت ستتم إزالة إدخالات)config.applyفقط عندما تنوي استبدال التكوين بالكاملupdate.runللتحديث الذاتي الصريح مع إعادة التشغيل؛ ضمّنcontinuationMessageعندما ينبغي للجلسة بعد إعادة التشغيل تشغيل دور متابعة واحدupdate.statusلفحص أحدث مؤشر إعادة تشغيل للتحديث والتحقق من النسخة العاملة بعد إعادة التشغيل
ينبغي للوكلاء التعامل مع config.schema.lookup باعتباره المحطة الأولى للحصول على
توثيق وقيود دقيقة على مستوى الحقول. استخدم مرجع التكوين
عندما يحتاجون إلى خريطة التكوين الأوسع، أو القيم الافتراضية، أو الروابط إلى مراجع
الأنظمة الفرعية المخصصة.
مثال على تصحيح جزئي:
openclaw gateway call config.get --params '{}' # capture payload.hashopenclaw gateway call config.patch --params '{ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }", "baseHash": "<hash>"}'يقبل كل من config.apply وconfig.patch الحقول raw وbaseHash وsessionKey
وnote وrestartDelayMs. يكون baseHash مطلوبًا لكلتا الطريقتين عندما يكون
هناك تكوين موجود بالفعل.
يقبل config.patch أيضًا replacePaths، وهي مصفوفة من مسارات التكوين التي يكون
استبدال مصفوفتها مقصودًا. إذا كان التصحيح سيستبدل أو يحذف مصفوفة موجودة
بإدخالات أقل، يرفض Gateway الكتابة ما لم يظهر ذلك المسار المحدد بالضبط
في replacePaths؛ تستخدم المصفوفات المتداخلة ضمن إدخالات المصفوفة []، مثل
agents.list[].skills. يمنع هذا لقطات config.get المقتطعة من
استبدال مصفوفات التوجيه أو قوائم السماح بصمت. استخدم config.apply عندما
تنوي استبدال التكوين الكامل.
متغيرات البيئة
يقرأ OpenClaw متغيرات البيئة من العملية الأم بالإضافة إلى:
.envمن دليل العمل الحالي (إن وجد)~/.openclaw/.env(بديل عام)
لا يتجاوز أي من الملفين متغيرات البيئة الموجودة. يمكنك أيضًا تعيين متغيرات بيئة مضمنة في التكوين:
{ env: { OPENROUTER_API_KEY: "sk-or-...", vars: { GROQ_API_KEY: "gsk-..." }, },}استيراد بيئة Shell (اختياري)
إذا كان مفعّلًا ولم تكن المفاتيح المتوقعة معيّنة، يشغل OpenClaw غلاف تسجيل الدخول الخاص بك ويستورد المفاتيح الناقصة فقط:
{env: { shellEnv: { enabled: true, timeoutMs: 15000 },},}مكافئ متغير البيئة: OPENCLAW_LOAD_SHELL_ENV=1
استبدال متغيرات البيئة في قيم التكوين
ارجع إلى متغيرات البيئة في أي قيمة سلسلة ضمن التكوين باستخدام ${VAR_NAME}:
{gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },}القواعد:
- تتم مطابقة الأسماء بالأحرف الكبيرة فقط:
[A-Z_][A-Z0-9_]* - المتغيرات الناقصة أو الفارغة تطلق خطأ عند وقت التحميل
- استخدم
$${VAR}للهروب والحصول على مخرج حرفي - يعمل داخل ملفات
$include - الاستبدال المضمن:
"${BASE}/v1"→"https://api.example.com/v1"
مراجع الأسرار (env، file، exec)
بالنسبة للحقول التي تدعم كائنات SecretRef، يمكنك استخدام:
{models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, },},skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, },},channels: { googlechat: { serviceAccountRef: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, },},}تفاصيل SecretRef (بما في ذلك secrets.providers لـ env/file/exec) موجودة في إدارة الأسرار.
تُسرد مسارات بيانات الاعتماد المدعومة في سطح بيانات اعتماد SecretRef.
راجع البيئة لمعرفة الأولوية والمصادر الكاملة.
المرجع الكامل
للمرجع الكامل حقلًا بحقل، راجع مرجع التكوين.
ذو صلة: أمثلة التكوين · مرجع التكوين · Doctor