الإضافات (الامتدادات)
البدء السريع (هل أنت جديد على الإضافات؟)
الإضافة هي مجرد وحدة شيفرة صغيرة توسّع OpenClaw بميزات إضافية (أوامر، أدوات، وGateway RPC). في معظم الأوقات، ستستخدم الإضافات عندما تريد ميزة غير مضمّنة بعد في نواة OpenClaw (أو عندما ترغب في إبقاء الميزات الاختيارية خارج التثبيت الرئيسي). المسار السريع:- انظر ما تم تحميله بالفعل:
- ثبّت إضافة رسمية (مثال: Voice Call):
- أعد تشغيل Gateway، ثم قم بالتهيئة ضمن
plugins.entries.<id>.config.
الإضافات المتاحة (الرسمية)
- Microsoft Teams متاح عبر الإضافة فقط اعتبارًا من 2026.1.15؛ ثبّت
@openclaw/msteamsإذا كنت تستخدم Teams. - Memory (Core) — إضافة بحث الذاكرة المجمّعة (مفعّلة افتراضيًا عبر
plugins.slots.memory) - Memory (LanceDB) — إضافة ذاكرة طويلة الأمد مجمّعة (استدعاء/التقاط تلقائي؛ اضبط
plugins.slots.memory = "memory-lancedb") - Voice Call —
@openclaw/voice-call - Zalo Personal —
@openclaw/zalouser - Matrix —
@openclaw/matrix - Nostr —
@openclaw/nostr - Zalo —
@openclaw/zalo - Microsoft Teams —
@openclaw/msteams - Google Antigravity OAuth (مصادقة الموفّر) — مضمّنة كـ
google-antigravity-auth(معطّلة افتراضيًا) - Gemini CLI OAuth (مصادقة الموفّر) — مضمّنة كـ
google-gemini-cli-auth(معطّلة افتراضيًا) - Qwen OAuth (مصادقة الموفّر) — مضمّنة كـ
qwen-portal-auth(معطّلة افتراضيًا) - Copilot Proxy (مصادقة الموفّر) — جسر محلي لـ VS Code Copilot Proxy؛ مميّز عن تسجيل الدخول المضمّن
github-copilotللجهاز (مضمّن، معطّل افتراضيًا)
- أساليب Gateway RPC
- معالجات Gateway HTTP
- أدوات الوكيل
- أوامر CLI
- خدمات تعمل في الخلفية
- تحقق اختياري من التهيئة
- Skills (بإدراج أدلة
skillsفي بيان الإضافة) - أوامر الردّ التلقائي (تُنفَّذ دون استدعاء وكيل الذكاء الاصطناعي)
مساعدات وقت التشغيل
يمكن للإضافات الوصول إلى بعض مساعدات النواة المختارة عبرapi.runtime. لتحويل النص إلى كلام للاتصال الهاتفي:
- يستخدم تهيئة النواة
messages.tts(OpenAI أو ElevenLabs). - يُرجِع مخزنًا صوتيًا PCM + معدل العيّنة. يجب على الإضافات إعادة أخذ العينات/الترميز للموفّرين.
- Edge TTS غير مدعوم للاتصال الهاتفي.
الاكتشاف والأولوية
يقوم OpenClaw بالمسح بالترتيب:- مسارات التهيئة
plugins.load.paths(ملف أو دليل)
- امتدادات مساحة العمل
<workspace>/.openclaw/extensions/*.ts<workspace>/.openclaw/extensions/*/index.ts
- الامتدادات العامة
~/.openclaw/extensions/*.ts~/.openclaw/extensions/*/index.ts
- الامتدادات المجمّعة (المشحوذة مع OpenClaw، معطّلة افتراضيًا)
<openclaw>/extensions/*
plugins.entries.<id>.enabled
أو openclaw plugins enable <id>. الإضافات المثبّتة تكون مفعّلة افتراضيًا،
لكن يمكن تعطيلها بالطريقة نفسها.
يجب أن تتضمن كل إضافة ملف openclaw.plugin.json في جذرها. إذا
أشار مسار إلى ملف، فإن جذر الإضافة هو دليل الملف ويجب أن يحتوي
على البيان.
إذا حُلَّت عدة إضافات إلى المعرّف نفسه، يفوز أول تطابق وفق الترتيب أعلاه
ويتم تجاهل النسخ ذات الأولوية الأدنى.
حِزم الحِزم (Package packs)
قد يتضمن دليل الإضافة ملفpackage.json مع openclaw.extensions:
name/<fileBase>.
إذا كانت إضافتك تستورد تبعيات npm، فقم بتثبيتها في ذلك الدليل بحيث
يتوفر node_modules (npm install / pnpm install).
ملاحظة أمنية: يقوم openclaw plugins install بتثبيت تبعيات الإضافات باستخدام
npm install --ignore-scripts (بدون نصوص دورة الحياة). حافظ على شجرة تبعيات الإضافة
“JS/TS خالصة” وتجنب الحزم التي تتطلب عمليات بناء postinstall.
بيانات فهرس القنوات
يمكن لإضافات القنوات الإعلان عن بيانات التهيئة الأولية عبرopenclaw.channel
وتلميحات التثبيت عبر openclaw.install. هذا يُبقي بيانات الفهرس في النواة خالية من البيانات.
مثال:
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (أو OPENCLAW_MPM_CATALOG_PATHS) إلى
ملف JSON واحد أو أكثر (مفصولة بفواصل/فواصل منقوطة/PATH). يجب أن يحتوي كل ملف
على { "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] }.
معرفات الاضافات
معرّفات الإضافات الافتراضية:- حِزم الحِزم:
package.jsonname - ملف مستقل: اسم قاعدة الملف (
~/.../voice-call.ts→voice-call)
id، يستخدمه OpenClaw لكنه يحذّر عندما لا يطابق
المعرّف المُهيّأ.
التهيئة
enabled: مفتاح التشغيل الرئيسي (الافتراضي: true)allow: قائمة السماح (اختيارية)deny: قائمة الحظر (اختيارية؛ الحظر يتغلّب)load.paths: ملفات/أدلة إضافات إضافيةentries.<id>: مفاتيح تشغيل/إيقاف لكل إضافة + التهيئة
- معرّفات إضافات غير معروفة في
entries،allow،deny، أوslotsهي أخطاء. - مفاتيح
channels.<id>غير المعروفة هي أخطاء ما لم يعلن بيان الإضافة معرّف القناة. - يتم التحقق من تهيئة الإضافة باستخدام JSON Schema المضمّن في
openclaw.plugin.json(configSchema). - إذا كانت الإضافة معطّلة، تُحفَظ تهيئتها ويُصدَر تحذير.
فتحات الإضافات (فئات حصرية)
بعض فئات الإضافات حصرية (نشطة واحدة فقط في الوقت نفسه). استخدمplugins.slots لاختيار الإضافة التي تملك الفتحة:
kind: "memory"، فسيتم تحميل المختارة فقط. الأخرى
تُعطَّل مع تشخيصات.
واجهة التحكم (المخطط + التسميات)
تستخدم واجهة التحكمconfig.schema (JSON Schema + uiHints) لعرض نماذج أفضل.
يعزّز OpenClaw uiHints في وقت التشغيل بناءً على الإضافات المكتشفة:
- يضيف تسميات لكل إضافة لـ
plugins.entries.<id>/.enabled/.config - يدمج تلميحات حقول التهيئة الاختيارية التي توفّرها الإضافات ضمن:
plugins.entries.<id>.config.<field>
uiHints إلى جانب JSON Schema في بيان الإضافة.
مثال:
CLI
plugins update يعمل فقط لتثبيتات npm المتتبَّعة ضمن plugins.installs.
يمكن للإضافات أيضًا تسجيل أوامر عليا خاصة بها (مثال: openclaw voicecall).
إضافة API (نظرة عامة)
تصدير الإضافات إما:- دالة:
(api) => { ... } - كائن:
{ id, name, configSchema, register(api) { ... } }
خطافات الإضافات
يمكن للإضافات شحن خطافات وتسجيلها في وقت التشغيل. يتيح ذلك تجميع أتمتة قائمة على الأحداث دون تثبيت حزمة خطافات منفصلة.مثال
- تتبع أدلة الخطافات البنية المعتادة للخطافات (
HOOK.md+handler.ts). - تظل قواعد أهلية الخطافات سارية (متطلبات نظام التشغيل/الثنائيات/البيئة/التهيئة).
- تظهر الخطافات المُدارة عبر الإضافات في
openclaw hooks listمعplugin:<id>. - لا يمكنك تمكين/تعطيل الخطافات المُدارة عبر الإضافات عبر
openclaw hooks؛ بدلاً من ذلك فعِّل/عطِّل الإضافة.
إضافات الموفّرين (مصادقة النماذج)
يمكن للإضافات تسجيل تدفقات مصادقة موفّر النماذج بحيث يمكن للمستخدمين تشغيل OAuth أو إعداد مفاتيح API داخل OpenClaw (دون الحاجة إلى سكربتات خارجية). سجّل موفّرًا عبرapi.registerProvider(...). يعرِض كل موفّر
طريقة مصادقة واحدة أو أكثر (OAuth، مفتاح API، رمز الجهاز، إلخ). تُغذّي هذه الطرق:
openclaw models auth login --provider <id> [--method <id>]
- يستقبل
runكائنProviderAuthContextمع مساعداتprompter،runtime،openUrl، وoauth.createVpsAwareHandlers. - أعد
configPatchعندما تحتاج إلى إضافة نماذج افتراضية أو تهيئة الموفّر. - أعد
defaultModelبحيث يتمكن--set-defaultمن تحديث افتراضيات الوكيل.
تسجيل قناة مراسلة
يمكن للإضافات تسجيل إضافات قنوات تتصرّف مثل القنوات المضمّنة (WhatsApp، Telegram، إلخ). تعيش تهيئة القناة ضمنchannels.<id> ويتم
التحقق منها بواسطة شيفرة إضافة القناة الخاصة بك.
- ضع التهيئة ضمن
channels.<id>(وليسplugins.entries). - يُستخدم
meta.labelللتسميات في قوائم CLI/واجهة المستخدم. - يضيف
meta.aliasesمعرّفات بديلة للتطبيع وإدخالات CLI. - يسرد
meta.preferOverمعرّفات القنوات التي يجب تخطي التمكين التلقائي عند تهيئة كليهما. - يتيح
meta.detailLabelوmeta.systemImageلواجهات المستخدم عرض تسميات/أيقونات قنوات أغنى.
كتابة قناة مراسلة جديدة (خطوة بخطوة)
استخدم هذا عندما تريد سطح دردشة جديد («قناة مراسلة»)، وليس موفّر نماذج. تقع مستندات موفّر النماذج ضمن/providers/*.
- اختر معرّفًا + شكل التهيئة
- تعيش جميع تهيئة القنوات ضمن
channels.<id>. - فضّل
channels.<id>.accounts.<accountId>لإعدادات الحسابات المتعددة.
- عرّف بيانات القناة الوصفية
- تتحكم
meta.label،meta.selectionLabel،meta.docsPath،meta.blurbفي قوائم CLI/واجهة المستخدم. - يجب أن يشير
meta.docsPathإلى صفحة توثيق مثل/channels/<id>. - يتيح
meta.preferOverلإضافة استبدال قناة أخرى (يفضّل التمكين التلقائي). - تُستخدم
meta.detailLabelوmeta.systemImageبواسطة واجهات المستخدم لنصوص/أيقونات التفاصيل.
- نفّذ المحوّلات المطلوبة
config.listAccountIds+config.resolveAccountcapabilities(أنواع الدردشة، الوسائط، الخيوط، إلخ)outbound.deliveryMode+outbound.sendText(للإرسال الأساسي)
- أضف محوّلات اختيارية حسب الحاجة
setup(معالج)،security(سياسة الرسائل الخاصة)،status(الصحة/التشخيص)gateway(بدء/إيقاف/تسجيل الدخول)،mentions،threading،streamingactions(إجراءات الرسائل)،commands(سلوك الأوامر الأصلي)
- سجّل القناة في إضافتك
api.registerChannel({ plugin })
plugins.load.paths)، أعد تشغيل Gateway،
ثم قم بتهيئة channels.<id> في تهيئتك.
أدوات الوكيل
انظر الدليل المخصّص: Plugin agent tools.تسجيل أسلوب Gateway RPC
تسجيل أوامر CLI
تسجيل أوامر الردّ التلقائي
يمكن للإضافات تسجيل أوامر شرطة مائلة مخصّصة تُنفَّذ دون استدعاء وكيل الذكاء الاصطناعي. هذا مفيد لأوامر التبديل، فحوصات الحالة، أو الإجراءات السريعة التي لا تحتاج إلى معالجة LLM.senderId: معرّف المُرسل (إن كان متاحًا)channel: القناة التي أُرسل فيها الأمرisAuthorizedSender: ما إذا كان المُرسل مستخدمًا مخوّلًاargs: الوسائط المُمرّرة بعد الأمر (إذا كانacceptsArgs: true)commandBody: نص الأمر الكاملconfig: تهيئة OpenClaw الحالية
name: اسم الأمر (دون البادئة/)description: نص المساعدة المعروض في قوائم الأوامرacceptsArgs: ما إذا كان الأمر يقبل وسيطات (الافتراضي: false). إذا كان false وتم تمرير وسيطات، فلن يتطابق الأمر وتسقط الرسالة إلى معالجات أخرىrequireAuth: ما إذا كان يتطلب مُرسلًا مخوّلًا (الافتراضي: true)handler: دالة تُرجِع{ text: string }(يمكن أن تكون async)
- تُعالَج أوامر الإضافات قبل الأوامر المضمّنة ووكيل الذكاء الاصطناعي
- تُسجَّل الأوامر عالميًا وتعمل عبر جميع القنوات
- أسماء الأوامر غير حسّاسة لحالة الأحرف (
/MyStatusيطابق/mystatus) - يجب أن تبدأ أسماء الأوامر بحرف وأن تحتوي فقط على أحرف وأرقام وواصلات وشرطات سفلية
- لا يمكن للإضافات تجاوز أسماء الأوامر المحجوزة (مثل
help،status،reset، إلخ) لا يمكن تجاوزها بواسطة الإضافات لا يمكن تجاوزها بواسطة الإضافات - سيؤدي تسجيل أوامر مكرّرة عبر إضافات متعددة إلى الفشل مع خطأ تشخيصي
تسجيل خدمات تعمل في الخلفية
اتفاقيات التسمية
- أساليب Gateway:
pluginId.action(مثال:voicecall.status) - الأدوات:
snake_case(مثال:voice_call) - أوامر CLI: kebab أو camel، لكن تجنّب التعارض مع أوامر النواة
Skills
يمكن للإضافات شحن Skill في المستودع (skills/<name>/SKILL.md).
قم بتمكينه عبر plugins.entries.<id>.enabled (أو بوابات تهيئة أخرى) وتأكد
من وجوده في مواقع Skills لمساحة العمل/الإدارة.
التوزيع (npm)
التغليف الموصى به:- الحزمة الرئيسية:
openclaw(هذا المستودع) - الإضافات: حزم npm منفصلة ضمن
@openclaw/*(مثال:@openclaw/voice-call)
- يجب أن يتضمن
package.jsonللإضافةopenclaw.extensionsمع ملف إدخال واحد أو أكثر. - يمكن أن تكون ملفات الإدخال
.jsأو.ts(يحمل jiti TypeScript في وقت التشغيل). - يستخدم
openclaw plugins install <npm-spec>npm pack، ويستخرج إلى~/.openclaw/extensions/<id>/، ويمكّنه في التهيئة. - ثبات مفاتيح التهيئة: تُطبَّع الحزم ذات النطاق إلى المعرّف غير ذي النطاق لـ
plugins.entries.*.
مثال إضافة: Voice Call
يتضمن هذا المستودع إضافة مكالمات صوتية (Twilio أو بديل السجل):- المصدر:
extensions/voice-call - Skill:
skills/voice-call - CLI:
openclaw voicecall start|status - الأداة:
voice_call - RPC:
voicecall.start،voicecall.status - التهيئة (twilio):
provider: "twilio"+twilio.accountSid/authToken/from(اختياريstatusCallbackUrl،twimlUrl) - التهيئة (dev):
provider: "log"(بدون شبكة)
extensions/voice-call/README.md للإعداد والاستخدام.
ملاحظات السلامة
تعمل الإضافات داخل العملية مع Gateway. اعتبرها شيفرة موثوقة:- ثبّت فقط الإضافات التي تثق بها.
- فضّل قوائم السماح
plugins.allow. - أعد تشغيل Gateway بعد التغييرات.
اختبار الإضافات
يمكن للإضافات (وينبغي لها) شحن اختبارات:- يمكن للإضافات داخل المستودع الاحتفاظ باختبارات Vitest ضمن
src/**(مثال:src/plugins/voice-call.plugin.test.ts). - يجب على الإضافات المنشورة بشكل منفصل تشغيل CI خاص بها (lint/build/test) والتحقق من أن
openclaw.extensionsيشير إلى نقطة الإدخال المبنية (dist/index.js).