بناء Plugins
توسّع Plugins قدرات OpenClaw بإمكانات جديدة: القنوات، وموفرو النماذج، والكلام، والنسخ الفوري، والصوت الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، وجلب الويب، والبحث على الويب، وأدوات الوكيل، أو أي مزيج منها. لا تحتاج إلى إضافة plugin الخاص بك إلى مستودع OpenClaw. انشره على ClawHub أو npm وسيقوم المستخدمون بتثبيته باستخدامopenclaw plugins install <package-name>. يحاول OpenClaw استخدام ClawHub أولًا ثم
يرجع تلقائيًا إلى npm.
المتطلبات الأساسية
- Node >= 22 ومدير حزم (npm أو pnpm)
- الإلمام بـ TypeScript (ESM)
- بالنسبة إلى plugins داخل المستودع: يجب أن يكون المستودع مستنسخًا وقد تم تشغيل
pnpm install
ما نوع plugin الذي تريده؟
Channel plugin
وصّل OpenClaw بمنصة مراسلة (Discord وIRC وغيرهما)
Provider plugin
أضف مزود نماذج (LLM أو proxy أو endpoint مخصص)
Tool / hook plugin
سجّل أدوات الوكيل أو event hooks أو الخدمات — تابع أدناه
createOptionalChannelSetupSurface(...) من
openclaw/plugin-sdk/channel-setup. فهو ينتج setup adapter + wizard
يعلن عن متطلب التثبيت ويفشل بشكل مغلق عند محاولات كتابة الإعدادات الفعلية
إلى أن يتم تثبيت plugin.
بدء سريع: Tool plugin
ينشئ هذا الدليل plugin بسيطًا يسجل أداة وكيل. أما Channel plugins وProvider plugins فلها أدلة مخصصة مرتبطة أعلاه.أنشئ الحزمة وmanifest
docs/snippets/plugin-publish/.اكتب نقطة الإدخال
definePluginEntry للـ plugins غير الخاصة بالقنوات. أما القنوات فاستخدم
defineChannelPluginEntry — راجع Channel Plugins.
وللاطلاع على الخيارات الكاملة لنقطة الإدخال، راجع Entry Points.قدرات plugin
يمكن لـ plugin واحد تسجيل أي عدد من القدرات عبر الكائنapi:
| القدرة | طريقة التسجيل | الدليل المفصل |
|---|---|---|
| الاستدلال النصي (LLM) | api.registerProvider(...) | Provider Plugins |
| CLI inference backend | 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.registerMusicGenerationProvider(...) | 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(...) | Internals |
| أوامر CLI فرعية | api.registerCli(...) | Entry Points |
config.*,
exec.approvals.*, wizard.*, update.*) محجوزة وتُحل دائمًا إلى
operator.admin، حتى إذا طلب plugin نطاقًا أضيق.
دلالات حرس الـ hook التي يجب وضعها في الاعتبار:
before_tool_call: { block: true }نهائية وتوقف المعالجات ذات الأولوية الأقل.before_tool_call: { block: false }تُعامل على أنها بدون قرار.before_tool_call: { requireApproval: true }توقف تنفيذ الوكيل مؤقتًا وتطلب موافقة المستخدم عبر طبقة exec approval، أو أزرار Telegram، أو تفاعلات Discord، أو الأمر/approveعلى أي قناة.before_install: { block: true }نهائية وتوقف المعالجات ذات الأولوية الأقل.before_install: { block: false }تُعامل على أنها بدون قرار.message_sending: { cancel: true }نهائية وتوقف المعالجات ذات الأولوية الأقل.message_sending: { cancel: false }تُعامل على أنها بدون قرار.
/approve كلًا من exec approvals وplugin approvals مع fallback
مقيّد: فعندما لا يتم العثور على معرّف exec approval، يعيد OpenClaw محاولة
المعرّف نفسه عبر plugin approvals. ويمكن ضبط تمرير plugin approval
بشكل مستقل عبر approvals.plugin في الإعدادات.
إذا كان من الضروري أن يكتشف منطق approval المخصص حالة fallback المقيّدة نفسها،
ففضّل استخدام isApprovalNotFoundError من openclaw/plugin-sdk/error-runtime
بدلًا من مطابقة سلاسل انتهاء صلاحية approval يدويًا.
راجع دلالات قرارات hook في نظرة عامة على SDK للتفاصيل.
تسجيل أدوات الوكيل
الأدوات هي دوال typed يمكن لـ LLM استدعاؤها. ويمكن أن تكون مطلوبة (متاحة دائمًا) أو اختيارية (اشتراك من المستخدم):- يجب ألا تتعارض أسماء الأدوات مع الأدوات الأساسية (يتم تخطي التعارضات)
- استخدم
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> موجودة
لصيانة plugins المضمّنة والتوافق، مثل
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. تبدو الوسوم التجريبية مثلv2026.3.N-beta.1. ويمكنك أيضًا تفعيل الإشعارات للحساب الرسمي لـ OpenClaw على X @openclaw للإعلانات الخاصة بالإصدارات. - اختبر plugin الخاص بك مقابل الوسم التجريبي بمجرد ظهوره. وعادةً ما تكون النافذة قبل الإصدار المستقر بضع ساعات فقط.
- انشر في سلسلة 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؛ أما التي لا تملك واحدًا فقد تُشحن على أي حال. يراقب المشرفون هذه السلاسل أثناء الاختبار التجريبي. - الصمت يعني أن كل شيء على ما يرام. وإذا فاتتك النافذة، فمن المرجح أن يصل إصلاحك في الدورة التالية.
الخطوات التالية
Channel Plugins
ابنِ Channel plugin للمراسلة
Provider Plugins
ابنِ Provider plugin للنماذج
SDK Overview
مرجع خريطة الاستيراد وAPI التسجيل
Runtime Helpers
TTS والبحث وsubagent عبر api.runtime
Testing
أدوات وأنماط الاختبار
Plugin Manifest
المرجع الكامل لمخطط manifest
ذو صلة
- بنية plugin — نظرة عميقة على البنية الداخلية
- نظرة عامة على SDK — مرجع Plugin SDK
- Manifest — تنسيق manifest الخاص بالـ plugin
- Channel Plugins — بناء Channel plugins
- Provider Plugins — بناء Provider plugins