Building Plugins
توسّع Plugins إمكانات OpenClaw بقدرات جديدة: القنوات، ومزوّدو النماذج، والنطق، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، وجلب الويب، والبحث على الويب، وأدوات الوكيل، أو أي مزيج منها. لا تحتاج إلى إضافة plugin الخاص بك إلى مستودع OpenClaw. انشره إلى ClawHub أو npm وسيقوم المستخدمون بالتثبيت باستخدامopenclaw plugins install <package-name>. يحاول OpenClaw استخدام ClawHub أولًا ثم
يعود إلى npm تلقائيًا.
المتطلبات المسبقة
- Node >= 22 ومدير حزم (npm أو pnpm)
- إلمام بـ TypeScript (ESM)
- بالنسبة إلى plugins داخل المستودع: يجب استنساخ المستودع وتشغيل
pnpm install
أي نوع من plugins؟
plugin قناة
صِل OpenClaw بمنصة مراسلة (Discord، IRC، إلخ)
plugin مزوّد
أضف مزوّد نماذج (LLM، أو proxy، أو نقطة نهاية مخصصة)
plugin أداة / hook
سجّل أدوات الوكيل، أو event hooks، أو الخدمات — تابع أدناه
createOptionalChannelSetupSurface(...) من
openclaw/plugin-sdk/channel-setup. حيث ينتج محول إعداد + زوج معالج
يعلن متطلب التثبيت ويفشل بشكل مغلق عند عمليات كتابة الإعدادات الحقيقية
إلى أن يتم تثبيت plugin.
بدء سريع: plugin أداة
ينشئ هذا الشرح plugin أدنى يسجل أداة وكيل. أما Plugins القنوات والمزوّدين فلها أدلة مخصصة مرتبطة أعلاه.أنشئ الحزمة وmanifest
docs/snippets/plugin-publish/.اكتب نقطة الدخول
definePluginEntry مع Plugins غير الخاصة بالقنوات. أما القنوات فاستخدم
defineChannelPluginEntry — راجع Channel Plugins.
وللحصول على خيارات نقاط الدخول الكاملة، راجع Entry Points.قدرات plugin
يمكن لـ plugin واحد تسجيل أي عدد من القدرات عبر الكائنapi:
| القدرة | طريقة التسجيل | الدليل التفصيلي |
|---|---|---|
| الاستدلال النصي (LLM) | api.registerProvider(...) | Provider Plugins |
| خلفية استدلال CLI | api.registerCliBackend(...) | CLI Backends |
| القناة / المراسلة | api.registerChannel(...) | Channel Plugins |
| النطق (TTS/STT) | api.registerSpeechProvider(...) | Provider Plugins |
| النسخ الفوري | api.registerRealtimeTranscriptionProvider(...) | Provider Plugins |
| الصوت الفوري | api.registerRealtimeVoiceProvider(...) | Provider Plugins |
| فهم الوسائط | api.registerMediaUnderstandingProvider(...) | Provider Plugins |
| توليد الصور | api.registerImageGenerationProvider(...) | Provider Plugins |
| توليد الفيديو | api.registerVideoGenerationProvider(...) | Provider Plugins |
| جلب الويب | api.registerWebFetchProvider(...) | Provider Plugins |
| البحث على الويب | api.registerWebSearchProvider(...) | Provider Plugins |
| أدوات الوكيل | api.registerTool(...) | أدناه |
| أوامر مخصصة | api.registerCommand(...) | Entry Points |
| event hooks | api.registerHook(...) | Entry Points |
| مسارات HTTP | api.registerHttpRoute(...) | الآليات الداخلية |
| أوامر CLI فرعية | api.registerCli(...) | Entry Points |
config.*،
وexec.approvals.*، وwizard.*، وupdate.*) محجوزة وتحل دائمًا إلى
operator.admin، حتى لو طلب plugin نطاقًا أضيق.
دلالات بوابات hooks التي يجب أخذها في الاعتبار:
before_tool_call: تكون{ block: true }نهائية وتوقف المعالجات ذات الأولوية الأدنى.before_tool_call: تُعامل{ block: false }على أنها بلا قرار.before_tool_call: تؤدي{ requireApproval: true }إلى إيقاف تنفيذ الوكيل مؤقتًا وتطلب موافقة المستخدم عبر واجهة موافقة exec أو أزرار Telegram أو تفاعلات Discord أو الأمر/approveعلى أي قناة.before_install: تكون{ block: true }نهائية وتوقف المعالجات ذات الأولوية الأدنى.before_install: تُعامل{ block: false }على أنها بلا قرار.message_sending: تكون{ cancel: true }نهائية وتوقف المعالجات ذات الأولوية الأدنى.message_sending: تُعامل{ cancel: false }على أنها بلا قرار.
/approve موافقات exec وplugin معًا عبر تراجع محدود: فعندما لا يتم العثور على معرّف موافقة exec، يعيد OpenClaw محاولة المعرّف نفسه عبر موافقات plugin. ويمكن إعداد إعادة توجيه موافقات plugin بشكل مستقل عبر approvals.plugin في الإعدادات.
إذا كانت البنية المخصصة للموافقات تحتاج إلى اكتشاف حالة التراجع المحدود نفسها،
فافضّل استخدام isApprovalNotFoundError من openclaw/plugin-sdk/error-runtime
بدلًا من مطابقة سلاسل انتهاء صلاحية الموافقة يدويًا.
راجع دلالات قرارات hooks في نظرة عامة على SDK للتفاصيل.
تسجيل أدوات الوكيل
الأدوات هي دوال Typed يمكن لـ LLM استدعاؤها. ويمكن أن تكون مطلوبة (متاحة دائمًا) أو اختيارية (اشتراك مستخدم):- يجب ألا تتعارض أسماء الأدوات مع أدوات core (يتم تخطي التعارضات)
- استخدم
optional: trueللأدوات ذات الآثار الجانبية أو التي تتطلب ملفات تنفيذية إضافية - يمكن للمستخدمين تمكين جميع أدوات plugin بإضافة معرّف plugin إلى
tools.allow
اصطلاحات الاستيراد
استورد دائمًا من المسارات المركزةopenclaw/plugin-sdk/<subpath>:
api.ts وruntime-api.ts) من أجل
الاستيرادات الداخلية — ولا تستورد plugin الخاص بك أبدًا عبر مسار SDK الخاص به.
بالنسبة إلى Provider Plugins، أبقِ المساعدات الخاصة بالمزوّد في ملفات barrel
عند جذر تلك الحزمة ما لم يكن الوصل عامًا حقًا. ومن الأمثلة المضمنة الحالية:
- Anthropic: مغلّفات بث Claude ومساعدات
service_tier/ beta - OpenAI: بُنّاة المزوّد، ومساعدات النموذج الافتراضي، ومزوّدو الوقت الفعلي
- OpenRouter: بنّاء المزوّد بالإضافة إلى مساعدات onboarding/config
openclaw/plugin-sdk/*.
لا تزال بعض وصلات المساعدة المولدة في openclaw/plugin-sdk/<bundled-id> موجودة من أجل
صيانة bundled-plugin والتوافق، مثل
plugin-sdk/feishu-setup أو plugin-sdk/zalo-setup. تعامل مع هذه
على أنها أسطح محجوزة، وليست النمط الافتراضي لـ Plugins الجهات الخارجية الجديدة.
قائمة التحقق قبل الإرسال
يحتوي package.json على بيانات
openclaw الوصفية الصحيحةيوجد manifest صالح في openclaw.plugin.json
تستخدم نقطة الدخول
defineChannelPluginEntry أو definePluginEntryتستخدم جميع الاستيرادات المسارات المركزة
plugin-sdk/<subpath>تستخدم الاستيرادات الداخلية وحدات محلية، لا عمليات استيراد ذاتية عبر SDK
نجحت الاختبارات (
pnpm test -- <bundled-plugin-root>/my-plugin/)نجح
pnpm check (لـ plugins داخل المستودع)اختبار الإصدارات التجريبية
- راقب وسوم إصدارات GitHub على openclaw/openclaw واشترك عبر
Watch>Releases. تبدو وسوم beta مثلv2026.3.N-beta.1. ويمكنك أيضًا تشغيل الإشعارات على الحساب الرسمي لـ OpenClaw على X @openclaw لإعلانات الإصدارات. - اختبر plugin الخاص بك مقابل وسم beta فور ظهوره. فالنافذة قبل الإصدار المستقر تكون عادةً بضع ساعات فقط.
- انشر في سلسلة plugin الخاصة بك في قناة Discord
plugin-forumبعد الاختبار مع عبارةall goodأو وصف ما الذي تعطل. وإذا لم تكن لديك سلسلة بعد، فأنشئ واحدة. - إذا تعطل شيء ما، فافتح issue جديدًا أو حدّث واحدًا بعنوان
Beta blocker: <plugin-name> - <summary>وطبّق الوسمbeta-blocker. وضع رابط issue في سلسلتك. - افتح PR إلى
mainبعنوانfix(<plugin-id>): beta blocker - <summary>واربط issue في كل من PR وسلسلة Discord. لا يستطيع المساهمون وضع وسوم على PRs، لذا يكون العنوان هو الإشارة الخاصة بـ PR للمشرفين والأتمتة. يتم دمج الأعطال الحاجزة التي لها PR؛ أما الأعطال الحاجزة التي بلا PR فقد تُشحن على أي حال. ويراقب المشرفون هذه السلاسل أثناء اختبار beta. - الصمت يعني أن كل شيء أخضر. وإذا فاتتك النافذة، فمن المحتمل أن يصل إصلاحك في الدورة التالية.
الخطوات التالية
Channel Plugins
ابنِ plugin قناة للمراسلة
Provider Plugins
ابنِ plugin مزوّد نماذج
SDK Overview
مرجع خريطة الاستيراد وAPI التسجيل
Runtime Helpers
TTS والبحث وsubagent عبر api.runtime
Testing
أدوات وأنماط الاختبار
Plugin Manifest
المرجع الكامل لمخطط manifest
ذو صلة
- بنية plugin — تعمق في البنية الداخلية
- نظرة عامة على SDK — مرجع Plugin SDK
- Manifest — تنسيق manifest الخاص بالplugin
- Channel Plugins — بناء plugins القنوات
- Provider Plugins — بناء plugins المزوّدين