From 481b42254621f281753be07f7196a582c4e29eb0 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Thu, 23 Apr 2026 14:05:47 +0000 Subject: [PATCH] chore(i18n): refresh ar translations --- docs/ar/channels/discord.md | 598 ++++---- docs/ar/channels/irc.md | 68 +- docs/ar/channels/matrix.md | 666 +++++---- docs/ar/channels/mattermost.md | 325 +++-- docs/ar/channels/synology-chat.md | 100 +- docs/ar/channels/telegram.md | 695 ++++------ docs/ar/ci.md | 121 +- docs/ar/cli/gateway.md | 268 ++-- docs/ar/cli/index.md | 1621 +--------------------- docs/ar/cli/plugins.md | 292 ++-- docs/ar/cli/proxy.md | 49 + docs/ar/cli/status.md | 39 +- docs/ar/concepts/active-memory.md | 788 ++++------- docs/ar/concepts/qa-e2e-automation.md | 285 ++-- docs/ar/gateway/configuration.md | 513 +++---- docs/ar/gateway/openshell.md | 181 ++- docs/ar/gateway/pairing.md | 157 ++- docs/ar/gateway/security/audit-checks.md | 137 ++ docs/ar/gateway/security/index.md | 1307 ++++++++--------- docs/ar/help/testing.md | 1195 ++++++++-------- docs/ar/plugins/architecture.md | 1565 ++++++++++----------- docs/ar/plugins/bundles.md | 270 ++-- docs/ar/plugins/codex-harness.md | 285 ++-- docs/ar/plugins/manifest.md | 658 ++++----- docs/ar/plugins/sdk-setup.md | 355 ++--- docs/ar/providers/anthropic.md | 130 +- docs/ar/providers/bedrock-mantle.md | 110 +- docs/ar/providers/lmstudio.md | 66 +- docs/ar/providers/moonshot.md | 157 +-- docs/ar/providers/openai.md | 393 ++++-- docs/ar/reference/test.md | 95 +- docs/ar/tools/image-generation.md | 189 +-- docs/ar/tools/plugin.md | 277 ++-- docs/ar/tools/slash-commands.md | 353 ++--- docs/ar/tools/thinking.md | 168 +-- docs/ar/web/control-ui.md | 371 +++-- 36 files changed, 6480 insertions(+), 8367 deletions(-) create mode 100644 docs/ar/cli/proxy.md create mode 100644 docs/ar/gateway/security/audit-checks.md diff --git a/docs/ar/channels/discord.md b/docs/ar/channels/discord.md index cad343169..13490a384 100644 --- a/docs/ar/channels/discord.md +++ b/docs/ar/channels/discord.md @@ -1,74 +1,74 @@ --- read_when: - العمل على ميزات قناة Discord -summary: حالة دعم Discord bot وإمكاناته وإعداده +summary: حالة دعم بوت Discord، والقدرات، والإعدادات title: Discord x-i18n: - generated_at: "2026-04-23T07:18:33Z" + generated_at: "2026-04-23T13:57:58Z" model: gpt-5.4 provider: openai - source_hash: 0bee2c419651701f7ab57e46a4c0c473c83596eb9bd2156bac3c6117513236ab + source_hash: 1160a0b221bc3251722a81c00c65ee7c2001efce345248727f1f3c8580a0e953 source_path: channels/discord.md workflow: 15 --- # Discord (Bot API) -الحالة: جاهز للرسائل الخاصة وقنوات الخوادم عبر بوابة Discord الرسمية. +الحالة: جاهز للرسائل الخاصة والقنوات داخل الخوادم عبر بوابة Discord الرسمية. - تستخدم الرسائل الخاصة في Discord وضع الاقتران افتراضيًا. + تُستخدم الرسائل الخاصة في Discord افتراضيًا في وضع الاقتران. - سلوك الأوامر الأصلي وكتالوج الأوامر. + سلوك الأوامر الأصلي وفهرس الأوامر. - التشخيصات عبر القنوات وتدفق الإصلاح. + التشخيص عبر القنوات ومسار الإصلاح. ## الإعداد السريع -ستحتاج إلى إنشاء تطبيق جديد يتضمن bot، وإضافة bot إلى خادمك، ثم إقرانه مع OpenClaw. نوصي بإضافة bot إلى خادمك الخاص. إذا لم يكن لديك واحد بعد، [فأنشئ واحدًا أولًا](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (اختر **Create My Own > For me and my friends**). +ستحتاج إلى إنشاء تطبيق جديد يتضمن بوتًا، ثم إضافة البوت إلى خادمك، ثم إقرانه مع OpenClaw. نوصي بإضافة البوت إلى خادمك الخاص. إذا لم يكن لديك خادم بعد، [فأنشئ واحدًا أولًا](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (اختر **Create My Own > For me and my friends**). - + انتقل إلى [Discord Developer Portal](https://discord.com/developers/applications) وانقر على **New Application**. امنحه اسمًا مثل "OpenClaw". انقر على **Bot** في الشريط الجانبي. اضبط **Username** على الاسم الذي تطلقه على وكيل OpenClaw الخاص بك. - - وأنت لا تزال في صفحة **Bot**، مرر لأسفل إلى **Privileged Gateway Intents** وقم بتمكين ما يلي: + + لا تزال في صفحة **Bot**، مرّر لأسفل إلى **Privileged Gateway Intents** وفعّل: - **Message Content Intent** (مطلوب) - - **Server Members Intent** (موصى به؛ ومطلوب لقوائم السماح الخاصة بالأدوار ولمطابقة الأسماء مع المعرّفات) + - **Server Members Intent** (موصى به؛ ومطلوب لقوائم السماح المستندة إلى الأدوار ولمطابقة الاسم بالمعرّف) - **Presence Intent** (اختياري؛ مطلوب فقط لتحديثات الحالة) - - مرر للأعلى مرة أخرى في صفحة **Bot** وانقر على **Reset Token**. + + مرّر مرة أخرى إلى أعلى صفحة **Bot** وانقر على **Reset Token**. - رغم الاسم، فإن هذا يُنشئ أول رمز مميز لك — لا تتم «إعادة تعيين» أي شيء. + رغم التسمية، فإن هذا ينشئ أول رمز لك — ولا تتم «إعادة تعيين» أي شيء. - انسخ الرمز المميز واحفظه في مكان ما. هذا هو **Bot Token** الخاص بك وستحتاج إليه بعد قليل. + انسخ الرمز واحفظه في مكان ما. هذا هو **Bot Token** الخاص بك وستحتاج إليه بعد قليل. - - انقر على **OAuth2** في الشريط الجانبي. ستنشئ رابط دعوة بالأذونات الصحيحة لإضافة bot إلى خادمك. + + انقر على **OAuth2** في الشريط الجانبي. ستنشئ رابط دعوة بالأذونات الصحيحة لإضافة البوت إلى خادمك. - مرر لأسفل إلى **OAuth2 URL Generator** وقم بتمكين: + مرّر لأسفل إلى **OAuth2 URL Generator** وفعّل: - `bot` - `applications.commands` - سيظهر قسم **Bot Permissions** أدناه. قم بتمكين ما يلي على الأقل: + سيظهر قسم **Bot Permissions** بالأسفل. فعّل على الأقل: **General Permissions** - View Channels @@ -79,31 +79,31 @@ x-i18n: - Attach Files - Add Reactions (اختياري) - هذه هي المجموعة الأساسية لقنوات النص العادية. إذا كنت تخطط للنشر في سلاسل Discord، بما في ذلك تدفقات عمل قنوات المنتدى أو الوسائط التي تُنشئ سلسلة أو تتابعها، فقم أيضًا بتمكين **Send Messages in Threads**. - انسخ الرابط الذي تم إنشاؤه في الأسفل، والصقه في المتصفح، وحدد خادمك، ثم انقر **Continue** للاتصال. ينبغي الآن أن ترى bot الخاص بك في خادم Discord. + هذه هي المجموعة الأساسية للقنوات النصية العادية. إذا كنت تخطط للنشر في سلاسل Discord، بما في ذلك سير العمل في قنوات المنتدى أو الوسائط التي تنشئ سلسلة أو تتابعها، ففعّل أيضًا **Send Messages in Threads**. + انسخ الرابط الذي تم إنشاؤه في الأسفل، والصقه في المتصفح، واختر خادمك، ثم انقر على **Continue** للاتصال. ينبغي الآن أن ترى البوت في خادم Discord. - - بالعودة إلى تطبيق Discord، تحتاج إلى تمكين وضع المطوّر حتى تتمكن من نسخ المعرّفات الداخلية. + + بالعودة إلى تطبيق Discord، تحتاج إلى تفعيل Developer Mode حتى تتمكن من نسخ المعرّفات الداخلية. 1. انقر على **User Settings** (أيقونة الترس بجوار صورتك الرمزية) → **Advanced** → فعّل **Developer Mode** 2. انقر بزر الماوس الأيمن على **أيقونة الخادم** في الشريط الجانبي → **Copy Server ID** 3. انقر بزر الماوس الأيمن على **صورتك الرمزية** → **Copy User ID** - احفظ **Server ID** و**User ID** بجانب Bot Token — سترسل الثلاثة جميعًا إلى OpenClaw في الخطوة التالية. + احفظ **Server ID** و**User ID** إلى جانب Bot Token — سترسل الثلاثة جميعًا إلى OpenClaw في الخطوة التالية. - لكي يعمل الاقتران، يجب أن يسمح Discord لـ bot بإرسال رسالة خاصة إليك. انقر بزر الماوس الأيمن على **أيقونة الخادم** → **Privacy Settings** → فعّل **Direct Messages**. + لكي يعمل الاقتران، يجب أن يسمح Discord للبوت بإرسال رسالة خاصة إليك. انقر بزر الماوس الأيمن على **أيقونة الخادم** → **Privacy Settings** → فعّل **Direct Messages**. - يتيح هذا لأعضاء الخادم (بما في ذلك bots) إرسال رسائل خاصة إليك. أبقِ هذا مفعّلًا إذا كنت تريد استخدام الرسائل الخاصة في Discord مع OpenClaw. إذا كنت تخطط لاستخدام قنوات الخادم فقط، فيمكنك تعطيل الرسائل الخاصة بعد الاقتران. + يتيح هذا لأعضاء الخادم (بمن فيهم البوتات) إرسال رسائل خاصة إليك. أبقِ هذا الخيار مفعّلًا إذا كنت تريد استخدام الرسائل الخاصة في Discord مع OpenClaw. وإذا كنت تخطط لاستخدام قنوات الخادم فقط، فيمكنك تعطيل الرسائل الخاصة بعد الاقتران. - - إن رمز Discord bot المميز سرّي (مثل كلمة المرور). عيّنه على الجهاز الذي يشغّل OpenClaw قبل مراسلة وكيلك. + + رمز بوت Discord الخاص بك سرّي (مثل كلمة المرور). اضبطه على الجهاز الذي يشغّل OpenClaw قبل مراسلة وكيلك. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -113,20 +113,20 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - إذا كان OpenClaw يعمل بالفعل كخدمة في الخلفية، فأعد تشغيله عبر تطبيق OpenClaw على Mac أو عن طريق إيقاف عملية `openclaw gateway run` ثم تشغيلها مجددًا. + إذا كان OpenClaw يعمل بالفعل كخدمة في الخلفية، فأعد تشغيله عبر تطبيق OpenClaw على Mac أو عبر إيقاف عملية `openclaw gateway run` ثم تشغيلها من جديد. - + تحدّث مع وكيل OpenClaw الخاص بك على أي قناة موجودة بالفعل (مثل Telegram) وأخبره بذلك. إذا كانت Discord هي قناتك الأولى، فاستخدم تبويب CLI / config بدلًا من ذلك. - > "لقد قمت بالفعل بتعيين رمز Discord bot المميز في الإعدادات. يُرجى إكمال إعداد Discord باستخدام User ID `` وServer ID ``." + > "لقد ضبطت بالفعل رمز بوت Discord في الإعدادات. يُرجى إكمال إعداد Discord باستخدام User ID `` وServer ID ``." - - إذا كنت تفضّل الإعداد المعتمد على الملفات، فاضبط ما يلي: + + إذا كنت تفضّل الإعداد القائم على الملفات، فاضبط: ```json5 { @@ -143,7 +143,7 @@ openclaw gateway } ``` - الاحتياط إلى متغير البيئة للحساب الافتراضي: + الاحتياط البيئي للحساب الافتراضي: ```bash DISCORD_BOT_TOKEN=... @@ -157,10 +157,10 @@ DISCORD_BOT_TOKEN=... - انتظر حتى تعمل Gateway، ثم أرسل رسالة خاصة إلى bot في Discord. سيرد برمز اقتران. + انتظر حتى تعمل البوابة، ثم أرسل رسالة خاصة إلى البوت على Discord. سيرد عليك برمز اقتران. - + أرسل رمز الاقتران إلى وكيلك على قناتك الحالية: > "وافق على رمز اقتران Discord هذا: ``" @@ -177,27 +177,27 @@ openclaw pairing approve discord تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. - ينبغي الآن أن تتمكن من الدردشة مع وكيلك في Discord عبر الرسائل الخاصة. + ينبغي الآن أن تكون قادرًا على التحدث مع وكيلك في Discord عبر الرسائل الخاصة. -يعتمد حلّ الرمز المميز على الحساب. قيم الرمز المميز في الإعدادات تتغلب على الاحتياط إلى متغيرات البيئة. لا يُستخدم `DISCORD_BOT_TOKEN` إلا للحساب الافتراضي. -بالنسبة إلى الاستدعاءات الصادرة المتقدمة (أداة الرسائل/إجراءات القنوات)، يتم استخدام `token` صريح لكل استدعاء لذلك الاستدعاء. ينطبق هذا على إجراءات الإرسال وإجراءات القراءة/الفحص مثل read/search/fetch/thread/pins/permissions. ولا تزال إعدادات سياسة الحساب/إعادة المحاولة تأتي من الحساب المحدد في اللقطة النشطة لوقت التشغيل. +تحليل الرمز يراعي الحساب. قيم الرمز الموجودة في الإعدادات تتقدّم على الاحتياط البيئي. لا يُستخدم `DISCORD_BOT_TOKEN` إلا للحساب الافتراضي. +وبالنسبة للاستدعاءات الصادرة المتقدمة (أداة الرسائل/إجراءات القناة)، يُستخدم `token` صريح لكل استدعاء لذلك الاستدعاء. ينطبق هذا على إجراءات الإرسال والقراءة/الفحص مثل read/search/fetch/thread/pins/permissions. وتظل إعدادات سياسة الحساب/إعادة المحاولة مأخوذة من الحساب المحدد في اللقطة النشطة لوقت التشغيل. -## موصى به: إعداد مساحة عمل للخادم +## موصى به: إعداد مساحة عمل على الخادم -بمجرد أن تعمل الرسائل الخاصة، يمكنك إعداد خادم Discord الخاص بك كمساحة عمل كاملة حيث تحصل كل قناة على جلسة وكيل خاصة بها مع سياقها الخاص. يُوصى بذلك للخوادم الخاصة التي تكون بينك وبين bot فقط. +بمجرد أن تعمل الرسائل الخاصة، يمكنك إعداد خادم Discord الخاص بك كمساحة عمل كاملة بحيث تحصل كل قناة على جلسة وكيل مستقلة بسياقها الخاص. يوصى بهذا للخوادم الخاصة التي تضمك أنت والبوت فقط. - - يتيح هذا لوكيلك الرد في أي قناة على خادمك، وليس في الرسائل الخاصة فقط. + + يتيح هذا لوكيلك الرد في أي قناة على خادمك، وليس فقط في الرسائل الخاصة. - - > "أضف Server ID الخاص بي في Discord وهو `` إلى قائمة سماح الخوادم" + + > "أضف Server ID الخاص بي في Discord `` إلى قائمة السماح الخاصة بالخوادم" @@ -222,11 +222,11 @@ openclaw pairing approve discord - - افتراضيًا، لا يرد وكيلك في قنوات الخوادم إلا عند الإشارة إليه باستخدام @mention. بالنسبة إلى خادم خاص، ستحتاج على الأرجح إلى أن يرد على كل رسالة. + + افتراضيًا، لا يرد وكيلك في قنوات الخادم إلا عند الإشارة إليه عبر @mention. بالنسبة إلى خادم خاص، فغالبًا ستريد أن يرد على كل رسالة. - + > "اسمح لوكيلي بالرد على هذا الخادم دون الحاجة إلى @mentioned" @@ -251,81 +251,81 @@ openclaw pairing approve discord - - افتراضيًا، يتم تحميل الذاكرة طويلة الأمد (`MEMORY.md`) فقط في جلسات الرسائل الخاصة. لا تقوم قنوات الخادم بتحميل `MEMORY.md` تلقائيًا. + + افتراضيًا، لا يتم تحميل الذاكرة طويلة الأمد (`MEMORY.md`) إلا في جلسات الرسائل الخاصة. ولا يتم تحميل `MEMORY.md` تلقائيًا في قنوات الخادم. - + > "عندما أطرح أسئلة في قنوات Discord، استخدم memory_search أو memory_get إذا كنت بحاجة إلى سياق طويل الأمد من `MEMORY.md`." - - إذا كنت بحاجة إلى سياق مشترك في كل قناة، فضع التعليمات الثابتة في `AGENTS.md` أو `USER.md` (يتم حقنهما في كل جلسة). واحتفظ بالملاحظات طويلة الأمد في `MEMORY.md`، واطلبها عند الحاجة باستخدام أدوات الذاكرة. + + إذا كنت تحتاج إلى سياق مشترك في كل قناة، فضع التعليمات الثابتة في `AGENTS.md` أو `USER.md` (إذ يتم حقنهما في كل جلسة). واحتفظ بالملاحظات طويلة الأمد في `MEMORY.md` وادخل إليها عند الطلب باستخدام أدوات الذاكرة. -أنشئ الآن بعض القنوات على خادم Discord الخاص بك وابدأ الدردشة. يمكن لوكيلك رؤية اسم القناة، وتحصل كل قناة على جلسة معزولة خاصة بها — لذا يمكنك إعداد `#coding` أو `#home` أو `#research` أو أي شيء يناسب سير عملك. +أنشئ الآن بعض القنوات على خادم Discord وابدأ الدردشة. يستطيع وكيلك رؤية اسم القناة، وتحصل كل قناة على جلسة مستقلة خاصة بها — لذا يمكنك إعداد `#coding` أو `#home` أو `#research` أو أي شيء يناسب سير عملك. ## نموذج وقت التشغيل -- تتولى Gateway اتصال Discord. -- توجيه الردود حتمي: الرسائل الواردة من Discord يعود الرد عليها إلى Discord. -- افتراضيًا (`session.dmScope=main`)، تشارك الدردشات المباشرة الجلسة الرئيسية للوكيل (`agent:main:main`). -- تكون قنوات الخادم مفاتيح جلسات معزولة (`agent::discord:channel:`). -- يتم تجاهل الرسائل الخاصة الجماعية افتراضيًا (`channels.discord.dm.groupEnabled=false`). -- تعمل أوامر الشرطة المائلة الأصلية في جلسات أوامر معزولة (`agent::discord:slash:`)، مع الاستمرار في تمرير `CommandTargetSessionKey` إلى جلسة المحادثة الموجّهة. +- تدير Gateway اتصال Discord. +- توجيه الردود حتمي: الرسائل الواردة من Discord يُرد عليها في Discord. +- افتراضيًا (`session.dmScope=main`)، تشارك المحادثات المباشرة الجلسة الرئيسية للوكيل (`agent:main:main`). +- قنوات الخادم تستخدم مفاتيح جلسات معزولة (`agent::discord:channel:`). +- تُتجاهل الرسائل الخاصة الجماعية افتراضيًا (`channels.discord.dm.groupEnabled=false`). +- تعمل أوامر الشرطة المائلة الأصلية ضمن جلسات أوامر معزولة (`agent::discord:slash:`)، مع الاحتفاظ بـ `CommandTargetSessionKey` لجلسة المحادثة الموجّهة. ## قنوات المنتدى -لا تقبل قنوات المنتدى والوسائط في Discord إلا المشاركات ضمن السلاسل. يدعم OpenClaw طريقتين لإنشائها: +لا تقبل قنوات المنتدى والوسائط في Discord إلا المنشورات ضمن سلاسل. يدعم OpenClaw طريقتين لإنشائها: - أرسل رسالة إلى أصل المنتدى (`channel:`) لإنشاء سلسلة تلقائيًا. يستخدم عنوان السلسلة أول سطر غير فارغ من رسالتك. -- استخدم `openclaw message thread create` لإنشاء سلسلة مباشرة. لا تمرر `--message-id` لقنوات المنتدى. +- استخدم `openclaw message thread create` لإنشاء سلسلة مباشرة. لا تمرّر `--message-id` لقنوات المنتدى. مثال: الإرسال إلى أصل المنتدى لإنشاء سلسلة ```bash openclaw message send --channel discord --target channel: \ - --message "عنوان الموضوع\nنص المشاركة" + --message "Topic title\nBody of the post" ``` مثال: إنشاء سلسلة منتدى بشكل صريح ```bash openclaw message thread create --channel discord --target channel: \ - --thread-name "عنوان الموضوع" --message "نص المشاركة" + --thread-name "Topic title" --message "Body of the post" ``` -لا تقبل أصول المنتديات مكونات Discord. إذا كنت بحاجة إلى مكونات، فأرسل إلى السلسلة نفسها (`channel:`). +لا تقبل أصول المنتديات مكوّنات Discord. إذا كنت بحاجة إلى مكوّنات، فأرسل إلى السلسلة نفسها (`channel:`). -## المكونات التفاعلية +## المكوّنات التفاعلية -يدعم OpenClaw حاويات المكونات v2 في Discord لرسائل الوكيل. استخدم أداة الرسائل مع حمولة `components`. تُوجَّه نتائج التفاعل مرة أخرى إلى الوكيل كرسائل واردة عادية وتتبع إعدادات Discord الحالية لـ `replyToMode`. +يدعم OpenClaw حاويات المكوّنات v2 في Discord لرسائل الوكيل. استخدم أداة الرسائل مع حمولة `components`. تُوجَّه نتائج التفاعل مرة أخرى إلى الوكيل كرسائل واردة عادية، وتتبع إعدادات Discord الحالية في `replyToMode`. الكتل المدعومة: -- `text` و`section` و`separator` و`actions` و`media-gallery` و`file` +- `text`, `section`, `separator`, `actions`, `media-gallery`, `file` - تسمح صفوف الإجراءات بما يصل إلى 5 أزرار أو قائمة تحديد واحدة -- أنواع التحديد: `string` و`user` و`role` و`mentionable` و`channel` +- أنواع التحديد: `string`, `user`, `role`, `mentionable`, `channel` -افتراضيًا، تكون المكونات للاستخدام مرة واحدة. اضبط `components.reusable=true` للسماح باستخدام الأزرار والقوائم والنماذج عدة مرات حتى تنتهي صلاحيتها. +افتراضيًا، تكون المكوّنات للاستخدام مرة واحدة. اضبط `components.reusable=true` للسماح باستخدام الأزرار والقوائم والنماذج عدة مرات حتى انتهاء صلاحيتها. -لتقييد من يمكنه النقر على زر، اضبط `allowedUsers` على ذلك الزر (معرّفات مستخدمي Discord أو العلامات أو `*`). عند ضبط ذلك، يتلقى المستخدمون غير المطابقين رفضًا مؤقتًا مرئيًا لهم فقط. +لتقييد من يمكنه النقر على زر، اضبط `allowedUsers` لذلك الزر (معرّفات مستخدمي Discord أو العلامات أو `*`). وعند تهيئته، يتلقى المستخدمون غير المطابقين رفضًا سريع الزوال. -يفتح الأمران `/model` و`/models` أداة اختيار تفاعلية للنموذج تتضمن قوائم منسدلة لمزود النموذج والنموذج نفسه مع خطوة Submit. ما لم يكن `commands.modelsWrite=false`، يدعم `/models add` أيضًا إضافة إدخال مزود/نموذج جديد من الدردشة، وتظهر النماذج المضافة حديثًا دون إعادة تشغيل Gateway. يكون رد أداة الاختيار مؤقتًا ومرئيًا فقط للمستخدم الذي استدعاه. +يفتح الأمران `/model` و`/models` منتقي نماذج تفاعليًا يتضمن قوائم منسدلة لمزوّد الخدمة والنموذج بالإضافة إلى خطوة Submit. ما لم يكن `commands.modelsWrite=false`، يدعم `/models add` أيضًا إضافة إدخال مزوّد/نموذج جديد من الدردشة، وتظهر النماذج المضافة حديثًا دون الحاجة إلى إعادة تشغيل البوابة. يكون رد المنتقي سريع الزوال ولا يمكن استخدامه إلا من قبل المستخدم الذي استدعاه. مرفقات الملفات: - يجب أن تشير كتل `file` إلى مرجع مرفق (`attachment://`) -- وفّر المرفق عبر `media` أو `path` أو `filePath` (ملف واحد)؛ واستخدم `media-gallery` لعدة ملفات -- استخدم `filename` لتجاوز اسم الرفع عندما ينبغي أن يطابق مرجع المرفق +- وفّر المرفق عبر `media`/`path`/`filePath` (ملف واحد)؛ واستخدم `media-gallery` لعدة ملفات +- استخدم `filename` لتجاوز اسم الرفع عندما يجب أن يطابق مرجع المرفق النماذج المنبثقة: - أضف `components.modal` بما يصل إلى 5 حقول -- أنواع الحقول: `text` و`checkbox` و`radio` و`select` و`role-select` و`user-select` +- أنواع الحقول: `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - يضيف OpenClaw زر تشغيل تلقائيًا مثال: @@ -335,45 +335,45 @@ openclaw message thread create --channel discord --target channel: \ channel: "discord", action: "send", to: "channel:123456789012345678", - message: "نص احتياطي اختياري", + message: "Optional fallback text", components: { reusable: true, - text: "اختر مسارًا", + text: "Choose a path", blocks: [ { type: "actions", buttons: [ { - label: "موافقة", + label: "Approve", style: "success", allowedUsers: ["123456789012345678"], }, - { label: "رفض", style: "danger" }, + { label: "Decline", style: "danger" }, ], }, { type: "actions", select: { type: "string", - placeholder: "اختر خيارًا", + placeholder: "Pick an option", options: [ - { label: "الخيار A", value: "a" }, - { label: "الخيار B", value: "b" }, + { label: "Option A", value: "a" }, + { label: "Option B", value: "b" }, ], }, }, ], modal: { - title: "التفاصيل", - triggerLabel: "فتح النموذج", + title: "Details", + triggerLabel: "Open form", fields: [ - { type: "text", label: "مقدم الطلب" }, + { type: "text", label: "Requester" }, { type: "select", - label: "الأولوية", + label: "Priority", options: [ - { label: "منخفضة", value: "low" }, - { label: "مرتفعة", value: "high" }, + { label: "Low", value: "low" }, + { label: "High", value: "high" }, ], }, ], @@ -395,23 +395,23 @@ openclaw message thread create --channel discord --target channel: \ إذا لم تكن سياسة الرسائل الخاصة مفتوحة، فسيتم حظر المستخدمين غير المعروفين (أو مطالبتهم بالاقتران في وضع `pairing`). - أولوية الحسابات المتعددة: + أسبقية تعدد الحسابات: - ينطبق `channels.discord.accounts.default.allowFrom` على الحساب `default` فقط. - - ترث الحسابات المسماة `channels.discord.allowFrom` عندما لا يكون `allowFrom` الخاص بها معيّنًا. - - لا ترث الحسابات المسماة `channels.discord.accounts.default.allowFrom`. + - ترث الحسابات المسمّاة `channels.discord.allowFrom` عندما لا يكون `allowFrom` الخاص بها مضبوطًا. + - لا ترث الحسابات المسمّاة `channels.discord.accounts.default.allowFrom`. تنسيق هدف الرسائل الخاصة للتسليم: - `user:` - - إشارة `<@id>` + - الإشارة `<@id>` - تكون المعرّفات الرقمية المجردة ملتبسة ويتم رفضها ما لم يتم توفير نوع هدف صريح للمستخدم/القناة. + المعرّفات الرقمية المجردة ملتبسة ويتم رفضها ما لم يتم توفير نوع هدف مستخدم/قناة صريح. - - يتم التحكم في التعامل مع الخوادم عبر `channels.discord.groupPolicy`: + + يتم التحكم في التعامل مع الخوادم بواسطة `channels.discord.groupPolicy`: - `open` - `allowlist` @@ -421,12 +421,12 @@ openclaw message thread create --channel discord --target channel: \ سلوك `allowlist`: - - يجب أن يطابق الخادم `channels.discord.guilds` (يُفضَّل `id`، ويُقبل الاسم المختصر) - - قوائم سماح اختيارية للمرسلين: `users` (يوصى بالمعرّفات الثابتة) و`roles` (معرّفات الأدوار فقط)؛ إذا تم إعداد أي منهما، فسيُسمح للمرسلين عندما يطابقون `users` أو `roles` - - تكون مطابقة الاسم/الوسم المباشرة معطلة افتراضيًا؛ فعّل `channels.discord.dangerouslyAllowNameMatching: true` فقط كوضع توافق اضطراري - - الأسماء/الوسوم مدعومة في `users`، لكن المعرّفات أكثر أمانًا؛ ويحذّر `openclaw security audit` عند استخدام إدخالات الاسم/الوسم - - إذا كان لدى خادم ما إعداد `channels`، فسيتم رفض القنوات غير المدرجة - - إذا لم يكن لدى الخادم كتلة `channels`، فستُسمح جميع القنوات في ذلك الخادم المدرج في قائمة السماح + - يجب أن يطابق الخادم `channels.discord.guilds` (يُفضَّل `id`، ويُقبل slug) + - قوائم السماح الاختيارية للمرسلين: `users` (يوصى بالمعرّفات الثابتة) و`roles` (معرّفات الأدوار فقط)؛ إذا تم ضبط أي منهما، يُسمح للمرسلين عندما يطابقون `users` أو `roles` + - تكون المطابقة المباشرة بالاسم/الوسم معطلة افتراضيًا؛ فعّل `channels.discord.dangerouslyAllowNameMatching: true` فقط كوضع توافق طارئ + - الأسماء/الوسوم مدعومة في `users`، لكن المعرّفات أكثر أمانًا؛ ويحذّر `openclaw security audit` عند استخدام إدخالات اسم/وسم + - إذا كان لدى خادم ما `channels` مضبوطة، فسيتم رفض القنوات غير المدرجة + - إذا لم يكن لدى الخادم كتلة `channels`، فسيُسمح بجميع القنوات في ذلك الخادم الموجود في قائمة السماح مثال: @@ -452,33 +452,33 @@ openclaw message thread create --channel discord --target channel: \ } ``` - إذا قمت فقط بتعيين `DISCORD_BOT_TOKEN` ولم تُنشئ كتلة `channels.discord`، فسيكون احتياط وقت التشغيل هو `groupPolicy="allowlist"` (مع تحذير في السجلات)، حتى إذا كان `channels.defaults.groupPolicy` هو `open`. + إذا قمت فقط بضبط `DISCORD_BOT_TOKEN` ولم تُنشئ كتلة `channels.discord`، فإن الاحتياط في وقت التشغيل سيكون `groupPolicy="allowlist"` (مع تحذير في السجلات)، حتى لو كانت `channels.defaults.groupPolicy` تساوي `open`. - تكون رسائل الخوادم مقيّدة بالإشارة افتراضيًا. + تكون رسائل الخوادم مقيدة بالإشارة افتراضيًا. - يشمل اكتشاف الإشارة ما يلي: + يشتمل اكتشاف الإشارة على: - - إشارة صريحة إلى bot - - أنماط الإشارة المُعدّة (`agents.list[].groupChat.mentionPatterns`، مع احتياط إلى `messages.groupChat.mentionPatterns`) - - سلوك الرد الضمني على bot في الحالات المدعومة + - إشارة صريحة إلى البوت + - أنماط الإشارة المضبوطة (`agents.list[].groupChat.mentionPatterns`، والاحتياط `messages.groupChat.mentionPatterns`) + - سلوك الرد الضمني على البوت في الحالات المدعومة - يتم إعداد `requireMention` لكل خادم/قناة على حدة (`channels.discord.guilds...`). - أما `ignoreOtherMentions` فيُسقط اختياريًا الرسائل التي تشير إلى مستخدم/دور آخر ولكن ليس إلى bot (باستثناء @everyone/@here). + يتم ضبط `requireMention` لكل خادم/قناة (`channels.discord.guilds...`). + ويقوم `ignoreOtherMentions` اختياريًا بإسقاط الرسائل التي تشير إلى مستخدم/دور آخر ولكن ليس إلى البوت (باستثناء @everyone/@here). الرسائل الخاصة الجماعية: - الافتراضي: يتم تجاهلها (`dm.groupEnabled=false`) - - قائمة سماح اختيارية عبر `dm.groupChannels` (معرّفات القنوات أو الأسماء المختصرة) + - قائمة سماح اختيارية عبر `dm.groupChannels` (معرّفات القنوات أو slugs) -### توجيه الوكيل المستند إلى الأدوار +### التوجيه إلى الوكيل استنادًا إلى الدور -استخدم `bindings[].match.roles` لتوجيه أعضاء خوادم Discord إلى وكلاء مختلفين حسب معرّف الدور. تقبل عمليات الربط المستندة إلى الأدوار معرّفات الأدوار فقط، ويتم تقييمها بعد عمليات الربط peer أو parent-peer وقبل عمليات الربط الخاصة بالخادم فقط. إذا كان الربط يضبط أيضًا حقول مطابقة أخرى (مثل `peer` + `guildId` + `roles`)، فيجب أن تتطابق جميع الحقول المُعدّة. +استخدم `bindings[].match.roles` لتوجيه أعضاء خوادم Discord إلى وكلاء مختلفين بحسب معرّف الدور. تقبل عمليات الربط المستندة إلى الدور معرّفات الأدوار فقط، ويتم تقييمها بعد عمليات الربط peer أو parent-peer وقبل عمليات الربط الخاصة بالخادم فقط. إذا كانت عملية الربط تضبط أيضًا حقول مطابقة أخرى (مثل `peer` + `guildId` + `roles`)، فيجب أن تتطابق جميع الحقول المضبوطة. ```json5 { @@ -505,28 +505,28 @@ openclaw message thread create --channel discord --target channel: \ ## إعداد Developer Portal - + 1. Discord Developer Portal -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** - 3. انسخ رمز bot المميز + 3. انسخ رمز البوت - - في **Bot -> Privileged Gateway Intents**، قم بتمكين: + + في **Bot -> Privileged Gateway Intents**، فعّل: - Message Content Intent - Server Members Intent (موصى به) - امتياز الحالة اختياري ولا يلزم إلا إذا كنت تريد تلقي تحديثات الحالة. لا يتطلب تعيين حالة bot (`setPresence`) تمكين تحديثات الحالة للأعضاء. + Presence intent اختياري ولا يلزم إلا إذا كنت تريد تلقي تحديثات الحالة. لا يتطلب ضبط حالة البوت (`setPresence`) تفعيل تحديثات الحالة للأعضاء. - مولّد رابط OAuth: + مولّد عنوان URL لـ OAuth: - - النطاقات: `bot` و`applications.commands` + - النطاقات: `bot`, `applications.commands` الأذونات الأساسية المعتادة: @@ -539,7 +539,7 @@ openclaw message thread create --channel discord --target channel: \ - Attach Files - Add Reactions (اختياري) - هذه هي المجموعة الأساسية لقنوات النص العادية. إذا كنت تخطط للنشر في سلاسل Discord، بما في ذلك تدفقات عمل قنوات المنتدى أو الوسائط التي تُنشئ سلسلة أو تتابعها، فقم أيضًا بتمكين **Send Messages in Threads**. + هذه هي المجموعة الأساسية للقنوات النصية العادية. إذا كنت تخطط للنشر في سلاسل Discord، بما في ذلك سير العمل في قنوات المنتدى أو الوسائط التي تنشئ سلسلة أو تتابعها، ففعّل أيضًا **Send Messages in Threads**. تجنّب `Administrator` ما لم تكن هناك حاجة صريحة إليه. @@ -547,24 +547,24 @@ openclaw message thread create --channel discord --target channel: \ فعّل Discord Developer Mode، ثم انسخ: - - Server ID - - Channel ID - - User ID + - معرّف الخادم + - معرّف القناة + - معرّف المستخدم - يُفضَّل استخدام المعرّفات الرقمية في إعدادات OpenClaw لإجراء عمليات تدقيق وفحص موثوقة. + يُفضّل استخدام المعرّفات الرقمية في إعدادات OpenClaw لإجراء تدقيقات وفحوصات موثوقة. -## الأوامر الأصلية وتفويض الأوامر +## الأوامر الأصلية وتوثيق الأوامر -- القيمة الافتراضية لـ `commands.native` هي `"auto"` وهي مفعلة لـ Discord. +- القيمة الافتراضية لـ `commands.native` هي `"auto"` وهي مفعّلة لـ Discord. - تجاوز لكل قناة: `channels.discord.commands.native`. -- يؤدي `commands.native=false` إلى إزالة أوامر Discord الأصلية المسجلة سابقًا بشكل صريح. -- يستخدم تفويض الأوامر الأصلية قوائم السماح/السياسات نفسها في Discord مثل معالجة الرسائل العادية. -- قد تظل الأوامر مرئية في واجهة Discord للمستخدمين غير المخولين؛ لكن التنفيذ يظل يفرض تفويض OpenClaw ويُرجع "غير مخول". +- يؤدي `commands.native=false` إلى إزالة أوامر Discord الأصلية المسجّلة سابقًا بشكل صريح. +- يستخدم توثيق الأوامر الأصلية نفس قوائم السماح/السياسات في Discord المستخدمة لمعالجة الرسائل العادية. +- قد تظل الأوامر مرئية في واجهة Discord للمستخدمين غير المصرّح لهم؛ لكن التنفيذ يظل يفرض توثيق OpenClaw ويُرجع "غير مصرّح". -راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands) للاطلاع على كتالوج الأوامر وسلوكها. +راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands) للاطلاع على فهرس الأوامر والسلوك. إعدادات أوامر الشرطة المائلة الافتراضية: @@ -574,54 +574,33 @@ openclaw message thread create --channel discord --target channel: \ - يدعم Discord وسوم الرد في مخرجات الوكيل: + يدعم Discord وسوم الردود في مخرجات الوكيل: - `[[reply_to_current]]` - `[[reply_to:]]` - ويتم التحكم فيها عبر `channels.discord.replyToMode`: + ويتم التحكم فيها بواسطة `channels.discord.replyToMode`: - `off` (الافتراضي) - `first` - `all` - `batched` - ملاحظة: يؤدي `off` إلى تعطيل تسلسل الردود الضمني. ولا تزال وسوم `[[reply_to_*]]` الصريحة محترمة. + ملاحظة: يؤدي `off` إلى تعطيل سلاسل الردود الضمنية. ومع ذلك، تظل وسوم `[[reply_to_*]]` الصريحة محترمة. يقوم `first` دائمًا بإرفاق مرجع الرد الأصلي الضمني بأول رسالة Discord صادرة في هذا الدور. - ولا يقوم `batched` بإرفاق مرجع الرد الأصلي الضمني من Discord إلا عندما - يكون الدور الوارد دفعة مؤجلة تضم رسائل متعددة. ويكون هذا مفيدًا - عندما تريد الردود الأصلية أساسًا للمحادثات السريعة والملتبسة، وليس لكل - دور يتضمن رسالة واحدة. + ويقوم `batched` بإرفاق مرجع الرد الأصلي الضمني في Discord فقط عندما + يكون الدور الوارد عبارة عن دفعة مؤجّلة من عدة رسائل. ويكون ذلك مفيدًا + عندما تريد الردود الأصلية أساسًا للمحادثات المتدفقة والملتبسة، وليس لكل + دور مكوّن من رسالة واحدة. - تظهر معرّفات الرسائل في السياق/السجل حتى تتمكن الوكلاء من استهداف رسائل محددة. + يتم إظهار معرّفات الرسائل في السياق/السجل حتى تتمكن الوكلاء من استهداف رسائل محددة. - - يمكن لـ OpenClaw بث مسودات الردود عبر إرسال رسالة مؤقتة وتحريرها مع وصول النص. + + يمكن لـ OpenClaw بث مسودات الردود عبر إرسال رسالة مؤقتة وتحريرها مع وصول النص. تقبل `channels.discord.streaming` القيم `off` (الافتراضي) | `partial` | `block` | `progress`. ويتم تعيين `progress` إلى `partial` على Discord؛ و`streamMode` اسم بديل قديم تتم هجرته تلقائيًا. - - يتحكم `channels.discord.streaming` في بث المعاينة (`off` | `partial` | `block` | `progress`، والافتراضي: `off`). - - يبقى الافتراضي `off` لأن تعديلات المعاينة في Discord قد تصل إلى حدود المعدل بسرعة، خصوصًا عندما تتشارك عدة bots أو Gateways الحساب نفسه أو حركة مرور الخادم نفسها. - - يتم قبول `progress` لاتساقه عبر القنوات ويجري تعيينه إلى `partial` في Discord. - - `channels.discord.streamMode` اسم مستعار قديم ويتم ترحيله تلقائيًا. - - يقوم `partial` بتحرير رسالة معاينة واحدة مع وصول الرموز. - - يقوم `block` بإخراج مقاطع بحجم المسودة (استخدم `draftChunk` لضبط الحجم ونقاط الانقسام). - - تؤدي الردود الإعلامية والأخطاء والردود الصريحة النهائية إلى إلغاء تعديلات المعاينة المعلقة دون تفريغ مسودة مؤقتة قبل التسليم العادي. - - يتحكم `streaming.preview.toolProgress` في ما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة مسودة المعاينة نفسها (الافتراضي: `true`). اضبطه على `false` للاحتفاظ برسائل أدوات/تقدم منفصلة. - - مثال: - -```json5 -{ - channels: { - discord: { - streaming: "partial", - }, - }, -} -``` - - الإعدادات الافتراضية لتقسيم المقاطع في وضع `block` (مقيّدة بـ `channels.discord.textChunkLimit`): + تظل القيمة الافتراضية `off` لأن تعديلات المعاينة في Discord تصل سريعًا إلى حدود المعدل عندما تشترك عدة بوتات أو بوابات في حساب واحد. ```json5 { @@ -638,19 +617,21 @@ openclaw message thread create --channel discord --target channel: \ } ``` - بث المعاينة مخصص للنص فقط؛ أما الردود الإعلامية فتعود إلى التسليم العادي. + - يقوم `partial` بتحرير رسالة معاينة واحدة مع وصول التوكنات. + - يقوم `block` بإخراج أجزاء بحجم المسودة (استخدم `draftChunk` لضبط الحجم ونقاط الفصل، مع تقييدها إلى `textChunkLimit`). + - تؤدي الرسائل النهائية الخاصة بالوسائط والأخطاء والردود الصريحة إلى إلغاء أي تعديلات معاينة معلّقة. + - يتحكم `streaming.preview.toolProgress` (الافتراضي `true`) في ما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة المعاينة. - ملاحظة: بث المعاينة منفصل عن البث القائم على المقاطع. عندما يكون البث القائم على المقاطع مفعّلًا صراحةً - لـ Discord، يتخطى OpenClaw بث المعاينة لتجنب البث المزدوج. + يقتصر بث المعاينة على النصوص فقط؛ وتعود ردود الوسائط إلى التسليم العادي. وعندما يكون بث `block` مفعّلًا صراحةً، يتخطى OpenClaw بث المعاينة لتجنب البث المزدوج. سياق سجل الخادم: - - `channels.discord.historyLimit` الافتراضي `20` + - القيمة الافتراضية لـ `channels.discord.historyLimit` هي `20` - الاحتياط: `messages.groupChat.historyLimit` - - `0` يعطّل الميزة + - `0` يعطّلها عناصر التحكم في سجل الرسائل الخاصة: @@ -659,17 +640,12 @@ openclaw message thread create --channel discord --target channel: \ سلوك السلاسل: - - يتم توجيه سلاسل Discord كجلسات قنوات - - يمكن استخدام بيانات السلسلة الأصلية للربط بجلسة الأصل - - يرث إعداد السلسلة إعداد القناة الأصل ما لم يوجد إدخال خاص بالسلسلة - - يكون توارث السجل من الأصل إلى السلاسل التلقائية المنشأة حديثًا اختياريًا عبر `channels.discord.thread.inheritParent` (الافتراضي `false`). عندما تكون القيمة `false`، تبدأ جلسات سلاسل Discord المنشأة حديثًا معزولة عن سجل القناة الأصلية؛ وعندما تكون `true`، يُستخدم سجل القناة الأصلية كبذرة لجلسة السلسلة الجديدة - - توجد تجاوزات لكل حساب تحت `channels.discord.accounts..thread.inheritParent` - - يمكن لتفاعلات أداة الرسائل حل أهداف الرسائل الخاصة `user:` بالإضافة إلى أهداف القنوات - - يتم الحفاظ على `channels.discord.guilds..channels..requireMention: false` أثناء الاحتياط في مرحلة تفعيل الرد، بحيث تظل القنوات المضبوطة دائمًا قيد التشغيل دائمًا حتى عند تشغيل احتياط مرحلة الرد + - يتم توجيه سلاسل Discord كجلسات قنوات وترث إعدادات القناة الأصلية ما لم يتم تجاوزها. + - يتيح `channels.discord.thread.inheritParent` (الافتراضي `false`) للسلاسل التلقائية الجديدة البدء من النص الأصلي للقناة الأب. توجد التجاوزات لكل حساب تحت `channels.discord.accounts..thread.inheritParent`. + - يمكن لتفاعلات أداة الرسائل تحليل أهداف الرسائل الخاصة بصيغة `user:`. + - تتم المحافظة على `guilds..channels..requireMention: false` أثناء احتياط تفعيل مرحلة الرد. - يتم حقن موضوعات القنوات كسياق **غير موثوق** (وليس كـ system prompt). - ويظل سياق الرد والرسائل المقتبسة حاليًا كما تم استلامه. - وتعمل قوائم السماح في Discord أساسًا على تقييد من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق الإضافي. + يتم حقن مواضيع القنوات كسياق **غير موثوق**. تتحكم قوائم السماح فيمن يمكنه تشغيل الوكيل، لكنها ليست حدًا كاملًا لتنقيح السياق الإضافي. @@ -678,11 +654,11 @@ openclaw message thread create --channel discord --target channel: \ الأوامر: - - `/focus ` يربط السلسلة الحالية/الجديدة بهدف وكيل فرعي/جلسة - - `/unfocus` يزيل ربط السلسلة الحالية - - `/agents` يعرض عمليات التشغيل النشطة وحالة الربط - - `/session idle ` يفحص/يحدّث إلغاء التركيز التلقائي عند عدم النشاط لعمليات الربط المركّزة - - `/session max-age ` يفحص/يحدّث الحد الأقصى الصلب للعمر لعمليات الربط المركّزة + - `/focus ` لربط السلسلة الحالية/الجديدة بهدف وكيل فرعي/جلسة + - `/unfocus` لإزالة الربط من السلسلة الحالية + - `/agents` لعرض التشغيلات النشطة وحالة الربط + - `/session idle ` لفحص/تحديث إلغاء التركيز التلقائي عند عدم النشاط للروابط المركّزة + - `/session max-age ` لفحص/تحديث الحد الأقصى الصارم للعمر للروابط المركّزة الإعدادات: @@ -701,7 +677,7 @@ openclaw message thread create --channel discord --target channel: \ enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // اشتراك اختياري + spawnSubagentSessions: false, // opt-in }, }, }, @@ -712,18 +688,18 @@ openclaw message thread create --channel discord --target channel: \ - يضبط `session.threadBindings.*` القيم الافتراضية العامة. - يتجاوز `channels.discord.threadBindings.*` سلوك Discord. - - يجب أن تكون `spawnSubagentSessions` بقيمة true لإنشاء/ربط السلاسل تلقائيًا لـ `sessions_spawn({ thread: true })`. - - يجب أن تكون `spawnAcpSessions` بقيمة true لإنشاء/ربط السلاسل تلقائيًا لـ ACP (`/acp spawn ... --thread ...` أو `sessions_spawn({ runtime: "acp", thread: true })`). - - إذا كانت عمليات ربط السلاسل معطلة لحساب ما، فلن تكون `/focus` وعمليات ربط السلاسل ذات الصلة متاحة. + - يجب أن تكون `spawnSubagentSessions` مساوية لـ true لإنشاء/ربط السلاسل تلقائيًا مع `sessions_spawn({ thread: true })`. + - يجب أن تكون `spawnAcpSessions` مساوية لـ true لإنشاء/ربط السلاسل تلقائيًا مع ACP (`/acp spawn ... --thread ...` أو `sessions_spawn({ runtime: "acp", thread: true })`). + - إذا كانت روابط السلاسل معطلة لحساب ما، فلن تكون `/focus` وعمليات ربط السلاسل المرتبطة بها متاحة. - راجع [الوكلاء الفرعيون](/ar/tools/subagents) و[وكلاء ACP](/ar/tools/acp-agents) و[مرجع الإعدادات](/ar/gateway/configuration-reference). + راجع [الوكلاء الفرعيين](/ar/tools/subagents) و[وكلاء ACP](/ar/tools/acp-agents) و[مرجع الإعدادات](/ar/gateway/configuration-reference). - - لمساحات عمل ACP المستقرة «الدائمة التشغيل»، قم بإعداد عمليات ربط ACP مكتوبة على المستوى الأعلى تستهدف محادثات Discord. + + لمساحات عمل ACP مستقرة و«دائمة التشغيل»، اضبط روابط ACP مكتوبة على المستوى الأعلى تستهدف محادثات Discord. - مسار الإعداد: + مسار الإعدادات: - `bindings[]` مع `type: "acp"` و`match.channel: "discord"` @@ -777,15 +753,11 @@ openclaw message thread create --channel discord --target channel: \ ملاحظات: - - يقوم `/acp spawn codex --bind here` بربط قناة Discord أو السلسلة الحالية في مكانها ويبقي الرسائل المستقبلية موجّهة إلى جلسة ACP نفسها. - - قد يعني ذلك أيضًا «بدء جلسة Codex ACP جديدة»، لكنه لا ينشئ سلسلة Discord جديدة بحد ذاته. تبقى القناة الحالية هي سطح الدردشة. - - قد يستمر Codex في العمل ضمن `cwd` الخاص به أو مساحة عمل backend الخاصة به على القرص. مساحة العمل هذه هي حالة وقت تشغيل، وليست سلسلة Discord. - - يمكن لرسائل السلاسل أن ترث ربط ACP الخاص بالقناة الأصلية. - - في قناة أو سلسلة مرتبطة، يقوم `/new` و`/reset` بإعادة تعيين جلسة ACP نفسها في مكانها. - - لا تزال عمليات ربط السلاسل المؤقتة تعمل ويمكنها تجاوز حلّ الهدف أثناء نشاطها. - - لا تكون `spawnAcpSessions` مطلوبة إلا عندما يحتاج OpenClaw إلى إنشاء/ربط سلسلة فرعية عبر `--thread auto|here`. وهي ليست مطلوبة لـ `/acp spawn ... --bind here` في القناة الحالية. + - يقوم `/acp spawn codex --bind here` بربط القناة أو السلسلة الحالية في مكانها ويحافظ على الرسائل المستقبلية في جلسة ACP نفسها. وترث رسائل السلسلة ربط القناة الأب. + - في قناة أو سلسلة مرتبطة، يعيد `/new` و`/reset` ضبط جلسة ACP نفسها في مكانها. ويمكن لروابط السلاسل المؤقتة تجاوز تحليل الهدف ما دامت نشطة. + - لا تكون `spawnAcpSessions` مطلوبة إلا عندما يحتاج OpenClaw إلى إنشاء/ربط سلسلة فرعية عبر `--thread auto|here`. - راجع [وكلاء ACP](/ar/tools/acp-agents) لمعرفة تفاصيل سلوك الربط. + راجع [وكلاء ACP](/ar/tools/acp-agents) للحصول على تفاصيل سلوك الربط. @@ -797,14 +769,14 @@ openclaw message thread create --channel discord --target channel: \ - `all` - `allowlist` (يستخدم `guilds..users`) - يتم تحويل أحداث التفاعل إلى أحداث نظام وإرفاقها بجلسة Discord الموجّهة. + يتم تحويل أحداث التفاعلات إلى أحداث نظام وإرفاقها بجلسة Discord الموجّهة. يرسل `ackReaction` رمزًا تعبيريًا للتأكيد بينما يعالج OpenClaw رسالة واردة. - ترتيب الحلّ: + ترتيب التحليل: - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` @@ -813,7 +785,7 @@ openclaw message thread create --channel discord --target channel: \ ملاحظات: - - يقبل Discord الرموز التعبيرية Unicode أو أسماء الرموز التعبيرية المخصصة. + - يقبل Discord الرموز التعبيرية الموحدة Unicode أو أسماء الرموز التعبيرية المخصصة. - استخدم `""` لتعطيل التفاعل لقناة أو حساب. @@ -821,9 +793,9 @@ openclaw message thread create --channel discord --target channel: \ تكون كتابات الإعدادات التي تبدأ من القناة مفعلة افتراضيًا. - يؤثر هذا في تدفقات `/config set|unset` (عند تمكين ميزات الأوامر). + يؤثر هذا في تدفقات `/config set|unset` (عند تفعيل ميزات الأوامر). - التعطيل: + للتعطيل: ```json5 { @@ -838,7 +810,7 @@ openclaw message thread create --channel discord --target channel: \ - وجّه حركة WebSocket الخاصة ببوابة Discord وعمليات بحث REST عند بدء التشغيل (معرّف التطبيق + حلّ قائمة السماح) عبر وكيل HTTP(S) باستخدام `channels.discord.proxy`. + مرّر حركة مرور WebSocket الخاصة ببوابة Discord وعمليات بحث REST عند بدء التشغيل (معرّف التطبيق + تحليل قائمة السماح) عبر وكيل HTTP(S) باستخدام `channels.discord.proxy`. ```json5 { @@ -869,7 +841,7 @@ openclaw message thread create --channel discord --target channel: \ - قم بتمكين حلّ PluralKit لربط الرسائل المُمرّرة بهوية عضو النظام: + فعّل تحليل PluralKit لربط الرسائل الممررة بهوية عضو النظام: ```json5 { @@ -886,15 +858,15 @@ openclaw message thread create --channel discord --target channel: \ ملاحظات: - - يمكن أن تستخدم قوائم السماح `pk:` - - تتم مطابقة أسماء عرض الأعضاء بالاسم/الاسم المختصر فقط عندما تكون `channels.discord.dangerouslyAllowNameMatching: true` + - يمكن لقوائم السماح استخدام `pk:` + - تتم مطابقة أسماء العرض للأعضاء بالاسم/slug فقط عندما تكون `channels.discord.dangerouslyAllowNameMatching: true` - تستخدم عمليات البحث معرّف الرسالة الأصلي وتكون مقيّدة بنافذة زمنية - - إذا فشل البحث، تُعامل الرسائل المُمرّرة كرسائل bot ويتم إسقاطها ما لم تكن `allowBots=true` + - إذا فشل البحث، تُعامل الرسائل الممررة على أنها رسائل بوت وتُسقط ما لم يكن `allowBots=true` - يتم تطبيق تحديثات الحالة عند تعيين حقل status أو activity، أو عند تمكين auto presence. + يتم تطبيق تحديثات الحالة عندما تضبط حقل حالة أو نشاط، أو عندما تفعّل الحالة التلقائية. مثال على الحالة فقط: @@ -908,13 +880,13 @@ openclaw message thread create --channel discord --target channel: \ } ``` - مثال على النشاط (custom status هو نوع النشاط الافتراضي): + مثال على النشاط (الحالة المخصصة هي نوع النشاط الافتراضي): ```json5 { channels: { discord: { - activity: "وقت التركيز", + activity: "Focus time", activityType: 4, }, }, @@ -927,7 +899,7 @@ openclaw message thread create --channel discord --target channel: \ { channels: { discord: { - activity: "برمجة مباشرة", + activity: "Live coding", activityType: 1, activityUrl: "https://twitch.tv/openclaw", }, @@ -941,10 +913,10 @@ openclaw message thread create --channel discord --target channel: \ - 1: Streaming (يتطلب `activityUrl`) - 2: Listening - 3: Watching - - 4: Custom (يستخدم نص النشاط كحالة status؛ والرمز التعبيري اختياري) + - 4: Custom (يستخدم نص النشاط كحالة؛ والرمز التعبيري اختياري) - 5: Competing - مثال على auto presence (إشارة سلامة وقت التشغيل): + مثال على الحالة التلقائية (إشارة صحة وقت التشغيل): ```json5 { @@ -954,14 +926,14 @@ openclaw message thread create --channel discord --target channel: \ enabled: true, intervalMs: 30000, minUpdateIntervalMs: 15000, - exhaustedText: "نفد الرمز المميز", + exhaustedText: "token exhausted", }, }, }, } ``` - تربط auto presence توفر وقت التشغيل بحالة Discord: healthy => online، وdegraded أو unknown => idle، وexhausted أو unavailable => dnd. تجاوزات النص الاختيارية: + تقوم الحالة التلقائية بربط توفر وقت التشغيل بحالة Discord: سليم => online، ومتدهور أو غير معروف => idle، ومنهك أو غير متاح => dnd. تجاوزات النص الاختيارية: - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -969,78 +941,62 @@ openclaw message thread create --channel discord --target channel: \ - - يدعم Discord معالجة الموافقة المستندة إلى الأزرار في الرسائل الخاصة ويمكنه اختياريًا نشر طلبات الموافقة في القناة الأصلية. + + يدعم Discord معالجة الموافقات المستندة إلى الأزرار في الرسائل الخاصة، ويمكنه اختياريًا نشر مطالبات الموافقة في القناة الأصلية. - مسار الإعداد: + مسار الإعدادات: - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (اختياري؛ يحتاط إلى `commands.ownerAllowFrom` عندما يكون ذلك ممكنًا) + - `channels.discord.execApprovals.approvers` (اختياري؛ ويعود إلى `commands.ownerAllowFrom` عند الإمكان) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`، الافتراضي: `dm`) - - `agentFilter` و`sessionFilter` و`cleanupAfterResolve` + - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - يقوم Discord بتمكين موافقات التنفيذ الأصلية تلقائيًا عندما تكون `enabled` غير معيّنة أو `"auto"` ويمكن حلّ معتمِد واحد على الأقل، سواء من `execApprovals.approvers` أو من `commands.ownerAllowFrom`. لا يستنتج Discord معتمدي التنفيذ من `allowFrom` الخاص بالقناة، أو `dm.allowFrom` القديم، أو `defaultTo` الخاص بالرسائل المباشرة. اضبط `enabled: false` لتعطيل Discord كعميل موافقة أصلي بشكل صريح. + يقوم Discord تلقائيًا بتفعيل موافقات التنفيذ الأصلية عندما تكون `enabled` غير مضبوطة أو `"auto"` ويمكن تحليل مُوافِق واحد على الأقل، إما من `execApprovals.approvers` أو من `commands.ownerAllowFrom`. ولا يستنتج Discord الموافقين على التنفيذ من `allowFrom` الخاص بالقناة، أو `dm.allowFrom` القديم، أو `defaultTo` الخاص بالرسائل المباشرة. اضبط `enabled: false` لتعطيل Discord كعميل موافقة أصلي بشكل صريح. - عندما تكون `target` هي `channel` أو `both`، يكون طلب الموافقة مرئيًا في القناة. ولا يمكن إلا للمعتمِدين الذين تم حلّهم استخدام الأزرار؛ أما المستخدمون الآخرون فيتلقون رفضًا مؤقتًا مرئيًا لهم فقط. تتضمن طلبات الموافقة نص الأمر، لذا لا تقم بتمكين التسليم إلى القناة إلا في القنوات الموثوقة. وإذا تعذر اشتقاق معرّف القناة من مفتاح الجلسة، يحتاط OpenClaw إلى التسليم عبر الرسائل الخاصة. + عندما تكون `target` هي `channel` أو `both`، تكون مطالبة الموافقة مرئية في القناة. ولا يمكن استخدام الأزرار إلا من قبل الموافقين الذين تم تحليلهم؛ ويتلقى المستخدمون الآخرون رفضًا سريع الزوال. وتتضمن مطالبات الموافقة نص الأمر، لذلك لا تفعّل التسليم في القناة إلا في القنوات الموثوقة. وإذا تعذر اشتقاق معرّف القناة من مفتاح الجلسة، يعود OpenClaw إلى التسليم عبر الرسائل الخاصة. - يعرض Discord أيضًا أزرار الموافقة المشتركة المستخدمة بواسطة قنوات الدردشة الأخرى. يضيف مهايئ Discord الأصلي أساسًا توجيه الرسائل الخاصة للمعتمِدين والتوزيع على القنوات. - عندما تكون هذه الأزرار موجودة، فهي الواجهة الأساسية للموافقة؛ ويجب على OpenClaw - أن يضمّن أمر `/approve` اليدوي فقط عندما تشير نتيجة الأداة إلى أن - موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. + يعرض Discord أيضًا أزرار الموافقة المشتركة المستخدمة من قنوات الدردشة الأخرى. ويضيف محول Discord الأصلي أساسًا توجيه رسائل الموافقة الخاصة بالموافقين والتوزيع على القنوات. + وعندما تكون هذه الأزرار موجودة، فإنها تكون تجربة الاستخدام الأساسية للموافقة؛ ويجب على OpenClaw + أن يضمّن أمر `/approve` يدويًا فقط عندما تشير نتيجة الأداة إلى + أن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. - يستخدم تفويض Gateway لهذا المعالج عقد حلّ بيانات الاعتماد المشتركة نفسه المستخدم مع عملاء Gateway الآخرين: + يتبع توثيق Gateway وتحليل الموافقات عقد عميل Gateway المشترك (`plugin:` IDs تُحل عبر `plugin.approval.resolve`؛ والمعرّفات الأخرى عبر `exec.approval.resolve`). وتنتهي صلاحية الموافقات افتراضيًا بعد 30 دقيقة. - - تفويض محلي يبدأ بـ env (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` ثم `gateway.auth.*`) - - في الوضع المحلي، يمكن استخدام `gateway.remote.*` كاحتياط فقط عندما لا يكون `gateway.auth.*` معيّنًا؛ وتفشل قيم SecretRef المحلية المُعدّة ولكن غير المحلولة بشكل مغلق - - دعم الوضع البعيد عبر `gateway.remote.*` عند الاقتضاء - - تكون تجاوزات URL آمنة للتجاوز: تجاوزات CLI لا تعيد استخدام بيانات الاعتماد الضمنية، وتجاوزات env تستخدم بيانات اعتماد env فقط - - سلوك حلّ الموافقة: - - - يتم حلّ المعرّفات المسبوقة بـ `plugin:` عبر `plugin.approval.resolve`. - - يتم حلّ المعرّفات الأخرى عبر `exec.approval.resolve`. - - لا يجري Discord هنا قفزة احتياطية إضافية من exec إلى plugin؛ فبادئة - المعرّف هي التي تحدد طريقة Gateway التي يستدعيها. - - تنتهي صلاحية موافقات التنفيذ بعد 30 دقيقة افتراضيًا. إذا فشلت الموافقات مع - معرّفات موافقة غير معروفة، فتحقق من حلّ المعتمِدين وتمكين الميزة - وأن نوع معرّف الموافقة المُسلَّم يطابق الطلب المعلّق. - - الوثائق ذات الصلة: [موافقات التنفيذ](/ar/tools/exec-approvals) + راجع [موافقات التنفيذ](/ar/tools/exec-approvals). ## الأدوات وبوابات الإجراءات -تتضمن إجراءات رسائل Discord المراسلة، وإدارة القنوات، والإشراف، والحالة، وإجراءات البيانات الوصفية. +تتضمن إجراءات رسائل Discord إجراءات المراسلة وإدارة القنوات والإشراف والحالة وإجراءات البيانات الوصفية. أمثلة أساسية: -- المراسلة: `sendMessage` و`readMessages` و`editMessage` و`deleteMessage` و`threadReply` -- التفاعلات: `react` و`reactions` و`emojiList` -- الإشراف: `timeout` و`kick` و`ban` +- المراسلة: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply` +- التفاعلات: `react`, `reactions`, `emojiList` +- الإشراف: `timeout`, `kick`, `ban` - الحالة: `setPresence` -يقبل الإجراء `event-create` معامل `image` اختياريًا (URL أو مسار ملف محلي) لتعيين صورة غلاف الحدث المجدول. +يقبل الإجراء `event-create` وسيطة `image` اختيارية (URL أو مسار ملف محلي) لضبط صورة غلاف الحدث المجدول. توجد بوابات الإجراءات تحت `channels.discord.actions.*`. سلوك البوابة الافتراضي: -| مجموعة الإجراءات | الافتراضي | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | +| مجموعة الإجراءات | الافتراضي | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | | reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | مفعّل | -| roles | معطّل | -| moderation | معطّل | -| presence | معطّل | +| roles | معطّل | +| moderation | معطّل | +| presence | معطّل | ## واجهة Components v2 -يستخدم OpenClaw Discord components v2 لموافقات التنفيذ وعلامات السياق المتقاطع. ويمكن لإجراءات رسائل Discord أيضًا قبول `components` لواجهة مستخدم مخصصة (متقدم؛ يتطلب إنشاء حمولة مكونات عبر أداة discord)، بينما لا تزال `embeds` القديمة متاحة ولكن لا يُنصح بها. +يستخدم OpenClaw Discord components v2 لموافقات التنفيذ وعلامات السياق المتقاطع. ويمكن لإجراءات رسائل Discord أيضًا قبول `components` لواجهة مخصصة (متقدم؛ ويتطلب إنشاء حمولة مكوّن عبر أداة discord)، بينما تظل `embeds` القديمة متاحة ولكن لا يُوصى بها. -- يضبط `channels.discord.ui.components.accentColor` لون التمييز المستخدم بواسطة حاويات مكونات Discord (hex). -- اضبطه لكل حساب عبر `channels.discord.accounts..ui.components.accentColor`. +- يضبط `channels.discord.ui.components.accentColor` لون التمييز المستخدم في حاويات مكوّنات Discord (hex). +- اضبطه لكل حساب باستخدام `channels.discord.accounts..ui.components.accentColor`. - يتم تجاهل `embeds` عند وجود components v2. مثال: @@ -1059,17 +1015,19 @@ openclaw message thread create --channel discord --target channel: \ } ``` -## القنوات الصوتية +## الصوت -يمكن لـ OpenClaw الانضمام إلى القنوات الصوتية في Discord لإجراء محادثات فورية ومستمرة. وهذا منفصل عن مرفقات الرسائل الصوتية. +لدى Discord سطحان صوتيان مختلفان: **قنوات صوتية** آنية (محادثات مستمرة) و**مرفقات رسائل صوتية** (تنسيق معاينة الموجة الصوتية). وتدعم البوابة كليهما. + +### القنوات الصوتية المتطلبات: -- قم بتمكين الأوامر الأصلية (`commands.native` أو `channels.discord.commands.native`). -- قم بإعداد `channels.discord.voice`. -- يحتاج bot إلى أذونات Connect وSpeak في القناة الصوتية المستهدفة. +- فعّل الأوامر الأصلية (`commands.native` أو `channels.discord.commands.native`). +- اضبط `channels.discord.voice`. +- يحتاج البوت إلى أذونات Connect + Speak في القناة الصوتية المستهدفة. -استخدم الأمر الأصلي الخاص بـ Discord فقط `/vc join|leave|status` للتحكم في الجلسات. يستخدم الأمر الوكيل الافتراضي للحساب ويتبع قواعد قائمة السماح وسياسة المجموعة نفسها مثل أوامر Discord الأخرى. +استخدم `/vc join|leave|status` للتحكم في الجلسات. يستخدم الأمر الوكيل الافتراضي للحساب ويتبع نفس قواعد قائمة السماح وسياسة المجموعات مثل أوامر Discord الأخرى. مثال على الانضمام التلقائي: @@ -1099,26 +1057,22 @@ openclaw message thread create --channel discord --target channel: \ ملاحظات: -- يتجاوز `voice.tts` القيمة `messages.tts` لتشغيل الصوت فقط. -- تستمد أدوار الملكية في مقاطع التفريغ الصوتي من `allowFrom` في Discord (أو `dm.allowFrom`)؛ ولا يمكن للمتحدثين غير المالكين الوصول إلى الأدوات المخصصة للمالكين فقط (مثل `gateway` و`cron`). -- تكون الميزة الصوتية مفعلة افتراضيًا؛ اضبط `channels.discord.voice.enabled=false` لتعطيلها. +- تتجاوز `voice.tts` القيمة `messages.tts` لتشغيل الصوت فقط. +- تستمد أدوار نصوص الصوت حالة المالك من `allowFrom` في Discord (أو `dm.allowFrom`)؛ ولا يمكن للمتحدثين غير المالكين الوصول إلى الأدوات المخصصة للمالك فقط (مثل `gateway` و`Cron`). +- يكون الصوت مفعّلًا افتراضيًا؛ اضبط `channels.discord.voice.enabled=false` لتعطيله. - يتم تمرير `voice.daveEncryption` و`voice.decryptionFailureTolerance` إلى خيارات الانضمام في `@discordjs/voice`. -- القيم الافتراضية في `@discordjs/voice` هي `daveEncryption=true` و`decryptionFailureTolerance=24` إذا لم يتم تعيينهما. -- يراقب OpenClaw أيضًا حالات فشل فك التشفير عند الاستقبال ويستعيد الحالة تلقائيًا عبر مغادرة القناة الصوتية وإعادة الانضمام إليها بعد تكرار حالات الفشل خلال نافذة زمنية قصيرة. -- إذا كانت سجلات الاستقبال تعرض بشكل متكرر `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`، فقد يكون هذا هو خلل الاستقبال في `@discordjs/voice` من المصدر العلوي والمتعقب في [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- القيم الافتراضية في `@discordjs/voice` هي `daveEncryption=true` و`decryptionFailureTolerance=24` إذا لم يتم ضبطهما. +- يراقب OpenClaw أيضًا فشل فك التشفير عند الاستقبال ويقوم بالاسترداد التلقائي عبر مغادرة القناة الصوتية ثم إعادة الانضمام إليها بعد تكرر حالات الفشل خلال نافذة قصيرة. +- إذا كانت سجلات الاستقبال تعرض بشكل متكرر `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`، فقد يكون هذا هو خلل الاستقبال في `@discordjs/voice` من المصدر العلوي والمتابع في [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). -## الرسائل الصوتية +### الرسائل الصوتية -تعرض الرسائل الصوتية في Discord معاينة لشكل الموجة وتتطلب صوت OGG/Opus بالإضافة إلى بيانات وصفية. ينشئ OpenClaw شكل الموجة تلقائيًا، لكنه يحتاج إلى توفر `ffmpeg` و`ffprobe` على مضيف Gateway لفحص ملفات الصوت وتحويلها. +تعرض الرسائل الصوتية في Discord معاينة للموجة الصوتية وتتطلب صوت OGG/Opus. ينشئ OpenClaw الموجة الصوتية تلقائيًا، لكنه يحتاج إلى `ffmpeg` و`ffprobe` على مضيف البوابة للفحص والتحويل. -المتطلبات والقيود: - -- قدّم **مسار ملف محلي** (يتم رفض عناوين URL). -- احذف محتوى النص (لا يسمح Discord بالنص + الرسالة الصوتية في الحمولة نفسها). +- وفّر **مسار ملف محلي** (يتم رفض عناوين URL). +- احذف المحتوى النصي (يرفض Discord النص + الرسالة الصوتية في الحمولة نفسها). - يتم قبول أي تنسيق صوتي؛ ويحوّل OpenClaw الملف إلى OGG/Opus عند الحاجة. -مثال: - ```bash message(action="send", channel="discord", target="channel:123", path="/path/to/audio.mp3", asVoice=true) ``` @@ -1126,20 +1080,20 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## استكشاف الأخطاء وإصلاحها - + - - قم بتمكين Message Content Intent - - قم بتمكين Server Members Intent عندما تعتمد على حل المستخدم/العضو - - أعد تشغيل Gateway بعد تغيير الامتيازات + - فعّل Message Content Intent + - فعّل Server Members Intent عندما تعتمد على تحليل المستخدم/العضو + - أعد تشغيل Gateway بعد تغيير النوايا - + - - تحقق من `groupPolicy` - - تحقق من قائمة سماح الخوادم ضمن `channels.discord.guilds` - - إذا كانت خريطة `channels` للخادم موجودة، فلن يُسمح إلا بالقنوات المدرجة - - تحقق من سلوك `requireMention` وأنماط الإشارة + - تحقّق من `groupPolicy` + - تحقّق من قائمة السماح الخاصة بالخادم ضمن `channels.discord.guilds` + - إذا كانت خريطة `channels` الخاصة بالخادم موجودة، فلن يُسمح إلا بالقنوات المدرجة + - تحقّق من سلوك `requireMention` وأنماط الإشارة فحوصات مفيدة: @@ -1151,35 +1105,35 @@ openclaw logs --follow - + الأسباب الشائعة: - - `groupPolicy="allowlist"` بدون قائمة سماح مطابقة للخادم/القناة - - تم إعداد `requireMention` في المكان الخطأ (يجب أن يكون ضمن `channels.discord.guilds` أو إدخال القناة) + - `groupPolicy="allowlist"` من دون قائمة سماح مطابقة للخادم/القناة + - تم ضبط `requireMention` في المكان الخطأ (يجب أن يكون تحت `channels.discord.guilds` أو ضمن إدخال القناة) - تم حظر المرسل بواسطة قائمة السماح `users` الخاصة بالخادم/القناة - + - السجلات المعتادة: + السجلات النموذجية: - `Listener DiscordMessageListener timed out after 30000ms for event MESSAGE_CREATE` - `Slow listener detected ...` - `discord inbound worker timed out after ...` - مفتاح ضبط ميزانية المستمع: + عنصر التحكم في ميزانية المستمع: - حساب واحد: `channels.discord.eventQueue.listenerTimeout` - حسابات متعددة: `channels.discord.accounts..eventQueue.listenerTimeout` - مفتاح ضبط مهلة تشغيل العامل: + عنصر التحكم في مهلة تشغيل العامل: - حساب واحد: `channels.discord.inboundWorker.runTimeoutMs` - حسابات متعددة: `channels.discord.accounts..inboundWorker.runTimeoutMs` - الافتراضي: `1800000` (30 دقيقة)؛ اضبطه على `0` للتعطيل - خط الأساس الموصى به: + خط أساس موصى به: ```json5 { @@ -1200,15 +1154,15 @@ openclaw logs --follow } ``` - استخدم `eventQueue.listenerTimeout` لإعدادات المستمع البطيئة و`inboundWorker.runTimeoutMs` - فقط إذا كنت تريد صمام أمان منفصلًا لأدوار الوكيل المدرجة في قائمة الانتظار. + استخدم `eventQueue.listenerTimeout` لإعداد المستمع البطيء، واستخدم `inboundWorker.runTimeoutMs` + فقط إذا كنت تريد صمام أمان منفصلًا لأدوار الوكيل الموضوعة في قائمة الانتظار. - تعمل فحوصات الأذونات في `channels status --probe` فقط مع معرّفات القنوات الرقمية. + لا تعمل فحوصات الأذونات في `channels status --probe` إلا مع معرّفات القنوات الرقمية. - إذا كنت تستخدم مفاتيح slug، فقد يظل التطابق في وقت التشغيل يعمل، لكن الفحص لا يمكنه التحقق من الأذونات بالكامل. + إذا كنت تستخدم مفاتيح slug، فقد يظل التطابق وقت التشغيل يعمل، لكن الفحص لا يمكنه التحقق الكامل من الأذونات. @@ -1216,23 +1170,23 @@ openclaw logs --follow - الرسائل الخاصة معطلة: `channels.discord.dm.enabled=false` - سياسة الرسائل الخاصة معطلة: `channels.discord.dmPolicy="disabled"` (الاسم القديم: `channels.discord.dm.policy`) - - في انتظار الموافقة على الاقتران في وضع `pairing` + - بانتظار الموافقة على الاقتران في وضع `pairing` - - يتم تجاهل الرسائل التي يكتبها bot افتراضيًا. + + يتم تجاهل الرسائل التي يكتبها البوت افتراضيًا. - إذا قمت بتعيين `channels.discord.allowBots=true`، فاستخدم قواعد صارمة للإشارات وقائمة السماح لتجنب سلوك الحلقات. - ويفضل استخدام `channels.discord.allowBots="mentions"` لقبول رسائل bot التي تذكر bot فقط. + إذا قمت بضبط `channels.discord.allowBots=true`، فاستخدم قواعد صارمة للإشارة وقوائم السماح لتجنب سلوك الحلقات. + ويفضّل استخدام `channels.discord.allowBots="mentions"` لقبول رسائل البوت التي تشير إلى البوت فقط. - - حافظ على تحديث OpenClaw (`openclaw update`) حتى يكون منطق استعادة استقبال الصوت في Discord موجودًا - - تأكد من أن `channels.discord.voice.daveEncryption=true` (الافتراضي) - - ابدأ من `channels.discord.voice.decryptionFailureTolerance=24` (القيمة الافتراضية من المصدر العلوي) واضبطها فقط عند الحاجة + - أبقِ OpenClaw محدّثًا (`openclaw update`) حتى يكون منطق الاسترداد الخاص باستقبال صوت Discord موجودًا + - أكّد أن `channels.discord.voice.daveEncryption=true` (الافتراضي) + - ابدأ من `channels.discord.voice.decryptionFailureTolerance=24` (الافتراضي من المصدر العلوي) واضبطه فقط عند الحاجة - راقب السجلات بحثًا عن: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` @@ -1249,28 +1203,28 @@ openclaw logs --follow حقول Discord عالية الأهمية: -- بدء التشغيل/التفويض: `enabled` و`token` و`accounts.*` و`allowBots` -- السياسة: `groupPolicy` و`dm.*` و`guilds.*` و`guilds.*.channels.*` -- الأوامر: `commands.native` و`commands.useAccessGroups` و`configWrites` و`slashCommand.*` -- قائمة انتظار الأحداث: `eventQueue.listenerTimeout` (ميزانية المستمع) و`eventQueue.maxQueueSize` و`eventQueue.maxConcurrency` +- بدء التشغيل/التوثيق: `enabled`, `token`, `accounts.*`, `allowBots` +- السياسة: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` +- الأمر: `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` +- قائمة انتظار الأحداث: `eventQueue.listenerTimeout` (ميزانية المستمع)، `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` - العامل الوارد: `inboundWorker.runTimeoutMs` -- الرد/السجل: `replyToMode` و`historyLimit` و`dmHistoryLimit` و`dms.*.historyLimit` -- التسليم: `textChunkLimit` و`chunkMode` و`maxLinesPerMessage` -- البث: `streaming` (اسم مستعار قديم: `streamMode`) و`streaming.preview.toolProgress` و`draftChunk` و`blockStreaming` و`blockStreamingCoalesce` -- الوسائط/إعادة المحاولة: `mediaMaxMb` و`retry` - - يحدد `mediaMaxMb` الحد الأقصى للتحميلات الصادرة إلى Discord (الافتراضي: `100MB`) +- الرد/السجل: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- التسليم: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- البث: `streaming` (الاسم البديل القديم: `streamMode`)، `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- الوسائط/إعادة المحاولة: `mediaMaxMb`, `retry` + - يحدد `mediaMaxMb` الحد الأقصى لعمليات الرفع الصادرة إلى Discord (الافتراضي: `100MB`) - الإجراءات: `actions.*` -- الحالة: `activity` و`status` و`activityType` و`activityUrl` +- الحالة: `activity`, `status`, `activityType`, `activityUrl` - واجهة المستخدم: `ui.components.accentColor` -- الميزات: `threadBindings` و`bindings[]` على المستوى الأعلى (`type: "acp"`) و`pluralkit` و`execApprovals` و`intents` و`agentComponents` و`heartbeat` و`responsePrefix` +- الميزات: `threadBindings`, المستوى الأعلى `bindings[]` (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` ## السلامة والعمليات -- تعامل مع رموز bot المميزة كأسرار (يفضّل `DISCORD_BOT_TOKEN` في البيئات المُدارة). +- تعامل مع رموز البوت على أنها أسرار (ويُفضّل `DISCORD_BOT_TOKEN` في البيئات الخاضعة للإشراف). - امنح أقل قدر ممكن من أذونات Discord. -- إذا كانت حالة/نشر الأوامر قديمة، فأعد تشغيل Gateway وتحقق مرة أخرى باستخدام `openclaw channels status --probe`. +- إذا كانت حالة نشر الأوامر/الحالة قديمة، فأعد تشغيل Gateway ثم أعد التحقق باستخدام `openclaw channels status --probe`. -## ذو صلة +## ذي صلة - [الاقتران](/ar/channels/pairing) - [المجموعات](/ar/channels/groups) diff --git a/docs/ar/channels/irc.md b/docs/ar/channels/irc.md index 65e8529e0..7a5b04ab9 100644 --- a/docs/ar/channels/irc.md +++ b/docs/ar/channels/irc.md @@ -1,14 +1,14 @@ --- read_when: - - تريد توصيل OpenClaw بقنوات IRC أو الرسائل المباشرة - - أنت تقوم بتكوين قوائم السماح في IRC، أو سياسة المجموعات، أو تقييد الإشارات -summary: إعداد Plugin الخاص بـ IRC، وعناصر التحكم في الوصول، واستكشاف الأخطاء وإصلاحها + - تريد توصيل OpenClaw بقنوات IRC أو بالرسائل المباشرة + - أنت تقوم بتكوين قوائم السماح في IRC، أو سياسة المجموعات، أو تقييد الإشارات. +summary: إعداد Plugin ‏IRC، وضوابط الوصول، واستكشاف الأخطاء وإصلاحها title: IRC x-i18n: - generated_at: "2026-04-23T07:18:44Z" + generated_at: "2026-04-23T13:58:00Z" model: gpt-5.4 provider: openai - source_hash: 28d0929e1e3f882eca1ba46eeb5e3fa537baaebfedbe2cf4079946cd9b432c87 + source_hash: e198c03db9aaf4ec64db462d44d42aa352a2ddba808bcd29e21eb2791d9755ad source_path: channels/irc.md workflow: 15 --- @@ -38,7 +38,7 @@ x-i18n: } ``` -يُفضَّل استخدام خادم IRC خاص لتنسيق البوت. إذا كنت تستخدم عمدًا شبكة IRC عامة، فمن الخيارات الشائعة Libera.Chat و OFTC و Snoonet. تجنّب القنوات العامة المتوقعة لحركة المرور الخلفية الخاصة بالبوت أو السرب. +يُفضّل استخدام خادم IRC خاص لتنسيق البوت. إذا كنت تستخدم عمدًا شبكة IRC عامة، فمن الخيارات الشائعة Libera.Chat وOFTC وSnoonet. تجنّب القنوات العامة المتوقعة لحركة المرور الخلفية الخاصة بالبوت أو السرب. 3. ابدأ/أعد تشغيل Gateway: @@ -51,35 +51,35 @@ openclaw gateway run - القيمة الافتراضية لـ `channels.irc.dmPolicy` هي `"pairing"`. - القيمة الافتراضية لـ `channels.irc.groupPolicy` هي `"allowlist"`. - عند استخدام `groupPolicy="allowlist"`، اضبط `channels.irc.groups` لتعريف القنوات المسموح بها. -- استخدم TLS (`channels.irc.tls=true`) ما لم تكن تقبل عمدًا النقل النصي غير المشفر. +- استخدم TLS (`channels.irc.tls=true`) إلا إذا كنت تقبل عمدًا نقلًا نصيًا غير مشفر. ## التحكم في الوصول -هناك «بوابتان» منفصلتان لقنوات IRC: +هناك “بوابتان” منفصلتان لقنوات IRC: -1. **وصول القناة** (`groupPolicy` + `groups`): هل يقبل البوت الرسائل من القناة أساسًا. -2. **وصول المرسل** (`groupAllowFrom` / الإعداد الخاص بكل قناة `groups["#channel"].allowFrom`): من المسموح له بتشغيل البوت داخل تلك القناة. +1. **الوصول إلى القناة** (`groupPolicy` + `groups`): ما إذا كان البوت يقبل الرسائل من القناة أصلًا. +2. **وصول المرسل** (`groupAllowFrom` / `groups["#channel"].allowFrom` لكل قناة): من المسموح له بتفعيل البوت داخل تلك القناة. مفاتيح التكوين: - قائمة السماح للرسائل المباشرة (وصول مرسل الرسائل المباشرة): `channels.irc.allowFrom` - قائمة السماح لمرسلي المجموعات (وصول مرسل القناة): `channels.irc.groupAllowFrom` - عناصر التحكم لكل قناة (القناة + المرسل + قواعد الإشارة): `channels.irc.groups["#channel"]` -- يتيح `channels.irc.groupPolicy="open"` القنوات غير المضبوطة (**لكنها تظل مقيدة بالإشارة افتراضيًا**) +- يتيح `channels.irc.groupPolicy="open"` القنوات غير المضبوطة (**مع بقاء تقييد الإشارات مفعّلًا افتراضيًا**) -يجب أن تستخدم إدخالات قائمة السماح هويات مرسل ثابتة (`nick!user@host`). -مطابقة الاسم المختصر فقط قابلة للتغير، ولا تُفعَّل إلا عند تعيين `channels.irc.dangerouslyAllowNameMatching: true`. +يجب أن تستخدم عناصر قائمة السماح هويات مرسل ثابتة (`nick!user@host`). +مطابقة الاسم المختصر فقط قابلة للتغيّر ولا تُفعّل إلا عند ضبط `channels.irc.dangerouslyAllowNameMatching: true`. -### مشكلة شائعة: `allowFrom` مخصص للرسائل المباشرة، وليس للقنوات +### ملاحظة شائعة: `allowFrom` مخصّص للرسائل المباشرة وليس للقنوات إذا رأيت سجلات مثل: - `irc: drop group sender alice!ident@host (policy=allowlist)` -...فهذا يعني أن المرسل غير مسموح له في رسائل **المجموعة/القناة**. أصلح ذلك إما عبر: +...فهذا يعني أن المرسل غير مسموح له برسائل **المجموعة/القناة**. أصلح ذلك بإحدى الطريقتين: -- تعيين `channels.irc.groupAllowFrom` (عام لكل القنوات)، أو -- تعيين قوائم سماح المرسلين لكل قناة: `channels.irc.groups["#channel"].allowFrom` +- ضبط `channels.irc.groupAllowFrom` (عام لكل القنوات)، أو +- ضبط قوائم سماح المرسلين لكل قناة: `channels.irc.groups["#channel"].allowFrom` مثال (السماح لأي شخص في `#tuirc-dev` بالتحدث إلى البوت): @@ -98,7 +98,7 @@ openclaw gateway run ## تشغيل الردود (الإشارات) -حتى إذا كانت القناة مسموحًا بها (عبر `groupPolicy` + `groups`) وكان المرسل مسموحًا به، فإن OpenClaw يستخدم افتراضيًا **تقييد الإشارات** في سياقات المجموعات. +حتى إذا كانت القناة مسموحًا بها (عبر `groupPolicy` + `groups`) وكان المرسل مسموحًا به، يستخدم OpenClaw افتراضيًا **تقييد الإشارات** في سياقات المجموعات. هذا يعني أنك قد ترى سجلات مثل `drop channel … (missing-mention)` ما لم تتضمن الرسالة نمط إشارة يطابق البوت. @@ -120,7 +120,7 @@ openclaw gateway run } ``` -أو للسماح **لكل** قنوات IRC (من دون قائمة سماح لكل قناة) مع الرد أيضًا من دون إشارات: +أو للسماح **بجميع** قنوات IRC (من دون قائمة سماح لكل قناة) مع الرد أيضًا من دون إشارات: ```json5 { @@ -137,8 +137,8 @@ openclaw gateway run ## ملاحظة أمنية (موصى بها للقنوات العامة) -إذا سمحت بـ `allowFrom: ["*"]` في قناة عامة، فيمكن لأي شخص توجيه أوامر إلى البوت. -لتقليل المخاطر، قيّد الأدوات لتلك القناة. +إذا سمحت بـ `allowFrom: ["*"]` في قناة عامة، فسيتمكن أي شخص من توجيه أوامر إلى البوت. +ولتقليل المخاطر، قيّد الأدوات لتلك القناة. ### الأدوات نفسها للجميع في القناة @@ -159,9 +159,9 @@ openclaw gateway run } ``` -### أدوات مختلفة لكل مرسل (المالك يحصل على صلاحيات أكبر) +### أدوات مختلفة حسب المرسل (المالك يحصل على صلاحيات أكبر) -استخدم `toolsBySender` لتطبيق سياسة أشد على `"*"` وسياسة أخف على اسمك: +استخدم `toolsBySender` لتطبيق سياسة أكثر تشددًا على `"*"` وسياسة أخف على اسمك: ```json5 { @@ -189,10 +189,10 @@ openclaw gateway run - يجب أن تستخدم مفاتيح `toolsBySender` البادئة `id:` لقيم هوية مرسل IRC: `id:eigen` أو `id:eigen!~eigen@174.127.248.171` لمطابقة أقوى. -- لا تزال المفاتيح القديمة غير المسبوقة ببادئة مقبولة، وتُطابَق بصيغة `id:` فقط. -- تفوز أول سياسة مرسل مطابقة؛ وتكون `"*"` هي المطابقة الاحتياطية العامة. +- لا تزال المفاتيح القديمة غير المسبوقة ببادئة مقبولة وتُطابق بصفتها `id:` فقط. +- أول سياسة مرسل مطابقة هي التي تُطبّق؛ و`"*"` هي الاحتياط العام. -للمزيد حول وصول المجموعات مقابل تقييد الإشارات (وكيفية تفاعلهما)، راجع: [/channels/groups](/ar/channels/groups). +للمزيد حول الوصول إلى المجموعات مقابل تقييد الإشارات (وكيفية تفاعلهما)، راجع: [/channels/groups](/ar/channels/groups). ## NickServ @@ -227,7 +227,7 @@ openclaw gateway run } ``` -عطّل `register` بعد تسجيل الاسم لتجنب محاولات `REGISTER` المتكررة. +عطّل `register` بعد تسجيل الاسم لتجنّب محاولات REGISTER المتكررة. ## متغيرات البيئة @@ -244,19 +244,13 @@ openclaw gateway run - `IRC_NICKSERV_PASSWORD` - `IRC_NICKSERV_REGISTER_EMAIL` - -`IRC_HOST` موجود في قائمة حظر كتل نقاط النهاية ولا يمكن تعيينه من ملف -`.env` في مساحة العمل. يجب أن يأتي من بيئة الصدفة أو من بيئة عملية Gateway -حتى لا تتمكن مساحات العمل غير الموثوقة من إعادة توجيه حركة IRC إلى -خادم مختلف. راجع [ملفات `.env` لمساحة العمل](/ar/gateway/security) للاطلاع على القائمة -الكاملة. - +لا يمكن تعيين `IRC_HOST` من ملف `.env` خاص بمساحة العمل؛ راجع [ملفات `.env` لمساحة العمل](/ar/gateway/security). ## استكشاف الأخطاء وإصلاحها -- إذا كان البوت يتصل لكنه لا يرد أبدًا في القنوات، فتحقق من `channels.irc.groups` **وكذلك** مما إذا كان تقييد الإشارات يسقط الرسائل (`missing-mention`). إذا كنت تريد أن يرد من دون تنبيهات، فاضبط `requireMention:false` للقناة. -- إذا فشل تسجيل الدخول، فتحقق من توفر الاسم المستعار وكلمة مرور الخادم. -- إذا فشل TLS على شبكة مخصصة، فتحقق من المضيف/المنفذ وإعداد الشهادة. +- إذا كان البوت يتصل لكنه لا يرد أبدًا في القنوات، فتحقق من `channels.irc.groups` **وكذلك** مما إذا كان تقييد الإشارات يُسقط الرسائل (`missing-mention`). إذا كنت تريد أن يرد من دون تنبيهات، فاضبط `requireMention:false` للقناة. +- إذا فشل تسجيل الدخول، فتحقق من توفر الاسم وكلمة مرور الخادم. +- إذا فشل TLS على شبكة مخصصة، فتحقق من إعدادات المضيف/المنفذ والشهادة. ## ذو صلة diff --git a/docs/ar/channels/matrix.md b/docs/ar/channels/matrix.md index 809530638..cc267f68a 100644 --- a/docs/ar/channels/matrix.md +++ b/docs/ar/channels/matrix.md @@ -1,29 +1,29 @@ --- read_when: - إعداد Matrix في OpenClaw - - تهيئة التشفير التام بين الطرفين والتحقق في Matrix -summary: حالة دعم Matrix، والإعداد، وأمثلة التهيئة + - تكوين التشفير من طرف إلى طرف والتحقق في Matrix +summary: حالة دعم Matrix، والإعداد، وأمثلة التكوين title: Matrix x-i18n: - generated_at: "2026-04-23T07:18:54Z" + generated_at: "2026-04-23T13:58:00Z" model: gpt-5.4 provider: openai - source_hash: 678d0e678cbb52a9817d5a1f4977a738820f6d0228f1810614c9c195c0de7218 + source_hash: 14873e9d65994138d26ad0bc1bf9bc6e00bea17f9306d592c757503d363de71a source_path: channels/matrix.md workflow: 15 --- # Matrix -Matrix هي قناة Plugin مضمّنة في OpenClaw. -وهي تستخدم `matrix-js-sdk` الرسمي وتدعم الرسائل المباشرة، والغرف، وسلاسل الرسائل، والوسائط، والتفاعلات، والاستطلاعات، والموقع، والتشفير التام بين الطرفين. +‏Matrix هو Plugin قناة مضمّن لـ OpenClaw. +يستخدم `matrix-js-sdk` الرسمي ويدعم الرسائل الخاصة، والغرف، والخيوط، والوسائط، والتفاعلات، والاستطلاعات، والموقع، والتشفير من طرف إلى طرف. -## Plugin المضمّن +## Plugin مضمّن يأتي Matrix كـ Plugin مضمّن في إصدارات OpenClaw الحالية، لذلك لا تحتاج -الإصدارات المجمّعة العادية إلى تثبيت منفصل. +البنيات المعبأة العادية إلى تثبيت منفصل. -إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا لا يتضمن Matrix، فقم بتثبيته +إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا يستبعد Matrix، فثبّته يدويًا: التثبيت من npm: @@ -38,22 +38,22 @@ openclaw plugins install @openclaw/matrix openclaw plugins install ./path/to/local/matrix-plugin ``` -راجع [Plugins](/ar/tools/plugin) لمعرفة سلوك Plugin وقواعد التثبيت. +راجع [Plugins](/ar/tools/plugin) لمعرفة سلوك الـ Plugin وقواعد التثبيت. ## الإعداد -1. تأكد من أن Plugin الخاص بـ Matrix متاح. - - تتضمنه بالفعل إصدارات OpenClaw المجمعة الحالية. +1. تأكد من أن Plugin ‏Matrix متاح. + - إصدارات OpenClaw المعبأة الحالية تتضمنه بالفعل. - يمكن لعمليات التثبيت الأقدم/المخصصة إضافته يدويًا باستخدام الأوامر أعلاه. -2. أنشئ حساب Matrix على الخادم المنزلي الخاص بك. -3. هيّئ `channels.matrix` باستخدام أحد الخيارين التاليين: +2. أنشئ حساب Matrix على خادمك المنزلي. +3. كوّن `channels.matrix` باستخدام أحد الخيارين: - `homeserver` + `accessToken`، أو - `homeserver` + `userId` + `password`. 4. أعد تشغيل Gateway. -5. ابدأ رسالة مباشرة مع الروبوت أو ادعه إلى غرفة. - - تعمل دعوات Matrix الجديدة فقط عندما يسمح `channels.matrix.autoJoin` بها. +5. ابدأ رسالة خاصة مع البوت أو ادعه إلى غرفة. + - تعمل دعوات Matrix الجديدة فقط عندما يسمح `channels.matrix.autoJoin` بذلك. -مسارات الإعداد التفاعلية: +مسارات الإعداد التفاعلي: ```bash openclaw channels add @@ -62,31 +62,28 @@ openclaw configure --section channels يطلب معالج Matrix ما يلي: -- عنوان URL للخادم المنزلي -- طريقة المصادقة: access token أو كلمة المرور -- معرّف المستخدم (لمصادقة كلمة المرور فقط) -- اسم اختياري للجهاز -- ما إذا كان يجب تمكين التشفير التام بين الطرفين -- ما إذا كان يجب تهيئة وصول الغرف والانضمام التلقائي للدعوات +- عنوان URL لـ homeserver +- طريقة المصادقة: access token أو كلمة مرور +- معرّف المستخدم (للمصادقة بكلمة المرور فقط) +- اسم جهاز اختياري +- ما إذا كان يجب تمكين التشفير من طرف إلى طرف +- ما إذا كان يجب تكوين الوصول إلى الغرف والانضمام التلقائي للدعوات -سلوكيات المعالج الأساسية: +السلوكيات الأساسية للمعالج: -- إذا كانت متغيرات بيئة مصادقة Matrix موجودة بالفعل ولم يكن ذلك الحساب يحتوي بالفعل على مصادقة محفوظة في التهيئة، فسيعرض المعالج اختصارًا لمتغيرات البيئة للإبقاء على المصادقة في متغيرات البيئة. -- تُطبّع أسماء الحسابات إلى معرّف الحساب. على سبيل المثال، يتحول `Ops Bot` إلى `ops-bot`. -- تقبل إدخالات قائمة السماح للرسائل المباشرة `@user:server` مباشرة؛ ولا تعمل أسماء العرض إلا عندما يعثر البحث المباشر في الدليل على تطابق واحد دقيق. -- تقبل إدخالات قائمة السماح للغرف معرّفات الغرف والأسماء المستعارة مباشرة. يُفضّل استخدام `!room:server` أو `#alias:server`؛ ويتم تجاهل الأسماء غير المحلولة أثناء التشغيل عند تحليل قائمة السماح. +- إذا كانت متغيرات البيئة الخاصة بمصادقة Matrix موجودة بالفعل ولم يكن لهذا الحساب مصادقة محفوظة مسبقًا في الإعدادات، فسيعرض المعالج اختصارًا لاستخدام env للإبقاء على المصادقة في متغيرات البيئة. +- تتم تسوية أسماء الحسابات إلى معرّف الحساب. على سبيل المثال، يتحول `Ops Bot` إلى `ops-bot`. +- تقبل إدخالات قائمة السماح للرسائل الخاصة `@user:server` مباشرة؛ ولا تعمل أسماء العرض إلا عندما يعثر البحث المباشر في الدليل على تطابق واحد دقيق. +- تقبل إدخالات قائمة السماح للغرف معرّفات الغرف والأسماء المستعارة مباشرة. يُفضّل استخدام `!room:server` أو `#alias:server`؛ ويتم تجاهل الأسماء غير المحلولة وقت التشغيل أثناء حل قائمة السماح. - في وضع قائمة السماح للانضمام التلقائي للدعوات، استخدم فقط أهداف الدعوات المستقرة: `!roomId:server` أو `#alias:server` أو `*`. تُرفض أسماء الغرف العادية. -- لتحليل أسماء الغرف قبل الحفظ، استخدم `openclaw channels resolve --channel matrix "Project Room"`. +- لحل أسماء الغرف قبل الحفظ، استخدم `openclaw channels resolve --channel matrix "Project Room"`. القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`. -إذا تركتها بدون تعيين، فلن ينضم الروبوت إلى الغرف المدعو إليها أو الدعوات -الجديدة بأسلوب الرسائل المباشرة، لذلك لن يظهر في المجموعات الجديدة أو الرسائل -المباشرة المدعو إليها ما لم تنضم يدويًا أولًا. +إذا تركته غير معيّن، فلن ينضم البوت إلى الغرف المدعو إليها أو إلى الدعوات الجديدة بأسلوب الرسائل الخاصة، لذلك لن يظهر في المجموعات الجديدة أو الرسائل الخاصة المدعو إليها ما لم تنضم يدويًا أولًا. -اضبط `autoJoin: "allowlist"` مع `autoJoinAllowlist` لتقييد الدعوات التي -يقبلها، أو اضبط `autoJoin: "always"` إذا كنت تريد منه الانضمام إلى كل دعوة. +عيّن `autoJoin: "allowlist"` مع `autoJoinAllowlist` لتقييد الدعوات التي يقبلها، أو عيّن `autoJoin: "always"` إذا كنت تريد منه الانضمام إلى كل دعوة. في وضع `allowlist`، لا يقبل `autoJoinAllowlist` إلا `!roomId:server` أو `#alias:server` أو `*`. @@ -121,7 +118,7 @@ openclaw configure --section channels } ``` -إعداد أدنى يعتمد على token: +إعداد أساسي يعتمد على token: ```json5 { @@ -153,10 +150,10 @@ openclaw configure --section channels ``` يخزن Matrix بيانات الاعتماد المؤقتة في `~/.openclaw/credentials/matrix/`. -ويستخدم الحساب الافتراضي `credentials.json`؛ بينما تستخدم الحسابات المسماة `credentials-.json`. -وعند وجود بيانات اعتماد مخزنة مؤقتًا هناك، يتعامل OpenClaw مع Matrix على أنه مُهيأ لأغراض الإعداد وdoctor واكتشاف حالة القناة، حتى إذا لم تكن المصادقة الحالية مضبوطة مباشرة في التهيئة. +يستخدم الحساب الافتراضي `credentials.json`؛ وتستخدم الحسابات المسماة `credentials-.json`. +عندما توجد بيانات اعتماد مؤقتة هناك، يتعامل OpenClaw مع Matrix على أنه مُكوَّن لأغراض الإعداد، وdoctor، واكتشاف حالة القناة، حتى إذا لم تكن المصادقة الحالية مضبوطة مباشرة في الإعدادات. -المكافئات عبر متغيرات البيئة (تُستخدم عندما لا يكون مفتاح التهيئة مضبوطًا): +المكافئات من متغيرات البيئة (تُستخدم عندما لا يكون مفتاح الإعداد مضبوطًا): - `MATRIX_HOMESERVER` - `MATRIX_ACCESS_TOKEN` @@ -165,7 +162,7 @@ openclaw configure --section channels - `MATRIX_DEVICE_ID` - `MATRIX_DEVICE_NAME` -للحسابات غير الافتراضية، استخدم متغيرات بيئة مقيّدة بالحساب: +للحسابات غير الافتراضية، استخدم متغيرات البيئة الخاصة بكل حساب: - `MATRIX__HOMESERVER` - `MATRIX__ACCESS_TOKEN` @@ -179,27 +176,21 @@ openclaw configure --section channels - `MATRIX_OPS_HOMESERVER` - `MATRIX_OPS_ACCESS_TOKEN` -لمعرّف الحساب المطبّع `ops-bot`، استخدم: +ولمعرّف الحساب المُسوّى `ops-bot`، استخدم: - `MATRIX_OPS_X2D_BOT_HOMESERVER` - `MATRIX_OPS_X2D_BOT_ACCESS_TOKEN` -يقوم Matrix بتهريب علامات الترقيم في معرّفات الحسابات للحفاظ على متغيرات البيئة المقيّدة خالية من التعارضات. -فعلى سبيل المثال، يتحول `-` إلى `_X2D_`، ولذلك يتم تعيين `ops-prod` إلى `MATRIX_OPS_X2D_PROD_*`. +يهرب Matrix علامات الترقيم في معرّفات الحسابات للحفاظ على عدم تعارض متغيرات البيئة الخاصة بالحسابات. +على سبيل المثال، يتحول `-` إلى `_X2D_`، لذا يتم تعيين `ops-prod` إلى `MATRIX_OPS_X2D_PROD_*`. -لا يعرض المعالج التفاعلي اختصار متغيرات البيئة إلا عندما تكون متغيرات بيئة المصادقة تلك موجودة بالفعل ولا يكون الحساب المحدد يحتوي بالفعل على مصادقة Matrix محفوظة في التهيئة. +لا يعرض المعالج التفاعلي اختصار متغيرات البيئة إلا عندما تكون متغيرات بيئة المصادقة هذه موجودة بالفعل ولا يكون للحساب المحدد مصادقة Matrix محفوظة مسبقًا في الإعدادات. - -`MATRIX_HOMESERVER` موجود في قائمة حظر كتل نقاط النهاية ولا يمكن ضبطه من ملف -`.env` الخاص بمساحة العمل. يجب أن يأتي من بيئة shell أو بيئة عملية Gateway -حتى لا تتمكن مساحات العمل غير الموثوقة من إعادة توجيه حركة Matrix إلى خادم -منزلي مختلف. راجع -[ملفات `.env` لمساحة العمل](/ar/gateway/security) للاطلاع على القائمة الكاملة. - +لا يمكن تعيين `MATRIX_HOMESERVER` من ملف `.env` لمساحة العمل؛ راجع [ملفات `.env` لمساحة العمل](/ar/gateway/security). -## مثال على التهيئة +## مثال على التكوين -هذا مثال عملي أساسي للتهيئة مع إقران الرسائل المباشرة، وقائمة سماح للغرف، وتمكين التشفير التام بين الطرفين: +هذا إعداد أساسي عملي مع إقران الرسائل الخاصة، وقائمة سماح للغرف، وتمكين التشفير من طرف إلى طرف: ```json5 { @@ -234,16 +225,16 @@ openclaw configure --section channels } ``` -تنطبق `autoJoin` على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل المباشرة. لا يستطيع OpenClaw -تصنيف غرفة مدعو إليها بشكل موثوق على أنها رسالة مباشرة أو مجموعة وقت الدعوة، لذلك تمر جميع الدعوات عبر `autoJoin` -أولًا. وتُطبق `dm.policy` بعد انضمام الروبوت وتصنيف الغرفة على أنها رسالة مباشرة. +ينطبق `autoJoin` على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل الخاصة. لا يستطيع OpenClaw +تصنيف الغرفة المدعو إليها بشكل موثوق على أنها رسالة خاصة أو مجموعة وقت الدعوة، لذلك تمر جميع الدعوات عبر `autoJoin` +أولًا. ينطبق `dm.policy` بعد انضمام البوت وتصنيف الغرفة كرسالة خاصة. ## معاينات البث -بث الردود في Matrix هو خيار يتطلب التفعيل. +بث الردود في Matrix هو خيار اختياري. -اضبط `channels.matrix.streaming` على `"partial"` عندما تريد من OpenClaw إرسال معاينة مباشرة واحدة -للرد، وتحرير هذه المعاينة في مكانها بينما يولّد النموذج النص، ثم إنهاءها عند +عيّن `channels.matrix.streaming` إلى `"partial"` عندما تريد أن يرسل OpenClaw +رد معاينة مباشرًا واحدًا، ويعدّل هذه المعاينة في مكانها أثناء قيام النموذج بإنشاء النص، ثم ينهيها عند اكتمال الرد: ```json5 @@ -256,38 +247,38 @@ openclaw configure --section channels } ``` -- `streaming: "off"` هو الوضع الافتراضي. ينتظر OpenClaw الرد النهائي ويرسله مرة واحدة. -- ينشئ `streaming: "partial"` رسالة معاينة واحدة قابلة للتحرير لكتلة المساعد الحالية باستخدام رسائل Matrix النصية العادية. يحافظ هذا على سلوك الإشعارات القديم في Matrix القائم على المعاينة أولًا، لذلك قد تقوم العملاء القياسيون بالإشعار عند أول نص معاينة متدفق بدلًا من الكتلة المكتملة. -- ينشئ `streaming: "quiet"` إشعار معاينة هادئًا واحدًا قابلًا للتحرير لكتلة المساعد الحالية. استخدم هذا فقط عندما تهيئ أيضًا قواعد push للمستلمين من أجل تعديلات المعاينات النهائية. -- يفعّل `blockStreaming: true` رسائل تقدم Matrix منفصلة. عند تمكين بث المعاينة، يحتفظ Matrix بالمسودة المباشرة للكتلة الحالية ويحافظ على الكتل المكتملة كرسائل منفصلة. -- عندما يكون بث المعاينة قيد التشغيل ويكون `blockStreaming` معطّلًا، يعدّل Matrix المسودة المباشرة في مكانها وينهي الحدث نفسه عند اكتمال الكتلة أو الدور. -- إذا لم تعد المعاينة تتسع في حدث Matrix واحد، يوقف OpenClaw بث المعاينة ويعود إلى التسليم النهائي العادي. -- تظل ردود الوسائط ترسل المرفقات بشكل طبيعي. وإذا تعذر إعادة استخدام معاينة قديمة بأمان، يقوم OpenClaw بتنقيحها قبل إرسال رد الوسائط النهائي. -- تتطلب تعديلات المعاينة استدعاءات إضافية إلى Matrix API. اترك البث معطلًا إذا كنت تريد السلوك الأكثر تحفظًا تجاه حدود المعدل. +- `streaming: "off"` هو الإعداد الافتراضي. ينتظر OpenClaw الرد النهائي ويرسله مرة واحدة. +- ينشئ `streaming: "partial"` رسالة معاينة واحدة قابلة للتعديل لكتلة المساعد الحالية باستخدام رسائل Matrix النصية العادية. يحافظ هذا على سلوك الإشعارات القديم في Matrix القائم على المعاينة أولًا، لذلك قد ترسل العملاء القياسية إشعارًا عند أول نص معاينة متدفق بدلًا من الكتلة المكتملة. +- ينشئ `streaming: "quiet"` إشعار معاينة هادئًا واحدًا قابلًا للتعديل لكتلة المساعد الحالية. استخدم هذا فقط عندما تقوم أيضًا بتكوين قواعد push للمستلمين لتعديلات المعاينة النهائية. +- يتيح `blockStreaming: true` رسائل تقدم Matrix منفصلة. عند تمكين بث المعاينة، يحتفظ Matrix بالمسودة المباشرة للكتلة الحالية ويحافظ على الكتل المكتملة كرسائل منفصلة. +- عند تشغيل بث المعاينة وإيقاف `blockStreaming`، يعدّل Matrix المسودة المباشرة في مكانها وينهي الحدث نفسه عند اكتمال الكتلة أو الدور. +- إذا لم تعد المعاينة مناسبة ضمن حدث Matrix واحد، يوقف OpenClaw بث المعاينة ويعود إلى التسليم النهائي العادي. +- تظل ردود الوسائط ترسل المرفقات بشكل عادي. إذا تعذر إعادة استخدام معاينة قديمة بأمان، فسيحذف OpenClaw محتواها قبل إرسال الرد النهائي للوسائط. +- تكلف تعديلات المعاينة استدعاءات إضافية إلى Matrix API. اترك البث معطلًا إذا كنت تريد السلوك الأكثر تحفظًا فيما يتعلق بحدود المعدل. لا يفعّل `blockStreaming` معاينات المسودات بمفرده. استخدم `streaming: "partial"` أو `streaming: "quiet"` لتعديلات المعاينة؛ ثم أضف `blockStreaming: true` فقط إذا كنت تريد أيضًا أن تظل كتل المساعد المكتملة مرئية كرسائل تقدم منفصلة. -إذا كنت تحتاج إلى إشعارات Matrix القياسية بدون قواعد push مخصصة، فاستخدم `streaming: "partial"` لسلوك المعاينة أولًا أو اترك `streaming` معطّلًا للتسليم النهائي فقط. مع `streaming: "off"`: +إذا كنت تحتاج إلى إشعارات Matrix القياسية بدون قواعد push مخصصة، فاستخدم `streaming: "partial"` لسلوك المعاينة أولًا أو اترك `streaming` معطلًا للتسليم النهائي فقط. عند استخدام `streaming: "off"`: -- يرسل `blockStreaming: true` كل كتلة مكتملة كرسالة Matrix عادية مُرسِلة للإشعارات. -- يرسل `blockStreaming: false` الرد النهائي المكتمل فقط كرسالة Matrix عادية مُرسِلة للإشعارات. +- يرسل `blockStreaming: true` كل كتلة مكتملة كرسالة Matrix عادية تُصدر إشعارًا. +- يرسل `blockStreaming: false` الرد المكتمل النهائي فقط كرسالة Matrix عادية تُصدر إشعارًا. -### قواعد push مستضافة ذاتيًا للمعاينات الهادئة النهائية +### قواعد push مستضافة ذاتيًا للمعاينات النهائية الهادئة -إذا كنت تشغّل بنية Matrix التحتية الخاصة بك وتريد أن ترسل المعاينات الهادئة إشعارًا فقط عند اكتمال كتلة أو -الرد النهائي، فاضبط `streaming: "quiet"` وأضف قاعدة push لكل مستخدم مستلم من أجل تعديلات المعاينات النهائية. +إذا كنت تدير بنية Matrix التحتية الخاصة بك وتريد أن ترسل المعاينات الهادئة إشعارًا فقط عند اكتمال كتلة أو +الرد النهائي، فعيّن `streaming: "quiet"` وأضف قاعدة push لكل مستخدم لتعديلات المعاينة النهائية. -يكون هذا عادة إعدادًا على مستوى المستخدم المستلم، وليس تغييرًا عامًا على مستوى الخادم المنزلي: +يكون هذا عادة إعدادًا على مستوى المستخدم المستلم، وليس تغييرًا عامًا في إعدادات homeserver: خريطة سريعة قبل أن تبدأ: - المستخدم المستلم = الشخص الذي يجب أن يتلقى الإشعار -- مستخدم الروبوت = حساب Matrix الخاص بـ OpenClaw الذي يرسل الرد -- استخدم access token الخاص بالمستخدم المستلم في استدعاءات API أدناه -- طابق `sender` في قاعدة push مع MXID الكامل لمستخدم الروبوت +- مستخدم البوت = حساب Matrix الخاص بـ OpenClaw الذي يرسل الرد +- استخدم access token الخاص بالمستخدم المستلم لاستدعاءات API أدناه +- طابق `sender` في قاعدة push مع MXID الكامل لمستخدم البوت -1. هيّئ OpenClaw لاستخدام المعاينات الهادئة: +1. كوّن OpenClaw لاستخدام المعاينات الهادئة: ```json5 { @@ -299,12 +290,12 @@ openclaw configure --section channels } ``` -2. تأكد من أن حساب المستلم يتلقى بالفعل إشعارات Matrix العادية. لا تعمل قواعد المعاينة - الهادئة إلا إذا كان لدى ذلك المستخدم بالفعل pushers/أجهزة عاملة. +2. تأكد من أن حساب المستلم يتلقى بالفعل إشعارات push العادية من Matrix. تعمل قواعد المعاينة الهادئة + فقط إذا كان لدى هذا المستخدم pushers/أجهزة عاملة بالفعل. 3. احصل على access token الخاص بالمستخدم المستلم. - - استخدم token الخاص بالمستخدم المستلم للرسالة، وليس token الخاص بالروبوت. - - غالبًا ما تكون إعادة استخدام token جلسة عميل موجودة بالفعل هي الأسهل. + - استخدم token الخاص بالمستخدم المتلقي، وليس token الخاص بالبوت. + - تكون إعادة استخدام token جلسة عميل موجودة غالبًا هي الأسهل. - إذا كنت بحاجة إلى إصدار token جديد، يمكنك تسجيل الدخول عبر Matrix Client-Server API القياسي: ```bash @@ -321,7 +312,7 @@ curl -sS -X POST \ }' ``` -4. تحقق من أن حساب المستلم لديه بالفعل pushers: +4. تحقق من أن حساب المستلم لديه pushers بالفعل: ```bash curl -sS \ @@ -332,7 +323,7 @@ curl -sS \ إذا لم يُرجع هذا أي pushers/أجهزة نشطة، فأصلح إشعارات Matrix العادية أولًا قبل إضافة قاعدة OpenClaw أدناه. -يضع OpenClaw علامة على تعديلات معاينات النصوص النهائية فقط باستخدام: +يضع OpenClaw علامة على تعديلات المعاينة النهائية النصية فقط باستخدام: ```json { @@ -340,7 +331,7 @@ curl -sS \ } ``` -5. أنشئ قاعدة push override لكل حساب مستلم يجب أن يتلقى هذه الإشعارات: +5. أنشئ قاعدة push من نوع override لكل حساب مستلم يجب أن يتلقى هذه الإشعارات: ```bash curl -sS -X PUT \ @@ -372,21 +363,21 @@ curl -sS -X PUT \ استبدل هذه القيم قبل تشغيل الأمر: -- `https://matrix.example.org`: عنوان URL الأساسي للخادم المنزلي الخاص بك -- `$USER_ACCESS_TOKEN`: access token الخاص بالمستخدم المستلم -- `openclaw-finalized-preview-botname`: معرّف قاعدة فريد لهذا الروبوت لهذا المستخدم المستلم -- `@bot:example.org`: MXID الخاص بروبوت Matrix في OpenClaw، وليس MXID الخاص بالمستخدم المستلم +- `https://matrix.example.org`: عنوان URL الأساسي لـ homeserver لديك +- `$USER_ACCESS_TOKEN`: access token الخاص بالمستخدم المتلقي +- `openclaw-finalized-preview-botname`: معرّف قاعدة فريد لهذا البوت لهذا المستخدم المتلقي +- `@bot:example.org`: ‏MXID بوت Matrix الخاص بـ OpenClaw، وليس MXID الخاص بالمستخدم المتلقي -مهم لإعدادات الروبوتات المتعددة: +مهم لإعدادات البوتات المتعددة: -- تُفهرس قواعد push بواسطة `ruleId`. وتؤدي إعادة تشغيل `PUT` على معرّف القاعدة نفسه إلى تحديث تلك القاعدة نفسها. -- إذا كان يجب على مستخدم مستلم واحد تلقي إشعارات من عدة حسابات Matrix bot خاصة بـ OpenClaw، فأنشئ قاعدة واحدة لكل روبوت مع معرّف قاعدة فريد لكل مطابقة `sender`. -- نمط بسيط لذلك هو `openclaw-finalized-preview-`، مثل `openclaw-finalized-preview-ops` أو `openclaw-finalized-preview-support`. +- تُفهرس قواعد push بواسطة `ruleId`. تؤدي إعادة تشغيل `PUT` على معرّف القاعدة نفسه إلى تحديث تلك القاعدة نفسها. +- إذا كان يجب على مستخدم مستلم واحد تلقي إشعارات من عدة حسابات بوت Matrix خاصة بـ OpenClaw، فأنشئ قاعدة واحدة لكل بوت مع معرّف قاعدة فريد لكل تطابق `sender`. +- نمط بسيط هو `openclaw-finalized-preview-`، مثل `openclaw-finalized-preview-ops` أو `openclaw-finalized-preview-support`. -تُقيَّم القاعدة مقارنةً بمرسل الحدث: +تُقيَّم القاعدة مقابل مُرسِل الحدث: - صادِق باستخدام token الخاص بالمستخدم المستلم -- طابِق `sender` مع MXID الخاص بروبوت OpenClaw +- طابِق `sender` مع MXID بوت OpenClaw 6. تحقّق من وجود القاعدة: @@ -396,8 +387,8 @@ curl -sS \ "https://matrix.example.org/_matrix/client/v3/pushrules/global/override/openclaw-finalized-preview-botname" ``` -7. اختبر ردًا متدفقًا. في الوضع الهادئ، يجب أن تُظهر الغرفة معاينة مسودة هادئة، ويجب أن - يرسل التحرير النهائي في المكان نفسه إشعارًا بمجرد اكتمال الكتلة أو الدور. +7. اختبر ردًا متدفقًا. في الوضع الهادئ، يجب أن تعرض الغرفة معاينة مسودة هادئة، ويجب أن يرسل + التعديل النهائي في المكان إشعارًا واحدًا عند اكتمال الكتلة أو الدور. إذا احتجت إلى إزالة القاعدة لاحقًا، فاحذف معرّف القاعدة نفسه باستخدام token الخاص بالمستخدم المستلم: @@ -409,33 +400,33 @@ curl -sS -X DELETE \ ملاحظات: -- أنشئ القاعدة باستخدام access token الخاص بالمستخدم المستلم، وليس الخاص بالروبوت. -- تُدرج قواعد `override` الجديدة المعرّفة من المستخدم قبل قواعد المنع الافتراضية، لذلك لا حاجة إلى أي معامل ترتيب إضافي. -- يؤثر هذا فقط في تعديلات المعاينات النصية النهائية التي يستطيع OpenClaw إنهاءها بأمان في مكانها. أما بدائل الوسائط وبدائل المعاينات القديمة فلا تزال تستخدم تسليم Matrix العادي. -- إذا أظهر `GET /_matrix/client/v3/pushers` عدم وجود pushers، فهذا يعني أن المستخدم لا يملك بعد تسليم push يعمل في Matrix لهذا الحساب/الجهاز. +- أنشئ القاعدة باستخدام access token الخاص بالمستخدم المستلم، وليس الخاص بالبوت. +- تُدرج قواعد `override` الجديدة المعرّفة من المستخدم قبل قواعد الكبت الافتراضية، لذلك لا حاجة إلى معلمة ترتيب إضافية. +- يؤثر هذا فقط على تعديلات المعاينة النصية النهائية التي يمكن لـ OpenClaw إنهاؤها بأمان في مكانها. أما بدائل الوسائط وبدائل المعاينات القديمة فما تزال تستخدم تسليم Matrix العادي. +- إذا أظهر `GET /_matrix/client/v3/pushers` عدم وجود pushers، فهذا يعني أن المستخدم لا يملك بعد تسليم push عاملًا في Matrix لهذا الحساب/الجهاز. #### Synapse بالنسبة إلى Synapse، يكون الإعداد أعلاه كافيًا عادةً بمفرده: -- لا يلزم إجراء تغيير خاص في `homeserver.yaml` لإشعارات معاينة OpenClaw النهائية. -- إذا كان نشر Synapse لديك يرسل بالفعل إشعارات Matrix عادية، فإن token المستخدم مع استدعاء `pushrules` أعلاه هما خطوة الإعداد الرئيسية. +- لا يلزم أي تغيير خاص في `homeserver.yaml` لإشعارات معاينات OpenClaw النهائية. +- إذا كان نشر Synapse لديك يرسل بالفعل إشعارات push العادية من Matrix، فإن token المستخدم مع استدعاء `pushrules` أعلاه هو خطوة الإعداد الأساسية. - إذا كنت تشغّل Synapse خلف reverse proxy أو workers، فتأكد من أن `/_matrix/client/.../pushrules/` يصل إلى Synapse بشكل صحيح. -- إذا كنت تشغّل Synapse workers، فتأكد من أن pushers سليمة. يتولى التسليم عبر push العملية الرئيسية أو `synapse.app.pusher` / عمال pusher المهيئين. +- إذا كنت تشغّل Synapse workers، فتأكد من سلامة pushers. تتم معالجة تسليم push بواسطة العملية الرئيسية أو `synapse.app.pusher` / workers الخاصة بـ pusher المكوّنة. #### Tuwunel -بالنسبة إلى Tuwunel، استخدم تدفق الإعداد نفسه واستدعاء `pushrules` API نفسه الموضحين أعلاه: +بالنسبة إلى Tuwunel، استخدم تدفق الإعداد نفسه واستدعاء API الخاص بـ push-rule الموضحين أعلاه: -- لا يلزم أي إعداد خاص بـ Tuwunel لمؤشر المعاينة النهائية نفسه. -- إذا كانت إشعارات Matrix العادية تعمل بالفعل لذلك المستخدم، فإن token المستخدم مع استدعاء `pushrules` أعلاه هما خطوة الإعداد الرئيسية. -- إذا بدا أن الإشعارات تختفي بينما يكون المستخدم نشطًا على جهاز آخر، فتحقق مما إذا كان `suppress_push_when_active` ممكّنًا. أضاف Tuwunel هذا الخيار في Tuwunel 1.4.2 بتاريخ 12 سبتمبر 2025، ويمكنه عمدًا كتم push إلى الأجهزة الأخرى بينما يكون أحد الأجهزة نشطًا. +- لا يلزم أي تكوين خاص بـ Tuwunel لعلامة المعاينة النهائية نفسها. +- إذا كانت إشعارات Matrix العادية تعمل بالفعل لهذا المستخدم، فإن token المستخدم مع استدعاء `pushrules` أعلاه هو خطوة الإعداد الأساسية. +- إذا بدا أن الإشعارات تختفي بينما يكون المستخدم نشطًا على جهاز آخر، فتحقق مما إذا كان `suppress_push_when_active` مفعّلًا. أضاف Tuwunel هذا الخيار في Tuwunel 1.4.2 بتاريخ 12 سبتمبر 2025، ويمكنه كبت إشعارات push عمدًا إلى الأجهزة الأخرى بينما يكون أحد الأجهزة نشطًا. -## غرف روبوت إلى روبوت +## غرف بوت إلى بوت -افتراضيًا، يتم تجاهل رسائل Matrix القادمة من حسابات Matrix أخرى مهيأة في OpenClaw. +افتراضيًا، يتم تجاهل رسائل Matrix القادمة من حسابات Matrix أخرى مكوّنة في OpenClaw. -استخدم `allowBots` عندما تريد عمدًا حركة Matrix بين الوكلاء: +استخدم `allowBots` عندما تريد عمدًا مرور حركة Matrix بين الوكلاء: ```json5 { @@ -452,17 +443,17 @@ curl -sS -X DELETE \ } ``` -- يقبل `allowBots: true` الرسائل من حسابات Matrix bot أخرى مهيأة في الغرف المسموح بها والرسائل المباشرة. -- يقبل `allowBots: "mentions"` تلك الرسائل فقط عندما تذكر هذا الروبوت بوضوح في الغرف. وتظل الرسائل المباشرة مسموحًا بها. -- تتجاوز `groups..allowBots` الإعداد على مستوى الحساب لغرفة واحدة. -- لا يزال OpenClaw يتجاهل الرسائل الواردة من معرّف مستخدم Matrix نفسه لتجنب حلقات الرد الذاتي. -- لا يوفّر Matrix هنا علامة bot أصلية؛ ويتعامل OpenClaw مع "مؤلَّف بواسطة bot" على أنه "مرسل بواسطة حساب Matrix آخر مهيأ على Gateway OpenClaw هذا". +- يقبل `allowBots: true` الرسائل من حسابات بوت Matrix أخرى مكوّنة في الغرف والرسائل الخاصة المسموح بها. +- يقبل `allowBots: "mentions"` هذه الرسائل فقط عندما تذكر هذا البوت بوضوح داخل الغرف. وتظل الرسائل الخاصة مسموحًا بها. +- يتجاوز `groups..allowBots` الإعداد على مستوى الحساب لغرفة واحدة. +- ما يزال OpenClaw يتجاهل الرسائل من معرّف مستخدم Matrix نفسه لتجنب حلقات الرد الذاتي. +- لا يوفّر Matrix هنا علامة bot أصلية؛ ويتعامل OpenClaw مع "الرسائل التي أنشأها bot" على أنها "مرسلة بواسطة حساب Matrix آخر مكوَّن على Gateway ‏OpenClaw هذا". -استخدم قوائم سماح صارمة للغرف ومتطلبات الذكر عند تمكين حركة bot إلى bot في الغرف المشتركة. +استخدم قوائم سماح صارمة للغرف ومتطلبات الذكر عند تمكين حركة البوت إلى البوت في الغرف المشتركة. ## التشفير والتحقق -في الغرف المشفرة (E2EE)، تستخدم أحداث الصور الصادرة `thumbnail_file` بحيث تُشفَّر معاينات الصور مع المرفق الكامل. وتستخدم الغرف غير المشفرة `thumbnail_url` العادي. لا حاجة إلى أي تهيئة — يكتشف Plugin حالة E2EE تلقائيًا. +في الغرف المشفّرة (E2EE)، تستخدم أحداث الصور الصادرة `thumbnail_file` بحيث تُشفَّر معاينات الصور إلى جانب المرفق الكامل. أما الغرف غير المشفّرة فما تزال تستخدم `thumbnail_url` العادي. لا حاجة إلى أي تكوين — يكتشف Plugin حالة E2EE تلقائيًا. تمكين التشفير: @@ -486,43 +477,43 @@ curl -sS -X DELETE \ openclaw matrix verify status ``` -حالة تفصيلية (تشخيصات كاملة): +حالة مفصّلة (تشخيصات كاملة): ```bash openclaw matrix verify status --verbose ``` -تضمين مفتاح الاسترداد المخزّن في المخرجات القابلة للقراءة آليًا: +تضمين مفتاح الاسترداد المخزن في المخرجات القابلة للقراءة آليًا: ```bash openclaw matrix verify status --include-recovery-key --json ``` -تهيئة cross-signing وحالة التحقق: +تهيئة حالة cross-signing والتحقق: ```bash openclaw matrix verify bootstrap ``` -تشخيصات bootstrap التفصيلية: +تشخيصات تهيئة مفصلة: ```bash openclaw matrix verify bootstrap --verbose ``` -فرض إعادة تعيين جديدة لهوية cross-signing قبل bootstrap: +فرض إعادة تعيين جديدة لهوية cross-signing قبل التهيئة: ```bash openclaw matrix verify bootstrap --force-reset-cross-signing ``` -تحقق من هذا الجهاز باستخدام مفتاح استرداد: +التحقق من هذا الجهاز باستخدام مفتاح استرداد: ```bash openclaw matrix verify device "" ``` -تفاصيل التحقق من الجهاز بشكل تفصيلي: +تفاصيل التحقق من الجهاز بشكل مفصل: ```bash openclaw matrix verify device "" --verbose @@ -534,38 +525,38 @@ openclaw matrix verify device "" --verbose openclaw matrix verify backup status ``` -تشخيصات تفصيلية لسلامة النسخ الاحتياطي: +تشخيصات سلامة النسخ الاحتياطي بشكل مفصل: ```bash openclaw matrix verify backup status --verbose ``` -استعادة مفاتيح الغرف من النسخ الاحتياطي على الخادم: +استعادة مفاتيح الغرف من النسخة الاحتياطية على الخادم: ```bash openclaw matrix verify backup restore ``` -تشخيصات الاستعادة التفصيلية: +تشخيصات الاستعادة بشكل مفصل: ```bash openclaw matrix verify backup restore --verbose ``` -احذف النسخ الاحتياطي الحالي على الخادم وأنشئ خط أساس جديدًا للنسخ الاحتياطي. إذا تعذر تحميل -مفتاح النسخ الاحتياطي المخزن بشكل سليم، فيمكن لإعادة التعيين هذه أيضًا إعادة إنشاء التخزين السري بحيث -تتمكن عمليات البدء الباردة المستقبلية من تحميل مفتاح النسخ الاحتياطي الجديد: +احذف النسخة الاحتياطية الحالية على الخادم وأنشئ خط أساس جديدًا للنسخ الاحتياطي. إذا تعذر +تحميل مفتاح النسخ الاحتياطي المخزن بشكل سليم، فيمكن أن تؤدي إعادة التعيين هذه أيضًا إلى إعادة إنشاء التخزين السري بحيث +تستطيع عمليات التشغيل الباردة المستقبلية تحميل مفتاح النسخ الاحتياطي الجديد: ```bash openclaw matrix verify backup reset --yes ``` -تكون جميع أوامر `verify` موجزة افتراضيًا (بما في ذلك تسجيلات SDK الداخلية الهادئة) ولا تعرض تشخيصات مفصلة إلا مع `--verbose`. +تكون جميع أوامر `verify` موجزة افتراضيًا (بما في ذلك تسجيل SDK الداخلي الهادئ) ولا تعرض تشخيصات مفصلة إلا مع `--verbose`. استخدم `--json` للحصول على مخرجات كاملة قابلة للقراءة آليًا عند كتابة السكربتات. -في إعدادات الحسابات المتعددة، تستخدم أوامر Matrix في CLI حساب Matrix الافتراضي الضمني ما لم تمرر `--account `. -إذا قمت بتهيئة عدة حسابات مسماة، فاضبط `channels.matrix.defaultAccount` أولًا وإلا ستتوقف عمليات CLI الضمنية تلك وتطلب منك اختيار حساب صراحةً. -استخدم `--account` كلما أردت أن تستهدف عمليات التحقق أو الجهاز حسابًا مسمى صراحةً: +في إعدادات الحسابات المتعددة، تستخدم أوامر Matrix CLI حساب Matrix الافتراضي الضمني ما لم تمرر `--account `. +إذا قمت بتكوين عدة حسابات مسماة، فاضبط `channels.matrix.defaultAccount` أولًا وإلا فستتوقف عمليات CLI الضمنية هذه وتطلب منك اختيار حساب صراحةً. +استخدم `--account` كلما أردت أن تستهدف عمليات التحقق أو الجهاز حسابًا مسمىً بشكل صريح: ```bash openclaw matrix verify status --account assistant @@ -573,43 +564,43 @@ openclaw matrix verify backup restore --account assistant openclaw matrix devices list --account assistant ``` -عندما يكون التشفير معطّلًا أو غير متاح لحساب مسمى، تشير تحذيرات Matrix وأخطاء التحقق إلى مفتاح تهيئة ذلك الحساب، مثل `channels.matrix.accounts.assistant.encryption`. +عندما يكون التشفير معطلًا أو غير متاح لحساب مسمى، تشير تحذيرات Matrix وأخطاء التحقق إلى مفتاح تكوين ذلك الحساب، مثل `channels.matrix.accounts.assistant.encryption`. -### ما معنى "تم التحقق" +### معنى "تم التحقق" -يتعامل OpenClaw مع جهاز Matrix هذا على أنه تم التحقق منه فقط عندما يكون مُتحققًا منه بواسطة هوية cross-signing الخاصة بك. -وعمليًا، يكشف `openclaw matrix verify status --verbose` عن ثلاث إشارات ثقة: +يتعامل OpenClaw مع جهاز Matrix هذا على أنه تم التحقق منه فقط عندما يتم التحقق منه بواسطة هوية cross-signing الخاصة بك. +عمليًا، يكشف `openclaw matrix verify status --verbose` ثلاث إشارات ثقة: - `Locally trusted`: هذا الجهاز موثوق به من قبل العميل الحالي فقط - `Cross-signing verified`: يفيد SDK بأن الجهاز تم التحقق منه عبر cross-signing - `Signed by owner`: الجهاز موقّع بواسطة مفتاح self-signing الخاص بك -تصبح `Verified by owner` مساوية لـ `yes` فقط عندما يكون تحقق cross-signing أو توقيع المالك موجودًا. -ولا تكفي الثقة المحلية وحدها لكي يعتبر OpenClaw الجهاز متحققًا منه بالكامل. +تصبح `Verified by owner` هي `yes` فقط عند وجود تحقق cross-signing أو توقيع المالك. +الثقة المحلية وحدها لا تكفي لكي يعتبر OpenClaw الجهاز متحققًا بالكامل. -### ما الذي يفعله bootstrap +### ما الذي تفعله التهيئة يُعد `openclaw matrix verify bootstrap` أمر الإصلاح والإعداد لحسابات Matrix المشفرة. -وهو يقوم بكل ما يلي بالترتيب: +وهو ينفذ كل ما يلي بالترتيب: -- يهيئ التخزين السري، مع إعادة استخدام مفتاح استرداد موجود عند الإمكان -- يهيئ cross-signing ويرفع مفاتيح cross-signing العامة المفقودة +- يهيئ التخزين السري، مع إعادة استخدام مفتاح استرداد موجود عندما يكون ذلك ممكنًا +- يهيئ cross-signing ويرفع مفاتيح cross-signing العامة الناقصة - يحاول وسم الجهاز الحالي وتوقيعه عبر cross-signing - ينشئ نسخة احتياطية جديدة لمفاتيح الغرف على الخادم إذا لم تكن موجودة بالفعل -إذا كان الخادم المنزلي يتطلب مصادقة تفاعلية لرفع مفاتيح cross-signing، فسيحاول OpenClaw الرفع أولًا بدون مصادقة، ثم باستخدام `m.login.dummy`، ثم باستخدام `m.login.password` عندما تكون `channels.matrix.password` مهيأة. +إذا كان homeserver يتطلب مصادقة تفاعلية لرفع مفاتيح cross-signing، يحاول OpenClaw الرفع أولًا بدون مصادقة، ثم باستخدام `m.login.dummy`، ثم باستخدام `m.login.password` عندما يكون `channels.matrix.password` مضبوطًا. استخدم `--force-reset-cross-signing` فقط عندما تريد عمدًا تجاهل هوية cross-signing الحالية وإنشاء هوية جديدة. -إذا كنت تريد عمدًا تجاهل النسخ الاحتياطي الحالي لمفاتيح الغرف وبدء -خط أساس نسخ احتياطي جديد للرسائل المستقبلية، فاستخدم `openclaw matrix verify backup reset --yes`. -افعل ذلك فقط عندما تكون موافقًا على أن السجل المشفر القديم غير القابل للاسترداد سيظل -غير متاح، وأن OpenClaw قد يعيد إنشاء التخزين السري إذا تعذر تحميل -سر النسخ الاحتياطي الحالي بأمان. +إذا كنت تريد عمدًا تجاهل النسخة الاحتياطية الحالية لمفاتيح الغرف وبدء +خط أساس جديد للنسخ الاحتياطي للرسائل المستقبلية، فاستخدم `openclaw matrix verify backup reset --yes`. +افعل ذلك فقط إذا كنت تقبل بأن السجل المشفر القديم غير القابل للاسترداد سيظل +غير متاح، وأن OpenClaw قد يعيد إنشاء التخزين السري إذا تعذر تحميل سر النسخ الاحتياطي الحالي +بأمان. ### خط أساس جديد للنسخ الاحتياطي -إذا كنت تريد الحفاظ على عمل الرسائل المشفرة المستقبلية وتقبل فقدان السجل القديم غير القابل للاسترداد، فشغّل هذه الأوامر بالترتيب: +إذا كنت تريد الإبقاء على الرسائل المشفرة المستقبلية تعمل وتقبل فقدان السجل القديم غير القابل للاسترداد، فشغّل هذه الأوامر بالترتيب: ```bash openclaw matrix verify backup reset --yes @@ -617,55 +608,55 @@ openclaw matrix verify backup status --verbose openclaw matrix verify status ``` -أضف `--account ` إلى كل أمر عندما تريد استهداف حساب Matrix مسمى صراحةً. +أضف `--account ` إلى كل أمر عندما تريد استهداف حساب Matrix مسمىً بشكل صريح. ### سلوك بدء التشغيل -عندما تكون `encryption: true`، يعيّن Matrix افتراضيًا `startupVerification` إلى `"if-unverified"`. -عند بدء التشغيل، إذا كان هذا الجهاز لا يزال غير متحقق منه، فسيطلب Matrix التحقق الذاتي في عميل Matrix آخر، -ويتخطى الطلبات المكررة عندما يكون أحدها قيد الانتظار بالفعل، ويطبق فترة تهدئة محلية قبل إعادة المحاولة بعد إعادة التشغيل. -وتعيد محاولات الطلب الفاشلة المحاولة أسرع من إنشاء الطلب الناجح افتراضيًا. -اضبط `startupVerification: "off"` لتعطيل الطلبات التلقائية عند بدء التشغيل، أو عدّل `startupVerificationCooldownHours` +عند استخدام `encryption: true`، يضبط Matrix القيمة الافتراضية لـ `startupVerification` على `"if-unverified"`. +عند بدء التشغيل، إذا كان هذا الجهاز ما يزال غير متحقق منه، فسيطلب Matrix التحقق الذاتي في عميل Matrix آخر، +وسيتجاوز الطلبات المكررة عندما يكون أحدها قيد الانتظار بالفعل، ويطبّق فترة تهدئة محلية قبل إعادة المحاولة بعد إعادة التشغيل. +تعيد محاولات الطلب الفاشلة المحاولة بشكل أسرع افتراضيًا من إنشاء الطلب الناجح. +اضبط `startupVerification: "off"` لتعطيل طلبات بدء التشغيل التلقائية، أو عدّل `startupVerificationCooldownHours` إذا كنت تريد نافذة إعادة محاولة أقصر أو أطول. -ينفذ بدء التشغيل أيضًا تمريرة bootstrap متحفظة للتشفير تلقائيًا. -وتحاول تلك التمريرة أولًا إعادة استخدام التخزين السري الحالي وهوية cross-signing الحالية، وتتجنب إعادة تعيين cross-signing ما لم تشغّل تدفق إصلاح bootstrap صريحًا. +ينفذ بدء التشغيل أيضًا مرورًا تلقائيًا محافظًا لتهيئة التشفير. +يحاول هذا المرور أولًا إعادة استخدام التخزين السري الحالي وهوية cross-signing الحالية، ويتجنب إعادة تعيين cross-signing ما لم تشغّل تدفق إصلاح تهيئة صريحًا. -إذا وجد بدء التشغيل حالة bootstrap معطلة رغم ذلك، فيمكن لـ OpenClaw محاولة مسار إصلاح مضبوط حتى عندما لا تكون `channels.matrix.password` مهيأة. -وإذا كان الخادم المنزلي يتطلب UIA قائمًا على كلمة المرور لهذا الإصلاح، فسيسجل OpenClaw تحذيرًا ويبقي بدء التشغيل غير قاتل بدلًا من إيقاف الروبوت. -وإذا كان الجهاز الحالي موقّعًا بالفعل من المالك، فسيحافظ OpenClaw على تلك الهوية بدلًا من إعادة تعيينها تلقائيًا. +إذا وجد بدء التشغيل رغم ذلك حالة تهيئة معطلة، فيمكن لـ OpenClaw محاولة مسار إصلاح محمي حتى عندما لا يكون `channels.matrix.password` مضبوطًا. +إذا كان homeserver يتطلب UIA قائمًا على كلمة المرور لهذا الإصلاح، فسيسجل OpenClaw تحذيرًا ويحافظ على كون بدء التشغيل غير قاتل بدلًا من إيقاف البوت. +إذا كان الجهاز الحالي موقّعًا بالفعل من المالك، فسيحافظ OpenClaw على تلك الهوية بدلًا من إعادة تعيينها تلقائيًا. -راجع [ترحيل Matrix](/ar/install/migrating-matrix) للاطلاع على تدفق الترقية الكامل، والحدود، وأوامر الاسترداد، ورسائل الترحيل الشائعة. +راجع [ترحيل Matrix](/ar/install/migrating-matrix) لمعرفة تدفق الترقية الكامل، والقيود، وأوامر الاسترداد، ورسائل الترحيل الشائعة. ### إشعارات التحقق -ينشر Matrix إشعارات دورة حياة التحقق مباشرة في غرفة التحقق الصارمة للرسائل المباشرة كرسائل `m.notice`. +ينشر Matrix إشعارات دورة حياة التحقق مباشرة في غرفة الرسائل الخاصة الصارمة الخاصة بالتحقق على شكل رسائل `m.notice`. ويشمل ذلك: - إشعارات طلب التحقق -- إشعارات جاهزية التحقق (مع إرشاد صريح "تحقق بواسطة emoji") +- إشعارات جاهزية التحقق (مع إرشاد صريح "تحقق عبر الرموز التعبيرية") - إشعارات بدء التحقق واكتماله -- تفاصيل SAS (emoji وأرقام عشرية) عند توفرها +- تفاصيل SAS (الرموز التعبيرية والأرقام العشرية) عندما تكون متاحة -تُتبع طلبات التحقق الواردة من عميل Matrix آخر ويقبلها OpenClaw تلقائيًا. -وبالنسبة إلى تدفقات التحقق الذاتي، يبدأ OpenClaw أيضًا تدفق SAS تلقائيًا عندما يصبح التحقق بالـ emoji متاحًا ويؤكد جانبه الخاص. -أما بالنسبة إلى طلبات التحقق القادمة من مستخدم/جهاز Matrix آخر، فيقبل OpenClaw الطلب تلقائيًا ثم ينتظر استمرار تدفق SAS بشكل طبيعي. -ولا يزال يتعين عليك مقارنة SAS بالـ emoji أو الأرقام العشرية في عميل Matrix لديك وتأكيد "They match" هناك لإكمال التحقق. +تُتتبع طلبات التحقق الواردة من عميل Matrix آخر ويقبلها OpenClaw تلقائيًا. +وفي تدفقات التحقق الذاتي، يبدأ OpenClaw أيضًا تدفق SAS تلقائيًا عندما يصبح التحقق بالرموز التعبيرية متاحًا ويؤكد جانبه الخاص. +أما في طلبات التحقق من مستخدم/جهاز Matrix آخر، فيقبل OpenClaw الطلب تلقائيًا ثم ينتظر متابعة تدفق SAS بشكل عادي. +وما يزال عليك مقارنة SAS الرمزي أو العشري في عميل Matrix لديك وتأكيد "They match" هناك لإكمال التحقق. -لا يقبل OpenClaw تلقائيًا التدفقات المكررة التي بدأها بنفسه بشكل أعمى. ويتخطى بدء التشغيل إنشاء طلب جديد عندما يكون طلب التحقق الذاتي قيد الانتظار بالفعل. +لا يقبل OpenClaw تلقائيًا التدفقات المكررة التي بدأها ذاتيًا بشكل أعمى. يتجاوز بدء التشغيل إنشاء طلب جديد عندما يكون طلب تحقق ذاتي قيد الانتظار بالفعل. -لا تُمرر إشعارات بروتوكول/نظام التحقق إلى مسار دردشة الوكيل، لذلك لا تنتج `NO_REPLY`. +لا تُمرَّر إشعارات بروتوكول/نظام التحقق إلى مسار دردشة الوكيل، لذلك لا تنتج `NO_REPLY`. ### نظافة الأجهزة -يمكن أن تتراكم أجهزة Matrix القديمة التي يديرها OpenClaw على الحساب وتجعل فهم الثقة في الغرف المشفرة أصعب. +يمكن أن تتراكم أجهزة Matrix القديمة التي يديرها OpenClaw على الحساب وتجعل الثقة في الغرف المشفرة أصعب في الفهم. اعرضها باستخدام: ```bash openclaw matrix devices list ``` -أزل أجهزة OpenClaw المُدارة القديمة باستخدام: +أزل أجهزة OpenClaw القديمة التي يديرها النظام باستخدام: ```bash openclaw matrix devices prune-stale @@ -673,16 +664,16 @@ openclaw matrix devices prune-stale ### مخزن التشفير -يستخدم التشفير التام بين الطرفين في Matrix مسار التشفير Rust الرسمي في `matrix-js-sdk` ضمن Node، مع `fake-indexeddb` كطبقة IndexedDB بديلة. تُحفَظ حالة التشفير في ملف لقطة (`crypto-idb-snapshot.json`) وتُستعاد عند بدء التشغيل. ملف اللقطة هذا يمثل حالة تشغيل حساسة ويُخزَّن بصلاحيات ملفات مقيّدة. +يستخدم Matrix E2EE مسار التشفير Rust الرسمي في `matrix-js-sdk` داخل Node، مع `fake-indexeddb` كطبقة IndexedDB بديلة. تُحفَظ حالة التشفير في ملف لقطة (`crypto-idb-snapshot.json`) وتُستعاد عند بدء التشغيل. ملف اللقطة هذا يحتوي على حالة تشغيل حساسة ويُخزَّن بأذونات ملفات مقيّدة. -توجد حالة التشغيل المشفرة ضمن جذور لكل حساب ولكل مستخدم حسب تجزئة token في +توجد حالة التشغيل المشفّرة ضمن جذور خاصة بكل حساب، ولكل مستخدم، ولكل hash للـ token في `~/.openclaw/matrix/accounts//__//`. -ويحتوي هذا الدليل على مخزن المزامنة (`bot-storage.json`) ومخزن التشفير (`crypto/`)، +يحتوي هذا الدليل على مخزن المزامنة (`bot-storage.json`) ومخزن التشفير (`crypto/`)، وملف مفتاح الاسترداد (`recovery-key.json`) ولقطة IndexedDB (`crypto-idb-snapshot.json`)، -وروابط سلاسل الرسائل (`thread-bindings.json`) وحالة التحقق عند بدء التشغيل (`startup-verification.json`). -وعندما يتغير token لكن تظل هوية الحساب نفسها، يعيد OpenClaw استخدام أفضل جذر موجود -لتركيبة الحساب/الخادم المنزلي/المستخدم تلك بحيث تظل حالة المزامنة السابقة، وحالة التشفير، وروابط سلاسل الرسائل، -وحالة التحقق عند بدء التشغيل، مرئية. +وروابط الخيوط (`thread-bindings.json`) وحالة التحقق عند بدء التشغيل (`startup-verification.json`). +عندما يتغير token مع بقاء هوية الحساب نفسها، يعيد OpenClaw استخدام أفضل جذر موجود +لهذه الثلاثية account/homeserver/user بحيث تظل حالة المزامنة السابقة، وحالة التشفير، وروابط الخيوط، +وحالة التحقق عند بدء التشغيل مرئية. ## إدارة الملف الشخصي @@ -693,49 +684,49 @@ openclaw matrix profile set --name "OpenClaw Assistant" openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png ``` -أضف `--account ` عندما تريد استهداف حساب Matrix مسمى صراحةً. +أضف `--account ` عندما تريد استهداف حساب Matrix مسمىً بشكل صريح. -يقبل Matrix عناوين URL للصورة الرمزية من نوع `mxc://` مباشرةً. وعندما تمرر عنوان URL للصورة الرمزية من نوع `http://` أو `https://`، يقوم OpenClaw أولًا برفعه إلى Matrix ثم يخزن عنوان `mxc://` الناتج مرة أخرى في `channels.matrix.avatarUrl` (أو في تجاوز الحساب المحدد). +يقبل Matrix عناوين URL للصورة الرمزية من نوع `mxc://` مباشرة. عند تمرير عنوان URL للصورة الرمزية من نوع `http://` أو `https://`، يقوم OpenClaw أولًا برفعه إلى Matrix ثم يخزن عنوان `mxc://` الناتج مرة أخرى في `channels.matrix.avatarUrl` (أو في تجاوز الحساب المحدد). -## سلاسل الرسائل +## الخيوط -يدعم Matrix سلاسل Matrix الأصلية لكل من الردود التلقائية وإرسال أدوات الرسائل. +يدعم Matrix خيوط Matrix الأصلية لكل من الردود التلقائية وإرسالات أدوات الرسائل. -- يبقي `dm.sessionScope: "per-user"` (الافتراضي) توجيه الرسائل المباشرة في Matrix ضمن نطاق المرسل، بحيث يمكن لعدة غرف رسائل مباشرة مشاركة جلسة واحدة عندما تُحل إلى النظير نفسه. -- يعزل `dm.sessionScope: "per-room"` كل غرفة رسائل مباشرة في Matrix ضمن مفتاح جلسة خاص بها مع الاستمرار في استخدام فحوصات المصادقة وقائمة السماح العادية للرسائل المباشرة. -- تظل روابط المحادثات الصريحة في Matrix متقدمة على `dm.sessionScope`، لذلك تحتفظ الغرف وسلاسل الرسائل المرتبطة بجلسة الهدف المختارة لها. -- يُبقي `threadReplies: "off"` الردود في المستوى الأعلى ويُبقي الرسائل الواردة ضمن سلسلة الرسائل على جلسة الأصل. -- يرد `threadReplies: "inbound"` داخل سلسلة رسائل فقط عندما تكون الرسالة الواردة موجودة أصلًا داخل تلك السلسلة. -- يُبقي `threadReplies: "always"` ردود الغرف داخل سلسلة رسائل متجذرة في الرسالة المُحفِّزة ويوجه تلك المحادثة عبر الجلسة المطابقة ذات النطاق الخاص بسلسلة الرسائل من أول رسالة مُحفِّزة. -- تتجاوز `dm.threadReplies` الإعداد الأعلى مستوى للرسائل المباشرة فقط. فعلى سبيل المثال، يمكنك إبقاء سلاسل الغرف معزولة مع إبقاء الرسائل المباشرة مسطحة. -- تتضمن الرسائل الواردة ضمن سلسلة الرسائل الرسالة الجذرية لتلك السلسلة كسياق إضافي للوكيل. -- ترث عمليات الإرسال عبر أدوات الرسائل سلسلة Matrix الحالية تلقائيًا عندما يكون الهدف هو الغرفة نفسها، أو هدف مستخدم الرسائل المباشرة نفسه، ما لم يتم توفير `threadId` صريح. -- لا يبدأ إعادة استخدام هدف مستخدم الرسائل المباشرة للجلسة نفسها إلا عندما تثبت بيانات تعريف الجلسة الحالية النظير نفسه للرسائل المباشرة على حساب Matrix نفسه؛ وإلا يعود OpenClaw إلى التوجيه العادي على مستوى المستخدم. -- عندما يلاحظ OpenClaw اصطدام غرفة رسائل مباشرة في Matrix مع غرفة رسائل مباشرة أخرى في جلسة Matrix DM مشتركة نفسها، فإنه ينشر رسالة `m.notice` لمرة واحدة في تلك الغرفة مع منفذ الهروب `/focus` عندما تكون روابط سلاسل الرسائل مفعلة وتلميح `dm.sessionScope` موجودًا. -- يتم دعم روابط سلاسل الرسائل في وقت التشغيل لـ Matrix. تعمل الأوامر `/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` و`/acp spawn` المرتبط بسلسلة الرسائل في غرف Matrix ورسائلها المباشرة. -- ينشئ `/focus` في المستوى الأعلى لغرفة/رسائل Matrix المباشرة سلسلة Matrix جديدة ويربطها بجلسة الهدف عندما تكون `threadBindings.spawnSubagentSessions=true`. -- يؤدي تشغيل `/focus` أو `/acp spawn --thread here` داخل سلسلة Matrix موجودة إلى ربط تلك السلسلة الحالية بدلًا من ذلك. +- يحتفظ `dm.sessionScope: "per-user"` (الافتراضي) بتوجيه الرسائل الخاصة في Matrix ضمن نطاق المُرسِل، بحيث يمكن لعدة غرف رسائل خاصة مشاركة جلسة واحدة عندما تُحل إلى النظير نفسه. +- يعزل `dm.sessionScope: "per-room"` كل غرفة رسائل خاصة في Matrix ضمن مفتاح جلسة خاص بها مع الاستمرار في استخدام فحوصات المصادقة وقائمة السماح العادية للرسائل الخاصة. +- تظل روابط محادثات Matrix الصريحة لها الأولوية على `dm.sessionScope`، لذا تحتفظ الغرف والخيوط المرتبطة بالجلسة الهدف التي اختارتها. +- يبقي `threadReplies: "off"` الردود في المستوى الأعلى ويحافظ على الرسائل الواردة ضمن الخيوط على جلسة الرسالة الأصلية. +- يرد `threadReplies: "inbound"` داخل خيط فقط عندما تكون الرسالة الواردة أصلًا ضمن ذلك الخيط. +- يبقي `threadReplies: "always"` ردود الغرف داخل خيط متجذر في الرسالة المُطلِقة ويوجّه تلك المحادثة عبر الجلسة المطابقة ذات النطاق الخيطي بدءًا من أول رسالة مُطلِقة. +- يتجاوز `dm.threadReplies` الإعداد الأعلى مستوى للرسائل الخاصة فقط. على سبيل المثال، يمكنك إبقاء خيوط الغرف معزولة مع إبقاء الرسائل الخاصة مسطحة. +- تتضمن الرسائل الواردة ضمن الخيوط رسالة جذر الخيط كسياق إضافي للوكيل. +- ترث إرسالات أدوات الرسائل خيط Matrix الحالي تلقائيًا عندما يكون الهدف هو الغرفة نفسها، أو هدف مستخدم الرسائل الخاصة نفسه، ما لم يتم توفير `threadId` صريح. +- لا يُفعَّل إعادة استخدام هدف مستخدم الرسائل الخاصة ضمن الجلسة نفسها إلا عندما تثبت بيانات تعريف الجلسة الحالية أنه النظير نفسه في الرسائل الخاصة على حساب Matrix نفسه؛ وإلا يعود OpenClaw إلى التوجيه العادي ذي النطاق الخاص بالمستخدم. +- عندما يرى OpenClaw أن غرفة رسائل خاصة في Matrix تتصادم مع غرفة رسائل خاصة أخرى على جلسة رسائل Matrix مشتركة واحدة، فإنه ينشر رسالة `m.notice` لمرة واحدة في تلك الغرفة تتضمن مخرج `/focus` عندما تكون روابط الخيوط مفعّلة وتلميح `dm.sessionScope` موجودًا. +- روابط الخيوط أثناء التشغيل مدعومة في Matrix. تعمل الأوامر `/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` و`/acp spawn` المرتبط بالخيط في غرف Matrix والرسائل الخاصة. +- يؤدي `/focus` في المستوى الأعلى لغرفة/رسالة خاصة في Matrix إلى إنشاء خيط Matrix جديد وربطه بالجلسة الهدف عندما يكون `threadBindings.spawnSubagentSessions=true`. +- يؤدي تشغيل `/focus` أو `/acp spawn --thread here` داخل خيط Matrix موجود إلى ربط ذلك الخيط الحالي بدلًا من ذلك. ## روابط محادثات ACP -يمكن تحويل غرف Matrix والرسائل المباشرة وسلاسل Matrix الموجودة إلى مساحات عمل ACP دائمة دون تغيير سطح الدردشة. +يمكن تحويل غرف Matrix والرسائل الخاصة وخيوط Matrix الموجودة إلى مساحات عمل ACP دائمة دون تغيير واجهة الدردشة. -تدفق المشغّل السريع: +تدفق سريع للمشغّل: -- شغّل `/acp spawn codex --bind here` داخل رسالة Matrix المباشرة أو الغرفة أو سلسلة الرسائل الموجودة التي تريد الاستمرار في استخدامها. -- في رسالة Matrix مباشرة أو غرفة من المستوى الأعلى، يظل سطح الدردشة هو غرفة/رسالة Matrix المباشرة الحالية وتُوجَّه الرسائل المستقبلية إلى جلسة ACP التي تم إنشاؤها. -- داخل سلسلة Matrix موجودة، يربط `--bind here` تلك السلسلة الحالية في مكانها. +- شغّل `/acp spawn codex --bind here` داخل الرسالة الخاصة أو الغرفة أو الخيط الموجود في Matrix الذي تريد الاستمرار في استخدامه. +- في رسالة خاصة أو غرفة Matrix على المستوى الأعلى، يظل سطح الدردشة هو نفس الرسالة الخاصة/الغرفة الحالية، وتُوجَّه الرسائل المستقبلية إلى جلسة ACP التي تم إنشاؤها. +- داخل خيط Matrix موجود، يربط `--bind here` ذلك الخيط الحالي في مكانه. - يعيد `/new` و`/reset` تعيين جلسة ACP المرتبطة نفسها في مكانها. -- يُغلق `/acp close` جلسة ACP ويزيل الرابط. +- يغلق `/acp close` جلسة ACP ويزيل الرابط. ملاحظات: -- لا ينشئ `--bind here` سلسلة Matrix فرعية. -- لا تكون `threadBindings.spawnAcpSessions` مطلوبة إلا لـ `/acp spawn --thread auto|here`، حيث يحتاج OpenClaw إلى إنشاء سلسلة Matrix فرعية أو ربطها. +- لا يؤدي `--bind here` إلى إنشاء خيط Matrix فرعي. +- لا يلزم `threadBindings.spawnAcpSessions` إلا مع `/acp spawn --thread auto|here`، عندما يحتاج OpenClaw إلى إنشاء خيط Matrix فرعي أو ربطه. -### تهيئة ربط سلاسل الرسائل +### إعداد روابط الخيوط -يرث Matrix القيم الافتراضية العامة من `session.threadBindings`، ويدعم أيضًا تجاوزات خاصة بكل قناة: +يرث Matrix القيم الافتراضية العامة من `session.threadBindings`، كما يدعم أيضًا تجاوزات لكل قناة: - `threadBindings.enabled` - `threadBindings.idleHours` @@ -743,29 +734,29 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png - `threadBindings.spawnSubagentSessions` - `threadBindings.spawnAcpSessions` -إشارات الإنشاء المرتبط بسلسلة الرسائل في Matrix هي خيارات تتطلب التفعيل: +إشارات الإنشاء المرتبطة بالخيوط في Matrix هي خيار اختياري: -- اضبط `threadBindings.spawnSubagentSessions: true` للسماح لـ `/focus` في المستوى الأعلى بإنشاء سلاسل Matrix جديدة وربطها. -- اضبط `threadBindings.spawnAcpSessions: true` للسماح لـ `/acp spawn --thread auto|here` بربط جلسات ACP بسلاسل Matrix. +- عيّن `threadBindings.spawnSubagentSessions: true` للسماح لأمر `/focus` في المستوى الأعلى بإنشاء خيوط Matrix جديدة وربطها. +- عيّن `threadBindings.spawnAcpSessions: true` للسماح لـ `/acp spawn --thread auto|here` بربط جلسات ACP بخيوط Matrix. ## التفاعلات -يدعم Matrix إجراءات التفاعل الصادرة، وإشعارات التفاعل الواردة، وتفاعلات الإقرار الواردة. +يدعم Matrix إجراءات التفاعلات الصادرة، وإشعارات التفاعلات الواردة، وتفاعلات الإقرار الواردة. -- تُضبط أدوات التفاعل الصادرة بواسطة `channels["matrix"].actions.reactions`. +- تُدار أدوات التفاعلات الصادرة بواسطة `channels["matrix"].actions.reactions`. - يضيف `react` تفاعلًا إلى حدث Matrix محدد. -- يسرد `reactions` ملخص التفاعلات الحالي لحدث Matrix محدد. -- يؤدي `emoji=""` إلى إزالة تفاعلات حساب الروبوت نفسه على ذلك الحدث. -- يؤدي `remove: true` إلى إزالة تفاعل emoji المحدد فقط من حساب الروبوت. +- يعرض `reactions` ملخص التفاعلات الحالي لحدث Matrix محدد. +- يؤدي `emoji=""` إلى إزالة تفاعلات حساب البوت نفسه على ذلك الحدث. +- يؤدي `remove: true` إلى إزالة تفاعل الإيموجي المحدد فقط من حساب البوت. يستخدم نطاق تفاعلات الإقرار ترتيب الحسم القياسي في OpenClaw: - `channels["matrix"].accounts..ackReaction` - `channels["matrix"].ackReaction` - `messages.ackReaction` -- الرجوع إلى emoji هوية الوكيل +- الرجوع إلى إيموجي هوية الوكيل -يُحسم نطاق تفاعل الإقرار بهذا الترتيب: +يُحسم نطاق تفاعلات الإقرار بهذا الترتيب: - `channels["matrix"].accounts..ackReactionScope` - `channels["matrix"].ackReactionScope` @@ -779,30 +770,30 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png السلوك: -- يؤدي `reactionNotifications: "own"` إلى تمرير أحداث `m.reaction` المضافة عندما تستهدف رسائل Matrix المؤلفة بواسطة الروبوت. -- يؤدي `reactionNotifications: "off"` إلى تعطيل أحداث نظام التفاعل. -- لا تُصاغ عمليات إزالة التفاعل كأحداث نظام لأن Matrix يعرضها كعمليات تنقيح، وليس كعمليات إزالة `m.reaction` مستقلة. +- يؤدي `reactionNotifications: "own"` إلى تمرير أحداث `m.reaction` المضافة عندما تستهدف رسائل Matrix أنشأها البوت. +- يؤدي `reactionNotifications: "off"` إلى تعطيل أحداث نظام التفاعلات. +- لا تُحوَّل إزالة التفاعلات إلى أحداث نظام مركبة لأن Matrix يعرضها كعمليات redaction، وليس كإزالات مستقلة لـ `m.reaction`. ## سياق السجل -- يتحكم `channels.matrix.historyLimit` في عدد رسائل الغرفة الأخيرة المضمنة كـ `InboundHistory` عندما تؤدي رسالة غرفة Matrix إلى تشغيل الوكيل. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أي منهما مضبوطًا، تكون القيمة الافتراضية الفعلية `0`. اضبط `0` للتعطيل. -- يقتصر سجل غرف Matrix على الغرفة فقط. وتستمر الرسائل المباشرة في استخدام سجل الجلسة العادي. -- سجل غرف Matrix معلّق فقط: يخزّن OpenClaw رسائل الغرفة التي لم تؤدِّ إلى رد بعد، ثم يلتقط تلك النافذة عند وصول ذكر أو مُحفّز آخر. -- لا تُضمَّن الرسالة المحفّزة الحالية في `InboundHistory`؛ إذ تبقى في متن الرسالة الواردة الرئيسي لذلك الدور. -- تعيد محاولات الحدث نفسه في Matrix استخدام لقطة السجل الأصلية بدلًا من الانجراف إلى رسائل غرفة أحدث. +- يتحكم `channels.matrix.historyLimit` في عدد رسائل الغرفة الحديثة التي تُضمَّن كـ `InboundHistory` عندما تُطلِق رسالة غرفة Matrix الوكيل. ويرجع إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أيٌّ منهما مضبوطًا، فالقيمة الافتراضية الفعلية هي `0`. عيّن `0` للتعطيل. +- سجل غرف Matrix خاص بالغرف فقط. وتستمر الرسائل الخاصة في استخدام سجل الجلسة العادي. +- سجل غرف Matrix خاص بالرسائل المعلقة فقط: يقوم OpenClaw بتخزين رسائل الغرفة التي لم تُطلق ردًا بعد، ثم يلتقط لقطة لهذه النافذة عند وصول ذكر أو مُطلِق آخر. +- لا تُضمَّن رسالة الإطلاق الحالية في `InboundHistory`؛ إذ تبقى في جسم الإدخال الرئيسي لذلك الدور. +- تعيد محاولات الحدث نفسه في Matrix استخدام لقطة السجل الأصلية بدلًا من الانجراف إلى رسائل أحدث في الغرفة. ## ظهور السياق -يدعم Matrix عنصر التحكم المشترك `contextVisibility` للسياق التكميلي للغرفة مثل نص الرد المجتلب، وجذور سلاسل الرسائل، والسجل المعلّق. +يدعم Matrix عنصر التحكم المشترك `contextVisibility` لسياق الغرفة التكميلي مثل نصوص الردود التي تم جلبها، وجذور الخيوط، والسجل المعلق. -- `contextVisibility: "all"` هو الافتراضي. يُحتفظ بالسياق التكميلي كما ورد. -- يقوم `contextVisibility: "allowlist"` بترشيح السياق التكميلي إلى المرسلين المسموح بهم وفق فحوصات قائمة السماح النشطة للغرفة/المستخدم. -- يعمل `contextVisibility: "allowlist_quote"` مثل `allowlist`، لكنه يحتفظ مع ذلك برد مقتبس صريح واحد. +- `contextVisibility: "all"` هو الافتراضي. يُحتفَظ بالسياق التكميلي كما تم استلامه. +- يقوم `contextVisibility: "allowlist"` بتصفية السياق التكميلي إلى المُرسِلين المسموح لهم وفقًا لفحوصات قائمة السماح النشطة للغرفة/المستخدم. +- يعمل `contextVisibility: "allowlist_quote"` مثل `allowlist`، لكنه يحتفظ أيضًا برد مقتبس صريح واحد. -يؤثر هذا الإعداد في ظهور السياق التكميلي، وليس في ما إذا كانت الرسالة الواردة نفسها يمكنها تشغيل رد. -ولا يزال تفويض التشغيل يأتي من إعدادات `groupPolicy` و`groups` و`groupAllowFrom` وسياسة الرسائل المباشرة. +يؤثر هذا الإعداد في ظهور السياق التكميلي، وليس في ما إذا كانت الرسالة الواردة نفسها يمكن أن تُطلِق ردًا. +ويظل تفويض الإطلاق صادرًا عن إعدادات `groupPolicy` و`groups` و`groupAllowFrom` وسياسات الرسائل الخاصة. -## سياسة الرسائل المباشرة والغرف +## سياسة الرسائل الخاصة والغرف ```json5 { @@ -825,22 +816,22 @@ openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png } ``` -راجع [المجموعات](/ar/channels/groups) لمعرفة سلوك بوابة الذكر وقائمة السماح. +راجع [Groups](/ar/channels/groups) لمعرفة سلوك التقييد بالذكر وقائمة السماح. -مثال الإقران لرسائل Matrix المباشرة: +مثال على الاقتران لرسائل Matrix الخاصة: ```bash openclaw pairing list matrix openclaw pairing approve matrix ``` -إذا استمر مستخدم Matrix غير معتمد في مراسلتك قبل الموافقة، يعيد OpenClaw استخدام رمز الإقران المعلّق نفسه وقد يرسل رد تذكير مرة أخرى بعد فترة تهدئة قصيرة بدلًا من إصدار رمز جديد. +إذا واصل مستخدم Matrix غير معتمد مراسلتك قبل الموافقة، فسيعيد OpenClaw استخدام رمز الاقتران المعلق نفسه وقد يرسل رد تذكير مرة أخرى بعد فترة تهدئة قصيرة بدلًا من إصدار رمز جديد. -راجع [الإقران](/ar/channels/pairing) لمعرفة تدفق إقران الرسائل المباشرة المشترك وتخطيط التخزين. +راجع [Pairing](/ar/channels/pairing) لمعرفة تدفق اقتران الرسائل الخاصة المشترك وتخطيط التخزين. ## إصلاح الغرفة المباشرة -إذا أصبحت حالة الرسائل المباشرة غير متزامنة، فقد ينتهي الأمر بـ OpenClaw إلى امتلاك تعيينات `m.direct` قديمة تشير إلى غرف فردية قديمة بدلًا من الرسالة المباشرة الحية. افحص التعيين الحالي لنظير باستخدام: +إذا خرجت حالة الرسائل المباشرة عن التزامن، فقد ينتهي الأمر بـ OpenClaw إلى وجود تعيينات `m.direct` قديمة تشير إلى غرف فردية قديمة بدلًا من الرسالة الخاصة الحية. افحص التعيين الحالي لنظير باستخدام: ```bash openclaw matrix direct inspect --user-id @alice:example.org @@ -854,61 +845,61 @@ openclaw matrix direct repair --user-id @alice:example.org تدفق الإصلاح: -- يفضّل رسالة مباشرة صارمة 1:1 تم تعيينها بالفعل في `m.direct` -- يعود إلى أي رسالة مباشرة صارمة 1:1 منضم إليها حاليًا مع ذلك المستخدم -- ينشئ غرفة مباشرة جديدة ويعيد كتابة `m.direct` إذا لم توجد رسالة مباشرة سليمة +- يفضّل رسالة خاصة صارمة 1:1 تكون مُعيّنة بالفعل في `m.direct` +- يعود إلى أي رسالة خاصة صارمة 1:1 منضم إليها حاليًا مع ذلك المستخدم +- ينشئ غرفة مباشرة جديدة ويعيد كتابة `m.direct` إذا لم توجد رسالة خاصة سليمة -لا يحذف تدفق الإصلاح الغرف القديمة تلقائيًا. بل يختار فقط الرسالة المباشرة السليمة ويحدّث التعيين بحيث تستهدف عمليات الإرسال الجديدة في Matrix، وإشعارات التحقق، وتدفقات الرسائل المباشرة الأخرى الغرفة الصحيحة مجددًا. +لا يحذف تدفق الإصلاح الغرف القديمة تلقائيًا. بل يختار فقط الرسالة الخاصة السليمة ويحدّث التعيين بحيث تستهدف إرسالات Matrix الجديدة، وإشعارات التحقق، وتدفقات الرسائل المباشرة الأخرى الغرفة الصحيحة مرة أخرى. -## موافقات Exec +## موافقات exec -يمكن لـ Matrix أن يعمل كعميل موافقة أصلي لحساب Matrix. وتظل -عناصر التحكم الأصلية في توجيه الرسائل المباشرة/القنوات ضمن تهيئة موافقة exec: +يمكن أن يعمل Matrix كعميل موافقة أصلي لحساب Matrix. وتظل +عناصر توجيه الرسائل الخاصة/القنوات الأصلية ضمن إعداد موافقات exec: - `channels.matrix.execApprovals.enabled` -- `channels.matrix.execApprovals.approvers` (اختياري؛ يعود إلى `channels.matrix.dm.allowFrom`) +- `channels.matrix.execApprovals.approvers` (اختياري؛ يرجع إلى `channels.matrix.dm.allowFrom`) - `channels.matrix.execApprovals.target` (`dm` | `channel` | `both`، الافتراضي: `dm`) - `channels.matrix.execApprovals.agentFilter` - `channels.matrix.execApprovals.sessionFilter` -يجب أن يكون الموافقون معرّفات مستخدمي Matrix مثل `@owner:example.org`. يفعّل Matrix الموافقات الأصلية تلقائيًا عندما تكون `enabled` غير مضبوطة أو مساوية لـ `"auto"` ويمكن حلّ وافق واحد على الأقل. تستخدم موافقات Exec مجموعة الموافقين من `execApprovals.approvers` أولًا ويمكن أن تعود إلى `channels.matrix.dm.allowFrom`. وتُفوض موافقات Plugin عبر `channels.matrix.dm.allowFrom`. اضبط `enabled: false` لتعطيل Matrix كعميل موافقة أصلي صراحةً. وبخلاف ذلك تعود طلبات الموافقة إلى مسارات الموافقة الأخرى المهيأة أو إلى سياسة الرجوع الخاصة بالموافقة. +يجب أن يكون الموافقون معرّفات مستخدمي Matrix مثل `@owner:example.org`. يقوم Matrix بتمكين الموافقات الأصلية تلقائيًا عندما تكون `enabled` غير مضبوطة أو تساوي `"auto"` ويمكن حلّ موافق واحد على الأقل. تستخدم موافقات Exec أولًا `execApprovals.approvers` ويمكن أن تعود إلى `channels.matrix.dm.allowFrom`. وتخوّل موافقات Plugin عبر `channels.matrix.dm.allowFrom`. عيّن `enabled: false` لتعطيل Matrix كعميل موافقة أصلي بشكل صريح. بخلاف ذلك، تعود طلبات الموافقة إلى مسارات الموافقة الأخرى المكوّنة أو إلى سياسة الرجوع للموافقة. -يدعم التوجيه الأصلي في Matrix نوعَي الموافقات كليهما: +يدعم التوجيه الأصلي في Matrix كلا نوعي الموافقة: -- يتحكم `channels.matrix.execApprovals.*` في وضع التوزيع الأصلي للرسائل المباشرة/القنوات لطلبات موافقة Matrix. +- تتحكم `channels.matrix.execApprovals.*` في وضع التوزيع الأصلي للرسائل الخاصة/القنوات لطلبات موافقة Matrix. - تستخدم موافقات Exec مجموعة الموافقين من `execApprovals.approvers` أو `channels.matrix.dm.allowFrom`. -- تستخدم موافقات Plugin قائمة السماح الخاصة برسائل Matrix المباشرة من `channels.matrix.dm.allowFrom`. -- تنطبق اختصارات التفاعل في Matrix وتحديثات الرسائل على كل من موافقات exec وPlugin. +- تستخدم موافقات Plugin قائمة السماح للرسائل الخاصة في Matrix من `channels.matrix.dm.allowFrom`. +- تنطبق اختصارات التفاعلات وتحديثات الرسائل في Matrix على كل من موافقات exec وموافقات Plugin. قواعد التسليم: -- يؤدي `target: "dm"` إلى إرسال طلبات الموافقة إلى الرسائل المباشرة للموافقين -- يؤدي `target: "channel"` إلى إرسال الطلب مرة أخرى إلى غرفة Matrix أو الرسالة المباشرة الأصلية -- يؤدي `target: "both"` إلى الإرسال إلى الرسائل المباشرة للموافقين وإلى غرفة Matrix أو الرسالة المباشرة الأصلية +- يرسل `target: "dm"` طلبات الموافقة إلى الرسائل الخاصة للموافقين +- يرسل `target: "channel"` الطلب مرة أخرى إلى غرفة أو رسالة Matrix الأصلية +- يرسل `target: "both"` إلى الرسائل الخاصة للموافقين وإلى غرفة أو رسالة Matrix الأصلية -تزرع طلبات الموافقة في Matrix اختصارات تفاعل على رسالة الموافقة الأساسية: +تُنشئ طلبات موافقة Matrix اختصارات تفاعلات على رسالة الموافقة الأساسية: -- `✅` = سماح مرة واحدة -- `❌` = رفض -- `♾️` = سماح دائم عندما يكون هذا القرار مسموحًا به وفق سياسة exec الفعلية +- `✅` = السماح مرة واحدة +- `❌` = الرفض +- `♾️` = السماح دائمًا عندما يكون هذا القرار مسموحًا به وفقًا لسياسة exec الفعلية -يمكن للموافقين التفاعل على تلك الرسالة أو استخدام أوامر الشرطة المائلة الاحتياطية: `/approve allow-once` أو `/approve allow-always` أو `/approve deny`. +يمكن للموافقين التفاعل على تلك الرسالة أو استخدام أوامر slash البديلة: `/approve allow-once` أو `/approve allow-always` أو `/approve deny`. -يمكن فقط للموافقين الذين تم حلّهم إصدار الموافقة أو الرفض. وبالنسبة إلى موافقات exec، يتضمن التسليم عبر القناة نص الأمر، لذا لا تفعّل `channel` أو `both` إلا في الغرف الموثوقة. +يمكن فقط للموافقين الذين تم حلهم أن يوافقوا أو يرفضوا. بالنسبة إلى موافقات exec، يتضمن التسليم عبر القناة نص الأمر، لذلك لا تفعّل `channel` أو `both` إلا في الغرف الموثوقة. -تجاوز خاص بكل حساب: +تجاوز لكل حساب: - `channels.matrix.accounts..execApprovals` -الوثائق ذات الصلة: [موافقات Exec](/ar/tools/exec-approvals) +الوثائق ذات الصلة: [Exec approvals](/ar/tools/exec-approvals) -## أوامر الشرطة المائلة +## أوامر slash -تعمل أوامر الشرطة المائلة في Matrix (مثل `/new` و`/reset` و`/model`) مباشرة في الرسائل المباشرة. وفي الغرف، يتعرف OpenClaw أيضًا على أوامر الشرطة المائلة التي تسبقها إشارة Matrix الخاصة بالروبوت نفسه، لذا فإن `@bot:server /new` يفعّل مسار الأمر من دون الحاجة إلى تعبير mention مخصص. وهذا يبقي الروبوت مستجيبًا لمنشورات الغرف بأسلوب `@mention /command` التي يصدرها Element والعملاء المشابهون عندما يكمل المستخدم اسم الروبوت باستخدام tab قبل كتابة الأمر. +تعمل أوامر slash في Matrix (مثل `/new` و`/reset` و`/model`) مباشرة في الرسائل الخاصة. وفي الغرف، يتعرف OpenClaw أيضًا على أوامر slash التي تسبقها إشارة Matrix الخاصة بالبوت نفسه، لذلك يؤدي `@bot:server /new` إلى تشغيل مسار الأمر دون الحاجة إلى تعبير mention مخصص. وهذا يُبقي البوت مستجيبًا لمنشورات `@mention /command` بأسلوب الغرف التي يصدرها Element والعملاء المشابهون عندما يكمل المستخدم اسم البوت تلقائيًا قبل كتابة الأمر. -تظل قواعد التفويض سارية: يجب أن يستوفي مرسلو الأوامر سياسات قائمة السماح/المالك الخاصة بالرسائل المباشرة أو الغرف تمامًا كما هو الحال مع الرسائل العادية. +تظل قواعد التفويض سارية: يجب أن يستوفي مرسلو الأوامر سياسات قائمة السماح/المالك للرسائل الخاصة أو الغرف تمامًا مثل الرسائل العادية. -## الحسابات المتعددة +## حسابات متعددة ```json5 { @@ -938,24 +929,24 @@ openclaw matrix direct repair --user-id @alice:example.org } ``` -تعمل قيم `channels.matrix` في المستوى الأعلى كقيم افتراضية للحسابات المسماة ما لم يقم حساب ما بتجاوزها. -يمكنك تقييد إدخالات الغرف الموروثة إلى حساب Matrix واحد باستخدام `groups..account`. -وتظل الإدخالات التي لا تحتوي على `account` مشتركة بين جميع حسابات Matrix، كما أن الإدخالات التي تحتوي على `account: "default"` تظل تعمل عندما يكون الحساب الافتراضي مهيأ مباشرة في `channels.matrix.*` من المستوى الأعلى. -لا تنشئ القيم الافتراضية المشتركة الجزئية للمصادقة حسابًا افتراضيًا ضمنيًا منفصلًا بمفردها. لا يقوم OpenClaw بتركيب حساب `default` من المستوى الأعلى إلا عندما يكون لذلك الافتراضي مصادقة حديثة (`homeserver` مع `accessToken`، أو `homeserver` مع `userId` و`password`)؛ ويمكن للحسابات المسماة أن تظل قابلة للاكتشاف من `homeserver` مع `userId` عندما تلبي بيانات الاعتماد المخزنة مؤقتًا المصادقة لاحقًا. -إذا كان Matrix يحتوي بالفعل على حساب مسمى واحد بالضبط، أو كانت `defaultAccount` تشير إلى مفتاح حساب مسمى موجود، فإن ترقية الإصلاح/الإعداد من حساب واحد إلى عدة حسابات تحافظ على ذلك الحساب بدلًا من إنشاء إدخال جديد `accounts.default`. تنتقل فقط مفاتيح المصادقة/Bootstrap الخاصة بـ Matrix إلى ذلك الحساب المُرقّى؛ وتبقى مفاتيح سياسة التسليم المشتركة في المستوى الأعلى. -اضبط `defaultAccount` عندما تريد من OpenClaw تفضيل حساب Matrix مسمى واحد للتوجيه الضمني، والاستكشاف، وعمليات CLI. -إذا تم تهيئة عدة حسابات Matrix وكان أحد معرّفات الحسابات هو `default`، فإن OpenClaw يستخدم ذلك الحساب ضمنيًا حتى إذا لم تكن `defaultAccount` مضبوطة. -إذا قمت بتهيئة عدة حسابات مسماة، فاضبط `defaultAccount` أو مرر `--account ` لأوامر CLI التي تعتمد على الاختيار الضمني للحساب. -مرر `--account ` إلى `openclaw matrix verify ...` و`openclaw matrix devices ...` عندما تريد تجاوز هذا الاختيار الضمني لأمر واحد. +تعمل القيم ذات المستوى الأعلى في `channels.matrix` كقيم افتراضية للحسابات المسماة ما لم يتجاوزها أحد الحسابات. +يمكنك قصر إدخالات الغرف الموروثة على حساب Matrix واحد باستخدام `groups..account`. +تظل الإدخالات التي لا تحتوي على `account` مشتركة بين جميع حسابات Matrix، كما أن الإدخالات التي تحتوي على `account: "default"` تظل تعمل عندما يكون الحساب الافتراضي مضبوطًا مباشرة في `channels.matrix.*` على المستوى الأعلى. +لا يؤدي وجود قيم افتراضية جزئية مشتركة للمصادقة وحده إلى إنشاء حساب افتراضي ضمني منفصل. لا يُنشئ OpenClaw حساب `default` ذي المستوى الأعلى إلا عندما تكون لهذا الحساب الافتراضي مصادقة حديثة (`homeserver` مع `accessToken`، أو `homeserver` مع `userId` و`password`)؛ ويمكن أن تظل الحسابات المسماة قابلة للاكتشاف من `homeserver` مع `userId` عندما تلبي بيانات الاعتماد المخزنة مؤقتًا المصادقة لاحقًا. +إذا كان Matrix يحتوي بالفعل على حساب مسمى واحد بالضبط، أو كان `defaultAccount` يشير إلى مفتاح حساب مسمى موجود، فإن ترقية الإصلاح/الإعداد من حساب واحد إلى حسابات متعددة تحافظ على ذلك الحساب بدلًا من إنشاء إدخال `accounts.default` جديد. ولا تُنقل إلى ذلك الحساب المُرقّى إلا مفاتيح المصادقة/التهيئة الخاصة بـ Matrix؛ أما مفاتيح سياسة التسليم المشتركة فتبقى على المستوى الأعلى. +اضبط `defaultAccount` عندما تريد أن يفضّل OpenClaw حساب Matrix مسمى واحدًا للتوجيه الضمني، والفحص، وعمليات CLI. +إذا جرى تكوين عدة حسابات Matrix وكان أحد معرّفات الحسابات هو `default`، فسيستخدم OpenClaw ذلك الحساب ضمنيًا حتى عندما لا يكون `defaultAccount` مضبوطًا. +إذا قمت بتكوين عدة حسابات مسماة، فاضبط `defaultAccount` أو مرر `--account ` لأوامر CLI التي تعتمد على اختيار حساب ضمني. +مرر `--account ` إلى `openclaw matrix verify ...` و`openclaw matrix devices ...` عندما تريد تجاوز هذا الاختيار الضمني لحساب واحد في أمر واحد. -راجع [مرجع التهيئة](/ar/gateway/configuration-reference#multi-account-all-channels) لمعرفة النمط المشترك للحسابات المتعددة. +راجع [مرجع التكوين](/ar/gateway/configuration-reference#multi-account-all-channels) لمعرفة نمط الحسابات المتعددة المشترك. -## خوادم منزلية خاصة/على الشبكة المحلية +## homeserver خاصة/ضمن LAN افتراضيًا، يحظر OpenClaw خوادم Matrix المنزلية الخاصة/الداخلية للحماية من SSRF ما لم -تقم صراحةً بتفعيل ذلك لكل حساب. +تفعّل ذلك صراحةً لكل حساب. -إذا كان خادمك المنزلي يعمل على localhost أو عنوان LAN/Tailscale IP أو اسم مضيف داخلي، فقم بتمكين +إذا كان homeserver لديك يعمل على localhost، أو عنوان IP ضمن LAN/Tailscale، أو اسم مضيف داخلي، فقم بتمكين `network.dangerouslyAllowPrivateNetwork` لذلك الحساب في Matrix: ```json5 @@ -982,12 +973,13 @@ openclaw matrix account add \ --access-token syt_ops_xxx ``` -يسمح هذا التفعيل فقط بالأهداف الخاصة/الداخلية الموثوقة. وتظل الخوادم المنزلية العامة غير المشفرة مثل -`http://matrix.example.org:8008` محظورة. يُفضّل استخدام `https://` كلما أمكن. +يسمح هذا التفعيل الاختياري فقط بالأهداف الخاصة/الداخلية الموثوقة. أما +خوادم homeserver العامة غير المشفرة مثل +`http://matrix.example.org:8008` فتظل محظورة. ويفضل استخدام `https://` متى أمكن. ## تمرير حركة Matrix عبر Proxy -إذا كان نشر Matrix لديك يحتاج إلى HTTP(S) proxy صريح للخروج، فاضبط `channels.matrix.proxy`: +إذا كان نشر Matrix لديك يحتاج إلى proxy صريح لحركة HTTP(S) الصادرة، فاضبط `channels.matrix.proxy`: ```json5 { @@ -1001,86 +993,86 @@ openclaw matrix account add \ } ``` -يمكن للحسابات المسماة تجاوز القيمة الافتراضية في المستوى الأعلى باستخدام `channels.matrix.accounts..proxy`. -يستخدم OpenClaw إعداد proxy نفسه لكل من حركة Matrix أثناء التشغيل واستكشافات حالة الحساب. +يمكن للحسابات المسماة تجاوز القيمة الافتراضية ذات المستوى الأعلى باستخدام `channels.matrix.accounts..proxy`. +يستخدم OpenClaw إعداد proxy نفسه لكل من حركة Matrix أثناء التشغيل وفحوصات حالة الحساب. -## تحليل الهدف +## حل الأهداف -يقبل Matrix صيغ الأهداف هذه في أي مكان يطلب منك فيه OpenClaw هدف غرفة أو مستخدم: +يقبل Matrix صيغ الأهداف التالية في أي مكان يطلب منك فيه OpenClaw هدف غرفة أو مستخدم: - المستخدمون: `@user:server` أو `user:@user:server` أو `matrix:user:@user:server` - الغرف: `!room:server` أو `room:!room:server` أو `matrix:room:!room:server` - الأسماء المستعارة: `#alias:server` أو `channel:#alias:server` أو `matrix:channel:#alias:server` -يستخدم البحث المباشر في الدليل حساب Matrix الذي سجل الدخول: +يستخدم البحث المباشر في الدليل حساب Matrix المسجل الدخول: -- تستعلم عمليات البحث عن المستخدمين من دليل مستخدمي Matrix على ذلك الخادم المنزلي. -- تقبل عمليات البحث عن الغرف معرّفات الغرف والأسماء المستعارة الصريحة مباشرة، ثم تعود إلى البحث في أسماء الغرف المنضم إليها لذلك الحساب. -- يكون البحث باسم الغرفة ضمن الغرف المنضم إليها على أساس أفضل جهد. وإذا تعذر تحليل اسم الغرفة إلى معرّف أو اسم مستعار، فسيتم تجاهله عند تحليل قائمة السماح أثناء التشغيل. +- تستعلم عمليات بحث المستخدمين من دليل مستخدمي Matrix على ذلك homeserver. +- تقبل عمليات بحث الغرف معرّفات الغرف والأسماء المستعارة الصريحة مباشرة، ثم تعود إلى البحث في أسماء الغرف المنضم إليها لذلك الحساب. +- يكون البحث في أسماء الغرف المنضم إليها على أساس أفضل جهد. وإذا تعذر حل اسم الغرفة إلى معرّف أو اسم مستعار، فسيُتجاهل عند حل قائمة السماح وقت التشغيل. -## مرجع التهيئة +## مرجع التكوين - `enabled`: تمكين القناة أو تعطيلها. - `name`: تسمية اختيارية للحساب. -- `defaultAccount`: معرّف الحساب المفضل عند تهيئة عدة حسابات Matrix. -- `homeserver`: عنوان URL للخادم المنزلي، مثل `https://matrix.example.org`. -- `network.dangerouslyAllowPrivateNetwork`: السماح لهذا الحساب في Matrix بالاتصال بخوادم منزلية خاصة/داخلية. فعّل هذا عندما يُحل الخادم المنزلي إلى `localhost` أو عنوان LAN/Tailscale IP أو مضيف داخلي مثل `matrix-synapse`. -- `proxy`: عنوان URL اختياري لـ HTTP(S) proxy لحركة Matrix. ويمكن للحسابات المسماة تجاوز القيمة الافتراضية في المستوى الأعلى باستخدام `proxy` الخاص بها. +- `defaultAccount`: معرّف الحساب المفضّل عند تكوين عدة حسابات Matrix. +- `homeserver`: عنوان URL لـ homeserver، مثل `https://matrix.example.org`. +- `network.dangerouslyAllowPrivateNetwork`: السماح لهذا الحساب في Matrix بالاتصال بخوادم homeserver الخاصة/الداخلية. فعّل هذا عندما يُحل homeserver إلى `localhost` أو عنوان IP ضمن LAN/Tailscale أو مضيف داخلي مثل `matrix-synapse`. +- `proxy`: عنوان URL اختياري لـ HTTP(S) proxy لحركة Matrix. يمكن للحسابات المسماة تجاوز القيمة الافتراضية ذات المستوى الأعلى باستخدام `proxy` خاص بها. - `userId`: معرّف مستخدم Matrix الكامل، مثل `@bot:example.org`. -- `accessToken`: access token للمصادقة المعتمدة على token. تُدعَم القيم النصية الصريحة وقيم SecretRef لكل من `channels.matrix.accessToken` و`channels.matrix.accounts..accessToken` عبر مزودي env/file/exec. راجع [إدارة الأسرار](/ar/gateway/secrets). -- `password`: كلمة المرور لتسجيل الدخول المعتمد على كلمة المرور. تُدعَم القيم النصية الصريحة وقيم SecretRef. +- `accessToken`: access token للمصادقة القائمة على token. تُدعم القيم النصية الصريحة وقيم SecretRef لكل من `channels.matrix.accessToken` و`channels.matrix.accounts..accessToken` عبر موفري env/file/exec. راجع [إدارة الأسرار](/ar/gateway/secrets). +- `password`: كلمة المرور لتسجيل الدخول القائم على كلمة المرور. تُدعم القيم النصية الصريحة وقيم SecretRef. - `deviceId`: معرّف جهاز Matrix صريح. - `deviceName`: اسم عرض الجهاز لتسجيل الدخول بكلمة المرور. -- `avatarUrl`: عنوان URL المخزّن للصورة الرمزية الذاتية لمزامنة الملف الشخصي وتحديثات `profile set`. +- `avatarUrl`: عنوان URL المخزن للصورة الرمزية الذاتية لمزامنة الملف الشخصي وتحديثات `profile set`. - `initialSyncLimit`: الحد الأقصى لعدد الأحداث التي يتم جلبها أثناء مزامنة بدء التشغيل. -- `encryption`: تمكين التشفير التام بين الطرفين. -- `allowlistOnly`: عندما تكون القيمة `true`، تتم ترقية سياسة الغرف `open` إلى `allowlist`، ويُفرَض تحويل جميع سياسات الرسائل المباشرة النشطة باستثناء `disabled` (بما في ذلك `pairing` و`open`) إلى `allowlist`. ولا يؤثر ذلك في سياسات `disabled`. -- `allowBots`: السماح بالرسائل القادمة من حسابات Matrix أخرى مهيأة في OpenClaw (`true` أو `"mentions"`). -- `groupPolicy`: `open` أو `allowlist` أو `disabled`. +- `encryption`: تمكين E2EE. +- `allowlistOnly`: عندما تكون القيمة `true`، تتم ترقية سياسة الغرف `open` إلى `allowlist`، ويتم فرض جميع سياسات الرسائل الخاصة النشطة باستثناء `disabled` (بما في ذلك `pairing` و`open`) لتصبح `allowlist`. ولا يؤثر ذلك في سياسات `disabled`. +- `allowBots`: السماح بالرسائل من حسابات Matrix أخرى مكوّنة في OpenClaw (`true` أو `"mentions"`). +- `groupPolicy`: ‏`open` أو `allowlist` أو `disabled`. - `contextVisibility`: وضع ظهور سياق الغرفة التكميلي (`all` أو `allowlist` أو `allowlist_quote`). -- `groupAllowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الغرف. تُعد معرّفات مستخدمي Matrix الكاملة الأكثر أمانًا؛ وتُحل المطابقات الدقيقة في الدليل عند بدء التشغيل وعند تغير قائمة السماح أثناء تشغيل المراقب. وتُتجاهل الأسماء غير المحلولة. -- `historyLimit`: الحد الأقصى لرسائل الغرفة المضمنة كسياق سجل للمجموعة. ويعود إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أي منهما مضبوطًا، تكون القيمة الافتراضية الفعلية `0`. اضبط `0` للتعطيل. -- `replyToMode`: `off` أو `first` أو `all` أو `batched`. -- `markdown`: تهيئة اختيارية لعرض Markdown للنصوص الصادرة في Matrix. -- `streaming`: `off` (الافتراضي) أو `"partial"` أو `"quiet"` أو `true` أو `false`. يفعّل `"partial"` و`true` تحديثات المسودات القائمة على المعاينة أولًا باستخدام رسائل Matrix النصية العادية. ويستخدم `"quiet"` إشعارات معاينة غير مرسلة للإشعار لإعدادات قواعد push المستضافة ذاتيًا. وتكافئ `false` القيمة `"off"`. -- `blockStreaming`: تؤدي القيمة `true` إلى تمكين رسائل تقدم منفصلة لكتل المساعد المكتملة أثناء نشاط بث معاينة المسودة. -- `threadReplies`: `off` أو `inbound` أو `always`. -- `threadBindings`: تجاوزات خاصة بكل قناة لتوجيه الجلسات المرتبطة بسلاسل الرسائل ودورة حياتها. +- `groupAllowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الغرف. تُعد معرّفات مستخدمي Matrix الكاملة هي الأكثر أمانًا؛ وتُحل التطابقات الدقيقة في الدليل عند بدء التشغيل وعندما تتغير قائمة السماح أثناء عمل المراقب. يتم تجاهل الأسماء غير المحلولة. +- `historyLimit`: الحد الأقصى لرسائل الغرفة التي تُضمَّن كسياق لسجل المجموعات. ويرجع إلى `messages.groupChat.historyLimit`؛ وإذا لم يكن أيٌّ منهما مضبوطًا، فالقيمة الافتراضية الفعلية هي `0`. عيّن `0` للتعطيل. +- `replyToMode`: ‏`off` أو `first` أو `all` أو `batched`. +- `markdown`: إعداد اختياري لعرض Markdown لنص Matrix الصادر. +- `streaming`: ‏`off` (الافتراضي) أو `"partial"` أو `"quiet"` أو `true` أو `false`. يفعّل `"partial"` و`true` تحديثات المسودات بنمط المعاينة أولًا باستخدام رسائل Matrix النصية العادية. ويستخدم `"quiet"` إشعارات معاينة غير مُنبِّهة لإعدادات قواعد push المستضافة ذاتيًا. وتكافئ `false` القيمة `"off"`. +- `blockStreaming`: تؤدي القيمة `true` إلى تمكين رسائل تقدم منفصلة لكتل المساعد المكتملة أثناء نشاط بث معاينة المسودات. +- `threadReplies`: ‏`off` أو `inbound` أو `always`. +- `threadBindings`: تجاوزات لكل قناة لتوجيه الجلسات المرتبطة بالخيوط ودورة حياتها. - `startupVerification`: وضع طلب التحقق الذاتي التلقائي عند بدء التشغيل (`if-unverified` أو `off`). - `startupVerificationCooldownHours`: فترة التهدئة قبل إعادة محاولة طلبات التحقق التلقائي عند بدء التشغيل. -- `textChunkLimit`: حجم تجزئة الرسالة الصادرة بالأحرف (يُطبّق عندما تكون `chunkMode` هي `length`). -- `chunkMode`: يؤدي `length` إلى تقسيم الرسائل حسب عدد الأحرف؛ ويؤدي `newline` إلى تقسيمها عند حدود الأسطر. -- `responsePrefix`: سلسلة اختيارية تُضاف في البداية إلى جميع الردود الصادرة لهذه القناة. +- `textChunkLimit`: حجم تجزئة الرسائل الصادرة بالأحرف (يُطبق عندما تكون `chunkMode` هي `length`). +- `chunkMode`: تقسم `length` الرسائل حسب عدد الأحرف؛ وتقسم `newline` عند حدود الأسطر. +- `responsePrefix`: سلسلة اختيارية تُضاف في بداية جميع الردود الصادرة لهذه القناة. - `ackReaction`: تجاوز اختياري لتفاعل الإقرار لهذه القناة/الحساب. - `ackReactionScope`: تجاوز اختياري لنطاق تفاعل الإقرار (`group-mentions` أو `group-all` أو `direct` أو `all` أو `none` أو `off`). -- `reactionNotifications`: وضع إشعارات التفاعل الواردة (`own` أو `off`). -- `mediaMaxMb`: حد حجم الوسائط بالميغابايت للإرسال الصادر ومعالجة الوسائط الواردة. -- `autoJoin`: سياسة الانضمام التلقائي للدعوات (`always` أو `allowlist` أو `off`). الافتراضي: `off`. وتنطبق على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل المباشرة. -- `autoJoinAllowlist`: الغرف/الأسماء المستعارة المسموح بها عندما تكون `autoJoin` هي `allowlist`. وتُحل إدخالات الأسماء المستعارة إلى معرّفات غرف أثناء معالجة الدعوة؛ ولا يثق OpenClaw في حالة الاسم المستعار التي تدعيها الغرفة المدعو إليها. -- `dm`: كتلة سياسة الرسائل المباشرة (`enabled` أو `policy` أو `allowFrom` أو `sessionScope` أو `threadReplies`). -- `dm.policy`: يتحكم في الوصول إلى الرسائل المباشرة بعد انضمام OpenClaw إلى الغرفة وتصنيفها كرسالة مباشرة. ولا يغير ما إذا كانت الدعوة ستتم معالجتها بالانضمام التلقائي. -- `dm.allowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الرسائل المباشرة. تُعد معرّفات مستخدمي Matrix الكاملة الأكثر أمانًا؛ وتُحل المطابقات الدقيقة في الدليل عند بدء التشغيل وعند تغير قائمة السماح أثناء تشغيل المراقب. وتُتجاهل الأسماء غير المحلولة. -- `dm.sessionScope`: `per-user` (الافتراضي) أو `per-room`. استخدم `per-room` عندما تريد أن يحتفظ كل غرفة رسائل مباشرة في Matrix بسياق منفصل حتى لو كان النظير هو نفسه. -- `dm.threadReplies`: تجاوز لسياسة سلاسل الرسائل خاص بالرسائل المباشرة فقط (`off` أو `inbound` أو `always`). وهو يتجاوز إعداد `threadReplies` في المستوى الأعلى لكل من موضع الرد وعزل الجلسة في الرسائل المباشرة. -- `execApprovals`: تسليم موافقات exec الأصلية في Matrix (`enabled` أو `approvers` أو `target` أو `agentFilter` أو `sessionFilter`). -- `execApprovals.approvers`: معرّفات مستخدمي Matrix المسموح لهم بالموافقة على طلبات exec. وهو اختياري عندما يكون `dm.allowFrom` يحدد الموافقين بالفعل. -- `execApprovals.target`: `dm | channel | both` (الافتراضي: `dm`). -- `accounts`: تجاوزات مسماة خاصة بكل حساب. تعمل قيم `channels.matrix` في المستوى الأعلى كقيم افتراضية لهذه الإدخالات. -- `groups`: خريطة سياسة خاصة بكل غرفة. يُفضّل استخدام معرّفات الغرف أو الأسماء المستعارة؛ وتُتجاهل أسماء الغرف غير المحلولة أثناء التشغيل. تستخدم هوية الجلسة/المجموعة معرّف الغرفة الثابت بعد التحليل. +- `reactionNotifications`: وضع إشعارات التفاعلات الواردة (`own` أو `off`). +- `mediaMaxMb`: الحد الأقصى لحجم الوسائط بالميغابايت للإرسال الصادر ومعالجة الوسائط الواردة. +- `autoJoin`: سياسة الانضمام التلقائي للدعوات (`always` أو `allowlist` أو `off`). الافتراضي: `off`. وتنطبق على جميع دعوات Matrix، بما في ذلك الدعوات بأسلوب الرسائل الخاصة. +- `autoJoinAllowlist`: الغرف/الأسماء المستعارة المسموح بها عندما تكون `autoJoin` هي `allowlist`. تُحل إدخالات الأسماء المستعارة إلى معرّفات غرف أثناء معالجة الدعوات؛ ولا يثق OpenClaw في حالة الاسم المستعار التي تدّعيها الغرفة المدعو إليها. +- `dm`: كتلة سياسة الرسائل الخاصة (`enabled` أو `policy` أو `allowFrom` أو `sessionScope` أو `threadReplies`). +- `dm.policy`: يتحكم في الوصول إلى الرسائل الخاصة بعد أن ينضم OpenClaw إلى الغرفة ويصنفها كرسالة خاصة. ولا يغيّر ما إذا كانت الدعوة ستُنضم إليها تلقائيًا. +- `dm.allowFrom`: قائمة سماح لمعرّفات المستخدمين لحركة الرسائل الخاصة. تُعد معرّفات مستخدمي Matrix الكاملة هي الأكثر أمانًا؛ وتُحل التطابقات الدقيقة في الدليل عند بدء التشغيل وعندما تتغير قائمة السماح أثناء عمل المراقب. يتم تجاهل الأسماء غير المحلولة. +- `dm.sessionScope`: ‏`per-user` (الافتراضي) أو `per-room`. استخدم `per-room` عندما تريد أن تحتفظ كل غرفة رسائل خاصة في Matrix بسياق منفصل حتى لو كان النظير هو نفسه. +- `dm.threadReplies`: تجاوز سياسة الخيوط للرسائل الخاصة فقط (`off` أو `inbound` أو `always`). ويتجاوز إعداد `threadReplies` ذي المستوى الأعلى لكل من موضع الرد وعزل الجلسة في الرسائل الخاصة. +- `execApprovals`: تسليم موافقات exec الأصلي في Matrix (`enabled` أو `approvers` أو `target` أو `agentFilter` أو `sessionFilter`). +- `execApprovals.approvers`: معرّفات مستخدمي Matrix المسموح لهم بالموافقة على طلبات exec. وهو اختياري عندما يحدد `dm.allowFrom` الموافقين بالفعل. +- `execApprovals.target`: ‏`dm | channel | both` (الافتراضي: `dm`). +- `accounts`: تجاوزات مسماة لكل حساب. تعمل قيم `channels.matrix` ذات المستوى الأعلى كقيم افتراضية لهذه الإدخالات. +- `groups`: خريطة سياسات لكل غرفة. يُفضّل استخدام معرّفات الغرف أو الأسماء المستعارة؛ ويتم تجاهل أسماء الغرف غير المحلولة وقت التشغيل. وتستخدم هوية الجلسة/المجموعة معرّف الغرفة المستقر بعد الحل. - `groups..account`: قصر إدخال غرفة موروث واحد على حساب Matrix محدد في إعدادات الحسابات المتعددة. -- `groups..allowBots`: تجاوز على مستوى الغرفة للمرسلين من الروبوتات المهيأة (`true` أو `"mentions"`). -- `groups..users`: قائمة سماح للمرسلين خاصة بكل غرفة. -- `groups..tools`: تجاوزات السماح/المنع الخاصة بالأدوات لكل غرفة. -- `groups..autoReply`: تجاوز على مستوى الغرفة لبوابة الذكر. تؤدي `true` إلى تعطيل متطلبات الذكر لتلك الغرفة؛ وتؤدي `false` إلى فرضها مرة أخرى. +- `groups..allowBots`: تجاوز على مستوى الغرفة للمرسلين من البوتات المكوّنة (`true` أو `"mentions"`). +- `groups..users`: قائمة سماح للمرسلين لكل غرفة. +- `groups..tools`: تجاوزات سماح/منع الأدوات لكل غرفة. +- `groups..autoReply`: تجاوز على مستوى الغرفة لتقييد الذكر. تؤدي `true` إلى تعطيل متطلبات الذكر لتلك الغرفة؛ وتؤدي `false` إلى فرضها مجددًا. - `groups..skills`: عامل تصفية Skills اختياري على مستوى الغرفة. - `groups..systemPrompt`: مقتطف system prompt اختياري على مستوى الغرفة. - `rooms`: اسم مستعار قديم لـ `groups`. -- `actions`: بوابة الأدوات الخاصة بكل إجراء (`messages` أو `reactions` أو `pins` أو `profile` أو `memberInfo` أو `channelInfo` أو `verification`). +- `actions`: تقييد الأدوات لكل إجراء (`messages` أو `reactions` أو `pins` أو `profile` أو `memberInfo` أو `channelInfo` أو `verification`). ## ذو صلة - [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة -- [الإقران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الإقران -- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وبوابة الذكر -- [توجيه القناة](/ar/channels/channel-routing) — توجيه الجلسات للرسائل -- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية الأمنية +- [Pairing](/ar/channels/pairing) — مصادقة الرسائل الخاصة وتدفق الاقتران +- [Groups](/ar/channels/groups) — سلوك الدردشة الجماعية وتقييد الذكر +- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل +- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية diff --git a/docs/ar/channels/mattermost.md b/docs/ar/channels/mattermost.md index a10330050..3d1fc8b63 100644 --- a/docs/ar/channels/mattermost.md +++ b/docs/ar/channels/mattermost.md @@ -5,26 +5,26 @@ read_when: summary: إعداد بوت Mattermost وتكوين OpenClaw title: Mattermost x-i18n: - generated_at: "2026-04-23T07:19:04Z" + generated_at: "2026-04-23T13:58:00Z" model: gpt-5.4 provider: openai - source_hash: 04913fe38ddce73eba2a7f3953ec3241b6871ce4a06e0393d09331e37a39cc2f + source_hash: d9421ae903caed5c9dc3b19ca8558725f11bbe553a20bd4d3f0fb6e7eecccd92 source_path: channels/mattermost.md workflow: 15 --- # Mattermost -الحالة: Plugin مضمّن (رمز bot token + أحداث WebSocket). القنوات والمجموعات والرسائل الخاصة مدعومة. -Mattermost هو منصة مراسلة فرق قابلة للاستضافة الذاتية؛ راجع الموقع الرسمي على -[mattermost.com](https://mattermost.com) لمعرفة تفاصيل المنتج والتنزيلات. +الحالة: Plugin مضمّن (رمز بوت + أحداث WebSocket). القنوات والمجموعات والرسائل المباشرة مدعومة. +Mattermost هي منصة مراسلة جماعية قابلة للاستضافة الذاتية؛ راجع الموقع الرسمي على +[mattermost.com](https://mattermost.com) للحصول على تفاصيل المنتج والتنزيلات. ## Plugin المضمّن يأتي Mattermost كـ Plugin مضمّن في إصدارات OpenClaw الحالية، لذلك لا تحتاج -البُنى المجمّعة العادية إلى تثبيت منفصل. +البنيات المجمعة العادية إلى تثبيت منفصل. -إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا لا يتضمن Mattermost، +إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا لا يتضمن Mattermost، فثبّته يدويًا: التثبيت عبر CLI (سجل npm): @@ -33,7 +33,7 @@ Mattermost هو منصة مراسلة فرق قابلة للاستضافة ال openclaw plugins install @openclaw/mattermost ``` -نسخة محلية من المستودع (عند التشغيل من مستودع git): +نسخة محلية (عند التشغيل من مستودع git): ```bash openclaw plugins install ./path/to/local/mattermost-plugin @@ -41,13 +41,13 @@ openclaw plugins install ./path/to/local/mattermost-plugin التفاصيل: [Plugins](/ar/tools/plugin) -## إعداد سريع +## الإعداد السريع 1. تأكد من أن Plugin Mattermost متاح. - - إصدارات OpenClaw المجمّعة الحالية تتضمنه بالفعل. - - يمكن لعمليات التثبيت الأقدم أو المخصصة إضافته يدويًا بالأوامر أعلاه. -2. أنشئ حساب bot في Mattermost وانسخ **bot token**. -3. انسخ **base URL** الخاص بـ Mattermost (مثل `https://chat.example.com`). + - إصدارات OpenClaw المجمعة الحالية تتضمنه بالفعل. + - يمكن للتثبيتات الأقدم/المخصصة إضافته يدويًا بالأوامر أعلاه. +2. أنشئ حساب بوت في Mattermost وانسخ **رمز البوت**. +3. انسخ **عنوان URL الأساسي** لـ Mattermost (مثل `https://chat.example.com`). 4. اضبط OpenClaw وابدأ Gateway. الحد الأدنى من التكوين: @@ -65,10 +65,10 @@ openclaw plugins install ./path/to/local/mattermost-plugin } ``` -## أوامر slash الأصلية +## أوامر الشرطة المائلة الأصلية -أوامر slash الأصلية تعمل بنظام الاشتراك الاختياري. عند تفعيلها، يسجّل OpenClaw أوامر slash من نوع `oc_*` عبر -واجهة Mattermost API ويتلقى طلبات POST المرتدة على خادم HTTP الخاص بـ Gateway. +أوامر الشرطة المائلة الأصلية اختيارية التفعيل. عند تمكينها، يسجل OpenClaw أوامر الشرطة المائلة `oc_*` عبر +واجهة Mattermost API ويتلقى عمليات POST الراجعة على خادم HTTP الخاص بـ Gateway. ```json5 { @@ -78,7 +78,7 @@ openclaw plugins install ./path/to/local/mattermost-plugin native: true, nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // استخدم هذا عندما لا يتمكن Mattermost من الوصول إلى Gateway مباشرة (reverse proxy/public URL). + // يُستخدم عندما يتعذر على Mattermost الوصول إلى Gateway مباشرةً (وكيل عكسي/عنوان URL عام). callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, }, @@ -88,50 +88,43 @@ openclaw plugins install ./path/to/local/mattermost-plugin ملاحظات: -- القيمة الافتراضية لـ `native: "auto"` هي التعطيل في Mattermost. اضبط `native: true` للتفعيل. -- إذا لم يتم تحديد `callbackUrl`، فسيشتقه OpenClaw من host/port الخاص بـ Gateway مع `callbackPath`. +- `native: "auto"` يكون معطلاً افتراضيًا لـ Mattermost. اضبط `native: true` للتمكين. +- إذا تم حذف `callbackUrl`، فسيشتق OpenClaw قيمة منه من مضيف/منفذ Gateway مع `callbackPath`. - في إعدادات الحسابات المتعددة، يمكن ضبط `commands` على المستوى الأعلى أو تحت `channels.mattermost.accounts..commands` (قيم الحساب تتجاوز حقول المستوى الأعلى). -- يتم التحقق من نداءات الأوامر المرتدة باستخدام الرموز المميزة الخاصة بكل أمر التي يعيدها - Mattermost عندما يسجّل OpenClaw أوامر `oc_*`. -- تفشل نداءات slash المرتدة بشكل مغلق عند فشل التسجيل، أو كان الإقلاع جزئيًا، أو - لم يتطابق رمز النداء المرتد مع أحد الأوامر المسجّلة. -- متطلب قابلية الوصول: يجب أن يكون endpoint النداء المرتد قابلاً للوصول من خادم Mattermost. - - لا تضبط `callbackUrl` على `localhost` إلا إذا كان Mattermost يعمل على نفس المضيف/حيّز الشبكة مثل OpenClaw. - - لا تضبط `callbackUrl` على base URL الخاص بـ Mattermost ما لم يكن ذلك العنوان يمرر `/api/channels/mattermost/command` عبر reverse proxy إلى OpenClaw. - - فحص سريع هو `curl https:///api/channels/mattermost/command`; يجب أن يعيد طلب GET القيمة `405 Method Not Allowed` من OpenClaw وليس `404`. -- متطلب قائمة السماح الصادرة في Mattermost: - - إذا كان callback الخاص بك يستهدف عناوين خاصة أو tailnet أو داخلية، فاضبط - `ServiceSettings.AllowedUntrustedInternalConnections` في Mattermost ليشمل host/domain الخاص بالـ callback. - - استخدم إدخالات host/domain، وليس عناوين URL كاملة. - - صحيح: `gateway.tailnet-name.ts.net` - - خطأ: `https://gateway.tailnet-name.ts.net` +- يتم التحقق من عمليات رد الأوامر باستخدام الرموز الخاصة بكل أمر التي يعيدها + Mattermost عندما يسجل OpenClaw أوامر `oc_*`. +- تفشل عمليات رد أوامر الشرطة المائلة بشكل مغلق عند فشل التسجيل، أو عند بدء تشغيل جزئي، أو + عندما لا يطابق رمز الرد أيًا من الأوامر المسجلة. +- متطلب قابلية الوصول: يجب أن يكون من الممكن الوصول إلى نقطة نهاية الرد من خادم Mattermost. + - لا تضبط `callbackUrl` على `localhost` إلا إذا كان Mattermost يعمل على نفس المضيف/مساحة اسم الشبكة مثل OpenClaw. + - لا تضبط `callbackUrl` على عنوان URL الأساسي لـ Mattermost ما لم يكن هذا العنوان يمرر `/api/channels/mattermost/command` عكسيًا إلى OpenClaw. + - فحص سريع هو `curl https:///api/channels/mattermost/command`; يجب أن يعيد طلب GET القيمة `405 Method Not Allowed` من OpenClaw، وليس `404`. +- متطلب قائمة السماح لحركة الخروج في Mattermost: + - إذا كان الرد يستهدف عناوين خاصة/tailnet/داخلية، فاضبط + `ServiceSettings.AllowedUntrustedInternalConnections` في Mattermost ليشمل مضيف/نطاق الرد. + - استخدم إدخالات مضيف/نطاق، وليس عناوين URL كاملة. + - جيد: `gateway.tailnet-name.ts.net` + - سيئ: `https://gateway.tailnet-name.ts.net` ## متغيرات البيئة (الحساب الافتراضي) -اضبط هذه القيم على مضيف Gateway إذا كنت تفضّل استخدام متغيرات البيئة: +اضبط هذه القيم على مضيف Gateway إذا كنت تفضل استخدام متغيرات البيئة: - `MATTERMOST_BOT_TOKEN=...` - `MATTERMOST_URL=https://chat.example.com` -تنطبق متغيرات البيئة فقط على الحساب **الافتراضي** (`default`). أما الحسابات الأخرى فيجب أن تستخدم قيم التكوين. +تنطبق متغيرات البيئة فقط على الحساب **الافتراضي** (`default`). يجب أن تستخدم الحسابات الأخرى قيم التكوين. - -`MATTERMOST_URL` موجود في قائمة حظر كتل endpoint ولا يمكن ضبطه من -ملف workspace `.env`. -ويجب أن يأتي من بيئة shell أو من بيئة عملية Gateway حتى لا تتمكن -مساحات العمل غير الموثوقة من إعادة توجيه حركة Mattermost -إلى خادم مختلف. راجع -[ملفات workspace `.env`](/ar/gateway/security) للاطلاع على القائمة الكاملة. - +لا يمكن ضبط `MATTERMOST_URL` من ملف `.env` لمساحة العمل؛ راجع [ملفات `.env` لمساحة العمل](/ar/gateway/security). ## أوضاع الدردشة -يرد Mattermost على الرسائل الخاصة تلقائيًا. أما سلوك القنوات فيتحكم فيه `chatmode`: +يرد Mattermost على الرسائل المباشرة تلقائيًا. ويتم التحكم في سلوك القنوات بواسطة `chatmode`: -- `oncall` (الافتراضي): الرد فقط عند الإشارة إليه @mention في القنوات. +- `oncall` (افتراضي): الرد فقط عند الإشارة بـ @ في القنوات. - `onmessage`: الرد على كل رسالة في القناة. -- `onchar`: الرد عندما تبدأ الرسالة ببادئة trigger. +- `onchar`: الرد عندما تبدأ الرسالة ببادئة تشغيل. مثال على التكوين: @@ -148,19 +141,19 @@ openclaw plugins install ./path/to/local/mattermost-plugin ملاحظات: -- لا يزال `onchar` يرد على إشارات @mention الصريحة. -- يتم احترام `channels.mattermost.requireMention` في التكوينات القديمة، لكن `chatmode` هو المفضل. +- يظل `onchar` يرد على إشارات @ الصريحة. +- تتم مراعاة `channels.mattermost.requireMention` للتكوينات القديمة، لكن `chatmode` هو المفضل. ## سلاسل الرسائل والجلسات -استخدم `channels.mattermost.replyToMode` للتحكم في ما إذا كانت الردود في القنوات والمجموعات تبقى في -القناة الرئيسية أو تبدأ سلسلة رسائل تحت المنشور الذي فعّلها. +استخدم `channels.mattermost.replyToMode` للتحكم فيما إذا كانت الردود في القنوات والمجموعات ستبقى في +القناة الرئيسية أو ستبدأ سلسلة رسائل تحت المنشور الذي تسبب في التشغيل. -- `off` (الافتراضي): الرد في سلسلة رسائل فقط عندما يكون المنشور الوارد ضمن سلسلة بالفعل. -- `first`: بالنسبة لمنشورات القنوات/المجموعات ذات المستوى الأعلى، ابدأ سلسلة رسائل تحت ذلك المنشور ووجّه - المحادثة إلى جلسة ضمن نطاق سلسلة الرسائل. -- `all`: السلوك نفسه مثل `first` في Mattermost حاليًا. -- تتجاهل الرسائل الخاصة هذا الإعداد وتبقى دون سلاسل رسائل. +- `off` (افتراضي): الرد في سلسلة رسائل فقط عندما يكون المنشور الوارد موجودًا بالفعل ضمن سلسلة. +- `first`: بالنسبة إلى منشورات القنوات/المجموعات ذات المستوى الأعلى، ابدأ سلسلة رسائل تحت ذلك المنشور ووجّه + المحادثة إلى جلسة مرتبطة بسلسلة الرسائل. +- `all`: نفس سلوك `first` في Mattermost حاليًا. +- تتجاهل الرسائل المباشرة هذا الإعداد وتبقى بدون سلاسل. مثال على التكوين: @@ -176,27 +169,27 @@ openclaw plugins install ./path/to/local/mattermost-plugin ملاحظات: -- تستخدم الجلسات ضمن نطاق سلسلة الرسائل معرّف المنشور الذي فعّلها كجذر للسلسلة. +- تستخدم الجلسات المرتبطة بسلسلة الرسائل معرّف المنشور الذي تسبب في التشغيل كجذر للسلسلة. - `first` و`all` متكافئان حاليًا لأنه بمجرد أن يمتلك Mattermost جذر سلسلة رسائل، - تستمر المتابعات والوسائط في نفس تلك السلسلة. + فإن الأجزاء اللاحقة والوسائط تستمر في نفس السلسلة. -## التحكم في الوصول (الرسائل الخاصة) +## التحكم في الوصول (الرسائل المباشرة) -- الافتراضي: `channels.mattermost.dmPolicy = "pairing"` (المرسلون غير المعروفين يحصلون على رمز pairing). +- الافتراضي: `channels.mattermost.dmPolicy = "pairing"` (يرسل المرسلون غير المعروفين رمز اقتران). - الموافقة عبر: - `openclaw pairing list mattermost` - `openclaw pairing approve mattermost ` -- الرسائل الخاصة العامة: `channels.mattermost.dmPolicy="open"` مع `channels.mattermost.allowFrom=["*"]`. +- الرسائل المباشرة العامة: `channels.mattermost.dmPolicy="open"` مع `channels.mattermost.allowFrom=["*"]`. ## القنوات (المجموعات) -- الافتراضي: `channels.mattermost.groupPolicy = "allowlist"` (مقيد بالإشارة mention). -- أضف المرسلين إلى قائمة السماح باستخدام `channels.mattermost.groupAllowFrom` (يوصى بمعرّفات المستخدمين). +- الافتراضي: `channels.mattermost.groupPolicy = "allowlist"` (محكومة بالإشارة). +- أضف المرسلين إلى قائمة السماح باستخدام `channels.mattermost.groupAllowFrom` (ويُوصى باستخدام معرّفات المستخدمين). - توجد تجاوزات الإشارة لكل قناة تحت `channels.mattermost.groups..requireMention` أو `channels.mattermost.groups["*"].requireMention` كقيمة افتراضية. -- المطابقة عبر `@username` قابلة للتغيّر ولا تُفعّل إلا عندما تكون `channels.mattermost.dangerouslyAllowNameMatching: true`. -- القنوات المفتوحة: `channels.mattermost.groupPolicy="open"` (مقيدة بالإشارة mention). -- ملاحظة وقت التشغيل: إذا كان `channels.mattermost` مفقودًا بالكامل، فسيعود وقت التشغيل إلى `groupPolicy="allowlist"` لفحوصات المجموعات (حتى لو كان `channels.defaults.groupPolicy` مضبوطًا). +- مطابقة `@username` قابلة للتغير ولا تُفعّل إلا عند ضبط `channels.mattermost.dangerouslyAllowNameMatching: true`. +- القنوات المفتوحة: `channels.mattermost.groupPolicy="open"` (محكومة بالإشارة). +- ملاحظة وقت التشغيل: إذا كان `channels.mattermost` مفقودًا بالكامل، فسيعود وقت التشغيل إلى `groupPolicy="allowlist"` لفحوصات المجموعات (حتى إذا كانت `channels.defaults.groupPolicy` مضبوطة). مثال: @@ -216,27 +209,27 @@ openclaw plugins install ./path/to/local/mattermost-plugin ## الأهداف للتسليم الصادر -استخدم صيغ الأهداف هذه مع `openclaw message send` أو مع Cron/Webhooks: +استخدم تنسيقات الأهداف هذه مع `openclaw message send` أو Cron/Webhook: - `channel:` لقناة -- `user:` لرسالة خاصة -- `@username` لرسالة خاصة (يتم حلّها عبر Mattermost API) +- `user:` لرسالة مباشرة +- `@username` لرسالة مباشرة (يتم حلها عبر Mattermost API) -المعرّفات المبهمة المجردة (مثل `64ifufp...`) **ملتبسة** في Mattermost (معرّف مستخدم أم معرّف قناة). +المعرّفات المعتمة المجردة (مثل `64ifufp...`) **ملتبسة** في Mattermost (معرّف مستخدم أم معرّف قناة). -يقوم OpenClaw بحلّها **بأولوية المستخدم أولًا**: +يقوم OpenClaw بحلها **بأولوية المستخدم أولًا**: -- إذا كان المعرّف موجودًا كمستخدم (`GET /api/v4/users/` ينجح)، يرسل OpenClaw **رسالة خاصة** عبر حلّ القناة المباشرة من خلال `/api/v4/channels/direct`. -- خلاف ذلك، يُعامل المعرّف على أنه **معرّف قناة**. +- إذا كان المعرّف موجودًا كمستخدم (`GET /api/v4/users/` ينجح)، فإن OpenClaw يرسل **رسالة مباشرة** عبر حل القناة المباشرة باستخدام `/api/v4/channels/direct`. +- وإلا فسيتم التعامل مع المعرّف على أنه **معرّف قناة**. -إذا كنت تحتاج إلى سلوك حتمي، فاستخدم دائمًا البوادئ الصريحة (`user:` / `channel:`). +إذا كنت تحتاج إلى سلوك حتمي، فاستخدم دائمًا البادئات الصريحة (`user:` / `channel:`). -## إعادة محاولة قناة الرسائل الخاصة +## إعادة محاولة قناة الرسائل المباشرة -عندما يرسل OpenClaw إلى هدف رسالة خاصة في Mattermost ويحتاج أولًا إلى حل القناة المباشرة، -فإنه يعيد المحاولة تلقائيًا عند حالات الفشل العابرة في إنشاء القناة المباشرة. +عندما يرسل OpenClaw إلى هدف رسالة مباشرة في Mattermost ويحتاج أولًا إلى حل القناة المباشرة، فإنه +يعيد محاولة حالات الفشل العابرة في إنشاء القناة المباشرة افتراضيًا. -استخدم `channels.mattermost.dmChannelRetry` لضبط هذا السلوك على مستوى Plugin Mattermost بالكامل، +استخدم `channels.mattermost.dmChannelRetry` لضبط هذا السلوك عمومًا لـ Plugin Mattermost، أو `channels.mattermost.accounts..dmChannelRetry` لحساب واحد. ```json5 @@ -256,15 +249,15 @@ openclaw plugins install ./path/to/local/mattermost-plugin ملاحظات: -- ينطبق هذا فقط على إنشاء قناة الرسائل الخاصة (`/api/v4/channels/direct`)، وليس على كل استدعاء لـ Mattermost API. -- تنطبق إعادة المحاولة على حالات الفشل العابرة مثل حدود المعدل، واستجابات 5xx، وأخطاء الشبكة أو انتهاء المهلة. -- تُعامل أخطاء العميل 4xx بخلاف `429` على أنها دائمة ولا يُعاد المحاولة فيها. +- ينطبق هذا فقط على إنشاء قناة الرسائل المباشرة (`/api/v4/channels/direct`)، وليس على كل استدعاء لـ Mattermost API. +- تنطبق إعادة المحاولة على الإخفاقات العابرة مثل حدود المعدل، واستجابات 5xx، وأخطاء الشبكة أو انتهاء المهلة. +- تُعامل أخطاء العميل 4xx بخلاف `429` على أنها دائمة ولا يُعاد المحاولة لها. ## بث المعاينة -يبث Mattermost التفكير ونشاط الأدوات والنص الجزئي للرد في **منشور معاينة مسودة** واحد يُنهى في مكانه عندما يصبح إرسال الإجابة النهائية آمنًا. تُحدَّث المعاينة على نفس معرّف المنشور بدلًا من إغراق القناة برسائل لكل جزء. وتُلغي النهايات الخاصة بالوسائط/الأخطاء تعديلات المعاينة المعلقة وتستخدم التسليم العادي بدلًا من تفريغ منشور معاينة مؤقت. +يبث Mattermost التفكير ونشاط الأدوات ونص الرد الجزئي في **منشور معاينة مسودة** واحد يكتمل في مكانه عند أمان إرسال الإجابة النهائية. تتحدث المعاينة على نفس معرّف المنشور بدلًا من إغراق القناة برسائل لكل جزء. تؤدي النهايات الخاصة بالوسائط/الأخطاء إلى إلغاء تعديلات المعاينة المعلقة وتستخدم التسليم العادي بدلًا من تفريغ منشور معاينة مؤقت. -فعّل ذلك عبر `channels.mattermost.streaming`: +يمكن التمكين عبر `channels.mattermost.streaming`: ```json5 { @@ -278,20 +271,20 @@ openclaw plugins install ./path/to/local/mattermost-plugin ملاحظات: -- `partial` هو الخيار المعتاد: منشور معاينة واحد يُحرَّر مع نمو الرد، ثم يُنهى بالإجابة الكاملة. +- `partial` هو الخيار المعتاد: منشور معاينة واحد يُعدَّل مع نمو الرد، ثم يُنهى بالإجابة الكاملة. - يستخدم `block` أجزاء مسودة بنمط الإلحاق داخل منشور المعاينة. -- يعرض `progress` معاينة حالة أثناء التوليد وينشر الإجابة النهائية فقط عند الاكتمال. -- `off` يعطّل بث المعاينة. -- إذا تعذر إنهاء البث في مكانه (مثلًا إذا حُذف المنشور أثناء البث)، يعود OpenClaw إلى إرسال منشور نهائي جديد حتى لا تضيع الإجابة أبدًا. -- تُحجب الحمولة الخاصة بالتفكير فقط من منشورات القناة، بما في ذلك النص الذي يصل على شكل blockquote `> Reasoning:`. اضبط `/reasoning on` لرؤية التفكير في أسطح أخرى؛ أما المنشور النهائي في Mattermost فيحتفظ بالإجابة فقط. -- راجع [Streaming](/ar/concepts/streaming#preview-streaming-modes) لمصفوفة الربط الخاصة بالقنوات. +- يعرض `progress` معاينة حالة أثناء الإنشاء ولا ينشر الإجابة النهائية إلا عند الاكتمال. +- يعطّل `off` بث المعاينة. +- إذا تعذر إنهاء البث في مكانه (على سبيل المثال إذا حُذف المنشور أثناء البث)، فسيعود OpenClaw إلى إرسال منشور نهائي جديد حتى لا تضيع الإجابة أبدًا. +- تُخفى الحمولات التي تحتوي على التفكير فقط من منشورات القنوات، بما في ذلك النص الذي يصل على شكل blockquote من نوع `> Reasoning:`. اضبط `/reasoning on` لرؤية التفكير في واجهات أخرى؛ أما المنشور النهائي في Mattermost فيحتفظ بالإجابة فقط. +- راجع [Streaming](/ar/concepts/streaming#preview-streaming-modes) للاطلاع على مصفوفة ربط القنوات. -## التفاعلات (أداة message) +## التفاعلات (أداة الرسائل) - استخدم `message action=react` مع `channel=mattermost`. - `messageId` هو معرّف منشور Mattermost. -- يقبل `emoji` أسماء مثل `thumbsup` أو `:+1:` (النقطتان اختياريتان). -- اضبط `remove=true` (boolean) لإزالة تفاعل. +- تقبل `emoji` أسماء مثل `thumbsup` أو `:+1:` (النقطتان اختيارية). +- اضبط `remove=true` (قيمة منطقية) لإزالة تفاعل. - يتم تمرير أحداث إضافة/إزالة التفاعلات كأحداث نظام إلى جلسة الوكيل الموجّهة. أمثلة: @@ -303,12 +296,12 @@ message action=react channel=mattermost target=channel: messageId=.actions.reactions`. -## الأزرار التفاعلية (أداة message) +## الأزرار التفاعلية (أداة الرسائل) -أرسل رسائل تحتوي على أزرار قابلة للنقر. عندما ينقر مستخدم زرًا، يتلقى الوكيل +أرسل رسائل تحتوي على أزرار قابلة للنقر. عندما ينقر المستخدم زرًا، يتلقى الوكيل الاختيار ويمكنه الرد. فعّل الأزرار بإضافة `inlineButtons` إلى إمكانات القناة: @@ -323,7 +316,7 @@ message action=react channel=mattermost target=channel: messageId= buttons=[[{"text":"Yes","callback_data":"yes"},{"text":"No","callback_data":"no"}]] @@ -332,43 +325,43 @@ message action=send channel=mattermost target=channel: buttons=[[{"te حقول الزر: - `text` (مطلوب): تسمية العرض. -- `callback_data` (مطلوب): القيمة التي تُرسل عند النقر (تُستخدم كمعرّف الإجراء). +- `callback_data` (مطلوب): القيمة التي تُعاد عند النقر (تُستخدم كمعرّف للإجراء). - `style` (اختياري): `"default"` أو `"primary"` أو `"danger"`. -عندما ينقر مستخدم زرًا: +عندما ينقر المستخدم زرًا: -1. تُستبدل جميع الأزرار بسطر تأكيد (مثل: "✓ **Yes** selected by @user"). +1. تُستبدل جميع الأزرار بسطر تأكيد (مثل: "✓ **تم اختيار نعم** بواسطة @user"). 2. يتلقى الوكيل الاختيار كرسالة واردة ويرد. ملاحظات: -- تستخدم نداءات الأزرار المرتدة تحقق HMAC-SHA256 (تلقائي، ولا حاجة إلى أي تكوين). -- يزيل Mattermost بيانات callback من استجابات API الخاصة به (ميزة أمان)، لذلك - تُزال جميع الأزرار عند النقر — ولا يمكن الإزالة الجزئية. +- تستخدم عمليات رد الأزرار التحقق باستخدام HMAC-SHA256 (تلقائيًا، ولا حاجة إلى تكوين). +- يزيل Mattermost بيانات الرد من استجابات API الخاصة به (ميزة أمان)، لذلك + تتم إزالة جميع الأزرار عند النقر — ولا يمكن الإزالة الجزئية. - تُنقّى معرّفات الإجراءات التي تحتوي على شرطات أو شرطات سفلية تلقائيًا - (بسبب قيود التوجيه في Mattermost). + (قيد في توجيه Mattermost). التكوين: - `channels.mattermost.capabilities`: مصفوفة من سلاسل الإمكانات. أضف `"inlineButtons"` إلى - تفعيل وصف أداة الأزرار في system prompt الخاص بالوكيل. -- `channels.mattermost.interactions.callbackBaseUrl`: base URL خارجي اختياري لنداءات الأزرار - المرتدة (مثل `https://gateway.example.com`). استخدم هذا عندما لا يتمكن Mattermost من - الوصول إلى Gateway مباشرة عبر bind host الخاص به. + تمكين وصف أداة الأزرار في مطالبة النظام الخاصة بالوكيل. +- `channels.mattermost.interactions.callbackBaseUrl`: عنوان URL أساسي خارجي اختياري لعمليات رد + الأزرار (على سبيل المثال `https://gateway.example.com`). استخدم هذا عندما يتعذر على Mattermost + الوصول إلى Gateway عند مضيف الربط الخاص به مباشرةً. - في إعدادات الحسابات المتعددة، يمكنك أيضًا ضبط الحقل نفسه تحت `channels.mattermost.accounts..interactions.callbackBaseUrl`. -- إذا لم يتم تحديد `interactions.callbackBaseUrl`، فسيشتق OpenClaw عنوان callback URL من +- إذا تم حذف `interactions.callbackBaseUrl`، فسيشتق OpenClaw عنوان URL للرد من `gateway.customBindHost` + `gateway.port`، ثم يعود إلى `http://localhost:`. -- قاعدة قابلية الوصول: يجب أن يكون عنوان callback URL الخاص بالأزرار قابلاً للوصول من خادم Mattermost. - لا يعمل `localhost` إلا عندما يعمل Mattermost وOpenClaw على نفس المضيف/حيّز الشبكة. -- إذا كان هدف callback الخاص بك خاصًا أو على tailnet أو داخليًا، فأضف مضيفه/نطاقه إلى +- قاعدة قابلية الوصول: يجب أن يكون عنوان URL لرد الزر قابلاً للوصول من خادم Mattermost. + لا يعمل `localhost` إلا عندما يعمل Mattermost وOpenClaw على نفس المضيف/مساحة اسم الشبكة. +- إذا كان هدف الرد خاصًا/tailnet/داخليًا، فأضف مضيفه/نطاقه إلى `ServiceSettings.AllowedUntrustedInternalConnections` في Mattermost. -### تكامل API مباشر (سكربتات خارجية) +### التكامل المباشر مع API (البرامج النصية الخارجية) -يمكن للسكربتات الخارجية وWebhooks نشر الأزرار مباشرة عبر Mattermost REST API +يمكن للبرامج النصية الخارجية وWebhook نشر الأزرار مباشرةً عبر Mattermost REST API بدلًا من المرور عبر أداة `message` الخاصة بالوكيل. استخدم `buildButtonAttachments()` من -الـ Plugin متى أمكن؛ وإذا كنت سترسل JSON خامًا، فاتبع هذه القواعد: +Plugin متى أمكن؛ وإذا كنت سترسل JSON خامًا، فاتبع هذه القواعد: **بنية الحمولة:** @@ -381,17 +374,17 @@ message action=send channel=mattermost target=channel: buttons=[[{"te { actions: [ { - id: "mybutton01", // أحرف وأرقام فقط — انظر أدناه - type: "button", // مطلوب، وإلا سيتم تجاهل النقرات بصمت - name: "Approve", // تسمية العرض - style: "primary", // اختياري: "default" أو "primary" أو "danger" + id: "mybutton01", // alphanumeric only — see below + type: "button", // required, or clicks are silently ignored + name: "Approve", // display label + style: "primary", // optional: "default", "primary", "danger" integration: { url: "https://gateway.example.com/mattermost/interactions/default", context: { - action_id: "mybutton01", // يجب أن يطابق معرّف الزر (لاستخدامه في lookup الاسم) + action_id: "mybutton01", // must match button id (for name lookup) action: "approve", - // ... أي حقول مخصصة أخرى ... - _token: "", // انظر قسم HMAC أدناه + // ... any custom fields ... + _token: "", // see HMAC section below }, }, }, @@ -404,27 +397,27 @@ message action=send channel=mattermost target=channel: buttons=[[{"te **القواعد الحرجة:** -1. توضع attachments في `props.attachments`، وليس في `attachments` على المستوى الأعلى (وإلا يتم تجاهلها بصمت). -2. يحتاج كل إجراء إلى `type: "button"` — ومن دونه، تُبتلع النقرات بصمت. -3. يحتاج كل إجراء إلى حقل `id` — يتجاهل Mattermost الإجراءات التي لا تحتوي على IDs. -4. يجب أن يكون `id` الخاص بالإجراء **أبجديًا رقميًا فقط** (`[a-zA-Z0-9]`). فالشرطات والشرطات السفلية تعطل - توجيه الإجراءات على جانب خادم Mattermost (ويعيد 404). أزلها قبل الاستخدام. +1. يجب أن توضع المرفقات في `props.attachments`، وليس في `attachments` على المستوى الأعلى (وإلا يتم تجاهلها بصمت). +2. يحتاج كل إجراء إلى `type: "button"` — وبدونه، يتم ابتلاع النقرات بصمت. +3. يحتاج كل إجراء إلى حقل `id` — يتجاهل Mattermost الإجراءات التي لا تحتوي على معرّفات. +4. يجب أن يكون `id` الخاص بالإجراء **أبجديًا رقميًا فقط** (`[a-zA-Z0-9]`). الشرطات والشرطات السفلية تكسر + توجيه الإجراءات على جانب خادم Mattermost (تعيد 404). أزلها قبل الاستخدام. 5. يجب أن يطابق `context.action_id` قيمة `id` الخاصة بالزر حتى تعرض رسالة التأكيد اسم الزر (مثل "Approve") بدلًا من معرّف خام. -6. `context.action_id` مطلوب — إذ يعيد معالج التفاعل 400 عند غيابه. +6. الحقل `context.action_id` مطلوب — يعيد معالج التفاعل 400 من دونه. **توليد رمز HMAC:** -يتحقق Gateway من نقرات الأزرار باستخدام HMAC-SHA256. ويجب على السكربتات الخارجية توليد رموز +يتحقق Gateway من نقرات الأزرار باستخدام HMAC-SHA256. يجب على البرامج النصية الخارجية إنشاء رموز تطابق منطق التحقق في Gateway: -1. اشتق secret من bot token: +1. اشتق السر من رمز البوت: `HMAC-SHA256(key="openclaw-mattermost-interactions", data=botToken)` -2. أنشئ كائن context بجميع الحقول **باستثناء** `_token`. -3. نفّذ serialize باستخدام **مفاتيح مرتبة** و**من دون مسافات** (يستخدم Gateway الدالة `JSON.stringify` +2. ابنِ كائن السياق بكل الحقول **باستثناء** `_token`. +3. نفّذ التسلسل باستخدام **مفاتيح مرتبة** و**من دون مسافات** (يستخدم Gateway `JSON.stringify` مع مفاتيح مرتبة، ما ينتج مخرجات مضغوطة). -4. وقّع باستخدام: `HMAC-SHA256(key=secret, data=serializedContext)` -5. أضف قيمة hex digest الناتجة كحقل `_token` داخل context. +4. وقّع: `HMAC-SHA256(key=secret, data=serializedContext)` +5. أضف ملخص hex الناتج كقيمة `_token` في السياق. مثال Python: @@ -445,24 +438,24 @@ context = {**ctx, "_token": token} المشكلات الشائعة في HMAC: -- تضيف `json.dumps` في Python مسافات افتراضيًا (`{"key": "val"}`). استخدم +- يضيف `json.dumps` في Python مسافات افتراضيًا (`{"key": "val"}`). استخدم `separators=(",", ":")` لمطابقة المخرجات المضغوطة في JavaScript (`{"key":"val"}`). -- وقّع دائمًا **كل** حقول context (باستثناء `_token`). يزيل Gateway الحقل `_token` ثم - يوقّع كل ما تبقى. يؤدي توقيع مجموعة فرعية فقط إلى فشل صامت في التحقق. -- استخدم `sort_keys=True` — إذ يرتب Gateway المفاتيح قبل التوقيع، وقد يقوم Mattermost - بإعادة ترتيب حقول context عند تخزين الحمولة. -- اشتق secret من bot token (بشكل حتمي)، وليس من بايتات عشوائية. يجب أن يكون secret +- وقّع دائمًا **جميع** حقول السياق (باستثناء `_token`). يزيل Gateway الحقل `_token` ثم + يوقّع كل ما تبقى. توقيع مجموعة فرعية يسبب فشل التحقق بصمت. +- استخدم `sort_keys=True` — يرتب Gateway المفاتيح قبل التوقيع، وقد يعيد Mattermost + ترتيب حقول السياق عند تخزين الحمولة. +- اشتق السر من رمز البوت (بشكل حتمي)، وليس من بايتات عشوائية. يجب أن يكون السر نفسه عبر العملية التي تنشئ الأزرار وGateway الذي يتحقق منها. -## محول الدليل +## مهايئ الدليل -يتضمن Plugin Mattermost محول دليل يحل أسماء القنوات والمستخدمين -عبر Mattermost API. وهذا يتيح استخدام الأهداف `#channel-name` و`@username` في -`openclaw message send` وتسليمات Cron/Webhooks. +يتضمن Plugin Mattermost مهايئ دليل يحل أسماء القنوات والمستخدمين +عبر Mattermost API. يتيح هذا استخدام الأهداف `#channel-name` و`@username` في +`openclaw message send` وعمليات تسليم Cron/Webhook. -لا حاجة إلى أي تكوين — يستخدم المحول bot token من تكوين الحساب. +لا حاجة إلى أي تكوين — يستخدم المهايئ رمز البوت من تكوين الحساب. -## حسابات متعددة +## الحسابات المتعددة يدعم Mattermost حسابات متعددة تحت `channels.mattermost.accounts`: @@ -481,34 +474,34 @@ context = {**ctx, "_token": token} ## استكشاف الأخطاء وإصلاحها -- لا توجد ردود في القنوات: تأكد من وجود bot في القناة والإشارة إليه (oncall)، أو استخدم بادئة trigger (onchar)، أو اضبط `chatmode: "onmessage"`. -- أخطاء المصادقة: تحقق من bot token وbase URL وما إذا كان الحساب مفعّلًا. -- مشكلات الحسابات المتعددة: تنطبق متغيرات البيئة فقط على الحساب `default`. -- تعيد أوامر slash الأصلية `Unauthorized: invalid command token.`: لم يقبل OpenClaw - callback token. والأسباب المعتادة: - - فشل تسجيل أمر slash أو اكتمل جزئيًا فقط عند بدء التشغيل - - callback يصل إلى Gateway/حساب خاطئ - - لا يزال Mattermost يحتفظ بأوامر قديمة تشير إلى هدف callback سابق - - أُعيد تشغيل Gateway من دون إعادة تفعيل أوامر slash -- إذا توقفت أوامر slash الأصلية عن العمل، فتحقق من السجلات بحثًا عن +- لا توجد ردود في القنوات: تأكد من أن البوت موجود في القناة واذكره (oncall)، أو استخدم بادئة تشغيل (onchar)، أو اضبط `chatmode: "onmessage"`. +- أخطاء المصادقة: تحقق من رمز البوت وعنوان URL الأساسي وما إذا كان الحساب ممكّنًا. +- مشكلات الحسابات المتعددة: تنطبق متغيرات البيئة على الحساب `default` فقط. +- تعيد أوامر الشرطة المائلة الأصلية `Unauthorized: invalid command token.`: لم يقبل OpenClaw + رمز الرد. الأسباب الشائعة: + - فشل تسجيل أوامر الشرطة المائلة أو اكتمل جزئيًا فقط عند بدء التشغيل + - يصل الرد إلى Gateway/الحساب الخطأ + - لا يزال Mattermost يحتوي على أوامر قديمة تشير إلى هدف رد سابق + - أُعيد تشغيل Gateway من دون إعادة تفعيل أوامر الشرطة المائلة +- إذا توقفت أوامر الشرطة المائلة الأصلية عن العمل، فتحقق من السجلات بحثًا عن `mattermost: failed to register slash commands` أو `mattermost: native slash commands enabled but no commands could be registered`. -- إذا تم حذف `callbackUrl` وحذرت السجلات من أن callback حُلّ إلى - `http://127.0.0.1:18789/...`، فمن المحتمل أن يكون ذلك العنوان قابلاً للوصول فقط عندما - يعمل Mattermost على نفس المضيف/حيّز الشبكة مثل OpenClaw. اضبط +- إذا تم حذف `callbackUrl` وكانت السجلات تحذر من أن الرد تم حله إلى + `http://127.0.0.1:18789/...`، فمن المرجح أن يكون هذا العنوان قابلاً للوصول فقط عندما + يعمل Mattermost على نفس المضيف/مساحة اسم الشبكة مثل OpenClaw. اضبط `commands.callbackUrl` صريحًا وقابلاً للوصول خارجيًا بدلًا من ذلك. -- تظهر الأزرار كمربعات بيضاء: قد يكون الوكيل يرسل بيانات أزرار غير صحيحة. تحقق من أن كل زر يحتوي على الحقلين `text` و`callback_data`. -- تُعرض الأزرار ولكن النقرات لا تفعل شيئًا: تحقق من أن `AllowedUntrustedInternalConnections` في تكوين خادم Mattermost يتضمن `127.0.0.1 localhost`، وأن `EnablePostActionIntegration` مضبوط على `true` في ServiceSettings. -- تعيد الأزرار 404 عند النقر: من المحتمل أن `id` الخاص بالزر يحتوي على شرطات أو شرطات سفلية. يتعطل موجه الإجراءات في Mattermost مع المعرفات غير الأبجدية الرقمية. استخدم `[a-zA-Z0-9]` فقط. -- يسجل Gateway `invalid _token`: عدم تطابق HMAC. تحقق من أنك توقّع جميع حقول context (وليس مجموعة فرعية)، وتستخدم مفاتيح مرتبة، وJSON مضغوطًا (من دون مسافات). راجع قسم HMAC أعلاه. -- يسجل Gateway `missing _token in context`: الحقل `_token` غير موجود في context الخاص بالزر. تأكد من تضمينه عند بناء حمولة integration. -- يعرض التأكيد معرّفًا خامًا بدلًا من اسم الزر: `context.action_id` لا يطابق `id` الخاص بالزر. اضبط كليهما على القيمة نفسها بعد التنقية. +- تظهر الأزرار كمربعات بيضاء: قد يكون الوكيل يرسل بيانات أزرار غير صحيحة البنية. تحقق من أن كل زر يحتوي على الحقلين `text` و`callback_data`. +- تُعرَض الأزرار لكن النقرات لا تفعل شيئًا: تحقق من أن `AllowedUntrustedInternalConnections` في تكوين خادم Mattermost يتضمن `127.0.0.1 localhost`، وأن `EnablePostActionIntegration` تساوي `true` في `ServiceSettings`. +- تعيد الأزرار 404 عند النقر: من المحتمل أن `id` الخاص بالزر يحتوي على شرطات أو شرطات سفلية. يتعطل موجّه الإجراءات في Mattermost مع المعرّفات غير الأبجدية الرقمية. استخدم `[a-zA-Z0-9]` فقط. +- يسجل Gateway الرسالة `invalid _token`: عدم تطابق HMAC. تحقق من أنك توقّع جميع حقول السياق (وليس مجموعة فرعية)، وتستخدم مفاتيح مرتبة، وJSON مضغوطًا (من دون مسافات). راجع قسم HMAC أعلاه. +- يسجل Gateway الرسالة `missing _token in context`: الحقل `_token` غير موجود في سياق الزر. تأكد من تضمينه عند بناء حمولة التكامل. +- يعرض التأكيد معرّفًا خامًا بدلًا من اسم الزر: `context.action_id` لا يطابق `id` الخاص بالزر. اضبط القيمتين على نفس القيمة المنقّاة. - الوكيل لا يعرف الأزرار: أضف `capabilities: ["inlineButtons"]` إلى تكوين قناة Mattermost. ## ذو صلة - [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة -- [Pairing](/ar/channels/pairing) — مصادقة الرسائل الخاصة وتدفق pairing -- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وتقييد الإشارة +- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران +- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية والتحكم عبر الإشارة - [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل -- [الأمان](/ar/gateway/security) — نموذج الوصول والتدعيم +- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية diff --git a/docs/ar/channels/synology-chat.md b/docs/ar/channels/synology-chat.md index 14308b65d..9bd73b464 100644 --- a/docs/ar/channels/synology-chat.md +++ b/docs/ar/channels/synology-chat.md @@ -5,10 +5,10 @@ read_when: summary: إعداد Webhook لـ Synology Chat وتكوين OpenClaw title: Synology Chat x-i18n: - generated_at: "2026-04-23T07:19:48Z" + generated_at: "2026-04-23T13:57:58Z" model: gpt-5.4 provider: openai - source_hash: dda0d5d11e2526f4813b69ca914a63231003eb60d8bc2e1f030bcb3d77c8eda0 + source_hash: a9cafbf543b8ce255e634bc4d54012652d3887ac23b31b97899dc7cec9d0688f source_path: channels/synology-chat.md workflow: 15 --- @@ -16,18 +16,18 @@ x-i18n: # Synology Chat الحالة: Plugin مضمّن لقناة الرسائل المباشرة يستخدم Webhook الخاصة بـ Synology Chat. -يقبل Plugin الرسائل الواردة من Webhook الصادرة في Synology Chat ويرسل الردود +يقبل الـ Plugin الرسائل الواردة من Webhook الصادرة في Synology Chat ويرسل الردود عبر Webhook واردة في Synology Chat. -## Plugin المضمّن +## Plugin مضمّن -يأتي Synology Chat كـ Plugin مضمّن في إصدارات OpenClaw الحالية، لذا فإن -البنيات المجمّعة العادية لا تحتاج إلى تثبيت منفصل. +يأتي Synology Chat كـ Plugin مضمّن في إصدارات OpenClaw الحالية، لذلك لا تحتاج +النسخ المعبأة العادية إلى تثبيت منفصل. -إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا يستبعد Synology Chat، +إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا لا يتضمن Synology Chat، فقم بتثبيته يدويًا: -التثبيت من نسخة محلية: +ثبّت من نسخة محلية: ```bash openclaw plugins install ./path/to/local/synology-chat-plugin @@ -35,17 +35,17 @@ openclaw plugins install ./path/to/local/synology-chat-plugin التفاصيل: [Plugins](/ar/tools/plugin) -## الإعداد السريع +## إعداد سريع 1. تأكد من أن Plugin الخاص بـ Synology Chat متاح. - - تتضمن إصدارات OpenClaw المجمّعة الحالية هذا Plugin بالفعل. - - يمكن للتثبيتات الأقدم/المخصصة إضافته يدويًا من نسخة المصدر باستخدام الأمر أعلاه. + - إصدارات OpenClaw المعبأة الحالية تتضمنه بالفعل. + - يمكن للإصدارات الأقدم أو التثبيتات المخصصة إضافته يدويًا من نسخة المصدر باستخدام الأمر أعلاه. - يعرض `openclaw onboard` الآن Synology Chat في قائمة إعداد القنوات نفسها التي يستخدمها `openclaw channels add`. - - الإعداد غير التفاعلي: `openclaw channels add --channel synology-chat --token --url ` + - إعداد غير تفاعلي: `openclaw channels add --channel synology-chat --token --url ` 2. في تكاملات Synology Chat: - - أنشئ Webhook واردة وانسخ URL الخاص بها. + - أنشئ Webhook واردة وانسخ عنوان URL الخاص بها. - أنشئ Webhook صادرة باستخدام الرمز السري الخاص بك. -3. وجّه URL الخاصة بـ Webhook الصادرة إلى Gateway الخاص بـ OpenClaw: +3. وجّه عنوان URL الخاص بـ Webhook الصادرة إلى Gateway الخاص بـ OpenClaw: - `https://gateway-host/webhook/synology` افتراضيًا. - أو `channels.synology-chat.webhookPath` المخصص لديك. 4. أكمل الإعداد في OpenClaw. @@ -56,15 +56,15 @@ openclaw plugins install ./path/to/local/synology-chat-plugin تفاصيل مصادقة Webhook: - يقبل OpenClaw رمز Webhook الصادرة من `body.token`، ثم - `?token=...`، ثم من الرؤوس. -- صيغ الرؤوس المقبولة: + `?token=...`، ثم الترويسات. +- صيغ الترويسات المقبولة: - `x-synology-token` - `x-webhook-token` - `x-openclaw-token` - `Authorization: Bearer ` -- تُرفض الرموز الفارغة أو المفقودة افتراضيًا. +- تفشل الرموز الفارغة أو المفقودة بشكل مغلق. -التهيئة الدنيا: +الحد الأدنى من التكوين: ```json5 { @@ -85,7 +85,7 @@ openclaw plugins install ./path/to/local/synology-chat-plugin ## متغيرات البيئة -بالنسبة إلى الحساب الافتراضي، يمكنك استخدام متغيرات البيئة: +بالنسبة للحساب الافتراضي، يمكنك استخدام متغيرات البيئة: - `SYNOLOGY_CHAT_TOKEN` - `SYNOLOGY_CHAT_INCOMING_URL` @@ -94,24 +94,18 @@ openclaw plugins install ./path/to/local/synology-chat-plugin - `SYNOLOGY_RATE_LIMIT` - `OPENCLAW_BOT_NAME` -تتجاوز قيم التهيئة متغيرات البيئة. +تتجاوز قيم التكوين متغيرات البيئة. - -يوجد `SYNOLOGY_CHAT_INCOMING_URL` ضمن قائمة حظر كتل نقاط النهاية ولا يمكن ضبطه -من ملف `.env` خاص بمساحة العمل. يجب أن يأتي من بيئة shell أو من -بيئة عملية Gateway حتى لا تتمكن مساحات العمل غير الموثوقة من إعادة توجيه -حركة مرور Synology Chat إلى Webhook مختلفة. راجع -[ملفات `.env` لمساحة العمل](/ar/gateway/security) للاطلاع على القائمة الكاملة. - +لا يمكن تعيين `SYNOLOGY_CHAT_INCOMING_URL` من ملف `.env` الخاص بمساحة العمل؛ راجع [ملفات `.env` الخاصة بمساحة العمل](/ar/gateway/security). ## سياسة الرسائل المباشرة والتحكم في الوصول - `dmPolicy: "allowlist"` هو الإعداد الافتراضي الموصى به. - يقبل `allowedUserIds` قائمة (أو سلسلة مفصولة بفواصل) من معرّفات مستخدمي Synology. - في وضع `allowlist`، تُعامل قائمة `allowedUserIds` الفارغة على أنها سوء تهيئة ولن يبدأ مسار Webhook (استخدم `dmPolicy: "open"` للسماح للجميع). -- يتيح `dmPolicy: "open"` لأي مرسل. +- يتيح `dmPolicy: "open"` أي مرسل. - يحظر `dmPolicy: "disabled"` الرسائل المباشرة. -- يبقى ربط مستلم الرد معتمدًا افتراضيًا على `user_id` الرقمي الثابت. يمثل `channels.synology-chat.dangerouslyAllowNameMatching: true` وضع توافق للطوارئ يعيد تفعيل البحث باستخدام اسم المستخدم/الاسم المستعار القابل للتغيير لتسليم الردود. +- يبقى ربط مستلم الرد معتمدًا على `user_id` الرقمي الثابت افتراضيًا. يشكل `channels.synology-chat.dangerouslyAllowNameMatching: true` وضع توافق طارئ يعيد تفعيل البحث باستخدام اسم المستخدم/الاسم المستعار القابل للتغيير لتسليم الردود. - تعمل موافقات الاقتران مع: - `openclaw pairing list synology-chat` - `openclaw pairing approve synology-chat ` @@ -127,20 +121,20 @@ openclaw message send --channel synology-chat --target 123456 --text "Hello from openclaw message send --channel synology-chat --target synology-chat:123456 --text "Hello again" ``` -يتم دعم إرسال الوسائط عبر تسليم الملفات المستند إلى URL. -يجب أن تستخدم URL الملفات الصادرة `http` أو `https`، وتُرفض أهداف الشبكات الخاصة أو المحظورة بأي شكل آخر قبل أن يمرر OpenClaw URL إلى Webhook الخاصة بـ NAS. +عمليات إرسال الوسائط مدعومة عبر تسليم الملفات المعتمد على URL. +يجب أن تستخدم عناوين URL للملفات الصادرة `http` أو `https`، ويتم رفض أهداف الشبكة الخاصة أو المحجوبة بطريقة أخرى قبل أن يقوم OpenClaw بتمرير عنوان URL إلى Webhook الخاصة بـ NAS. -## الحسابات المتعددة +## حسابات متعددة -تُدعَم حسابات Synology Chat المتعددة ضمن `channels.synology-chat.accounts`. -يمكن لكل حساب تجاوز الرمز، وURL الواردة، ومسار Webhook، وسياسة الرسائل المباشرة، والحدود. -تُعزل جلسات الرسائل المباشرة لكل حساب ولكل مستخدم، لذا فإن `user_id` الرقمي نفسه -على حسابي Synology مختلفين لا يشارك حالة النص نفسه. +تتوفر عدة حسابات Synology Chat ضمن `channels.synology-chat.accounts`. +يمكن لكل حساب تجاوز الرمز وعنوان URL الوارد ومسار Webhook وسياسة الرسائل المباشرة والحدود. +تكون جلسات الرسائل المباشرة معزولة لكل حساب ولكل مستخدم، لذلك فإن `user_id` الرقمي نفسه +على حسابي Synology مختلفين لا يشارك حالة السجل. امنح كل حساب مفعّل `webhookPath` مميزًا. يرفض OpenClaw الآن المسارات المتطابقة تمامًا ويرفض بدء الحسابات المسماة التي ترث فقط مسار Webhook مشتركًا في إعدادات الحسابات المتعددة. -إذا كنت تحتاج عمدًا إلى هذا الإرث القديم لحساب مسمى، فاضبط -`dangerouslyAllowInheritedWebhookPath: true` على ذلك الحساب أو على `channels.synology-chat`, -لكن ستظل المسارات المتطابقة تمامًا مرفوضة افتراضيًا. ويفضَّل تعيين مسارات صريحة لكل حساب. +إذا كنت تحتاج عمدًا إلى الوراثة القديمة لحساب مسمّى، فعيّن +`dangerouslyAllowInheritedWebhookPath: true` على ذلك الحساب أو في `channels.synology-chat`, +ولكن لا تزال المسارات المتطابقة تمامًا تُرفض بشكل مغلق. يُفضل استخدام مسارات صريحة لكل حساب. ```json5 { @@ -169,33 +163,33 @@ openclaw message send --channel synology-chat --target synology-chat:123456 --te - حافظ على سرية `token` وقم بتدويره إذا تسرّب. - أبقِ `allowInsecureSsl: false` ما لم تكن تثق صراحةً بشهادة NAS محلية موقعة ذاتيًا. -- يتم التحقق من طلبات Webhook الواردة باستخدام الرمز وتُطبَّق عليها حدود المعدّل لكل مرسل. -- تستخدم عمليات التحقق من الرموز غير الصالحة مقارنة أسرار بزمن ثابت وتفشل افتراضيًا. -- فضّل `dmPolicy: "allowlist"` في بيئات الإنتاج. -- أبقِ `dangerouslyAllowNameMatching` معطّلًا ما لم تكن تحتاج صراحةً إلى تسليم الردود القديم المعتمد على اسم المستخدم. -- أبقِ `dangerouslyAllowInheritedWebhookPath` معطّلًا ما لم تكن تقبل صراحةً مخاطر التوجيه عبر المسار المشترك في إعدادات الحسابات المتعددة. +- يتم التحقق من طلبات Webhook الواردة بواسطة الرمز وتُطبق عليها حدود المعدل لكل مرسل. +- تستخدم عمليات التحقق من الرموز غير الصالحة مقارنة أسرار بزمن ثابت وتفشل بشكل مغلق. +- يُفضل `dmPolicy: "allowlist"` في بيئات الإنتاج. +- أبقِ `dangerouslyAllowNameMatching` معطلاً ما لم تكن تحتاج صراحةً إلى تسليم الردود القديم المعتمد على اسم المستخدم. +- أبقِ `dangerouslyAllowInheritedWebhookPath` معطلاً ما لم تكن تقبل صراحةً مخاطر التوجيه عبر المسار المشترك في إعداد حسابات متعددة. ## استكشاف الأخطاء وإصلاحها - `Missing required fields (token, user_id, text)`: - حمولة Webhook الصادرة تفتقد أحد الحقول المطلوبة - - إذا كان Synology يرسل الرمز في الرؤوس، فتأكد من أن Gateway/الوكيل العكسي يحافظ على تلك الرؤوس + - إذا كان Synology يرسل الرمز في الترويسات، فتأكد من أن الـ Gateway/الوكيل يحافظ على تلك الترويسات - `Invalid token`: - - الرمز السري لـ Webhook الصادرة لا يطابق `channels.synology-chat.token` - - يصل الطلب إلى الحساب/مسار Webhook الخاطئ - - أزال وكيل عكسي رأس الرمز قبل وصول الطلب إلى OpenClaw + - السر الخاص بـ Webhook الصادرة لا يطابق `channels.synology-chat.token` + - الطلب يصل إلى الحساب أو مسار Webhook الخطأ + - أزال وكيل عكسي ترويسة الرمز قبل أن يصل الطلب إلى OpenClaw - `Rate limit exceeded`: - - قد تؤدي محاولات الرموز غير الصالحة الكثيرة جدًا من المصدر نفسه إلى حظر ذلك المصدر مؤقتًا - - يخضع المرسلون الموثّقون أيضًا إلى حد منفصل لمعدل الرسائل لكل مستخدم + - قد تؤدي محاولات الرمز غير الصالح الكثيرة جدًا من المصدر نفسه إلى حظر ذلك المصدر مؤقتًا + - لدى المرسلين الموثقين أيضًا حد منفصل لمعدل الرسائل لكل مستخدم - `Allowlist is empty. Configure allowedUserIds or use dmPolicy=open.`: - - تم تفعيل `dmPolicy="allowlist"` لكن لم يتم ضبط أي مستخدمين + - تم تفعيل `dmPolicy="allowlist"` لكن لم يتم تكوين أي مستخدمين - `User not authorized`: - - لا يوجد `user_id` الرقمي للمرسل ضمن `allowedUserIds` + - `user_id` الرقمي الخاص بالمرسل غير موجود في `allowedUserIds` ## ذو صلة - [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة - [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران -- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وبوابة الإشارات +- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وضبط الإشارات - [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل - [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية diff --git a/docs/ar/channels/telegram.md b/docs/ar/channels/telegram.md index 7dce543b5..2021b8a56 100644 --- a/docs/ar/channels/telegram.md +++ b/docs/ar/channels/telegram.md @@ -1,30 +1,30 @@ --- read_when: - العمل على ميزات Telegram أو Webhook -summary: حالة دعم بوت Telegram وإمكاناته وإعداداته +summary: حالة دعم بوت Telegram، والإمكانات، والإعدادات title: Telegram x-i18n: - generated_at: "2026-04-23T07:19:55Z" + generated_at: "2026-04-23T13:57:59Z" model: gpt-5.4 provider: openai - source_hash: e2073245079eb48b599c4274cc620eb29211a64c5d396ffb355f7022fecec9a6 + source_hash: 024b76c3c71537995fc4efc26887eae516846d3f845d135b263d4d7f270afbb7 source_path: channels/telegram.md workflow: 15 --- # Telegram (Bot API) -الحالة: جاهز للإنتاج لرسائل البوت المباشرة + المجموعات عبر grammY. يُعد الاستطلاع الطويل هو الوضع الافتراضي؛ ووضع Webhook اختياري. +الحالة: جاهز للإنتاج للرسائل الخاصة للبوت + المجموعات عبر grammY. يُعد الاستطلاع الطويل الوضع الافتراضي؛ ووضع Webhook اختياري. - سياسة الرسائل المباشرة الافتراضية في Telegram هي الاقتران. + سياسة الرسائل الخاصة الافتراضية لـ Telegram هي الاقتران. - - أدوات تشخيص متعددة القنوات وأدلة إصلاح. + + تشخيصات عبر القنوات وإجراءات إصلاح. - أنماط وأمثلة كاملة لإعدادات القنوات. + أنماط وأمثلة كاملة لإعدادات القناة. @@ -32,13 +32,13 @@ x-i18n: - افتح Telegram وابدأ محادثة مع **@BotFather** (تأكد من أن المعرّف هو `@BotFather` تمامًا). + افتح Telegram وابدأ محادثة مع **@BotFather** (تأكد أن المعرّف هو `@BotFather` تمامًا). شغّل `/newbot`، واتبع المطالبات، واحفظ الرمز. - + ```json5 { @@ -53,12 +53,12 @@ x-i18n: } ``` - متغير البيئة الاحتياطي: `TELEGRAM_BOT_TOKEN=...` (للحساب الافتراضي فقط). - لا يستخدم Telegram الأمر `openclaw channels login telegram`؛ اضبط الرمز في config/env، ثم ابدأ gateway. + بديل متغير البيئة: `TELEGRAM_BOT_TOKEN=...` (للحساب الافتراضي فقط). + لا يستخدم Telegram الأمر `openclaw channels login telegram`; اضبط الرمز في config/env، ثم شغّل Gateway. - + ```bash openclaw gateway @@ -76,35 +76,35 @@ openclaw pairing approve telegram -ترتيب تحديد الرمز يراعي الحساب. عمليًا، تتغلب قيم config على الاحتياطي من متغيرات البيئة، وينطبق `TELEGRAM_BOT_TOKEN` على الحساب الافتراضي فقط. +ترتيب حل الرمز يراعي الحساب. عمليًا، قيم config تتقدم على بديل env، و`TELEGRAM_BOT_TOKEN` ينطبق فقط على الحساب الافتراضي. -## إعدادات جهة Telegram +## إعدادات جانب Telegram - - تستخدم بوتات Telegram افتراضيًا **وضع الخصوصية**، الذي يحد من الرسائل الجماعية التي تستقبلها. + + تستخدم بوتات Telegram افتراضيًا **وضع الخصوصية**، ما يحد من الرسائل الجماعية التي تستقبلها. - إذا كان يجب أن يرى البوت جميع رسائل المجموعة، فإما: + إذا كان يجب على البوت رؤية كل رسائل المجموعة، فإما: - عطّل وضع الخصوصية عبر `/setprivacy`، أو - - اجعل البوت مشرفًا في المجموعة. + - اجعل البوت مشرفًا على المجموعة. - عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة حتى يطبّق Telegram التغيير. + عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة لكي يطبق Telegram التغيير. تُدار حالة المشرف من إعدادات مجموعة Telegram. - تستقبل البوتات المشرفة جميع رسائل المجموعة، وهو ما يفيد في سلوك المجموعات الدائم. + تتلقى البوتات المشرفة جميع رسائل المجموعة، وهذا مفيد للسلوك الجماعي الدائم. - + - - `/setjoingroups` للسماح بإضافة المجموعات أو منعها - - `/setprivacy` لسلوك الرؤية في المجموعات + - `/setjoingroups` للسماح/منع الإضافة إلى المجموعات + - `/setprivacy` لسلوك الرؤية داخل المجموعة @@ -112,31 +112,31 @@ openclaw pairing approve telegram ## التحكم في الوصول والتفعيل - + يتحكم `channels.telegram.dmPolicy` في الوصول إلى الرسائل المباشرة: - - `pairing` (افتراضي) - - `allowlist` (يتطلب معرّف مرسل واحدًا على الأقل في `allowFrom`) - - `open` (يتطلب أن تتضمن `allowFrom` القيمة `"*"`) + - `pairing` (الافتراضي) + - `allowlist` (يتطلب وجود معرّف مُرسِل واحد على الأقل في `allowFrom`) + - `open` (يتطلب أن يتضمن `allowFrom` القيمة `"*"`) - `disabled` - يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram الرقمية. وتُقبل البادئتان `telegram:` / `tg:` وتُطبّعان. - يؤدي `dmPolicy: "allowlist"` مع `allowFrom` فارغة إلى حظر جميع الرسائل المباشرة ويُرفض عبر التحقق من صحة الإعدادات. + يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram رقمية. وتُقبل البادئتان `telegram:` / `tg:` وتُطبّعان. + يؤدي `dmPolicy: "allowlist"` مع `allowFrom` فارغ إلى حظر كل الرسائل الخاصة، ويتم رفضه من خلال التحقق من صحة config. يطلب الإعداد معرّفات مستخدم رقمية فقط. - إذا كنت قد قمت بالترقية ويحتوي الإعداد لديك على إدخالات قائمة سماح `@username`، فشغّل `openclaw doctor --fix` لتحليلها (على أساس أفضل جهد؛ ويتطلب رمز بوت Telegram). - إذا كنت تعتمد سابقًا على ملفات قائمة السماح الخاصة بمخزن الاقتران، فيمكن للأمر `openclaw doctor --fix` استعادة الإدخالات إلى `channels.telegram.allowFrom` في تدفقات قائمة السماح (على سبيل المثال عندما يكون `dmPolicy: "allowlist"` من دون معرّفات صريحة بعد). + إذا قمت بالترقية وكان config لديك يحتوي على إدخالات allowlist من نوع `@username`، فشغّل `openclaw doctor --fix` لحلها (بأفضل جهد؛ ويتطلب رمز بوت Telegram). + إذا كنت تعتمد سابقًا على ملفات allowlist الخاصة بمخزن الاقتران، فيمكن للأمر `openclaw doctor --fix` استعادة الإدخالات إلى `channels.telegram.allowFrom` في تدفقات allowlist (على سبيل المثال عندما لا يحتوي `dmPolicy: "allowlist"` بعد على معرّفات صريحة). - بالنسبة إلى البوتات ذات المالك الواحد، يُفضَّل استخدام `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية صريحة للحفاظ على سياسة الوصول ثابتة في config (بدلًا من الاعتماد على موافقات الاقتران السابقة). + بالنسبة إلى البوتات ذات المالك الواحد، يُفضّل استخدام `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية صريحة للحفاظ على سياسة الوصول بشكل دائم داخل config (بدلًا من الاعتماد على موافقات الاقتران السابقة). - التباس شائع: لا تعني الموافقة على اقتران الرسائل المباشرة أن "هذا المرسل مخوَّل في كل مكان". - يمنح الاقتران وصول الرسائل المباشرة فقط. أما تخويل المرسل في المجموعات فلا يزال يأتي من قوائم السماح الصريحة في config. - إذا كنت تريد "أن أكون مخولًا مرة واحدة وتعمل كل من الرسائل المباشرة وأوامر المجموعات"، فضع معرّف مستخدم Telegram الرقمي الخاص بك في `channels.telegram.allowFrom`. + التباس شائع: الموافقة على اقتران الرسائل الخاصة لا تعني أن "هذا المرسل مخوّل في كل مكان". + يمنح الاقتران الوصول إلى الرسائل الخاصة فقط. أما تخويل المرسل داخل المجموعات فيأتي من قوائم السماح الصريحة في config. + إذا كنت تريد "أن أكون مخوّلًا مرة واحدة وتعمل كل من الرسائل الخاصة وأوامر المجموعات"، فضع معرّف مستخدم Telegram الرقمي الخاص بك في `channels.telegram.allowFrom`. ### العثور على معرّف مستخدم Telegram الخاص بك - الطريقة الأكثر أمانًا (من دون بوت طرف ثالث): + طريقة أكثر أمانًا (من دون بوت تابع لجهة خارجية): - 1. أرسل رسالة مباشرة إلى البوت. + 1. أرسل رسالة خاصة إلى بوتك. 2. شغّل `openclaw logs --follow`. 3. اقرأ `from.id`. @@ -146,33 +146,33 @@ openclaw pairing approve telegram curl "https://api.telegram.org/bot/getUpdates" ``` - طريقة طرف ثالث (أقل خصوصية): `@userinfobot` أو `@getidsbot`. + طريقة طرف ثالث (خصوصية أقل): `@userinfobot` أو `@getidsbot`. - يُطبَّق عنصران معًا: + يُطبّق عنصران معًا: 1. **ما المجموعات المسموح بها** (`channels.telegram.groups`) - لا يوجد config لـ `groups`: - - مع `groupPolicy: "open"`: يمكن لأي مجموعة اجتياز عمليات فحص معرّف المجموعة - - مع `groupPolicy: "allowlist"` (افتراضي): تُحظر المجموعات حتى تضيف إدخالات إلى `groups` (أو `"*"`) + - مع `groupPolicy: "open"`: يمكن لأي مجموعة اجتياز عمليات التحقق من معرّف المجموعة + - مع `groupPolicy: "allowlist"` (الافتراضي): تُحظر المجموعات إلى أن تضيف إدخالات `groups` (أو `"*"`) - تم ضبط `groups`: تعمل كقائمة سماح (معرّفات صريحة أو `"*"`) 2. **ما المرسلون المسموح بهم داخل المجموعات** (`channels.telegram.groupPolicy`) - `open` - - `allowlist` (افتراضي) + - `allowlist` (الافتراضي) - `disabled` يُستخدم `groupAllowFrom` لتصفية مرسلي المجموعات. وإذا لم يُضبط، يعود Telegram إلى `allowFrom`. - يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدمي Telegram رقمية (وتُطبَّع البادئتان `telegram:` / `tg:`). - لا تضع معرّفات دردشات مجموعات Telegram أو المجموعات الفائقة في `groupAllowFrom`. فمعرّفات الدردشة السالبة مكانها تحت `channels.telegram.groups`. - يتم تجاهل الإدخالات غير الرقمية عند تخويل المرسلين. - حد الأمان (`2026.2.25+`): لا يرث تخويل مرسلي المجموعات موافقات مخزن اقتران الرسائل المباشرة. - يظل الاقتران خاصًا بالرسائل المباشرة فقط. بالنسبة إلى المجموعات، اضبط `groupAllowFrom` أو `allowFrom` على مستوى كل مجموعة/موضوع. - إذا لم يتم ضبط `groupAllowFrom`، يعود Telegram إلى `allowFrom` في config، وليس إلى مخزن الاقتران. - النمط العملي للبوتات ذات المالك الواحد: اضبط معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير مضبوط، واسمح بالمجموعات المستهدفة تحت `channels.telegram.groups`. - ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا بالكامل، فإن الإعدادات الافتراضية في وقت التشغيل تكون fail-closed مع `groupPolicy="allowlist"` ما لم يتم ضبط `channels.defaults.groupPolicy` صراحة. + يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدم Telegram رقمية (تُطبَّع البادئتان `telegram:` / `tg:`). + لا تضع معرّفات دردشات مجموعة Telegram أو supergroup داخل `groupAllowFrom`. تنتمي معرّفات الدردشة السالبة تحت `channels.telegram.groups`. + يتم تجاهل الإدخالات غير الرقمية لتخويل المرسل. + حد الأمان (`2026.2.25+`): تخويل مرسل المجموعة لا يرث موافقات مخزن الاقتران الخاصة بالرسائل المباشرة. + يظل الاقتران خاصًا بالرسائل الخاصة فقط. بالنسبة إلى المجموعات، اضبط `groupAllowFrom` أو `allowFrom` لكل مجموعة/موضوع. + إذا لم يتم ضبط `groupAllowFrom`، فإن Telegram يعود إلى `allowFrom` في config، وليس إلى مخزن الاقتران. + نمط عملي للبوتات ذات المالك الواحد: اضبط معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير مضبوط، واسمح للمجموعات المستهدفة تحت `channels.telegram.groups`. + ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا بالكامل، فإن القيم الافتراضية وقت التشغيل تكون fail-closed مع `groupPolicy="allowlist"` ما لم يتم ضبط `channels.defaults.groupPolicy` صراحةً. مثال: السماح لأي عضو في مجموعة محددة واحدة: @@ -191,7 +191,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - مثال: السماح لمستخدمين محددين فقط داخل مجموعة محددة واحدة: + مثال: السماح فقط لمستخدمين محددين داخل مجموعة محددة واحدة: ```json5 { @@ -209,21 +209,21 @@ curl "https://api.telegram.org/bot/getUpdates" ``` - خطأ شائع: `groupAllowFrom` ليست قائمة سماح لمجموعات Telegram. + خطأ شائع: `groupAllowFrom` ليس قائمة سماح لمجموعات Telegram. - - ضع معرّفات دردشات مجموعات Telegram أو المجموعات الفائقة السالبة مثل `-1001234567890` تحت `channels.telegram.groups`. - - ضع معرّفات مستخدمي Telegram مثل `8734062810` تحت `groupAllowFrom` عندما تريد تقييد الأشخاص داخل المجموعة المسموح بها الذين يمكنهم تشغيل البوت. + - ضع معرّفات مجموعات Telegram أو supergroup السالبة مثل `-1001234567890` تحت `channels.telegram.groups`. + - ضع معرّفات مستخدمي Telegram مثل `8734062810` تحت `groupAllowFrom` عندما تريد تقييد الأشخاص داخل مجموعة مسموح بها الذين يمكنهم تشغيل البوت. - استخدم `groupAllowFrom: ["*"]` فقط عندما تريد أن يتمكن أي عضو في مجموعة مسموح بها من التحدث إلى البوت. - تتطلب الردود في المجموعات إشارة افتراضيًا. + تتطلب ردود المجموعات الإشارة افتراضيًا. يمكن أن تأتي الإشارة من: - - إشارة `@botusername` أصلية، أو + - إشارة أصلية `@botusername`، أو - أنماط الإشارة في: - `agents.list[].groupChat.mentionPatterns` - `messages.groupChat.mentionPatterns` @@ -233,7 +233,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `/activation always` - `/activation mention` - تحدّث هذه الجلسة فقط. استخدم config للاستمرارية. + تحدّث هذه الأوامر حالة الجلسة فقط. استخدم config للاستمرارية. مثال على config دائم: @@ -253,20 +253,20 @@ curl "https://api.telegram.org/bot/getUpdates" - أعد توجيه رسالة من المجموعة إلى `@userinfobot` / `@getidsbot` - أو اقرأ `chat.id` من `openclaw logs --follow` - - أو افحص `getUpdates` في Bot API + - أو افحص Bot API `getUpdates` ## سلوك وقت التشغيل -- Telegram مملوك لعملية gateway. -- التوجيه حتمي: ترد الرسائل الواردة من Telegram إلى Telegram (ولا يختار النموذج القنوات). -- تُطبَّع الرسائل الواردة إلى مغلف القناة المشترك مع بيانات الرد الوصفية وعناصر نائبة للوسائط. -- تُعزل جلسات المجموعات بحسب معرّف المجموعة. وتضيف مواضيع المنتدى اللاحقة `:topic:` للحفاظ على عزل المواضيع. -- يمكن أن تحمل الرسائل المباشرة `message_thread_id`؛ ويوجهها OpenClaw باستخدام مفاتيح جلسات تراعي الخيوط ويحافظ على معرّف الخيط عند الرد. -- يستخدم الاستطلاع الطويل grammY runner مع تسلسل لكل دردشة/لكل خيط. ويستخدم تزامن sink العام للـ runner القيمة `agents.defaults.maxConcurrent`. -- يتم تشغيل عمليات إعادة تشغيل مراقب الاستطلاع الطويل بعد 120 ثانية من دون اكتمال liveness لـ `getUpdates` افتراضيًا. لا ترفع `channels.telegram.pollingStallThresholdMs` إلا إذا كانت عملية النشر لديك لا تزال ترى عمليات إعادة تشغيل خاطئة بسبب تعثر الاستطلاع أثناء العمل طويل المدة. القيمة بالمللي ثانية، ويُسمح بها من `30000` إلى `600000`؛ كما أن تجاوزات كل حساب مدعومة. +- Telegram مملوك لعملية Gateway. +- التوجيه حتمي: ترد الرسائل الواردة من Telegram إلى Telegram (لا يختار النموذج القنوات). +- تُطبَّع الرسائل الواردة إلى مظروف القناة المشترك مع بيانات تعريف الرد وعناصر نائبة للوسائط. +- تُعزل جلسات المجموعات حسب معرّف المجموعة. وتُضاف Forum topics على الشكل `:topic:` للحفاظ على عزل الموضوعات. +- يمكن أن تحمل رسائل DM قيمة `message_thread_id`؛ يوجّهها OpenClaw باستخدام مفاتيح جلسات تراعي الخيوط ويحافظ على معرّف الخيط في الردود. +- يستخدم الاستطلاع الطويل grammY runner مع تسلسل لكل دردشة/لكل خيط. وتستخدم التزامنية العامة لمصب runner القيمة `agents.defaults.maxConcurrent`. +- تبدأ إعادة تشغيل مراقب الاستطلاع الطويل بعد 120 ثانية من دون حيوية `getUpdates` مكتملة افتراضيًا. زد `channels.telegram.pollingStallThresholdMs` فقط إذا كان النشر لديك لا يزال يشهد إعادات تشغيل خاطئة بسبب تعطل الاستطلاع أثناء الأعمال طويلة التشغيل. القيمة بالميلي ثانية ومسموح بها من `30000` إلى `600000`؛ وتتوفر تجاوزات لكل حساب. - لا يدعم Telegram Bot API إيصالات القراءة (`sendReadReceipts` لا ينطبق). ## مرجع الميزات @@ -276,38 +276,38 @@ curl "https://api.telegram.org/bot/getUpdates" يمكن لـ OpenClaw بث الردود الجزئية في الوقت الفعلي: - الدردشات المباشرة: رسالة معاينة + `editMessageText` - - المجموعات/المواضيع: رسالة معاينة + `editMessageText` + - المجموعات/الموضوعات: رسالة معاينة + `editMessageText` المتطلب: - - تكون قيمة `channels.telegram.streaming` هي `off | partial | block | progress` (الافتراضي: `partial`) - - يتم ربط `progress` بـ `partial` على Telegram (للتوافق مع التسمية متعددة القنوات) - - يتحكم `streaming.preview.toolProgress` فيما إذا كانت تحديثات الأدوات/التقدّم تعيد استخدام رسالة المعاينة المعدَّلة نفسها (الافتراضي: `true`). اضبطه على `false` للاحتفاظ برسائل أدوات/تقدّم منفصلة. - - يتم ربط `channels.telegram.streamMode` القديم وقيم `streaming` المنطقية تلقائيًا + - `channels.telegram.streaming` هو `off | partial | block | progress` (الافتراضي: `partial`) + - تُربط `progress` بـ `partial` على Telegram (للتوافق مع التسمية عبر القنوات) + - يتحكم `streaming.preview.toolProgress` فيما إذا كانت تحديثات الأداة/التقدم ستعيد استخدام رسالة المعاينة المعدلة نفسها (الافتراضي: `true`). اضبطه على `false` للإبقاء على رسائل أداة/تقدم منفصلة. + - يتم ربط القيم القديمة `channels.telegram.streamMode` والقيم المنطقية `streaming` تلقائيًا - بالنسبة إلى الردود النصية فقط: + للردود النصية فقط: - - الرسائل المباشرة: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) - - المجموعة/الموضوع: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) + - DM: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) + - group/topic: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) - بالنسبة إلى الردود المعقدة (مثل حمولة الوسائط)، يعود OpenClaw إلى التسليم النهائي العادي ثم ينظف رسالة المعاينة. + للردود المعقدة (على سبيل المثال حمولات الوسائط)، يعود OpenClaw إلى التسليم النهائي العادي ثم ينظف رسالة المعاينة. - بث المعاينة منفصل عن block streaming. وعندما يتم تفعيل block streaming صراحةً لـ Telegram، يتخطى OpenClaw بث المعاينة لتجنب البث المزدوج. + يختلف بث المعاينة عن block streaming. عند تمكين block streaming صراحةً لـ Telegram، يتخطى OpenClaw بث المعاينة لتجنب البث المزدوج. إذا كان نقل المسودة الأصلي غير متاح/مرفوضًا، يعود OpenClaw تلقائيًا إلى `sendMessage` + `editMessageText`. - بث الاستدلال الخاص بـ Telegram فقط: + بث reasoning الخاص بـ Telegram فقط: - - `/reasoning stream` يرسل الاستدلال إلى المعاينة المباشرة أثناء التوليد - - يُرسل الجواب النهائي من دون نص الاستدلال + - يرسل `/reasoning stream` reasoning إلى المعاينة المباشرة أثناء الإنشاء + - يُرسل الجواب النهائي من دون نص reasoning - - يستخدم النص الصادر من Telegram القيمة `parse_mode: "HTML"`. + + يستخدم النص الصادر في Telegram القيمة `parse_mode: "HTML"`. - - يتم تحويل النص الشبيه بـ Markdown إلى HTML آمن لـ Telegram. - - يتم تهريب HTML الخام الصادر من النموذج لتقليل إخفاقات تحليل Telegram. + - يُعرض النص الشبيه بـ Markdown على شكل HTML آمن لـ Telegram. + - يتم تهريب HTML الخام الصادر عن النموذج لتقليل إخفاقات التحليل في Telegram. - إذا رفض Telegram HTML المحلَّل، يعيد OpenClaw المحاولة كنص عادي. تكون معاينات الروابط مفعلة افتراضيًا ويمكن تعطيلها عبر `channels.telegram.linkPreview: false`. @@ -321,7 +321,7 @@ curl "https://api.telegram.org/bot/getUpdates" - يفعّل `commands.native: "auto"` الأوامر الأصلية لـ Telegram - أضف إدخالات قائمة أوامر مخصصة: + أضف إدخالات مخصصة إلى قائمة الأوامر: ```json5 { @@ -338,45 +338,45 @@ curl "https://api.telegram.org/bot/getUpdates" القواعد: - - تُطبّع الأسماء (إزالة `/` البادئة، وتحويلها إلى أحرف صغيرة) + - تُطبّع الأسماء (إزالة `/` في البداية، وأحرف صغيرة) - النمط الصالح: `a-z`، `0-9`، `_`، والطول `1..32` - لا يمكن للأوامر المخصصة تجاوز الأوامر الأصلية - يتم تخطي التعارضات/التكرارات وتسجيلها ملاحظات: - - الأوامر المخصصة هي إدخالات قائمة فقط؛ فهي لا تنفذ السلوك تلقائيًا -- لا يزال بإمكان أوامر Plugin/Skills العمل عند كتابتها حتى إذا لم تكن ظاهرة في قائمة Telegram + - الأوامر المخصصة هي إدخالات في القائمة فقط؛ ولا تنفذ السلوك تلقائيًا + - يمكن أن تظل أوامر Plugin/Skills تعمل عند كتابتها حتى لو لم تظهر في قائمة Telegram -إذا كانت الأوامر الأصلية معطلة، فستتم إزالة الأوامر المضمنة. وقد تظل الأوامر المخصصة/أوامر Plugin مسجلة إذا كانت مهيأة. + إذا كانت الأوامر الأصلية معطلة، تتم إزالة الأوامر المضمنة. وقد تظل أوامر Plugin/المخصصة تُسجل إذا كانت مهيأة. -إخفاقات الإعداد الشائعة: + حالات فشل الإعداد الشائعة: -- تعني `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن قائمة Telegram لا تزال متجاوزة للحد بعد التقليص؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل `channels.telegram.commands.native`. -- تعني `setMyCommands failed` مع أخطاء الشبكة/الجلب عادةً أن DNS/HTTPS الصادر إلى `api.telegram.org` محظور. + - تعني الرسالة `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن قائمة Telegram ما تزال تتجاوز الحد بعد التقليص؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل `channels.telegram.commands.native`. + - تعني الرسالة `setMyCommands failed` مع أخطاء الشبكة/`fetch` عادةً أن DNS/HTTPS الصادر إلى `api.telegram.org` محظور. -### أوامر اقتران الأجهزة (`device-pair` Plugin) + ### أوامر اقتران الجهاز (`device-pair` Plugin) -عندما يكون `device-pair` Plugin مثبتًا: + عند تثبيت Plugin ‏`device-pair`: -1. يقوم `/pair` بإنشاء رمز إعداد -2. الصق الرمز في تطبيق iOS -3. يعرض `/pair pending` الطلبات المعلقة (بما في ذلك الدور/النطاقات) -4. وافق على الطلب: - - `/pair approve ` للموافقة الصريحة - - `/pair approve` عندما يكون هناك طلب معلق واحد فقط - - `/pair approve latest` لأحدث طلب + 1. يقوم `/pair` بإنشاء رمز إعداد + 2. الصق الرمز في تطبيق iOS + 3. يعرض `/pair pending` الطلبات المعلقة (بما في ذلك الدور/النطاقات) + 4. وافق على الطلب: + - `/pair approve ` للموافقة الصريحة + - `/pair approve` عندما يكون هناك طلب معلق واحد فقط + - `/pair approve latest` لأحدث طلب -يحمل رمز الإعداد رمز bootstrap قصير العمر. وتحافظ عملية تسليم bootstrap المضمنة على رمز Node الأساسي عند `scopes: []`؛ وأي رمز operator يتم تسليمه يظل مقيدًا بـ `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. وتكون عمليات التحقق من نطاق bootstrap مسبوقة بالدور، لذلك فإن قائمة السماح الخاصة بـ operator تلبي طلبات operator فقط؛ أما الأدوار غير operator فلا تزال تحتاج إلى نطاقات تحت بادئة الدور الخاصة بها. + يحمل رمز الإعداد bootstrap token قصير العمر. يحافظ built-in bootstrap handoff على رمز Node الأساسي عند `scopes: []`؛ وأي رمز operator يتم تسليمه يظل مقيدًا بـ `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. تكون عمليات التحقق من نطاق bootstrap مسبوقة بالدور، لذلك فإن allowlist الخاصة بـ operator تلبّي طلبات operator فقط؛ وما زالت الأدوار غير operator تحتاج إلى نطاقات تحت بادئة الدور الخاصة بها. -إذا أعاد جهاز المحاولة مع تغيير تفاصيل المصادقة (مثل الدور/النطاقات/المفتاح العام)، فسيتم استبدال الطلب المعلق السابق ويستخدم الطلب الجديد قيمة `requestId` مختلفة. أعد تشغيل `/pair pending` قبل الموافقة. + إذا أعاد جهاز المحاولة مع تغيّر في تفاصيل auth (مثل الدور/النطاقات/المفتاح العام)، يُستبدل الطلب المعلق السابق ويستخدم الطلب الجديد قيمة `requestId` مختلفة. أعد تشغيل `/pair pending` قبل الموافقة. -مزيد من التفاصيل: [الاقتران](/ar/channels/pairing#pair-via-telegram-recommended-for-ios). + مزيد من التفاصيل: [الاقتران](/ar/channels/pairing#pair-via-telegram-recommended-for-ios). - اضبط نطاق لوحة المفاتيح المضمنة: + اضبط نطاق inline keyboard: ```json5 { @@ -414,11 +414,11 @@ curl "https://api.telegram.org/bot/getUpdates" - `dm` - `group` - `all` - - `allowlist` (افتراضي) + - `allowlist` (الافتراضي) - يتم ربط `capabilities: ["inlineButtons"]` القديم إلى `inlineButtons: "all"`. + يتم ربط الصيغة القديمة `capabilities: ["inlineButtons"]` إلى `inlineButtons: "all"`. - مثال إجراء رسالة: + مثال لإجراء رسالة: ```json5 { @@ -436,7 +436,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - يتم تمرير نقرات callback إلى الوكيل كنص: + تُمرر نقرات callback إلى الوكيل كنص: `callback_data: ` @@ -444,61 +444,61 @@ curl "https://api.telegram.org/bot/getUpdates" تتضمن إجراءات أداة Telegram ما يلي: - - `sendMessage` (`to`, `content`, و`mediaUrl` و`replyToMessageId` و`messageThreadId` اختيارية) - - `react` (`chatId`, `messageId`, `emoji`) - - `deleteMessage` (`chatId`, `messageId`) - - `editMessage` (`chatId`, `messageId`, `content`) - - `createForumTopic` (`chatId`, `name`, و`iconColor` و`iconCustomEmojiId` اختياريان) + - `sendMessage` (`to` و`content` و`mediaUrl` اختياري و`replyToMessageId` و`messageThreadId`) + - `react` (`chatId` و`messageId` و`emoji`) + - `deleteMessage` (`chatId` و`messageId`) + - `editMessage` (`chatId` و`messageId` و`content`) + - `createForumTopic` (`chatId` و`name` و`iconColor` اختياري و`iconCustomEmojiId`) - تكشف إجراءات رسائل القنوات أسماء مستعارة مريحة (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`). + تعرض إجراءات رسائل القناة أسماءً بديلة مريحة (`send` و`react` و`delete` و`edit` و`sticker` و`sticker-search` و`topic-create`). - عناصر تحكم التقييد: + عناصر التحكم في البوابة: - `channels.telegram.actions.sendMessage` - `channels.telegram.actions.deleteMessage` - `channels.telegram.actions.reactions` - `channels.telegram.actions.sticker` (الافتراضي: معطل) - ملاحظة: إن `edit` و`topic-create` مفعّلان حاليًا افتراضيًا ولا يملكان مفاتيح تبديل منفصلة في `channels.telegram.actions.*`. - تستخدم عمليات الإرسال في وقت التشغيل snapshot النشط من الإعدادات/الأسرار (بدء التشغيل/إعادة التحميل)، لذلك لا تنفذ مسارات الإجراءات إعادة تحليل مرتجلة لـ SecretRef لكل عملية إرسال. + ملاحظة: `edit` و`topic-create` مفعّلان حاليًا افتراضيًا ولا يملكان مفاتيح تبديل منفصلة ضمن `channels.telegram.actions.*`. + تستخدم عمليات الإرسال وقت التشغيل اللقطة النشطة من config/secrets ‏(بدء التشغيل/إعادة التحميل)، لذلك لا تنفذ مسارات الإجراءات إعادة حل SecretRef مخصصة لكل عملية إرسال. دلالات إزالة التفاعل: [/tools/reactions](/ar/tools/reactions) - - يدعم Telegram وسوم تشعّب الردود الصريحة في المخرجات المولدة: + + يدعم Telegram وسوم تفرع الرد الصريحة في المخرجات المُنشأة: - - `[[reply_to_current]]` للرد على الرسالة المشغِّلة + - `[[reply_to_current]]` للرد على الرسالة التي أدت إلى التشغيل - `[[reply_to:]]` للرد على معرّف رسالة Telegram محدد يتحكم `channels.telegram.replyToMode` في المعالجة: - - `off` (افتراضي) + - `off` (الافتراضي) - `first` - `all` - ملاحظة: يؤدي `off` إلى تعطيل تشعّب الردود الضمني. ومع ذلك لا تزال وسوم `[[reply_to_*]]` الصريحة محترمة. + ملاحظة: يعطل `off` تفرع الرد الضمني. وما زالت الوسوم الصريحة `[[reply_to_*]]` محترمة. - - المجموعات الفائقة الخاصة بالمنتدى: + + مجموعات المنتدى الفائقة: - - تضيف مفاتيح جلسات الموضوع اللاحقة `:topic:` - - تستهدف الردود وحالات الكتابة خيط الموضوع - - مسار إعدادات الموضوع: + - تُلحق مفاتيح جلسة الموضوع بـ `:topic:` + - تستهدف الردود وإجراءات الكتابة خيط الموضوع + - مسار config الخاص بالموضوع: `channels.telegram.groups..topics.` - الحالة الخاصة للموضوع العام (`threadId=1`): + حالة الموضوع العام الخاصة (`threadId=1`): - - تحذف عمليات إرسال الرسائل `message_thread_id` (يرفض Telegram `sendMessage(...thread_id=1)`) - - لا تزال إجراءات الكتابة تتضمن `message_thread_id` + - تُرسل الرسائل بدون `message_thread_id` (يرفض Telegram القيمة `sendMessage(...thread_id=1)`) + - ما زالت إجراءات الكتابة تتضمن `message_thread_id` - وراثة الموضوعات: ترث إدخالات الموضوع إعدادات المجموعة ما لم يتم تجاوزها (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`). - ويكون `agentId` خاصًا بالموضوع فقط ولا يرث من الإعدادات الافتراضية للمجموعة. + وراثة الموضوع: ترث إدخالات الموضوع إعدادات المجموعة ما لم يتم تجاوزها (`requireMention` و`allowFrom` و`skills` و`systemPrompt` و`enabled` و`groupPolicy`). + يكون `agentId` خاصًا بالموضوع فقط ولا يرث من القيم الافتراضية للمجموعة. - **توجيه الوكيل لكل موضوع**: يمكن لكل موضوع التوجيه إلى وكيل مختلف من خلال ضبط `agentId` في إعدادات الموضوع. يمنح هذا كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال: + **توجيه الوكيل لكل موضوع**: يمكن لكل موضوع التوجيه إلى وكيل مختلف عبر ضبط `agentId` في config الخاص بالموضوع. يمنح هذا كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال: ```json5 { @@ -507,9 +507,9 @@ curl "https://api.telegram.org/bot/getUpdates" groups: { "-1001234567890": { topics: { - "1": { agentId: "main" }, // General topic → main agent - "3": { agentId: "zu" }, // Dev topic → zu agent - "5": { agentId: "coder" } // Code review → coder agent + "1": { agentId: "main" }, // الموضوع العام → الوكيل الرئيسي + "3": { agentId: "zu" }, // موضوع التطوير → الوكيل zu + "5": { agentId: "coder" } // مراجعة الكود → الوكيل coder } } } @@ -518,88 +518,25 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - يصبح لكل موضوع بعد ذلك مفتاح جلسة خاص به: `agent:zu:telegram:group:-1001234567890:topic:3` + يكون لكل موضوع بعد ذلك مفتاح جلسته الخاص: `agent:zu:telegram:group:-1001234567890:topic:3` - **ربط ACP المستمر للموضوع**: يمكن لموضوعات المنتدى تثبيت جلسات harness الخاصة بـ ACP عبر روابط ACP typed على المستوى الأعلى: + **ربط ACP دائم للموضوع**: يمكن لموضوعات المنتدى تثبيت جلسات ACP harness عبر روابط ACP مكتوبة على المستوى الأعلى (`bindings[]` مع `type: "acp"` و`match.channel: "telegram"` و`peer.kind: "group"` ومعرّف مؤهل بموضوع مثل `-1001234567890:topic:42`). النطاق الحالي يقتصر على موضوعات المنتدى في المجموعات/supergroups. راجع [وكلاء ACP](/ar/tools/acp-agents). - - `bindings[]` مع `type: "acp"` و`match.channel: "telegram"` + **إنشاء ACP مرتبط بالخيط من الدردشة**: يقوم `/acp spawn --thread here|auto` بربط الموضوع الحالي بجلسة ACP جديدة؛ وتُوجَّه المتابعات إليها مباشرة. يثبّت OpenClaw تأكيد الإنشاء داخل الموضوع. يتطلب ذلك `channels.telegram.threadBindings.spawnAcpSessions=true`. - مثال: - - ```json5 - { - agents: { - list: [ - { - id: "codex", - runtime: { - type: "acp", - acp: { - agent: "codex", - backend: "acpx", - mode: "persistent", - cwd: "/workspace/openclaw", - }, - }, - }, - ], - }, - bindings: [ - { - type: "acp", - agentId: "codex", - match: { - channel: "telegram", - accountId: "default", - peer: { kind: "group", id: "-1001234567890:topic:42" }, - }, - }, - ], - channels: { - telegram: { - groups: { - "-1001234567890": { - topics: { - "42": { - requireMention: false, - }, - }, - }, - }, - }, - }, - } - ``` - - يقتصر هذا حاليًا على موضوعات المنتدى في المجموعات والمجموعات الفائقة. - - **إنشاء ACP مرتبط بالخيط من الدردشة**: - - - يمكن للأمر `/acp spawn --thread here|auto` ربط موضوع Telegram الحالي بجلسة ACP جديدة. - - تُوجَّه رسائل الموضوع اللاحقة مباشرة إلى جلسة ACP المرتبطة (من دون الحاجة إلى `/acp steer`). - - يثبّت OpenClaw رسالة تأكيد الإنشاء داخل الموضوع بعد نجاح الربط. - - يتطلب `channels.telegram.threadBindings.spawnAcpSessions=true`. - - يتضمن سياق القالب ما يلي: - - - `MessageThreadId` - - `IsForum` - - سلوك خيوط الرسائل المباشرة: - - - تحتفظ الدردشات الخاصة التي تحتوي على `message_thread_id` بتوجيه الرسائل المباشرة لكنها تستخدم مفاتيح جلسات/أهداف رد تراعي الخيوط. + يعرّض سياق القالب `MessageThreadId` و`IsForum`. وتحافظ دردشات DM التي تتضمن `message_thread_id` على توجيه DM لكنها تستخدم مفاتيح جلسات تراعي الخيوط. ### الرسائل الصوتية - يميز Telegram بين الملاحظات الصوتية وملفات الصوت. + يميّز Telegram بين الملاحظات الصوتية وملفات الصوت. - - الافتراضي: سلوك ملف صوتي - - ضع الوسم `[[audio_as_voice]]` في رد الوكيل لفرض الإرسال كملاحظة صوتية + - الافتراضي: سلوك ملف صوت + - أضف الوسم `[[audio_as_voice]]` في رد الوكيل لفرض الإرسال كملاحظة صوتية - مثال إجراء رسالة: + مثال لإجراء رسالة: ```json5 { @@ -613,9 +550,9 @@ curl "https://api.telegram.org/bot/getUpdates" ### رسائل الفيديو - يميز Telegram بين ملفات الفيديو وملاحظات الفيديو. + يميّز Telegram بين ملفات الفيديو وملاحظات الفيديو. - مثال إجراء رسالة: + مثال لإجراء رسالة: ```json5 { @@ -649,7 +586,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `~/.openclaw/telegram/sticker-cache.json` - يتم وصف الملصقات مرة واحدة (عند الإمكان) وتخزينها مؤقتًا لتقليل استدعاءات الرؤية المتكررة. + تُوصف الملصقات مرة واحدة (عند الإمكان) وتُخزَّن مؤقتًا لتقليل استدعاءات الرؤية المتكررة. فعّل إجراءات الملصقات: @@ -692,51 +629,51 @@ curl "https://api.telegram.org/bot/getUpdates" تصل تفاعلات Telegram كتحديثات `message_reaction` (منفصلة عن حمولات الرسائل). - عند التفعيل، يُدرج OpenClaw أحداث نظام مثل: + عند التمكين، يضيف OpenClaw أحداث نظام إلى قائمة الانتظار مثل: - `Telegram reaction added: 👍 by Alice (@alice) on msg 42` - الإعدادات: + الإعداد: - - `channels.telegram.reactionNotifications`: `off | own | all` (الافتراضي: `own`) - - `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` (الافتراضي: `minimal`) + - `channels.telegram.reactionNotifications`: ‏`off | own | all` (الافتراضي: `own`) + - `channels.telegram.reactionLevel`: ‏`off | ack | minimal | extensive` (الافتراضي: `minimal`) ملاحظات: - - يعني `own` تفاعلات المستخدم على الرسائل التي أرسلها البوت فقط (على أساس أفضل جهد عبر ذاكرة التخزين المؤقت للرسائل المرسلة). - - لا تزال أحداث التفاعل تحترم عناصر التحكم في الوصول الخاصة بـ Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`)؛ ويتم إسقاط المرسلين غير المخولين. + - تعني `own` تفاعلات المستخدم على الرسائل التي أرسلها البوت فقط (بأفضل جهد عبر ذاكرة تخزين مؤقت للرسائل المرسلة). + - ما زالت أحداث التفاعل تحترم ضوابط الوصول في Telegram (`dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom`)؛ ويُسقط المرسلون غير المخوّلين. - لا يوفّر Telegram معرّفات الخيوط في تحديثات التفاعل. - - تُوجَّه المجموعات غير الخاصة بالمنتدى إلى جلسة دردشة المجموعة - - تُوجَّه مجموعات المنتدى إلى جلسة الموضوع العام للمجموعة (`:topic:1`)، وليس إلى الموضوع الأصلي الدقيق + - المجموعات غير المنتدى تُوجَّه إلى جلسة دردشة المجموعة + - مجموعات المنتدى تُوجَّه إلى جلسة الموضوع العام للمجموعة (`:topic:1`) وليس إلى الموضوع الأصلي الدقيق - تتضمن `allowed_updates` للاستطلاع/‏Webhook القيمة `message_reaction` تلقائيًا. + يتضمن `allowed_updates` للاستطلاع/‏Webhook القيمة `message_reaction` تلقائيًا. - - يرسل `ackReaction` رمزًا تعبيريًا للتأكيد بينما يعالج OpenClaw رسالة واردة. + + يرسل `ackReaction` رمزًا تعبيريًا للإقرار بينما يعالج OpenClaw رسالة واردة. - ترتيب التحليل: + ترتيب الحل: - `channels.telegram.accounts..ackReaction` - `channels.telegram.ackReaction` - `messages.ackReaction` - - احتياطي الرمز التعبيري لهوية الوكيل (`agents.list[].identity.emoji`، وإلا "👀") + - الرجوع إلى الرمز التعبيري لهوية الوكيل (`agents.list[].identity.emoji`، وإلا `"👀"`) ملاحظات: - - يتوقع Telegram رموز emoji موحدة Unicode (مثل "👀"). + - يتوقع Telegram رمز emoji موحدًا Unicode (مثل `"👀"`). - استخدم `""` لتعطيل التفاعل لقناة أو حساب. - - تكون عمليات كتابة إعدادات القناة مفعلة افتراضيًا (`configWrites !== false`). + + تكون كتابات config الخاصة بالقناة مفعلة افتراضيًا (`configWrites !== false`). - تتضمن عمليات الكتابة التي يشغلها Telegram ما يلي: + تتضمن الكتابات التي يطلقها Telegram ما يلي: - - أحداث ترحيل المجموعات (`migrate_to_chat_id`) لتحديث `channels.telegram.groups` - - `/config set` و`/config unset` (يتطلبان تفعيل الأوامر) + - أحداث ترحيل المجموعة (`migrate_to_chat_id`) لتحديث `channels.telegram.groups` + - `/config set` و`/config unset` (يتطلبان تمكين الأوامر) التعطيل: @@ -752,43 +689,26 @@ curl "https://api.telegram.org/bot/getUpdates" - - تتطلب الأزرار المضمنة لمنتقي النموذج في المجموعات نفس التخويل الذي يتطلبه `/models`. ويمكن للمشاركين غير المخولين التصفح والنقر على الأزرار، لكن OpenClaw يرفض callback قبل تغيير نموذج الجلسة. - - - الافتراضي: الاستطلاع الطويل. + الوضع الافتراضي هو الاستطلاع الطويل. لاستخدام وضع Webhook اضبط `channels.telegram.webhookUrl` و`channels.telegram.webhookSecret`؛ كما أن `webhookPath` و`webhookHost` و`webhookPort` اختيارية (القيم الافتراضية `/telegram-webhook` و`127.0.0.1` و`8787`). - وضع Webhook: - - - اضبط `channels.telegram.webhookUrl` - - اضبط `channels.telegram.webhookSecret` (مطلوب عند ضبط عنوان URL لـ webhook) - - `channels.telegram.webhookPath` اختياري (الافتراضي `/telegram-webhook`) - - `channels.telegram.webhookHost` اختياري (الافتراضي `127.0.0.1`) - - `channels.telegram.webhookPort` اختياري (الافتراضي `8787`) - - يرتبط المستمع المحلي الافتراضي لوضع Webhook على `127.0.0.1:8787`. - - إذا كانت نقطة النهاية العامة لديك مختلفة، فضع وكيلًا عكسيًا أمامها ووجّه `webhookUrl` إلى عنوان URL العام. - اضبط `webhookHost` (مثل `0.0.0.0`) عندما تحتاج عمدًا إلى إدخال خارجي. - - يعيد callback الخاص بـ grammY webhook القيمة 200 خلال 5 ثوانٍ حتى لا يعيد Telegram محاولة التحديثات طويلة التشغيل باعتبارها مهلات قراءة؛ ويستمر العمل الأطول في الخلفية. تعيد عملية الاستطلاع بناء نقل HTTP بعد تعارضات `getUpdates` ذات الرمز 409، بحيث تستخدم المحاولات الجديدة اتصال TCP جديدًا بدلًا من الالتفاف على مقبس keep-alive أنهته Telegram. + يرتبط المستمع المحلي بالعنوان `127.0.0.1:8787`. وللوصول العام، إما أن تضع reverse proxy أمام المنفذ المحلي أو تضبط `webhookHost: "0.0.0.0"` عن قصد. - القيمة الافتراضية لـ `channels.telegram.textChunkLimit` هي 4000. - يفضّل `channels.telegram.chunkMode="newline"` حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - - يحد `channels.telegram.mediaMaxMb` (الافتراضي 100) من حجم وسائط Telegram الواردة والصادرة. - - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم يُضبط، تُطبَّق القيمة الافتراضية لـ grammY). - - القيمة الافتراضية لـ `channels.telegram.pollingStallThresholdMs` هي `120000`؛ اضبطها بين `30000` و`600000` فقط عند وجود عمليات إعادة تشغيل خاطئة بسبب تعثر الاستطلاع. - - يستخدم سجل سياق المجموعات `channels.telegram.historyLimit` أو `messages.groupChat.historyLimit` (الافتراضي 50)؛ وتؤدي القيمة `0` إلى التعطيل. - - يُمرَّر حاليًا السياق الإضافي للرد/الاقتباس/إعادة التوجيه كما تم استلامه. - - تتحكم قوائم السماح في Telegram أساسًا في من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق الإضافي. - - عناصر التحكم في سجل الرسائل المباشرة: + - يحدد `channels.telegram.mediaMaxMb` (الافتراضي 100) الحد الأقصى لحجم وسائط Telegram الواردة والصادرة. + - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم يُضبط، تُطبق القيمة الافتراضية لـ grammY). + - القيمة الافتراضية لـ `channels.telegram.pollingStallThresholdMs` هي `120000`؛ اضبطها بين `30000` و`600000` فقط لحالات إعادة تشغيل تعطل الاستطلاع الإيجابية الكاذبة. + - يستخدم سجل سياق المجموعة `channels.telegram.historyLimit` أو `messages.groupChat.historyLimit` (الافتراضي 50)؛ وتؤدي القيمة `0` إلى التعطيل. + - يُمرر السياق التكميلي للرد/الاقتباس/إعادة التوجيه حاليًا كما تم استلامه. + - تتحكم قوائم السماح في Telegram أساسًا في من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق التكميلي. + - عناصر التحكم في سجل الرسائل الخاصة: - `channels.telegram.dmHistoryLimit` - `channels.telegram.dms[""].historyLimit` - - يُطبَّق إعداد `channels.telegram.retry` على أدوات إرسال Telegram (CLI/الأدوات/الإجراءات) لأخطاء API الصادرة القابلة للاسترداد. + - ينطبق إعداد `channels.telegram.retry` على أدوات إرسال Telegram ‏(CLI/tools/actions) لأخطاء Telegram API الصادرة القابلة للاسترداد. يمكن أن يكون هدف الإرسال في CLI معرّف دردشة رقميًا أو اسم مستخدم: @@ -797,7 +717,7 @@ openclaw message send --channel telegram --target 123456789 --message "hi" openclaw message send --channel telegram --target @name --message "hi" ``` - تستخدم استطلاعات Telegram الأمر `openclaw message poll` وتدعم مواضيع المنتدى: + تستخدم استطلاعات Telegram الأمر `openclaw message poll` وتدعم موضوعات المنتدى: ```bash openclaw message poll --channel telegram --target 123456789 \ @@ -809,18 +729,18 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ علامات الاستطلاع الخاصة بـ Telegram فقط: - - `--poll-duration-seconds` (من 5 إلى 600) + - `--poll-duration-seconds` ‏(5-600) - `--poll-anonymous` - `--poll-public` - - `--thread-id` لمواضيع المنتدى (أو استخدم هدفًا بصيغة `:topic:`) + - `--thread-id` لموضوعات المنتدى (أو استخدم هدف `:topic:`) - يدعم الإرسال في Telegram أيضًا: + يدعم إرسال Telegram أيضًا: - - `--presentation` مع كتل `buttons` للوحات المفاتيح المضمنة عندما تسمح `channels.telegram.capabilities.inlineButtons` بذلك - - `--pin` أو `--delivery '{"pin":true}'` لطلب تسليم مثبت عندما يتمكن البوت من التثبيت في تلك الدردشة - - `--force-document` لإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من الصور المضغوطة أو الوسائط المتحركة المرفوعة + - `--presentation` مع كتل `buttons` للوحات المفاتيح المضمنة عندما يسمح `channels.telegram.capabilities.inlineButtons` بذلك + - `--pin` أو `--delivery '{"pin":true}'` لطلب تسليم مثبّت عندما يمكن للبوت التثبيت في تلك الدردشة + - `--force-document` لإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من تحميلها كصور مضغوطة أو وسائط متحركة - تقييد الإجراءات: + بوابة الإجراءات: - يؤدي `channels.telegram.actions.sendMessage=false` إلى تعطيل رسائل Telegram الصادرة، بما في ذلك الاستطلاعات - يؤدي `channels.telegram.actions.poll=false` إلى تعطيل إنشاء استطلاعات Telegram مع إبقاء الإرسال العادي مفعّلًا @@ -828,59 +748,34 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ - يدعم Telegram موافقات exec في الرسائل المباشرة للموافقين ويمكنه اختياريًا نشر مطالبات الموافقة في الدردشة أو الموضوع الأصلي. + يدعم Telegram موافقات exec في الرسائل الخاصة للموافقين، ويمكنه اختياريًا نشر المطالبات في الدردشة أو الموضوع الأصليين. يجب أن يكون الموافقون معرّفات مستخدمي Telegram رقمية. - مسار الإعدادات: + مسار config: - - `channels.telegram.execApprovals.enabled` - - `channels.telegram.execApprovals.approvers` (اختياري؛ يعود إلى معرّفات المالك الرقمية المستنتجة من `allowFrom` و`defaultTo` المباشر عند الإمكان) - - `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`، الافتراضي: `dm`) - - `agentFilter`، `sessionFilter` + - `channels.telegram.execApprovals.enabled` (يُفعّل تلقائيًا عند إمكانية حلّ موافق واحد على الأقل) + - `channels.telegram.execApprovals.approvers` (يرجع إلى معرّفات المالك الرقمية من `allowFrom` / `defaultTo`) + - `channels.telegram.execApprovals.target`: ‏`dm` (الافتراضي) | `channel` | `both` + - `agentFilter` و`sessionFilter` - يجب أن يكون الموافقون معرّفات مستخدمي Telegram رقمية. يفعّل Telegram موافقات exec الأصلية تلقائيًا عندما تكون `enabled` غير مضبوطة أو `"auto"` ويمكن تحليل موافق واحد على الأقل، سواء من `execApprovals.approvers` أو من إعدادات المالك الرقمية للحساب (`allowFrom` و`defaultTo` للرسائل المباشرة). اضبط `enabled: false` لتعطيل Telegram كعميل موافقة أصلي بشكل صريح. بخلاف ذلك، تعود طلبات الموافقة إلى مسارات الموافقة الأخرى المهيأة أو إلى سياسة الرجوع الاحتياطي لموافقة exec. + يعرض التسليم عبر القناة نص الأمر في الدردشة؛ لا تفعّل `channel` أو `both` إلا في المجموعات/الموضوعات الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لمطالبة الموافقة والمتابعة. تنتهي صلاحية موافقات exec بعد 30 دقيقة افتراضيًا. - كما يعرض Telegram أزرار الموافقة المشتركة المستخدمة من قنوات الدردشة الأخرى. ويضيف محول Telegram الأصلي أساسًا توجيه الرسائل المباشرة للموافقين، والتوزيع على القناة/الموضوع، وتلميحات الكتابة قبل التسليم. - وعند وجود هذه الأزرار، فهي تجربة المستخدم الأساسية للموافقة؛ ولا - ينبغي لـ OpenClaw أن يتضمن أمر `/approve` يدويًا إلا عندما تشير - نتيجة الأداة إلى أن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. + تتطلب أزرار الموافقة المضمنة أيضًا أن يسمح `channels.telegram.capabilities.inlineButtons` بسطح الهدف (`dm` أو `group` أو `all`). تُحل معرّفات الموافقة المسبوقة بـ `plugin:` عبر موافقات Plugin؛ أما غير ذلك فيُحل أولًا عبر موافقات exec. - قواعد التسليم: - - - `target: "dm"` يرسل مطالبات الموافقة فقط إلى الرسائل المباشرة للموافقين الذين تم تحليلهم - - `target: "channel"` يرسل المطالبة مرة أخرى إلى دردشة/موضوع Telegram الأصلي - - `target: "both"` يرسل إلى الرسائل المباشرة للموافقين وإلى الدردشة/الموضوع الأصلي - - لا يمكن الموافقة أو الرفض إلا من قبل الموافقين الذين تم تحليلهم. ولا يمكن لغير الموافقين استخدام `/approve` ولا استخدام أزرار الموافقة في Telegram. - - سلوك تحليل الموافقة: - - - تُحلّ المعرّفات المسبوقة بـ `plugin:` دائمًا عبر موافقات Plugin. - - تحاول معرّفات الموافقة الأخرى أولًا `exec.approval.resolve`. - - إذا كان Telegram مخولًا أيضًا لموافقات Plugin وقال gateway - إن موافقة exec غير معروفة/منتهية الصلاحية، فإن Telegram يعيد المحاولة - مرة واحدة عبر `plugin.approval.resolve`. - - لا تنتقل حالات الرفض/الأخطاء الحقيقية في موافقات exec بصمت إلى تحليل - موافقة Plugin. - - يعرض التسليم إلى القناة نص الأمر في الدردشة، لذا فعّل `channel` أو `both` فقط في المجموعات/المواضيع الموثوقة. وعندما تصل المطالبة إلى موضوع في منتدى، يحافظ OpenClaw على الموضوع لكل من مطالبة الموافقة والمتابعة اللاحقة للموافقة. وتنتهي صلاحية موافقات exec بعد 30 دقيقة افتراضيًا. - - تعتمد أزرار الموافقة المضمنة أيضًا على سماح `channels.telegram.capabilities.inlineButtons` بسطح الهدف (`dm` أو `group` أو `all`). - - المستندات ذات الصلة: [موافقات exec](/ar/tools/exec-approvals) + راجع [موافقات Exec](/ar/tools/exec-approvals). ## عناصر التحكم في ردود الأخطاء -عندما يواجه الوكيل خطأ في التسليم أو المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا إعدادات في هذا السلوك: +عندما يواجه الوكيل خطأ في التسليم أو المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا config التاليان في هذا السلوك: -| المفتاح | القيم | الافتراضي | الوصف | +| المفتاح | القيم | الافتراضي | الوصف | | ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- | -| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | يرسل `reply` رسالة خطأ ودية إلى الدردشة. ويكتم `silent` ردود الأخطاء بالكامل. | -| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء إلى الدردشة نفسها. يمنع إغراق الأخطاء أثناء الانقطاعات. | +| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | يرسل `reply` رسالة خطأ ودية إلى الدردشة. ويمنع `silent` ردود الأخطاء بالكامل. | +| `channels.telegram.errorCooldownMs` | رقم (مللي ثانية) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء إلى الدردشة نفسها. يمنع إغراق الأخطاء أثناء فترات الانقطاع. | -تُدعَم تجاوزات لكل حساب، ولكل مجموعة، ولكل موضوع (بنفس وراثة مفاتيح إعدادات Telegram الأخرى). +تتوفر تجاوزات لكل حساب، ولكل مجموعة، ولكل موضوع (بنفس وراثة مفاتيح config الأخرى في Telegram). ```json5 { @@ -890,7 +785,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ errorCooldownMs: 120000, groups: { "-1001234567890": { - errorPolicy: "silent", // suppress errors in this group + errorPolicy: "silent", // كتم الأخطاء في هذه المجموعة }, }, }, @@ -901,41 +796,41 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ ## استكشاف الأخطاء وإصلاحها - + - - إذا كانت `requireMention=false`، فيجب أن يسمح وضع خصوصية Telegram بالرؤية الكاملة. - - BotFather: `/setprivacy` -> تعطيل + - إذا كانت `requireMention=false`، فيجب أن يسمح وضع الخصوصية في Telegram برؤية كاملة. + - BotFather: ‏`/setprivacy` -> تعطيل - ثم أزل البوت وأعد إضافته إلى المجموعة - - يحذر `openclaw channels status` عندما تتوقع الإعدادات رسائل مجموعات من دون إشارة. - - يمكن للأمر `openclaw channels status --probe` التحقق من معرّفات مجموعات رقمية صريحة؛ ولا يمكن فحص العضوية باستخدام المحرف العام `"*"`. - - اختبار سريع للجلسة: `/activation always`. + - يحذّر `openclaw channels status` عندما يتوقع config رسائل مجموعات من دون إشارة. + - يمكن للأمر `openclaw channels status --probe` فحص معرّفات مجموعات رقمية صريحة؛ ولا يمكن فحص العضوية باستخدام wildcard `"*"`. + - اختبار جلسة سريع: `/activation always`. - - عندما توجد `channels.telegram.groups`، يجب إدراج المجموعة (أو تضمين `"*"`) + - عند وجود `channels.telegram.groups`، يجب أن تكون المجموعة مدرجة (أو تتضمن `"*"`) - تحقّق من عضوية البوت في المجموعة - - راجع السجلات: `openclaw logs --follow` لمعرفة أسباب التخطي + - راجع السجلات: `openclaw logs --follow` لأسباب التخطي - - خوّل هوية المرسل الخاصة بك (الاقتران و/أو `allowFrom` الرقمية) - - لا يزال تخويل الأوامر مطبقًا حتى عندما تكون سياسة المجموعة `open` - - تعني `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية - - تعني `setMyCommands failed` مع أخطاء الشبكة/الجلب عادةً وجود مشاكل في الوصول عبر DNS/HTTPS إلى `api.telegram.org` + - خوّل هوية المُرسِل الخاصة بك (الاقتران و/أو `allowFrom` الرقمي) + - ما زال تخويل الأوامر يُطبَّق حتى عندما تكون سياسة المجموعة `open` + - تعني الرسالة `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية + - تشير الرسالة `setMyCommands failed` مع أخطاء الشبكة/`fetch` عادةً إلى مشكلات في الوصول إلى DNS/HTTPS الخاص بـ `api.telegram.org` - + - - قد تؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إيقاف فوري إذا كانت أنواع AbortSignal غير متطابقة. - - تحلل بعض المضيفات `api.telegram.org` إلى IPv6 أولًا؛ وقد يسبب خروج IPv6 المعطوب إخفاقات متقطعة في Telegram API. + - يمكن أن يؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إلغاء فوري إذا لم تتطابق أنواع AbortSignal. + - تحل بعض المضيفات `api.telegram.org` إلى IPv6 أولًا؛ ويمكن أن يتسبب خروج IPv6 المعطّل في إخفاقات متقطعة في Telegram API. - إذا تضمنت السجلات `TypeError: fetch failed` أو `Network request for 'getUpdates' failed!`، فإن OpenClaw يعيد الآن محاولة هذه الحالات باعتبارها أخطاء شبكة قابلة للاسترداد. - - إذا تضمنت السجلات `Polling stall detected`، فإن OpenClaw يعيد تشغيل الاستطلاع ويعيد بناء نقل Telegram بعد 120 ثانية من دون اكتمال liveness الخاص بالاستطلاع الطويل افتراضيًا. - - لا ترفع `channels.telegram.pollingStallThresholdMs` إلا عندما تكون استدعاءات `getUpdates` طويلة التشغيل سليمة لكن مضيفك لا يزال يبلغ عن عمليات إعادة تشغيل خاطئة بسبب تعثر الاستطلاع. وتشير حالات التعثر المستمرة عادةً إلى مشاكل في proxy أو DNS أو IPv6 أو خروج TLS بين المضيف و`api.telegram.org`. + - إذا تضمنت السجلات `Polling stall detected`، فإن OpenClaw يعيد تشغيل الاستطلاع ويعيد بناء ناقل Telegram بعد 120 ثانية من دون حيوية استطلاع طويل مكتملة افتراضيًا. + - زد `channels.telegram.pollingStallThresholdMs` فقط عندما تكون استدعاءات `getUpdates` طويلة التشغيل سليمة لكن مضيفك ما زال يبلغ عن إعادات تشغيل تعطل استطلاع إيجابية كاذبة. تشير حالات التعطل المستمرة عادةً إلى مشكلات proxy أو DNS أو IPv6 أو TLS في الخروج بين المضيف و`api.telegram.org`. - على مضيفات VPS ذات الخروج/TLS المباشر غير المستقر، وجّه استدعاءات Telegram API عبر `channels.telegram.proxy`: ```yaml @@ -944,8 +839,8 @@ channels: proxy: socks5://:@proxy-host:1080 ``` - - تستخدم Node 22+ افتراضيًا `autoSelectFamily=true` (باستثناء WSL2) و`dnsResultOrder=ipv4first`. - - إذا كان مضيفك يعمل على WSL2 أو يعمل صراحةً بشكل أفضل مع سلوك IPv4 فقط، فافرض اختيار العائلة: + - يستخدم Node 22+ افتراضيًا `autoSelectFamily=true` (باستثناء WSL2) و`dnsResultOrder=ipv4first`. + - إذا كان مضيفك هو WSL2 أو كان يعمل بشكل أفضل صراحةً مع سلوك IPv4 فقط، فافرض اختيار العائلة: ```yaml channels: @@ -954,10 +849,10 @@ channels: autoSelectFamily: false ``` - - الإجابات ضمن نطاق القياس RFC 2544 (`198.18.0.0/15`) مسموح بها بالفعل - لتنزيلات وسائط Telegram افتراضيًا. وإذا كان fake-IP موثوق أو + - إجابات نطاقات قياس RFC 2544 ‏(`198.18.0.0/15`) مسموح بها بالفعل + افتراضيًا لتنزيلات وسائط Telegram. وإذا كان fake-IP موثوق أو proxy شفاف يعيد كتابة `api.telegram.org` إلى عنوان آخر - خاص/داخلي/مخصص الاستخدام أثناء تنزيل الوسائط، فيمكنك + خاص/داخلي/ذي استخدام خاص أثناء تنزيلات الوسائط، فيمكنك تفعيل تجاوز Telegram فقط: ```yaml @@ -967,25 +862,25 @@ channels: dangerouslyAllowPrivateNetwork: true ``` - - يتوفر التفعيل نفسه لكل حساب في + - يتوفر نفس التفعيل الاختياري لكل حساب في `channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`. - - إذا كان proxy لديك يحلل مضيفات وسائط Telegram إلى `198.18.x.x`، فاترك - العلامة الخطِرة معطلة أولًا. فوسائط Telegram تسمح بالفعل افتراضيًا - بنطاق القياس RFC 2544. + - إذا كان proxy لديك يحل مضيفات وسائط Telegram إلى `198.18.x.x`، فاترك + العلامة الخطرة معطلة أولًا. تسمح وسائط Telegram بالفعل بنطاق قياس RFC 2544 + افتراضيًا. - يضعف `channels.telegram.network.dangerouslyAllowPrivateNetwork` وسائل الحماية - من SSRF الخاصة بوسائط Telegram. استخدمه فقط في بيئات proxy موثوقة - يسيطر عليها المشغل مثل Clash أو Mihomo أو توجيه fake-IP في Surge عندما - تولد هذه الأنظمة إجابات خاصة أو مخصصة الاستخدام خارج نطاق القياس - RFC 2544. اتركه معطلًا للوصول العادي إلى Telegram عبر الإنترنت العام. + يضعف `channels.telegram.network.dangerouslyAllowPrivateNetwork` وسائل الحماية من SSRF الخاصة بوسائط Telegram. + استخدمه فقط في بيئات proxy موثوقة يتحكم فيها المشغل + مثل Clash أو Mihomo أو توجيه fake-IP في Surge عندما + تُنشئ هذه الأدوات إجابات خاصة أو ذات استخدام خاص خارج نطاق قياس RFC 2544 + المرجعي. اتركه معطلًا لوصول Telegram العادي عبر الإنترنت العام. - - تجاوزات متغيرات البيئة (مؤقتة): + - تجاوزات البيئة (مؤقتة): - `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first` - - تحقق من إجابات DNS: + - تحقّق من إجابات DNS: ```bash dig +short api.telegram.org A @@ -995,98 +890,98 @@ dig +short api.telegram.org AAAA -مزيد من المساعدة: [استكشاف أخطاء القنوات وإصلاحها](/ar/channels/troubleshooting). +مزيد من المساعدة: [استكشاف أخطاء القناة وإصلاحها](/ar/channels/troubleshooting). -## مؤشرات مرجع إعدادات Telegram +## مؤشرات مرجع config الخاص بـ Telegram المرجع الأساسي: -- `channels.telegram.enabled`: تفعيل/تعطيل بدء تشغيل القناة. +- `channels.telegram.enabled`: تمكين/تعطيل بدء تشغيل القناة. - `channels.telegram.botToken`: رمز البوت (BotFather). - `channels.telegram.tokenFile`: قراءة الرمز من مسار ملف عادي. تُرفض الروابط الرمزية. -- `channels.telegram.dmPolicy`: `pairing | allowlist | open | disabled` (الافتراضي: pairing). -- `channels.telegram.allowFrom`: قائمة سماح الرسائل المباشرة (معرّفات مستخدمي Telegram الرقمية). يتطلب `allowlist` معرّف مرسل واحدًا على الأقل. ويتطلب `open` القيمة `"*"`. ويمكن للأمر `openclaw doctor --fix` تحليل إدخالات `@username` القديمة إلى معرّفات كما يمكنه استعادة إدخالات قائمة السماح من ملفات مخزن الاقتران في تدفقات ترحيل قائمة السماح. -- `channels.telegram.actions.poll`: تفعيل أو تعطيل إنشاء استطلاعات Telegram (مفعّل افتراضيًا؛ ولا يزال يتطلب `sendMessage`). -- `channels.telegram.defaultTo`: هدف Telegram الافتراضي الذي يستخدمه CLI مع `--deliver` عند عدم توفير `--reply-to` صريح. -- `channels.telegram.groupPolicy`: `open | allowlist | disabled` (الافتراضي: allowlist). -- `channels.telegram.groupAllowFrom`: قائمة سماح مرسلي المجموعات (معرّفات مستخدمي Telegram الرقمية). ويمكن للأمر `openclaw doctor --fix` تحليل إدخالات `@username` القديمة إلى معرّفات. ويتم تجاهل الإدخالات غير الرقمية وقت التخويل. ولا يستخدم تخويل المجموعات الرجوع الاحتياطي إلى مخزن اقتران الرسائل المباشرة (`2026.2.25+`). -- أولوية تعدد الحسابات: +- `channels.telegram.dmPolicy`: ‏`pairing | allowlist | open | disabled` (الافتراضي: pairing). +- `channels.telegram.allowFrom`: قائمة السماح للرسائل الخاصة (معرّفات مستخدمي Telegram الرقمية). يتطلب `allowlist` معرّف مُرسِل واحدًا على الأقل. ويتطلب `open` القيمة `"*"`. يمكن للأمر `openclaw doctor --fix` حل إدخالات `@username` القديمة إلى معرّفات، ويمكنه استعادة إدخالات قائمة السماح من ملفات مخزن الاقتران في تدفقات ترحيل allowlist. +- `channels.telegram.actions.poll`: تمكين أو تعطيل إنشاء استطلاعات Telegram (الافتراضي: مفعّل؛ وما زال يتطلب `sendMessage`). +- `channels.telegram.defaultTo`: هدف Telegram الافتراضي الذي يستخدمه CLI مع `--deliver` عندما لا يتم توفير `--reply-to` صريح. +- `channels.telegram.groupPolicy`: ‏`open | allowlist | disabled` (الافتراضي: allowlist). +- `channels.telegram.groupAllowFrom`: قائمة سماح مرسلي المجموعات (معرّفات مستخدمي Telegram الرقمية). يمكن للأمر `openclaw doctor --fix` حل إدخالات `@username` القديمة إلى معرّفات. يتم تجاهل الإدخالات غير الرقمية وقت التخويل. لا يستخدم تخويل المجموعات الرجوع إلى مخزن الاقتران للرسائل الخاصة (`2026.2.25+`). +- أسبقية الحسابات المتعددة: - عند ضبط معرّفي حسابين أو أكثر، اضبط `channels.telegram.defaultAccount` (أو ضمّن `channels.telegram.accounts.default`) لجعل التوجيه الافتراضي صريحًا. - - إذا لم يتم ضبط أي منهما، يعود OpenClaw إلى أول معرّف حساب مطبّع ويصدر `openclaw doctor` تحذيرًا. - - ينطبق `channels.telegram.accounts.default.allowFrom` و`channels.telegram.accounts.default.groupAllowFrom` على الحساب `default` فقط. - - ترث الحسابات المسماة `channels.telegram.allowFrom` و`channels.telegram.groupAllowFrom` عندما لا تكون القيم على مستوى الحساب مضبوطة. - - لا ترث الحسابات المسماة `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`. -- `channels.telegram.groups`: الإعدادات الافتراضية لكل مجموعة + قائمة السماح (استخدم `"*"` للإعدادات الافتراضية العامة). - - `channels.telegram.groups..groupPolicy`: تجاوز لكل مجموعة لـ groupPolicy (`open | allowlist | disabled`). - - `channels.telegram.groups..requireMention`: الإعداد الافتراضي لتقييد الإشارة. - - `channels.telegram.groups..skills`: مرشح Skills (الحذف = كل Skills، والفارغ = لا شيء). + - إذا لم يتم ضبط أي منهما، يعود OpenClaw إلى أول معرّف حساب مُطبَّع ويحذّر `openclaw doctor`. + - تنطبق `channels.telegram.accounts.default.allowFrom` و`channels.telegram.accounts.default.groupAllowFrom` على الحساب `default` فقط. + - ترث الحسابات المسمّاة `channels.telegram.allowFrom` و`channels.telegram.groupAllowFrom` عندما تكون القيم على مستوى الحساب غير مضبوطة. + - لا ترث الحسابات المسمّاة `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`. +- `channels.telegram.groups`: القيم الافتراضية لكل مجموعة + قائمة السماح (استخدم `"*"` للقيم الافتراضية العامة). + - `channels.telegram.groups..groupPolicy`: تجاوز لكل مجموعة لـ groupPolicy ‏(`open | allowlist | disabled`). + - `channels.telegram.groups..requireMention`: القيمة الافتراضية لبوابة الإشارة. + - `channels.telegram.groups..skills`: مرشح Skills ‏(الحذف = كل Skills، الفارغ = لا شيء). - `channels.telegram.groups..allowFrom`: تجاوز قائمة سماح المرسلين لكل مجموعة. - - `channels.telegram.groups..systemPrompt`: مطالبة نظام إضافية للمجموعة. - - `channels.telegram.groups..enabled`: تعطيل المجموعة عندما تكون `false`. + - `channels.telegram.groups..systemPrompt`: system prompt إضافي للمجموعة. + - `channels.telegram.groups..enabled`: تعطيل المجموعة عندما تكون القيمة `false`. - `channels.telegram.groups..topics..*`: تجاوزات لكل موضوع (حقول المجموعة + `agentId` الخاص بالموضوع فقط). - `channels.telegram.groups..topics..agentId`: توجيه هذا الموضوع إلى وكيل محدد (يتجاوز التوجيه على مستوى المجموعة والربط). -- `channels.telegram.groups..topics..groupPolicy`: تجاوز لكل موضوع لـ groupPolicy (`open | allowlist | disabled`). -- `channels.telegram.groups..topics..requireMention`: تجاوز تقييد الإشارة لكل موضوع. -- `bindings[]` على المستوى الأعلى مع `type: "acp"` ومعرّف الموضوع القياسي `chatId:topic:topicId` في `match.peer.id`: حقول ربط موضوع ACP المستمر (راجع [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings)). -- `channels.telegram.direct..topics..agentId`: توجيه موضوعات الرسائل المباشرة إلى وكيل محدد (السلوك نفسه لموضوعات المنتدى). -- `channels.telegram.execApprovals.enabled`: تفعيل Telegram كعميل موافقة exec قائم على الدردشة لهذا الحساب. -- `channels.telegram.execApprovals.approvers`: معرّفات مستخدمي Telegram المسموح لهم بالموافقة على طلبات exec أو رفضها. وهو اختياري عندما يحدّد `channels.telegram.allowFrom` أو `channels.telegram.defaultTo` المباشر المالك بالفعل. -- `channels.telegram.execApprovals.target`: ‏`dm | channel | both` (الافتراضي: `dm`). ويحافظ `channel` و`both` على موضوع Telegram الأصلي عند وجوده. -- `channels.telegram.execApprovals.agentFilter`: مرشح اختياري لمعرّف الوكيل لمطالبات الموافقة المُعاد توجيهها. -- `channels.telegram.execApprovals.sessionFilter`: مرشح اختياري لمفتاح الجلسة (سلسلة فرعية أو regex) لمطالبات الموافقة المُعاد توجيهها. +- `channels.telegram.groups..topics..groupPolicy`: تجاوز لكل موضوع لـ groupPolicy ‏(`open | allowlist | disabled`). +- `channels.telegram.groups..topics..requireMention`: تجاوز بوابة الإشارة لكل موضوع. +- `bindings[]` على المستوى الأعلى مع `type: "acp"` ومعرّف موضوع قانوني `chatId:topic:topicId` في `match.peer.id`: حقول ربط موضوع ACP الدائم (راجع [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings)). +- `channels.telegram.direct..topics..agentId`: توجيه موضوعات DM إلى وكيل محدد (نفس سلوك موضوعات المنتدى). +- `channels.telegram.execApprovals.enabled`: تمكين Telegram كعميل موافقات exec قائم على الدردشة لهذا الحساب. +- `channels.telegram.execApprovals.approvers`: معرّفات مستخدمي Telegram المسموح لهم بالموافقة على طلبات exec أو رفضها. اختياري عندما تكون `channels.telegram.allowFrom` أو `channels.telegram.defaultTo` المباشرة تحدد المالك بالفعل. +- `channels.telegram.execApprovals.target`: ‏`dm | channel | both` (الافتراضي: `dm`). تحافظ `channel` و`both` على موضوع Telegram الأصلي عند وجوده. +- `channels.telegram.execApprovals.agentFilter`: مرشح اختياري لمعرّف الوكيل لمطالبات الموافقة المعاد توجيهها. +- `channels.telegram.execApprovals.sessionFilter`: مرشح اختياري لمفتاح الجلسة (substring أو regex) لمطالبات الموافقة المعاد توجيهها. - `channels.telegram.accounts..execApprovals`: تجاوز لكل حساب لتوجيه موافقات exec في Telegram وتخويل الموافقين. - `channels.telegram.capabilities.inlineButtons`: ‏`off | dm | group | all | allowlist` (الافتراضي: allowlist). - `channels.telegram.accounts..capabilities.inlineButtons`: تجاوز لكل حساب. -- `channels.telegram.commands.nativeSkills`: تفعيل/تعطيل أوامر Skills الأصلية في Telegram. +- `channels.telegram.commands.nativeSkills`: تمكين/تعطيل أوامر Skills الأصلية في Telegram. - `channels.telegram.replyToMode`: ‏`off | first | all` (الافتراضي: `off`). -- `channels.telegram.textChunkLimit`: حجم المقاطع الصادرة (أحرف). -- `channels.telegram.chunkMode`: ‏`length` (افتراضي) أو `newline` للتقسيم على الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول. +- `channels.telegram.textChunkLimit`: حجم التقسيم الصادر إلى أجزاء (أحرف). +- `channels.telegram.chunkMode`: ‏`length` (الافتراضي) أو `newline` للتقسيم على الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول. - `channels.telegram.linkPreview`: تبديل معاينات الروابط للرسائل الصادرة (الافتراضي: true). -- `channels.telegram.streaming`: ‏`off | partial | block | progress` (معاينة البث المباشر؛ الافتراضي: `partial`؛ وتُربط `progress` إلى `partial`؛ و`block` هو توافق قديم لوضع المعاينة). تستخدم معاينة البث في Telegram رسالة معاينة واحدة تُعدَّل في مكانها. -- `channels.telegram.streaming.preview.toolProgress`: إعادة استخدام رسالة المعاينة المباشرة لتحديثات الأدوات/التقدّم عندما تكون معاينة البث مفعلة (الافتراضي: `true`). اضبطه على `false` للاحتفاظ برسائل أدوات/تقدّم منفصلة. -- `channels.telegram.mediaMaxMb`: الحد الأقصى لوسائط Telegram الواردة/الصادرة (ميغابايت، الافتراضي: 100). -- `channels.telegram.retry`: سياسة إعادة المحاولة لمساعدات إرسال Telegram (CLI/الأدوات/الإجراءات) عند أخطاء API الصادرة القابلة للاسترداد (عدد المحاولات، و`minDelayMs`، و`maxDelayMs`، و`jitter`). -- `channels.telegram.network.autoSelectFamily`: تجاوز `autoSelectFamily` في Node (true=تفعيل، false=تعطيل). يكون مفعّلًا افتراضيًا في Node 22+، مع تعطيله افتراضيًا في WSL2. -- `channels.telegram.network.dnsResultOrder`: تجاوز ترتيب نتائج DNS (`ipv4first` أو `verbatim`). يكون الافتراضي `ipv4first` في Node 22+. -- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: تفعيل خطِر لبيئات fake-IP الموثوقة أو proxy الشفاف حيث تحلل تنزيلات وسائط Telegram العنوان `api.telegram.org` إلى عناوين خاصة/داخلية/مخصصة الاستخدام خارج السماح الافتراضي لنطاق القياس RFC 2544. -- `channels.telegram.proxy`: عنوان URL للـ proxy لاستدعاءات Bot API (SOCKS/HTTP). -- `channels.telegram.webhookUrl`: تفعيل وضع Webhook (يتطلب `channels.telegram.webhookSecret`). -- `channels.telegram.webhookSecret`: سر Webhook (مطلوب عند ضبط `webhookUrl`). +- `channels.telegram.streaming`: ‏`off | partial | block | progress` (معاينة البث المباشر؛ الافتراضي: `partial`؛ يتم ربط `progress` إلى `partial`؛ و`block` هو توافق مع وضع المعاينة القديم). يستخدم بث المعاينة في Telegram رسالة معاينة واحدة يتم تعديلها في مكانها. +- `channels.telegram.streaming.preview.toolProgress`: إعادة استخدام رسالة المعاينة المباشرة لتحديثات الأداة/التقدم عندما يكون بث المعاينة نشطًا (الافتراضي: `true`). اضبطه على `false` للإبقاء على رسائل أداة/تقدم منفصلة. +- `channels.telegram.mediaMaxMb`: الحد الأقصى لوسائط Telegram الواردة/الصادرة (MB، الافتراضي: 100). +- `channels.telegram.retry`: سياسة إعادة المحاولة لمساعدات إرسال Telegram ‏(CLI/tools/actions) عند أخطاء API الصادرة القابلة للاسترداد (المحاولات، minDelayMs، maxDelayMs، jitter). +- `channels.telegram.network.autoSelectFamily`: تجاوز Node autoSelectFamily ‏(true=تمكين، false=تعطيل). يكون مفعّلًا افتراضيًا على Node 22+، مع تعطيل افتراضي على WSL2. +- `channels.telegram.network.dnsResultOrder`: تجاوز ترتيب نتائج DNS ‏(`ipv4first` أو `verbatim`). يكون `ipv4first` افتراضيًا على Node 22+. +- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: تفعيل خطير اختياري لبيئات fake-IP أو proxy الشفاف الموثوقة حيث تُحل تنزيلات وسائط Telegram ‏`api.telegram.org` إلى عناوين خاصة/داخلية/ذات استخدام خاص خارج السماح الافتراضي لنطاق القياس RFC 2544. +- `channels.telegram.proxy`: عنوان URL للـ proxy لاستدعاءات Bot API ‏(SOCKS/HTTP). +- `channels.telegram.webhookUrl`: تمكين وضع Webhook ‏(يتطلب `channels.telegram.webhookSecret`). +- `channels.telegram.webhookSecret`: سر Webhook ‏(مطلوب عند ضبط webhookUrl). - `channels.telegram.webhookPath`: مسار Webhook المحلي (الافتراضي `/telegram-webhook`). - `channels.telegram.webhookHost`: مضيف ربط Webhook المحلي (الافتراضي `127.0.0.1`). - `channels.telegram.webhookPort`: منفذ ربط Webhook المحلي (الافتراضي `8787`). -- `channels.telegram.actions.reactions`: تقييد تفاعلات أداة Telegram. -- `channels.telegram.actions.sendMessage`: تقييد إرسال رسائل أداة Telegram. -- `channels.telegram.actions.deleteMessage`: تقييد حذف رسائل أداة Telegram. -- `channels.telegram.actions.sticker`: تقييد إجراءات ملصقات Telegram — الإرسال والبحث (الافتراضي: false). -- `channels.telegram.reactionNotifications`: ‏`off | own | all` — التحكم في التفاعلات التي تشغّل أحداث النظام (الافتراضي: `own` عند عدم الضبط). +- `channels.telegram.actions.reactions`: بوابة تفاعلات أداة Telegram. +- `channels.telegram.actions.sendMessage`: بوابة إرسال رسائل أداة Telegram. +- `channels.telegram.actions.deleteMessage`: بوابة حذف رسائل أداة Telegram. +- `channels.telegram.actions.sticker`: بوابة إجراءات ملصقات Telegram — الإرسال والبحث (الافتراضي: false). +- `channels.telegram.reactionNotifications`: ‏`off | own | all` — التحكم في التفاعلات التي تطلق أحداث النظام (الافتراضي: `own` عند عدم الضبط). - `channels.telegram.reactionLevel`: ‏`off | ack | minimal | extensive` — التحكم في قدرة الوكيل على التفاعل (الافتراضي: `minimal` عند عدم الضبط). -- `channels.telegram.errorPolicy`: ‏`reply | silent` — التحكم في سلوك ردود الأخطاء (الافتراضي: `reply`). تُدعَم تجاوزات لكل حساب/مجموعة/موضوع. -- `channels.telegram.errorCooldownMs`: الحد الأدنى بالمللي ثانية بين ردود الأخطاء إلى الدردشة نفسها (الافتراضي: `60000`). يمنع إغراق الأخطاء أثناء الانقطاعات. +- `channels.telegram.errorPolicy`: ‏`reply | silent` — التحكم في سلوك رد الأخطاء (الافتراضي: `reply`). وتدعم التجاوزات لكل حساب/مجموعة/موضوع. +- `channels.telegram.errorCooldownMs`: الحد الأدنى بالمللي ثانية بين ردود الأخطاء إلى الدردشة نفسها (الافتراضي: `60000`). يمنع إغراق الأخطاء أثناء فترات الانقطاع. - [مرجع الإعدادات - Telegram](/ar/gateway/configuration-reference#telegram) -الحقول الخاصة بـ Telegram ذات الإشارة العالية: +حقول Telegram عالية الإشارة والخاصة به: -- البدء/المصادقة: `enabled`، `botToken`، `tokenFile`، `accounts.*` (يجب أن يشير `tokenFile` إلى ملف عادي؛ وتُرفض الروابط الرمزية) -- التحكم في الوصول: `dmPolicy`، `allowFrom`، `groupPolicy`، `groupAllowFrom`، `groups`، `groups.*.topics.*`، و`bindings[]` على المستوى الأعلى (`type: "acp"`) -- موافقات exec: `execApprovals`، `accounts.*.execApprovals` -- الأوامر/القائمة: `commands.native`، `commands.nativeSkills`، `customCommands` +- بدء التشغيل/المصادقة: `enabled` و`botToken` و`tokenFile` و`accounts.*` ‏(`tokenFile` يجب أن يشير إلى ملف عادي؛ وتُرفض الروابط الرمزية) +- التحكم في الوصول: `dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom` و`groups` و`groups.*.topics.*` و`bindings[]` على المستوى الأعلى (`type: "acp"`) +- موافقات exec: ‏`execApprovals` و`accounts.*.execApprovals` +- الأوامر/القائمة: `commands.native` و`commands.nativeSkills` و`customCommands` - الخيوط/الردود: `replyToMode` -- البث: `streaming` (المعاينة)، `streaming.preview.toolProgress`، `blockStreaming` -- التنسيق/التسليم: `textChunkLimit`، `chunkMode`، `linkPreview`، `responsePrefix` -- الوسائط/الشبكة: `mediaMaxMb`، `timeoutSeconds`، `pollingStallThresholdMs`، `retry`، `network.autoSelectFamily`، `network.dangerouslyAllowPrivateNetwork`، `proxy` -- Webhook: `webhookUrl`، `webhookSecret`، `webhookPath`، `webhookHost` -- الإجراءات/الإمكانات: `capabilities.inlineButtons`، `actions.sendMessage|editMessage|deleteMessage|reactions|sticker` -- التفاعلات: `reactionNotifications`، `reactionLevel` -- الأخطاء: `errorPolicy`، `errorCooldownMs` -- الكتابات/السجل: `configWrites`، `historyLimit`، `dmHistoryLimit`، `dms.*.historyLimit` +- البث: `streaming` (المعاينة) و`streaming.preview.toolProgress` و`blockStreaming` +- التنسيق/التسليم: `textChunkLimit` و`chunkMode` و`linkPreview` و`responsePrefix` +- الوسائط/الشبكة: `mediaMaxMb` و`timeoutSeconds` و`pollingStallThresholdMs` و`retry` و`network.autoSelectFamily` و`network.dangerouslyAllowPrivateNetwork` و`proxy` +- Webhook: `webhookUrl` و`webhookSecret` و`webhookPath` و`webhookHost` +- الإجراءات/الإمكانات: `capabilities.inlineButtons` و`actions.sendMessage|editMessage|deleteMessage|reactions|sticker` +- التفاعلات: `reactionNotifications` و`reactionLevel` +- الأخطاء: `errorPolicy` و`errorCooldownMs` +- الكتابات/السجل: `configWrites` و`historyLimit` و`dmHistoryLimit` و`dms.*.historyLimit` ## ذو صلة - [الاقتران](/ar/channels/pairing) - [المجموعات](/ar/channels/groups) - [الأمان](/ar/gateway/security) -- [توجيه القنوات](/ar/channels/channel-routing) +- [توجيه القناة](/ar/channels/channel-routing) - [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent) - [استكشاف الأخطاء وإصلاحها](/ar/channels/troubleshooting) diff --git a/docs/ar/ci.md b/docs/ar/ci.md index 79f2bb43c..d386f680b 100644 --- a/docs/ar/ci.md +++ b/docs/ar/ci.md @@ -1,107 +1,100 @@ --- read_when: - تحتاج إلى فهم سبب تشغيل وظيفة CI أو عدم تشغيلها - - أنت تصحح أخطاء فحوصات GitHub Actions الفاشلة -summary: رسم وظيفة CI البياني، وبوابات النطاق، ومكافئات الأوامر المحلية + - أنت تقوم بتصحيح إخفاقات عمليات التحقق في GitHub Actions +summary: رسم وظائف CI البياني، وبوابات النطاق، ومكافئات الأوامر المحلية title: مسار CI x-i18n: - generated_at: "2026-04-23T07:20:46Z" + generated_at: "2026-04-23T13:58:01Z" model: gpt-5.4 provider: openai - source_hash: 5c89c66204b203a39435cfc19de7b437867f2792bbfa2c3948371abde9f80e11 + source_hash: c5a8ea0d8e428826169b0e6aced1caeb993106fe79904002125ace86b48cae1f source_path: ci.md workflow: 15 --- # مسار CI -يعمل CI عند كل push إلى `main` وعند كل pull request. ويستخدم تحديد نطاق ذكيًا لتخطي الوظائف المكلفة عندما تتغير مناطق غير مرتبطة فقط. +يعمل CI عند كل دفع إلى `main` وكل طلب سحب. ويستخدم تحديد نطاق ذكيًا لتخطي الوظائف المكلفة عندما تكون التغييرات محصورة في مناطق غير ذات صلة. -يملك QA Lab مسارات CI مخصصة خارج سير العمل الرئيسي ذي النطاق الذكي. يعمل -سير العمل `Parity gate` على تغييرات PR المطابقة وعبر التشغيل اليدوي؛ وهو -يبني بيئة تشغيل QA الخاصة ويقارن حزم الوكلاء التجريبية mock GPT-5.4 وOpus 4.6. -ويعمل سير العمل `QA-Lab - All Lanes` ليلًا على `main` وعبر -التشغيل اليدوي؛ حيث يوزّع mock parity gate ومسار Matrix الحي ومسار -Telegram الحي كوظائف متوازية. تستخدم الوظائف الحية بيئة `qa-live-shared`، -ويستخدم مسار Telegram عقود Convex. كما يشغّل `OpenClaw Release -Checks` مسارات QA Lab نفسها قبل الموافقة على الإصدار. +يمتلك QA Lab مسارات CI مخصصة خارج سير العمل الرئيسي ذي النطاق الذكي. يعمل سير عمل `Parity gate` على تغييرات PR المطابقة وعند التشغيل اليدوي؛ إذ يبني بيئة QA الخاصة ويقارن بين الحزم الوكيلة الوهمية GPT-5.4 وOpus 4.6. ويعمل سير عمل `QA-Lab - All Lanes` ليلًا على `main` وعند التشغيل اليدوي؛ إذ يوزع بوابة التماثل الوهمية، ومسار Matrix الحي، ومسار Telegram الحي كوظائف متوازية. تستخدم الوظائف الحية بيئة `qa-live-shared`، ويستخدم مسار Telegram عقود Convex. كما يشغّل `OpenClaw Release Checks` مسارات QA Lab نفسها قبل الموافقة على الإصدار. ## نظرة عامة على الوظائف -| الوظيفة | الغرض | متى تعمل | -| -------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------ | -| `preflight` | اكتشاف تغييرات الوثائق فقط، والنطاقات المتغيرة، والامتدادات المتغيرة، وبناء بيان CI | دائمًا في push وPR غير المسودات | -| `security-scm-fast` | اكتشاف المفاتيح الخاصة وتدقيق سير العمل عبر `zizmor` | دائمًا في push وPR غير المسودات | -| `security-dependency-audit` | تدقيق lockfile الإنتاجي من دون تبعيات مقابل تنبيهات npm | دائمًا في push وPR غير المسودات | -| `security-fast` | مجمّع مطلوب لوظائف الأمان السريعة | دائمًا في push وPR غير المسودات | -| `build-artifacts` | بناء `dist/` وواجهة Control UI وفحوصات العناصر المبنية والعناصر القابلة لإعادة الاستخدام لاحقًا | تغييرات مرتبطة بـ Node | -| `checks-fast-core` | مسارات صحة Linux السريعة مثل فحوصات bundled/plugin-contract/protocol | تغييرات مرتبطة بـ Node | -| `checks-fast-contracts-channels` | فحوصات عقود القنوات المجزأة مع نتيجة فحص مجمعة ثابتة | تغييرات مرتبطة بـ Node | -| `checks-node-extensions` | أجزاء اختبارات Plugin المضمّنة الكاملة عبر مجموعة الامتدادات | تغييرات مرتبطة بـ Node | -| `checks-node-core-test` | أجزاء اختبارات Node الأساسية، باستثناء القنوات، والمضمّنات، والعقود، ومسارات الامتدادات | تغييرات مرتبطة بـ Node | -| `extension-fast` | اختبارات مركزة لـ Plugins المضمّنة المتغيرة فقط | طلبات pull مع تغييرات الامتدادات | -| `check` | المكافئ المحلي الرئيسي المجزأ: أنواع الإنتاج، وlint، والحواجز، وأنواع الاختبار، وstrict smoke | تغييرات مرتبطة بـ Node | -| `check-additional` | حواجز البنية والحدود وأسطح الامتدادات وحدود الحزم وأجزاء gateway-watch | تغييرات مرتبطة بـ Node | -| `build-smoke` | اختبارات smoke لـ CLI المبني وsmoke لذاكرة بدء التشغيل | تغييرات مرتبطة بـ Node | -| `checks` | أداة تحقق لاختبارات القنوات على العناصر المبنية بالإضافة إلى توافق Node 22 في push فقط | تغييرات مرتبطة بـ Node | -| `check-docs` | فحوصات تنسيق الوثائق وlint والروابط المكسورة | عند تغيّر الوثائق | -| `skills-python` | Ruff + pytest للـ Skills المدعومة بـ Python | تغييرات مرتبطة بـ Python Skills | -| `checks-windows` | مسارات اختبارات خاصة بـ Windows | تغييرات مرتبطة بـ Windows | -| `macos-node` | مسار اختبارات TypeScript على macOS باستخدام العناصر المبنية المشتركة | تغييرات مرتبطة بـ macOS | -| `macos-swift` | lint وبناء واختبارات Swift لتطبيق macOS | تغييرات مرتبطة بـ macOS | -| `android` | اختبارات وحدات Android لكلا النكهتين بالإضافة إلى بناء واحد لـ debug APK | تغييرات مرتبطة بـ Android | +| الوظيفة | الغرض | وقت التشغيل | +| ------------------------------ | -------------------------------------------------------------------------------------------- | ----------------------------------- | +| `preflight` | اكتشاف تغييرات الوثائق فقط، والنطاقات المتغيرة، والإضافات المجمعة المتغيرة، وبناء بيان CI | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-scm-fast` | اكتشاف المفاتيح الخاصة وتدقيق سير العمل عبر `zizmor` | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-dependency-audit` | تدقيق ملف القفل الإنتاجي دون تبعيات مقابل تحذيرات npm | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `security-fast` | مجمّع مطلوب لوظائف الأمان السريعة | دائمًا في عمليات الدفع وطلبات السحب غير المسودة | +| `build-artifacts` | بناء `dist/` وواجهة Control UI وفحوصات نواتج البناء والنواتج القابلة لإعادة الاستخدام لاحقًا | تغييرات ذات صلة بـ Node | +| `checks-fast-core` | مسارات صحة سريعة على Linux مثل فحوصات المجمّع/عقد الإضافات/البروتوكول | تغييرات ذات صلة بـ Node | +| `checks-fast-contracts-channels` | فحوصات عقود القنوات المجزأة مع نتيجة فحص مجمعة مستقرة | تغييرات ذات صلة بـ Node | +| `checks-node-extensions` | أجزاء اختبار كاملة للإضافات المجمعة عبر مجموعة الإضافات | تغييرات ذات صلة بـ Node | +| `checks-node-core-test` | أجزاء اختبارات Node الأساسية، باستثناء مسارات القنوات والمجمّعات والعقود والإضافات | تغييرات ذات صلة بـ Node | +| `extension-fast` | اختبارات مركزة للإضافات المجمعة المتغيرة فقط | طلبات السحب التي تتضمن تغييرات في الإضافات | +| `check` | المكافئ الرئيسي المحلي المجزأ للبوابة: أنواع الإنتاج، وlint، والحواجز، وأنواع الاختبار، وsmoke صارم | تغييرات ذات صلة بـ Node | +| `check-additional` | حواجز البنية والحدود وسطح الإضافات وحدود الحزم وأجزاء مراقبة Gateway | تغييرات ذات صلة بـ Node | +| `build-smoke` | اختبارات smoke لـ CLI المبني وsmoke لذاكرة بدء التشغيل | تغييرات ذات صلة بـ Node | +| `checks` | أداة تحقق لاختبارات القنوات على النواتج المبنية بالإضافة إلى توافق Node 22 في عمليات الدفع فقط | تغييرات ذات صلة بـ Node | +| `check-docs` | تنسيق الوثائق وlint وفحوصات الروابط المعطلة | عند تغيير الوثائق | +| `skills-python` | Ruff + pytest للمهارات المعتمدة على Python | تغييرات ذات صلة بمهارات Python | +| `checks-windows` | مسارات اختبار خاصة بـ Windows | تغييرات ذات صلة بـ Windows | +| `macos-node` | مسار اختبارات TypeScript على macOS باستخدام نواتج البناء المشتركة | تغييرات ذات صلة بـ macOS | +| `macos-swift` | lint وبناء واختبارات Swift لتطبيق macOS | تغييرات ذات صلة بـ macOS | +| `android` | اختبارات وحدات Android لكلا النكهتين بالإضافة إلى بناء APK تصحيح واحد | تغييرات ذات صلة بـ Android | -## ترتيب الفشل السريع +## ترتيب الإخفاق السريع تُرتَّب الوظائف بحيث تفشل الفحوصات الرخيصة قبل تشغيل الوظائف المكلفة: -1. يقرر `preflight` أي المسارات موجودة أصلًا. منطق `docs-scope` و`changed-scope` هو خطوات داخل هذه الوظيفة، وليس وظائف مستقلة. -2. تفشل `security-scm-fast` و`security-dependency-audit` و`security-fast` و`check` و`check-additional` و`check-docs` و`skills-python` بسرعة من دون انتظار الوظائف الأثقل الخاصة بالعناصر المبنية ومصفوفات المنصات. +1. يحدد `preflight` المسارات الموجودة أصلًا. ويكون منطق `docs-scope` و`changed-scope` خطوات داخل هذه الوظيفة، وليس وظائف مستقلة. +2. تفشل `security-scm-fast` و`security-dependency-audit` و`security-fast` و`check` و`check-additional` و`check-docs` و`skills-python` بسرعة دون انتظار وظائف النواتج والمصفوفات الخاصة بالمنصات الأثقل. 3. يتداخل `build-artifacts` مع مسارات Linux السريعة حتى يتمكن المستهلكون اللاحقون من البدء بمجرد جاهزية البناء المشترك. -4. بعد ذلك تتفرع مسارات المنصات وبيئات التشغيل الأثقل: `checks-fast-core` و`checks-fast-contracts-channels` و`checks-node-extensions` و`checks-node-core-test` و`extension-fast` الخاص بالـ PR فقط و`checks` و`checks-windows` و`macos-node` و`macos-swift` و`android`. +4. بعد ذلك تتفرع المسارات الأثقل الخاصة بالمنصات ووقت التشغيل: `checks-fast-core` و`checks-fast-contracts-channels` و`checks-node-extensions` و`checks-node-core-test` و`extension-fast` الخاصة بطلبات السحب فقط و`checks` و`checks-windows` و`macos-node` و`macos-swift` و`android`. يوجد منطق النطاق في `scripts/ci-changed-scope.mjs` وتغطيه اختبارات وحدات في `src/scripts/ci-changed-scope.test.ts`. -تتحقق تعديلات سير عمل CI من رسم Node CI البياني بالإضافة إلى lint لسير العمل، لكنها لا تفرض بمفردها تشغيل بُنى Windows أو Android أو macOS الأصلية؛ إذ تبقى مسارات تلك المنصات محصورة في تغييرات مصدر المنصة. -تقتصر فحوصات Windows Node على أغلفة العمليات/المسارات الخاصة بـ Windows، ومساعدات تشغيل npm/pnpm/UI، وتكوين مدير الحزم، وأسطر سير عمل CI التي تشغّل ذلك المسار؛ أما تغييرات المصدر أو Plugin أو install-smoke أو الاختبارات غير المرتبطة فتبقى على مسارات Linux Node حتى لا تحجز عامل Windows ذي 16 vCPU لتغطية تُمارس بالفعل عبر أجزاء الاختبار العادية. -يعيد سير العمل المنفصل `install-smoke` استخدام سكربت النطاق نفسه عبر وظيفة `preflight` الخاصة به. فهو يحسب `run_install_smoke` من إشارة changed-smoke الأضيق، بحيث يعمل smoke الخاص بـ Docker/install لتغييرات التثبيت والتغليف والحاويات، وتغييرات إنتاج الامتدادات المضمّنة، والأسطح الأساسية لـ plugin/channel/gateway/Plugin SDK التي تمارسها وظائف Docker smoke. ولا تحجز التعديلات الخاصة بالاختبار فقط أو الوثائق فقط عمال Docker. ويجبر smoke الخاص بحزمة QR طبقة Docker `pnpm install` على إعادة التشغيل مع الحفاظ على ذاكرة BuildKit المؤقتة لمخزن pnpm، لذلك يظل يمارس التثبيت من دون إعادة تنزيل التبعيات في كل تشغيل. ويعيد gateway-network e2e استخدام صورة التشغيل المبنية سابقًا في الوظيفة، فيضيف تغطية WebSocket حقيقية من حاوية إلى حاوية من دون إضافة بناء Docker آخر. يقوم `test:docker:all` المحلي ببناء صورة تطبيق مشتركة واحدة من `scripts/e2e/Dockerfile` مسبقًا ويعيد استخدامها عبر مشغلات smoke لحاويات E2E؛ ويعكس سير العمل القابل لإعادة الاستخدام live/E2E هذا النمط عبر بناء ودفع صورة Docker E2E واحدة موسومة بـ SHA إلى GHCR قبل مصفوفة Docker، ثم تشغيل المصفوفة مع `OPENCLAW_SKIP_DOCKER_BUILD=1`. وتحتفظ اختبارات QR وinstaller في Docker بملفات Dockerfile الخاصة بها والمركزة على التثبيت. وتشغّل وظيفة منفصلة `docker-e2e-fast` ملف تعريف Docker المحدود للـ Plugin المضمّن تحت مهلة أمر مقدارها 120 ثانية: إصلاح تبعيات setup-entry بالإضافة إلى عزل فشل bundled-loader الاصطناعي. وتبقى مصفوفة التحديث/القنوات الكاملة للمضمّنات يدوية/للمجموعة الكاملة لأنها تنفذ عمليات تحديث npm حقيقية متكررة وتمريرات إصلاح doctor. +تتحقق تعديلات سير عمل CI من رسم Node CI البياني بالإضافة إلى lint لسير العمل، لكنها لا تفرض بمفردها عمليات بناء أصلية لـ Windows أو Android أو macOS؛ إذ تبقى مسارات تلك المنصات محصورة في تغييرات مصادر المنصة. +تُحصر فحوصات Windows Node في أغلفة العمليات/المسارات الخاصة بـ Windows، ومساعدات تشغيل npm/pnpm/UI، وإعدادات مدير الحزم، وأس surfaces سير عمل CI التي تشغّل ذلك المسار؛ أما تغييرات المصدر أو Plugin أو install-smoke أو الاختبارات غير المرتبطة فتظل على مسارات Linux Node حتى لا تحجز عامل Windows ذي 16 vCPU لتغطية يجري تنفيذها أصلًا بواسطة أجزاء الاختبار العادية. +يعيد سير العمل المنفصل `install-smoke` استخدام نص النطاق نفسه عبر وظيفة `preflight` الخاصة به. فهو يحسب `run_install_smoke` من إشارة smoke المتغيرة الأضيق، بحيث يعمل Docker/install smoke عند تغييرات التثبيت أو التغليف أو ما يتعلق بالحاويات أو تغييرات إنتاج الإضافات المجمعة أو أسطح Plugin/channel/Gateway/Plugin SDK الأساسية التي تمارسها وظائف Docker smoke. أما التعديلات الخاصة بالاختبارات فقط أو الوثائق فقط فلا تحجز عمال Docker. ويفرض smoke حزمة QR إعادة تشغيل طبقة Docker `pnpm install` مع الحفاظ على ذاكرة التخزين المؤقت BuildKit pnpm store، لذا يظل يختبر التثبيت دون إعادة تنزيل التبعيات في كل تشغيل. ويعيد e2e لشبكة gateway استخدام صورة وقت التشغيل المبنية سابقًا في الوظيفة، لذا يضيف تغطية WebSocket حقيقية من حاوية إلى حاوية دون إضافة بناء Docker آخر. يقوم `test:docker:all` المحلي ببناء صورة اختبار حي مشتركة واحدة وصورة تطبيق مبني مشتركة واحدة من `scripts/e2e/Dockerfile`، ثم يشغّل مسارات smoke الحية/E2E بالتوازي مع `OPENCLAW_SKIP_DOCKER_BUILD=1`؛ ويمكن ضبط التوازي الافتراضي البالغ 4 باستخدام `OPENCLAW_DOCKER_ALL_PARALLELISM`. ويوقف المجمّع المحلي جدولة مسارات جديدة مجمعة بعد أول إخفاق افتراضيًا، ولكل مسار مهلة 120 دقيقة يمكن تجاوزها باستخدام `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS`. وتعمل المسارات الحساسة لبدء التشغيل أو المزود بشكل حصري بعد المجموعة المتوازية. ويعكس سير العمل الحي/E2E القابل لإعادة الاستخدام نمط الصورة المشتركة ببناء ودفع صورة Docker E2E واحدة مميزة بـ SHA إلى GHCR قبل مصفوفة Docker، ثم تشغيل المصفوفة مع `OPENCLAW_SKIP_DOCKER_BUILD=1`. ويشغّل سير العمل الحي/E2E المجدول مجموعة Docker الكاملة لمسار الإصدار يوميًا. وتحافظ اختبارات Docker الخاصة بـ QR والمثبت على Dockerfiles الخاصة بها والمركزة على التثبيت. وتعمل وظيفة منفصلة `docker-e2e-fast` على ملف تعريف Docker المحدود للإضافات المجمعة ضمن مهلة أوامر قدرها 120 ثانية: إصلاح تبعيات setup-entry بالإضافة إلى عزل الإخفاق الاصطناعي لمحمّل الإضافات المجمعة. أما المصفوفة الكاملة لتحديث الإضافات/القنوات المجمعة فتبقى يدوية/للمجموعة الكاملة لأنها تنفذ عمليات npm update حقيقية متكررة وتمريرات doctor repair. -يوجد منطق المسارات المتغيرة المحلي في `scripts/changed-lanes.mjs` ويُنفذ بواسطة `scripts/check-changed.mjs`. وهذه البوابة المحلية أكثر صرامة بشأن حدود البنية من نطاق منصة CI الواسع: فالتغييرات الأساسية في الإنتاج تشغّل typecheck للإنتاج الأساسي بالإضافة إلى اختبارات الأساس، وتغييرات اختبارات الأساس فقط تشغّل فقط typecheck/اختبارات اختبارات الأساس، وتغييرات إنتاج الامتدادات تشغّل typecheck لإنتاج الامتدادات بالإضافة إلى اختبارات الامتدادات، وتغييرات اختبارات الامتدادات فقط تشغّل فقط typecheck/اختبارات اختبارات الامتدادات. أما تغييرات Plugin SDK العامة أو plugin-contract فتوسّع التحقق ليشمل الامتدادات لأن الامتدادات تعتمد على تلك العقود الأساسية. وتشغّل زيادات الإصدار الخاصة ببيانات الإصدار الوصفية فقط فحوصات مستهدفة للإصدار/التكوين/التبعيات الجذرية. وتفشل التغييرات الجذرية/التهيئية غير المعروفة إلى جميع المسارات كخيار آمن. +يوجد منطق المسارات المحلية المتغيرة في `scripts/changed-lanes.mjs` ويُنفذ بواسطة `scripts/check-changed.mjs`. وهذه البوابة المحلية أكثر صرامة بشأن حدود البنية من نطاق منصة CI العام: تغييرات الإنتاج الأساسية تشغّل فحص أنواع الإنتاج الأساسي بالإضافة إلى الاختبارات الأساسية، وتغييرات الاختبارات الأساسية فقط تشغّل فقط فحص أنواع الاختبار الأساسي/الاختبارات، وتغييرات إنتاج الإضافات تشغّل فحص أنواع إنتاج الإضافات بالإضافة إلى اختبارات الإضافات، وتغييرات اختبارات الإضافات فقط تشغّل فقط فحص أنواع اختبارات الإضافات/الاختبارات. كما أن تغييرات Plugin SDK العامة أو plugin-contract توسّع التحقق ليشمل الإضافات لأن الإضافات تعتمد على تلك العقود الأساسية. وتشغّل زيادات الإصدار الخاصة ببيانات الإصدار فقط فحوصات مستهدفة للإصدار/الإعداد/تبعيات الجذر. أما تغييرات الجذر/الإعداد غير المعروفة فتفشل احتياطيًا إلى جميع المسارات. -في عمليات push، تضيف مصفوفة `checks` المسار `compat-node22` الخاص بعمليات push فقط. أما في pull requests، فيُتخطى هذا المسار وتبقى المصفوفة مركزة على مسارات الاختبار/القنوات العادية. +في عمليات الدفع، تضيف مصفوفة `checks` المسار الخاص بالدفع فقط `compat-node22`. وفي طلبات السحب، يُتخطى هذا المسار وتبقى المصفوفة مركزة على مسارات الاختبار/القنوات العادية. -تُقسَّم أو تُوازَن أبطأ عائلات اختبارات Node بحيث تبقى كل وظيفة صغيرة: فتعمد عقود القنوات إلى تقسيم تغطية registry وcore إلى ستة أجزاء موزونة إجمالًا، وتوازن اختبارات Plugins المضمّنة عبر ستة عمال امتدادات، ويعمل auto-reply على ثلاثة عمال موزونين بدلًا من ستة عمال صغار، وتُوزَّع إعدادات agentic gateway/plugin عبر وظائف agentic Node الحالية الخاصة بالمصدر فقط بدلًا من انتظار العناصر المبنية. وتستخدم اختبارات browser وQA والوسائط وPlugins المتنوعة الواسعة إعدادات Vitest المخصصة لها بدلًا من المجموعة العامة المشتركة للـ Plugins. ويستخدم مسار agents الواسع مجدول Vitest الموازي المشترك على مستوى الملفات لأنه يهيمن عليه الاستيراد/الجدولة بدلًا من ملف اختبار بطيء واحد. ويعمل `runtime-config` مع جزء infra core-runtime حتى لا يمتلك الجزء المشترك للتشغيل الذيل الأخير. ويُبقي `check-additional` أعمال compile/canary لحدود الحزم معًا ويفصل بنية topology في وقت التشغيل عن تغطية gateway watch؛ بينما يشغّل جزء boundary guard حواجزه الصغيرة المستقلة بالتوازي داخل وظيفة واحدة. وتعمل Gateway watch واختبارات القنوات وجزء حدود دعم core بالتوازي داخل `build-artifacts` بعد أن يكون `dist/` و`dist-runtime/` قد بُنيا بالفعل، مع الاحتفاظ بأسماء الفحوصات القديمة كوظائف تحقق خفيفة مع تجنب عاملين إضافيين من Blacksmith وطابور مستهلك ثانٍ للعناصر المبنية. -يشغّل Android CI كلًا من `testPlayDebugUnitTest` و`testThirdPartyDebugUnitTest`، ثم يبني Play debug APK. ولا تملك النكهة third-party مجموعة مصادر أو manifest منفصلًا؛ ومع ذلك فإن مسار اختبار الوحدات الخاص بها يترجم تلك النكهة مع إشارات BuildConfig الخاصة بـ SMS/call-log، مع تجنب وظيفة تغليف debug APK مكررة في كل push ذي صلة بـ Android. -يقتصر `extension-fast` على PR فقط لأن عمليات push تشغّل بالفعل أجزاء اختبارات Plugin المضمّنة الكاملة. وهذا يحافظ على ملاحظات سريعة للـ Plugins المتغيرة أثناء المراجعة من دون حجز عامل Blacksmith إضافي على `main` لتغطية موجودة بالفعل في `checks-node-extensions`. +تُقسَّم عائلات اختبارات Node الأبطأ أو تُوازَن بحيث تبقى كل وظيفة صغيرة: تقسم عقود القنوات تغطية السجل والتغطية الأساسية إلى ستة أجزاء موزونة إجمالًا، وتُوازَن اختبارات الإضافات المجمعة عبر ستة عمال إضافات، ويعمل auto-reply على ثلاثة عمال موزونين بدلًا من ستة عمال صغار، وتُوزع إعدادات agentic الخاصة بـ gateway/plugin عبر وظائف Node المصدرية agentic القائمة بدلًا من انتظار النواتج المبنية. وتستخدم اختبارات browser وQA والوسائط والإضافات المتنوعة الواسعة إعدادات Vitest المخصصة لها بدلًا من الجامع المشترك للإضافات. ويستخدم مسار agents الواسع مجدول التوازي على مستوى الملفات المشترك في Vitest لأنه يهيمن عليه الاستيراد/الجدولة بدلًا من أن يملكه ملف اختبار بطيء واحد. ويعمل `runtime-config` مع جزء infra core-runtime حتى لا يمتلك جزء وقت التشغيل المشترك الذيل. ويحافظ `check-additional` على أعمال الترجمة/الكناري الخاصة بحدود الحزم معًا ويفصل بنية طوبولوجيا وقت التشغيل عن تغطية مراقبة Gateway؛ ويشغّل جزء حراسة الحدود حواجزه الصغيرة المستقلة بالتوازي داخل وظيفة واحدة. وتعمل مراقبة Gateway واختبارات القنوات وجزء حدود الدعم الأساسي بالتوازي داخل `build-artifacts` بعد أن يكون `dist/` و`dist-runtime/` قد بُنيا بالفعل، مع الاحتفاظ بأسماء الفحوصات القديمة كوظائف تحقق خفيفة الوزن مع تجنب عاملين إضافيين من Blacksmith وطابور ثانٍ لمستهلكي النواتج. +يشغّل Android CI كلاً من `testPlayDebugUnitTest` و`testThirdPartyDebugUnitTest`، ثم يبني APK التصحيح الخاص بـ Play. ولا تمتلك النكهة الخارجية مجموعة مصادر أو manifest منفصلين؛ إلا أن مسار اختبار الوحدات الخاص بها لا يزال يترجم تلك النكهة باستخدام إشارات BuildConfig الخاصة بـ SMS/call-log، مع تجنب وظيفة تغليف APK تصحيح مكررة في كل دفع ذي صلة بـ Android. +يكون `extension-fast` خاصًا بطلبات السحب فقط لأن عمليات الدفع تشغّل بالفعل الأجزاء الكاملة لاختبارات الإضافات المجمعة. وهذا يحافظ على تغذية راجعة سريعة للإضافات المتغيرة أثناء المراجعة دون حجز عامل Blacksmith إضافي على `main` لتغطية موجودة أصلًا في `checks-node-extensions`. -قد يضع GitHub علامة `cancelled` على الوظائف المستبدلة عندما يصل push أحدث إلى نفس مرجع PR أو مرجع `main`. تعامل مع ذلك باعتباره ضجيج CI ما لم يكن أحدث تشغيل للمرجع نفسه فاشلًا أيضًا. تستخدم فحوصات الأجزاء المجمعة `!cancelled() && always()` حتى تبلّغ عن حالات فشل الأجزاء العادية، لكنها لا تُصف بعد أن يكون سير العمل كله قد استُبدل بالفعل. -يخضع مفتاح التزامن في CI للإصدار (`CI-v7-*`) حتى لا يتمكن zombie على جانب GitHub في مجموعة انتظار قديمة من حجب تشغيلات main الأحدث إلى أجل غير مسمى. +قد يعلّم GitHub الوظائف المستبدلة على أنها `cancelled` عندما يصل دفع أحدث إلى نفس مرجع PR أو مرجع `main`. تعامل مع ذلك على أنه ضجيج CI ما لم يكن أحدث تشغيل لنفس المرجع يفشل أيضًا. وتستخدم فحوصات الأجزاء المجمعة `!cancelled() && always()` حتى تستمر في الإبلاغ عن إخفاقات الأجزاء العادية، لكنها لا تُصفّ بعد أن يكون سير العمل كله قد استُبدل بالفعل. +ومفتاح التزامن في CI مُرقّم بالإصدار (`CI-v7-*`) حتى لا يتمكن عنصر GitHub عالق في مجموعة انتظار قديمة من حظر تشغيلات `main` الأحدث إلى أجل غير مسمى. ## المشغّلات -| المشغّل | الوظائف | -| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ubuntu-24.04` | `preflight`، ووظائف الأمان السريعة والمجمِّعات (`security-scm-fast` و`security-dependency-audit` و`security-fast`)، وفحوصات protocol/contract/bundled السريعة، وفحوصات عقود القنوات المجزأة، وأجزاء `check` باستثناء lint، وأجزاء ومجمِّعات `check-additional`، وأدوات التحقق المجمعة لاختبارات Node، وفحوصات الوثائق، وPython Skills، وworkflow-sanity، وlabeler، وauto-response؛ كما يستخدم preflight الخاص بـ install-smoke Ubuntu المستضاف من GitHub حتى تتمكن مصفوفة Blacksmith من الاصطفاف مبكرًا | -| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`، وbuild-smoke، وأجزاء اختبارات Linux Node، وأجزاء اختبارات Plugin المضمّنة، و`android` | -| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`، الذي لا يزال حساسًا بما يكفي للـ CPU بحيث كانت تكلفة 8 vCPU أعلى من الوفر الذي حققته؛ وبُنى Docker الخاصة بـ install-smoke، حيث كانت تكلفة وقت الانتظار لـ 32 vCPU أعلى من الوفر الذي حققته | -| `blacksmith-16vcpu-windows-2025` | `checks-windows` | -| `blacksmith-6vcpu-macos-latest` | `macos-node` على `openclaw/openclaw`؛ وتعود fork إلى `macos-latest` | -| `blacksmith-12vcpu-macos-latest` | `macos-swift` على `openclaw/openclaw`؛ وتعود fork إلى `macos-latest` | +| المشغّل | الوظائف | +| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ubuntu-24.04` | `preflight`، ووظائف الأمان السريعة ومجمّعاتها (`security-scm-fast` و`security-dependency-audit` و`security-fast`)، وفحوصات البروتوكول/العقود/المجمّعات السريعة، وفحوصات عقود القنوات المجزأة، وأجزاء `check` باستثناء lint، وأجزاء ومجمّعات `check-additional`، وأدوات التحقق المجمعة لاختبارات Node، وفحوصات الوثائق، وSkills الخاصة بـ Python، وworkflow-sanity، وlabeler، وauto-response؛ كما يستخدم preflight الخاص بـ install-smoke أيضًا Ubuntu المستضاف من GitHub حتى تتمكن مصفوفة Blacksmith من الاصطفاف مبكرًا | +| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`، وbuild-smoke، وأجزاء اختبارات Linux Node، وأجزاء اختبارات Plugin المجمّعة، و`android` | +| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`، الذي لا يزال حساسًا لاستهلاك CPU بدرجة تجعل 8 vCPU أكثر كلفة مما وفرته؛ وبناءات Docker الخاصة بـ install-smoke، حيث كانت كلفة وقت الانتظار لـ 32-vCPU أعلى مما وفرته | +| `blacksmith-16vcpu-windows-2025` | `checks-windows` | +| `blacksmith-6vcpu-macos-latest` | `macos-node` على `openclaw/openclaw`؛ وتعود التفرعات إلى `macos-latest` | +| `blacksmith-12vcpu-macos-latest` | `macos-swift` على `openclaw/openclaw`؛ وتعود التفرعات إلى `macos-latest` | ## المكافئات المحلية ```bash -pnpm changed:lanes # افحص مصنّف المسارات المتغيرة المحلي لـ origin/main...HEAD -pnpm check:changed # البوابة المحلية الذكية: typecheck/lint/tests المتغيرة حسب مسار الحدود -pnpm check # البوابة المحلية السريعة: tsgo للإنتاج + lint مجزأ + حواجز سريعة متوازية +pnpm changed:lanes # افحص مصنّف المسارات المحلية المتغيرة لـ origin/main...HEAD +pnpm check:changed # البوابة المحلية الذكية: typecheck/lint/tests المتغيرة بحسب مسار الحدود +pnpm check # البوابة المحلية السريعة: `tsgo` للإنتاج + lint مجزأ + حواجز سريعة متوازية pnpm check:test-types pnpm check:timed # البوابة نفسها مع توقيتات لكل مرحلة pnpm build:strict-smoke pnpm check:architecture pnpm test:gateway:watch-regression -pnpm test # اختبارات vitest +pnpm test # اختبارات `vitest` pnpm test:channels pnpm test:contracts:channels -pnpm check:docs # تنسيق الوثائق + lint + الروابط المكسورة -pnpm build # ابنِ dist عندما تكون مسارات عناصر CI المبنية/build-smoke مهمة -node scripts/ci-run-timings.mjs # لخّص زمن التنفيذ الفعلي، وزمن الانتظار، وأبطأ الوظائف +pnpm check:docs # تنسيق الوثائق + lint + الروابط المعطلة +pnpm build # ابنِ dist عندما تكون مسارات نواتج CI/‏build-smoke مهمة +node scripts/ci-run-timings.mjs # لخّص وقت التنفيذ الكلي ووقت الانتظار وأبطأ الوظائف ``` diff --git a/docs/ar/cli/gateway.md b/docs/ar/cli/gateway.md index 0c08fff11..cc680154b 100644 --- a/docs/ar/cli/gateway.md +++ b/docs/ar/cli/gateway.md @@ -1,26 +1,26 @@ --- read_when: - - تشغيل Gateway من خلال CLI ‏(للتطوير أو الخوادم) - - تصحيح مصادقة Gateway، وأوضاع الربط، والاتصال - - اكتشاف Gateways عبر Bonjour ‏(DNS-SD المحلي + واسع النطاق) -summary: CLI الخاص بـ OpenClaw Gateway ‏(`openclaw gateway`) — تشغيل Gateways والاستعلام عنها واكتشافها -title: gateway + - تشغيل Gateway من CLI (للتطوير أو الخوادم) + - تصحيح أخطاء مصادقة Gateway وأوضاع الربط والاتصال + - اكتشاف Gateways عبر Bonjour ‏(المحلي + DNS-SD واسع النطاق) +summary: OpenClaw Gateway CLI (`openclaw gateway`) — تشغيل Gateways والاستعلام عنها واكتشافها +title: Gateway x-i18n: - generated_at: "2026-04-23T07:22:18Z" + generated_at: "2026-04-23T13:58:02Z" model: gpt-5.4 provider: openai - source_hash: 30d261a33e54bed10c17c14d09d0dd2b8e227bbf9f0ed415e332e7bda4803f1e + source_hash: f9160017a4d1326819f6b4d067bd99aa02ee37689b96c185defedef6200c19cf source_path: cli/gateway.md workflow: 15 --- -# CLI الخاص بـ Gateway +# Gateway CLI -Gateway هو خادم WebSocket الخاص بـ OpenClaw ‏(القنوات، والعُقد، والجلسات، وHooks). +يُعد Gateway خادم WebSocket الخاص بـ OpenClaw ‏(القنوات، والعُقد، والجلسات، والخطافات). -توجد الأوامر الفرعية في هذه الصفحة تحت `openclaw gateway …`. +توجد الأوامر الفرعية في هذه الصفحة ضمن `openclaw gateway …`. -مستندات ذات صلة: +المستندات ذات الصلة: - [/gateway/bonjour](/ar/gateway/bonjour) - [/gateway/discovery](/ar/gateway/discovery) @@ -34,7 +34,7 @@ Gateway هو خادم WebSocket الخاص بـ OpenClaw ‏(القنوات، و openclaw gateway ``` -الاسم البديل للمقدمة الأمامية: +الاسم البديل للتشغيل في الواجهة الأمامية: ```bash openclaw gateway run @@ -42,59 +42,59 @@ openclaw gateway run ملاحظات: -- افتراضيًا، يرفض Gateway البدء ما لم يتم ضبط `gateway.mode=local` في `~/.openclaw/openclaw.json`. استخدم `--allow-unconfigured` للتشغيلات المخصصة/التطويرية. -- من المتوقع أن يكتب `openclaw onboard --mode local` و`openclaw setup` القيمة `gateway.mode=local`. إذا كان الملف موجودًا لكن `gateway.mode` مفقودة، فاعتبر ذلك إعدادًا معطوبًا أو تم العبث به وقم بإصلاحه بدلًا من افتراض الوضع المحلي ضمنيًا. -- إذا كان الملف موجودًا وكانت `gateway.mode` مفقودة، فسيتعامل Gateway مع ذلك على أنه تلف مريب في الإعدادات ويرفض أن “يفترض الوضع المحلي” نيابةً عنك. +- بشكل افتراضي، يرفض Gateway البدء ما لم يتم تعيين `gateway.mode=local` في `~/.openclaw/openclaw.json`. استخدم `--allow-unconfigured` للتشغيلات المخصصة/الخاصة بالتطوير. +- من المتوقع أن يكتب `openclaw onboard --mode local` و`openclaw setup` القيمة `gateway.mode=local`. إذا كان الملف موجودًا لكن `gateway.mode` مفقودًا، فاعتبر ذلك إعدادًا معطوبًا أو تم العبث به وأصلحه بدلًا من افتراض الوضع المحلي ضمنيًا. +- إذا كان الملف موجودًا وكانت `gateway.mode` مفقودة، فإن Gateway يعتبر ذلك تلفًا مريبًا في الإعداد ويرفض أن “يفترض الوضع المحلي” نيابةً عنك. - يتم حظر الربط خارج loopback من دون مصادقة (حاجز أمان). -- يؤدي `SIGUSR1` إلى إعادة تشغيل داخل العملية عند السماح بذلك (`commands.restart` مفعّل افتراضيًا؛ اضبط `commands.restart: false` لحظر إعادة التشغيل اليدوية، مع بقاء gateway tool/config apply/update مسموحًا). -- تعمل معالجات `SIGINT`/`SIGTERM` على إيقاف عملية gateway، لكنها لا تستعيد أي حالة طرفية مخصصة. إذا كنت تغلف CLI باستخدام TUI أو إدخال raw-mode، فاستعد الطرفية قبل الخروج. +- يؤدّي `SIGUSR1` إلى إعادة تشغيل داخل العملية عند التفويض (`commands.restart` مفعّل افتراضيًا؛ اضبط `commands.restart: false` لمنع إعادة التشغيل اليدوية، مع بقاء gateway tool/config apply/update مسموحًا). +- تعمل معالجات `SIGINT`/`SIGTERM` على إيقاف عملية gateway، لكنها لا تستعيد أي حالة مخصصة للطرفية. إذا كنت تغلّف CLI باستخدام TUI أو إدخال raw-mode، فأعِد الطرفية إلى حالتها قبل الخروج. ### الخيارات -- `--port `: منفذ WebSocket ‏(الافتراضي يأتي من الإعدادات/البيئة؛ وعادةً `18789`). +- `--port `: منفذ WebSocket ‏(القيمة الافتراضية تأتي من config/env؛ وعادةً تكون `18789`). - `--bind `: وضع ربط المستمع. -- `--auth `: تجاوز وضع المصادقة. -- `--token `: تجاوز الرمز المميز (ويعيّن أيضًا `OPENCLAW_GATEWAY_TOKEN` للعملية). -- `--password `: تجاوز كلمة المرور. تحذير: قد تنكشف كلمات المرور المضمنة ضمن قوائم العمليات المحلية. -- `--password-file `: اقرأ كلمة مرور gateway من ملف. +- `--auth `: تجاوز لوضع المصادقة. +- `--token `: تجاوز للرمز المميز (ويعيّن أيضًا `OPENCLAW_GATEWAY_TOKEN` لهذه العملية). +- `--password `: تجاوز لكلمة المرور. تحذير: قد تظهر كلمات المرور المضمّنة مباشرةً في قوائم العمليات المحلية. +- `--password-file `: قراءة كلمة مرور gateway من ملف. - `--tailscale `: كشف Gateway عبر Tailscale. -- `--tailscale-reset-on-exit`: إعادة تعيين إعداد serve/funnel في Tailscale عند الإيقاف. -- `--allow-unconfigured`: السماح ببدء gateway من دون `gateway.mode=local` في الإعدادات. يتجاوز هذا حاجز بدء التشغيل فقط من أجل التمهيد المخصص/التطويري؛ ولا يكتب ملف الإعدادات أو يصلحه. -- `--dev`: أنشئ إعدادات + مساحة عمل للتطوير إذا كانت مفقودة (يتجاوز `BOOTSTRAP.md`). -- `--reset`: أعد تعيين إعدادات التطوير + بيانات الاعتماد + الجلسات + مساحة العمل (يتطلب `--dev`). -- `--force`: اقتل أي مستمع موجود على المنفذ المحدد قبل البدء. -- `--verbose`: سجلات مطولة. -- `--cli-backend-logs`: اعرض فقط سجلات الواجهة الخلفية لـ CLI في الطرفية (ومع تمكين stdout/stderr). +- `--tailscale-reset-on-exit`: إعادة تعيين إعدادات Tailscale serve/funnel عند الإيقاف. +- `--allow-unconfigured`: السماح ببدء gateway من دون `gateway.mode=local` في الإعداد. هذا يتجاوز حاجز بدء التشغيل لأغراض الإقلاع المخصص/التطوير فقط؛ ولا يكتب ملف الإعداد أو يصلحه. +- `--dev`: إنشاء إعداد + مساحة عمل للتطوير إذا لم يكونا موجودين (يتخطى `BOOTSTRAP.md`). +- `--reset`: إعادة تعيين إعداد التطوير + بيانات الاعتماد + الجلسات + مساحة العمل (يتطلب `--dev`). +- `--force`: إنهاء أي مستمع موجود على المنفذ المحدد قبل البدء. +- `--verbose`: سجلات تفصيلية. +- `--cli-backend-logs`: عرض سجلات الواجهة الخلفية لـ CLI فقط في وحدة التحكم (مع تفعيل stdout/stderr). - `--ws-log `: نمط سجل websocket ‏(الافتراضي `auto`). - `--compact`: اسم بديل لـ `--ws-log compact`. -- `--raw-stream`: سجّل أحداث بث النموذج الخام إلى jsonl. -- `--raw-stream-path `: مسار jsonl للبث الخام. +- `--raw-stream`: تسجيل أحداث تدفق النموذج الخام إلى jsonl. +- `--raw-stream-path `: مسار jsonl للتدفق الخام. تحليل بدء التشغيل: -- اضبط `OPENCLAW_GATEWAY_STARTUP_TRACE=1` لتسجيل توقيتات المراحل أثناء بدء Gateway. -- شغّل `pnpm test:startup:gateway -- --runs 5 --warmup 1` لقياس أداء بدء Gateway. يسجل القياس أول خرج للعملية، و`/healthz`، و`/readyz`، وتوقيتات تتبع بدء التشغيل. +- عيّن `OPENCLAW_GATEWAY_STARTUP_TRACE=1` لتسجيل توقيتات المراحل أثناء بدء تشغيل Gateway. +- شغّل `pnpm test:startup:gateway -- --runs 5 --warmup 1` لقياس أداء بدء تشغيل Gateway. يسجّل القياس أول مخرجات للعملية، و`/healthz`، و`/readyz`، وتوقيتات تتبّع بدء التشغيل. ## الاستعلام عن Gateway قيد التشغيل -تستخدم جميع أوامر الاستعلام WebSocket RPC. +تستخدم كل أوامر الاستعلام WebSocket RPC. -أوضاع الخرج: +أوضاع الإخراج: -- الافتراضي: قابل للقراءة البشرية (وملوّن في TTY). +- الافتراضي: مقروء للبشر (وملوّن في TTY). - `--json`: JSON قابل للقراءة آليًا (من دون تنسيق/مؤشر دوران). -- `--no-color` (أو `NO_COLOR=1`): تعطيل ANSI مع الحفاظ على التخطيط البشري. +- `--no-color` (أو `NO_COLOR=1`): تعطيل ANSI مع الإبقاء على التخطيط البشري. الخيارات المشتركة (عند الدعم): -- `--url `: عنوان URL الخاص بـ Gateway WebSocket. +- `--url `: عنوان WebSocket الخاص بـ Gateway. - `--token `: رمز Gateway المميز. - `--password `: كلمة مرور Gateway. -- `--timeout `: المهلة/الميزانية (تختلف حسب الأمر). -- `--expect-final`: انتظر استجابة “نهائية” (استدعاءات الوكيل). +- `--timeout `: المهلة/الميزانية الزمنية (تختلف حسب الأمر). +- `--expect-final`: الانتظار للحصول على استجابة “نهائية” (استدعاءات الوكيل). -ملاحظة: عندما تضبط `--url`، لا يعود CLI إلى بيانات الاعتماد من الإعدادات أو البيئة. -مرّر `--token` أو `--password` صراحةً. غياب بيانات الاعتماد الصريحة هو خطأ. +ملاحظة: عند تعيين `--url`، لا يعود CLI إلى بيانات الاعتماد من config أو البيئة. +مرّر `--token` أو `--password` صراحةً. ويُعد غياب بيانات الاعتماد الصريحة خطأً. ### `gateway health` @@ -102,7 +102,7 @@ openclaw gateway run openclaw gateway health --url ws://127.0.0.1:18789 ``` -تُعد نقطة النهاية HTTP ‏`/healthz` فحصًا للحيوية: فهي تستجيب بمجرد أن يتمكن الخادم من الرد على HTTP. أما نقطة النهاية HTTP ‏`/readyz` فهي أكثر صرامة وتبقى حمراء بينما لا تزال العمليات الجانبية عند بدء التشغيل، أو القنوات، أو Hooks المُعدّة تستقر. +تُعد نقطة النهاية HTTP ‏`/healthz` مسبار حيوية: إذ تُرجع الاستجابة بمجرد أن يتمكن الخادم من الرد عبر HTTP. أما نقطة النهاية HTTP ‏`/readyz` فهي أكثر صرامة وتظل غير جاهزة أثناء استقرار العمليات الجانبية عند بدء التشغيل، أو القنوات، أو الخطافات المضبوطة. ### `gateway usage-cost` @@ -116,11 +116,11 @@ openclaw gateway usage-cost --json الخيارات: -- `--days `: عدد الأيام المراد تضمينها (الافتراضي `30`). +- `--days `: عدد الأيام التي يجب تضمينها (الافتراضي `30`). ### `gateway stability` -اجلب مسجل الثبات التشخيصي الأخير من Gateway قيد التشغيل. +اجلب مُسجّل الاستقرار التشخيصي الأخير من Gateway قيد التشغيل. ```bash openclaw gateway stability @@ -132,22 +132,21 @@ openclaw gateway stability --json الخيارات: -- `--limit `: الحد الأقصى لعدد الأحداث الأخيرة المراد تضمينها (الافتراضي `25`، الحد الأقصى `1000`). +- `--limit `: الحد الأقصى لعدد الأحداث الأخيرة التي يجب تضمينها (الافتراضي `25`، والحد الأقصى `1000`). - `--type `: التصفية حسب نوع الحدث التشخيصي، مثل `payload.large` أو `diagnostic.memory.pressure`. -- `--since-seq `: تضمين الأحداث بعد رقم التسلسل التشخيصي فقط. -- `--bundle [path]`: اقرأ حزمة ثبات محفوظة بدلًا من استدعاء Gateway قيد التشغيل. استخدم `--bundle latest` (أو فقط `--bundle`) لأحدث حزمة تحت دليل الحالة، أو مرّر مسار JSON للحزمة مباشرةً. -- `--export`: اكتب ملف zip تشخيصات دعم قابلًا للمشاركة بدلًا من طباعة تفاصيل الثبات. -- `--output `: مسار الخرج لـ `--export`. +- `--since-seq `: تضمين الأحداث التي تلي رقم التسلسل التشخيصي فقط. +- `--bundle [path]`: قراءة حزمة استقرار محفوظة بدلًا من استدعاء Gateway قيد التشغيل. استخدم `--bundle latest` (أو فقط `--bundle`) لأحدث حزمة ضمن دليل الحالة، أو مرّر مباشرةً مسار JSON للحزمة. +- `--export`: كتابة ملف zip تشخيصي قابل للمشاركة بدلًا من طباعة تفاصيل الاستقرار. +- `--output `: مسار الإخراج لـ `--export`. ملاحظات: -- يكون المسجل نشطًا افتراضيًا ومن دون حمولة: فهو يلتقط البيانات الوصفية التشغيلية فقط، وليس نص الدردشة، أو مخرجات الأدوات، أو نصوص الطلبات أو الردود الخام. اضبط `diagnostics.enabled: false` فقط عندما تحتاج إلى تعطيل جمع Heartbeat التشخيصي الخاص بـ Gateway بالكامل. -- تحتفظ السجلات بالبيانات الوصفية التشغيلية: أسماء الأحداث، والأعداد، وأحجام البايتات، وقراءات الذاكرة، وحالة الطابور/الجلسة، وأسماء القنوات/Plugin، وملخصات الجلسات المنقّحة. وهي لا تحتفظ بنص الدردشة، أو أجسام Webhook، أو مخرجات الأدوات، أو أجسام الطلبات أو الردود الخام، أو الرموز المميزة، أو Cookies، أو القيم السرية، أو أسماء المضيفين، أو معرّفات الجلسات الخام. -- عند الخروج القاتل لـ Gateway، أو انتهاء مهلات الإيقاف، أو فشل بدء التشغيل بعد إعادة التشغيل، يكتب OpenClaw اللقطة التشخيصية نفسها إلى `~/.openclaw/logs/stability/openclaw-stability-*.json` عندما يحتوي المسجل على أحداث. افحص أحدث حزمة باستخدام `openclaw gateway stability --bundle latest`؛ وتنطبق أيضًا `--limit` و`--type` و`--since-seq` على خرج الحزمة. +- تحتفظ السجلات ببيانات تشغيلية وصفية: أسماء الأحداث، والعدادات، وأحجام البايتات، وقراءات الذاكرة، وحالة الطابور/الجلسة، وأسماء القنوات/Plugin، وملخصات الجلسات المنقّحة. وهي لا تحتفظ بنص الدردشة، أو أجسام Webhook، أو مخرجات الأدوات، أو أجسام الطلبات أو الاستجابات الخام، أو الرموز المميزة، أو ملفات تعريف الارتباط، أو القيم السرية، أو أسماء المضيفين، أو معرّفات الجلسات الخام. عيّن `diagnostics.enabled: false` لتعطيل المُسجّل بالكامل. +- عند حالات خروج Gateway الفادحة، ومهل الإيقاف، وإخفاقات بدء التشغيل عند إعادة التشغيل، يكتب OpenClaw اللقطة التشخيصية نفسها إلى `~/.openclaw/logs/stability/openclaw-stability-*.json` عندما يحتوي المُسجّل على أحداث. افحص أحدث حزمة باستخدام `openclaw gateway stability --bundle latest`؛ كما تنطبق `--limit` و`--type` و`--since-seq` أيضًا على إخراج الحزمة. ### `gateway diagnostics export` -اكتب ملف zip تشخيصات محلي مصممًا لإرفاقه بتقارير الأخطاء. +اكتب ملف zip تشخيصيًا محليًا مُصممًا لإرفاقه بتقارير الأخطاء. ```bash openclaw gateway diagnostics export @@ -157,23 +156,23 @@ openclaw gateway diagnostics export --json الخيارات: -- `--output `: مسار zip للخرج. يكون افتراضيًا تصدير دعم تحت دليل الحالة. -- `--log-lines `: الحد الأقصى لأسطر السجلات المنقحة المراد تضمينها (الافتراضي `5000`). -- `--log-bytes `: الحد الأقصى لبايتات السجل المراد فحصها (الافتراضي `1000000`). -- `--url `: عنوان URL الخاص بـ Gateway WebSocket للّقطة الصحية. +- `--output `: مسار zip للإخراج. تكون القيمة الافتراضية تصدير دعم ضمن دليل الحالة. +- `--log-lines `: الحد الأقصى لأسطر السجل المنقّحة التي يجب تضمينها (الافتراضي `5000`). +- `--log-bytes `: الحد الأقصى لبايتات السجل التي يجب فحصها (الافتراضي `1000000`). +- `--url `: عنوان WebSocket الخاص بـ Gateway للّقطة الصحية. - `--token `: رمز Gateway المميز للّقطة الصحية. - `--password `: كلمة مرور Gateway للّقطة الصحية. - `--timeout `: مهلة لقطة الحالة/الصحة (الافتراضي `3000`). -- `--no-stability-bundle`: تخطَّ البحث عن حزمة الثبات المحفوظة. -- `--json`: اطبع المسار المكتوب، والحجم، وmanifest كـ JSON. +- `--no-stability-bundle`: تخطّي البحث عن حزمة الاستقرار المحفوظة. +- `--json`: طباعة المسار المكتوب، والحجم، والبيان الوصفي بصيغة JSON. -يحتوي التصدير على manifest، وملخص Markdown، وشكل الإعدادات، وتفاصيل الإعدادات المنقحة، وملخصات السجلات المنقحة، ولقطات الحالة/الصحة المنقحة الخاصة بـ Gateway، وأحدث حزمة ثبات عند وجودها. +يحتوي التصدير على بيان وصفي، وملخص Markdown، وبنية config، وتفاصيل config منقّحة، وملخصات سجلات منقّحة، ولقطات حالة/صحة Gateway منقّحة، وأحدث حزمة استقرار عند وجودها. -وهو مخصص للمشاركة. ويحتفظ بالتفاصيل التشغيلية التي تساعد في تصحيح الأخطاء، مثل حقول سجلات OpenClaw الآمنة، وأسماء الأنظمة الفرعية، ورموز الحالة، والمدد، والأوضاع المضبوطة، والمنافذ، ومعرّفات Plugin، ومعرّفات المزوّدين، وإعدادات الميزات غير السرية، ورسائل السجل التشغيلية المنقحة. ويحذف أو ينقّح نص الدردشة، وأجسام Webhook، ومخرجات الأدوات، وبيانات الاعتماد، وCookies، ومعرّفات الحسابات/الرسائل، ونصوص prompts/instructions، وأسماء المضيفين، والقيم السرية. عندما تبدو رسالة على نمط LogTape وكأنها نص حمولة مستخدم/دردشة/أداة، يحتفظ التصدير فقط بمعلومة أن رسالة ما قد حُذفت مع عدد بايتاتها. +وهو مخصص للمشاركة. ويحتفظ بتفاصيل تشغيلية تساعد على تصحيح الأخطاء، مثل حقول سجلات OpenClaw الآمنة، وأسماء الأنظمة الفرعية، ورموز الحالة، والمدد الزمنية، والأوضاع المضبوطة، والمنافذ، ومعرّفات Plugin، ومعرّفات الموفّرين، وإعدادات الميزات غير السرية، ورسائل السجل التشغيلية المنقّحة. كما يحذف أو ينقّح نص الدردشة، وأجسام Webhook، ومخرجات الأدوات، وبيانات الاعتماد، وملفات تعريف الارتباط، ومعرّفات الحساب/الرسائل، ونصوص المطالبات/التعليمات، وأسماء المضيفين، والقيم السرية. عندما تبدو رسالة بأسلوب LogTape كأنها نص حمولة مستخدم/دردشة/أداة، يحتفظ التصدير فقط بوجود رسالة محذوفة مع عدد بايتاتها. ### `gateway status` -يعرض `gateway status` خدمة Gateway ‏(`launchd/systemd/schtasks`) بالإضافة إلى فحص اختياري للاتصال/قدرة المصادقة. +يعرض `gateway status` خدمة Gateway ‏(`launchd/systemd/schtasks`) بالإضافة إلى فحص اختياري لإمكانات الاتصال/المصادقة. ```bash openclaw gateway status @@ -183,43 +182,42 @@ openclaw gateway status --require-rpc الخيارات: -- `--url `: أضف هدف فحص صريحًا. لا يزال يتم فحص البعيد المضبوط + localhost. -- `--token `: مصادقة الرمز المميز للفحص. -- `--password `: مصادقة كلمة المرور للفحص. +- `--url `: إضافة هدف فحص صريح. ولا يزال يتم فحص الهدف البعيد المضبوط + localhost. +- `--token `: مصادقة بالرمز المميز للفحص. +- `--password `: مصادقة بكلمة المرور للفحص. - `--timeout `: مهلة الفحص (الافتراضي `10000`). -- `--no-probe`: تخطَّ فحص الاتصال (عرض الخدمة فقط). -- `--deep`: افحص أيضًا الخدمات على مستوى النظام. -- `--require-rpc`: ارفع فحص الاتصال الافتراضي إلى فحص قراءة، واخرج بقيمة غير صفرية عند فشل فحص القراءة هذا. لا يمكن دمجه مع `--no-probe`. +- `--no-probe`: تخطّي فحص الاتصال (عرض الخدمة فقط). +- `--deep`: فحص خدمات على مستوى النظام أيضًا. +- `--require-rpc`: ترقية فحص الاتصال الافتراضي إلى فحص قراءة، والخروج برمز غير صفري عند فشل فحص القراءة هذا. لا يمكن دمجه مع `--no-probe`. ملاحظات: -- يظل `gateway status` متاحًا للتشخيص حتى عندما تكون إعدادات CLI المحلية مفقودة أو غير صالحة. -- يثبت `gateway status` الافتراضي حالة الخدمة، واتصال WebSocket، وقدرة المصادقة المرئية وقت Handshake. لكنه لا يثبت عمليات القراءة/الكتابة/الإدارة. -- يقوم `gateway status` بتحليل SecretRefs الخاصة بالمصادقة المضبوطة لاستخدامها في مصادقة الفحص عندما يكون ذلك ممكنًا. -- إذا تعذر تحليل SecretRef مطلوبة للمصادقة في مسار هذا الأمر، فسيعرض `gateway status --json` القيمة `rpc.authWarning` عند فشل فحص الاتصال/المصادقة؛ مرّر `--token`/`--password` صراحةً أو قم أولًا بتحليل مصدر السر. -- إذا نجح الفحص، فسيتم إخفاء تحذيرات auth-ref غير المحلولة لتجنب النتائج الإيجابية الكاذبة. -- استخدم `--require-rpc` في النصوص البرمجية والأتمتة عندما لا يكفي وجود خدمة تستمع وتحتاج أيضًا إلى أن تكون استدعاءات RPC ذات نطاق القراءة سليمة. -- يضيف `--deep` فحصًا بأفضل جهد لتثبيتات `launchd/systemd/schtasks` الإضافية. عند اكتشاف عدة خدمات شبيهة بـ gateway، يطبع الخرج البشري تلميحات للتنظيف ويحذر من أن معظم الإعدادات يجب أن تشغّل gateway واحدة لكل جهاز. -- يتضمن الخرج البشري مسار سجل الملف المحلول بالإضافة إلى لقطة لمسارات/صلاحية الإعدادات بين CLI والخدمة للمساعدة في تشخيص انجراف ملف التعريف أو دليل الحالة. -- في تثبيتات Linux systemd، تقرأ فحوصات انجراف مصادقة الخدمة قيم `Environment=` و`EnvironmentFile=` من الوحدة (بما في ذلك `%h`، والمسارات المقتبسة، والملفات المتعددة، وملفات `-` الاختيارية). -- تقوم فحوصات الانجراف بتحليل SecretRefs الخاصة بـ `gateway.auth.token` باستخدام بيئة وقت التشغيل المدمجة (بيئة أمر الخدمة أولًا، ثم احتياط بيئة العملية). -- إذا لم تكن مصادقة الرمز المميز نشطة فعليًا (ضبط صريح لـ `gateway.auth.mode` على `password`/`none`/`trusted-proxy`، أو كان الوضع غير مضبوط حيث يمكن لكلمة المرور أن تفوز ولا يوجد مرشح رمز مميز يمكنه الفوز)، فتتخطى فحوصات انجراف الرمز تحليل رمز الإعدادات. +- يظل `gateway status` متاحًا لأغراض التشخيص حتى عندما يكون إعداد CLI المحلي مفقودًا أو غير صالح. +- يثبت `gateway status` الافتراضي حالة الخدمة، واتصال WebSocket، وإمكانات المصادقة الظاهرة وقت المصافحة. لكنه لا يثبت عمليات القراءة/الكتابة/الإدارة. +- يحل `gateway status` مراجع SecretRef المضبوطة للمصادقة الخاصة بالفحص عندما يكون ذلك ممكنًا. +- إذا تعذر حل SecretRef مطلوب للمصادقة في مسار هذا الأمر، فإن `gateway status --json` يبلغ عن `rpc.authWarning` عند فشل اتصال/مصادقة الفحص؛ مرّر `--token`/`--password` صراحةً أو عالج مصدر السر أولًا. +- إذا نجح الفحص، يتم كتم تحذيرات auth-ref غير المحلولة لتجنب النتائج الإيجابية الكاذبة. +- استخدم `--require-rpc` في السكربتات والأتمتة عندما لا تكفي خدمة تستمع فقط، وتحتاج أيضًا إلى أن تكون استدعاءات RPC ضمن نطاق القراءة سليمة. +- يضيف `--deep` فحصًا بأفضل جهد لتثبيتات `launchd/systemd/schtasks` الإضافية. وعند اكتشاف خدمات متعددة شبيهة بـ gateway، يطبع الإخراج البشري تلميحات للتنظيف ويحذّر من أن معظم الإعدادات يجب أن تشغّل gateway واحدًا لكل جهاز. +- يتضمن الإخراج البشري مسار سجل الملف المحلول بالإضافة إلى لقطة لمسارات/صلاحية إعداد CLI مقابل إعداد الخدمة للمساعدة في تشخيص انجراف ملف التعريف أو دليل الحالة. +- في تثبيتات Linux systemd، تقرأ فحوصات انجراف مصادقة الخدمة قيم `Environment=` و`EnvironmentFile=` من الوحدة (بما في ذلك `%h`، والمسارات بين علامات اقتباس، والملفات المتعددة، والملفات الاختيارية `-`). +- تعالج فحوصات الانجراف مراجع SecretRef الخاصة بـ `gateway.auth.token` باستخدام بيئة التشغيل المدمجة (بيئة أمر الخدمة أولًا، ثم بيئة العملية كخيار احتياطي). +- إذا لم تكن مصادقة الرمز المميز فعّالة بالفعل (عند وجود `gateway.auth.mode` صريح بقيمة `password` أو `none` أو `trusted-proxy`، أو عند ترك الوضع غير معيّن حيث يمكن أن تتغلب كلمة المرور ولا يوجد مرشح رمز مميز يمكن أن يتغلب)، فإن فحوصات انجراف الرمز المميز تتخطى حل رمز config. ### `gateway probe` يُعد `gateway probe` أمر “تصحيح كل شيء”. فهو يفحص دائمًا: -- الـ Gateway البعيد المضبوط لديك (إذا كان مضبوطًا)، و -- localhost ‏(loopback) **حتى إذا كان البعيد مضبوطًا**. +- الـ gateway البعيد المضبوط لديك (إن وُجد)، و +- localhost ‏(loopback) **حتى إذا كان الهدف البعيد مضبوطًا**. -إذا مرّرت `--url`، فسيُضاف هذا الهدف الصريح قبل كليهما. يضع الخرج البشري تسميات على -الأهداف على النحو التالي: +إذا مرّرت `--url`، فسيُضاف هذا الهدف الصريح قبل كليهما. يضع الإخراج البشري تسميات للأهداف على النحو التالي: - `URL (explicit)` - `Remote (configured)` أو `Remote (configured, inactive)` -- `local loopback` +- `Local loopback` -إذا كان يمكن الوصول إلى عدة Gateways، فسيطبعها جميعًا. تُدعم عدة Gateways عندما تستخدم ملفات تعريف/منافذ معزولة (مثل rescue bot)، لكن معظم التثبيتات لا تزال تشغّل gateway واحدة. +إذا أمكن الوصول إلى عدة Gateways، فسيعرضها جميعًا. تُدعم تعدد Gateways عندما تستخدم ملفات تعريف/منافذ معزولة (مثل rescue bot)، لكن معظم التثبيتات لا تزال تشغّل gateway واحدًا. ```bash openclaw gateway probe @@ -228,41 +226,41 @@ openclaw gateway probe --json التفسير: -- تعني `Reachable: yes` أن هدفًا واحدًا على الأقل قبل اتصال WebSocket. -- يوضح `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` ما الذي استطاع الفحص إثباته بخصوص المصادقة. وهو منفصل عن قابلية الوصول. -- تعني `Read probe: ok` أن استدعاءات RPC التفصيلية ذات نطاق القراءة (`health`/`status`/`system-presence`/`config.get`) نجحت أيضًا. -- تعني `Read probe: limited - missing scope: operator.read` أن الاتصال نجح لكن RPC ذات نطاق القراءة محدودة. ويُبلّغ عن ذلك على أنه قابلية وصول **متدهورة**، وليس فشلًا كاملًا. -- تكون قيمة الخروج غير صفرية فقط عندما لا يكون أي هدف من الأهداف المفحوصة قابلًا للوصول. +- `Reachable: yes` يعني أن هدفًا واحدًا على الأقل قبل اتصال WebSocket. +- `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` يوضح ما الذي استطاع الفحص إثباته بشأن المصادقة. وهو منفصل عن إمكانية الوصول. +- `Read probe: ok` يعني أن استدعاءات RPC التفصيلية ضمن نطاق القراءة (`health`/`status`/`system-presence`/`config.get`) نجحت أيضًا. +- `Read probe: limited - missing scope: operator.read` يعني أن الاتصال نجح لكن RPC ضمن نطاق القراءة محدود. ويُبلّغ عن ذلك بوصفه إمكانية وصول **متدهورة**، وليس فشلًا كاملًا. +- يكون رمز الخروج غير صفري فقط عندما لا يمكن الوصول إلى أي هدف تم فحصه. ملاحظات JSON ‏(`--json`): - المستوى الأعلى: - `ok`: يمكن الوصول إلى هدف واحد على الأقل. - `degraded`: كان لدى هدف واحد على الأقل RPC تفصيلي محدود النطاق. - - `capability`: أفضل قدرة شوهدت عبر الأهداف القابلة للوصول (`read_only` أو `write_capable` أو `admin_capable` أو `pairing_pending` أو `connected_no_operator_scope` أو `unknown`). - - `primaryTargetId`: أفضل هدف للتعامل معه كفائز نشط وفق هذا الترتيب: عنوان URL الصريح، ثم SSH tunnel، ثم البعيد المضبوط، ثم local loopback. + - `capability`: أفضل قدرة جرى رصدها عبر الأهداف القابلة للوصول (`read_only` أو `write_capable` أو `admin_capable` أو `pairing_pending` أو `connected_no_operator_scope` أو `unknown`). + - `primaryTargetId`: أفضل هدف يجب التعامل معه بوصفه الفائز النشط وفق هذا الترتيب: عنوان URL الصريح، أو نفق SSH، أو الهدف البعيد المضبوط، ثم local loopback. - `warnings[]`: سجلات تحذير بأفضل جهد تحتوي على `code` و`message` و`targetIds` اختيارية. - - `network`: تلميحات عناوين URL الخاصة بـ local loopback/‏tailnet مشتقة من الإعدادات الحالية وشبكة المضيف. - - `discovery.timeoutMs` و`discovery.count`: ميزانية/عدد نتائج الاكتشاف الفعلية المستخدمة في تمريرة الفحص هذه. + - `network`: تلميحات عناوين URL الخاصة بـ local loopback/tailnet والمشتقة من الإعداد الحالي وشبكة المضيف. + - `discovery.timeoutMs` و`discovery.count`: ميزانية/عدد نتائج الاكتشاف الفعلية المستخدمة في جولة الفحص هذه. - لكل هدف (`targets[].connect`): - - `ok`: القابلية للوصول بعد الاتصال + تصنيف التدهور. - - `rpcOk`: نجاح RPC التفصيلي الكامل. - - `scopeLimited`: فشل RPC التفصيلي بسبب غياب نطاق المشغّل. + - `ok`: إمكانية الوصول بعد الاتصال + تصنيف الحالة المتدهورة. + - `rpcOk`: نجاح كامل لـ RPC التفصيلي. + - `scopeLimited`: فشل RPC التفصيلي بسبب غياب نطاق operator. - لكل هدف (`targets[].auth`): - - `role`: دور المصادقة المُبلّغ عنه في `hello-ok` عند توفره. - - `scopes`: النطاقات الممنوحة المُبلّغ عنها في `hello-ok` عند توفرها. + - `role`: دور المصادقة المُبلغ عنه في `hello-ok` عند توفره. + - `scopes`: النطاقات الممنوحة والمُبلغ عنها في `hello-ok` عند توفرها. - `capability`: تصنيف قدرة المصادقة المعروض لذلك الهدف. رموز التحذير الشائعة: -- `ssh_tunnel_failed`: فشل إعداد SSH tunnel؛ وعاد الأمر إلى الفحوصات المباشرة. -- `multiple_gateways`: أمكن الوصول إلى أكثر من هدف واحد؛ وهذا غير معتاد إلا إذا كنت تشغّل عمدًا ملفات تعريف معزولة، مثل rescue bot. -- `auth_secretref_unresolved`: تعذر تحليل SecretRef مصادقة مضبوطة لهدف فاشل. +- `ssh_tunnel_failed`: فشل إعداد نفق SSH؛ وعاد الأمر إلى الفحوصات المباشرة. +- `multiple_gateways`: أمكن الوصول إلى أكثر من هدف واحد؛ وهذا غير معتاد ما لم تكن تشغّل عمدًا ملفات تعريف معزولة، مثل rescue bot. +- `auth_secretref_unresolved`: تعذر حل SecretRef مصادقة مضبوطة لهدف فاشل. - `probe_scope_limited`: نجح اتصال WebSocket، لكن فحص القراءة كان محدودًا بسبب غياب `operator.read`. -#### البعيد عبر SSH ‏(تكافؤ تطبيق Mac) +#### الاتصال البعيد عبر SSH ‏(تكافؤ تطبيق Mac) -يستخدم وضع “Remote over SSH” في تطبيق macOS إعادة توجيه منفذ محلية بحيث يصبح gateway البعيد (الذي قد يكون مربوطًا بـ loopback فقط) قابلًا للوصول على `ws://127.0.0.1:`. +يستخدم وضع “Remote over SSH” في تطبيق macOS إعادة توجيه منفذ محليًا بحيث يصبح الـ gateway البعيد (الذي قد يكون مربوطًا بـ loopback فقط) قابلًا للوصول عند `ws://127.0.0.1:`. المكافئ في CLI: @@ -272,13 +270,13 @@ openclaw gateway probe --ssh user@gateway-host الخيارات: -- `--ssh `: ‏`user@host` أو `user@host:port` ‏(المنفذ افتراضيًا `22`). +- `--ssh `: ‏`user@host` أو `user@host:port` ‏(المنفذ الافتراضي `22`). - `--ssh-identity `: ملف الهوية. -- `--ssh-auto`: اختر أول مضيف gateway مكتشف كهدف SSH من نقطة نهاية - الاكتشاف المحلولة (`local.` بالإضافة إلى المجال واسع النطاق المضبوط، إن وجد). يتم تجاهل +- `--ssh-auto`: اختيار أول مضيف gateway مكتشف بوصفه هدف SSH من نقطة نهاية + الاكتشاف المحلولة (`local.` بالإضافة إلى النطاق واسع النطاق المضبوط، إن وجد). يتم تجاهل التلميحات المعتمدة على TXT فقط. -الإعدادات (اختيارية، وتُستخدم كقيم افتراضية): +الإعداد (اختياري، يُستخدم كقيم افتراضية): - `gateway.remote.sshTarget` - `gateway.remote.sshIdentity` @@ -294,7 +292,7 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}' الخيارات: -- `--params `: سلسلة كائن JSON للمعاملات (الافتراضي `{}`) +- `--params `: سلسلة كائن JSON للمعلمات (الافتراضي `{}`) - `--url ` - `--token ` - `--password ` @@ -304,8 +302,8 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}' ملاحظات: -- يجب أن تكون `--params` بصيغة JSON صالحة. -- يُستخدم `--expect-final` أساسًا لاستدعاءات RPC بأسلوب الوكيل التي تبث أحداثًا وسيطة قبل الحمولة النهائية. +- يجب أن تكون قيمة `--params` بصيغة JSON صالحة. +- `--expect-final` مخصص أساسًا لاستدعاءات RPC بأسلوب الوكيل التي تبث أحداثًا وسيطة قبل حمولة نهائية. ## إدارة خدمة Gateway @@ -319,38 +317,38 @@ openclaw gateway uninstall خيارات الأوامر: -- `gateway status`: ‏`--url` و`--token` و`--password` و`--timeout` و`--no-probe` و`--require-rpc` و`--deep` و`--json` -- `gateway install`: ‏`--port` و`--runtime ` و`--token` و`--force` و`--json` +- `gateway status`: ‏`--url`، `--token`، `--password`، `--timeout`، `--no-probe`، `--require-rpc`، `--deep`، `--json` +- `gateway install`: ‏`--port`، `--runtime `، `--token`، `--force`، `--json` - `gateway uninstall|start|stop|restart`: ‏`--json` ملاحظات: - يدعم `gateway install` الخيارات `--port` و`--runtime` و`--token` و`--force` و`--json`. -- عندما تتطلب مصادقة الرمز المميز وجود رمز وكان `gateway.auth.token` مُدارًا عبر SecretRef، فإن `gateway install` يتحقق من أن SecretRef قابلة للتحليل لكنه لا يحتفظ بالرمز المحلول داخل بيانات بيئة الخدمة الوصفية. -- إذا كانت مصادقة الرمز المميز تتطلب رمزًا وكان SecretRef الخاص بالرمز المضبوط غير قابل للتحليل، يفشل التثبيت بشكل مغلق بدلًا من حفظ نص صريح احتياطي. -- بالنسبة إلى مصادقة كلمة المرور في `gateway run`، ففضّل `OPENCLAW_GATEWAY_PASSWORD` أو `--password-file` أو `gateway.auth.password` المدعوم بـ SecretRef بدلًا من `--password` المضمن. -- في وضع المصادقة المستنتج، لا يؤدي `OPENCLAW_GATEWAY_PASSWORD` الموجود في shell فقط إلى تخفيف متطلبات رمز التثبيت؛ استخدم إعدادات دائمة (`gateway.auth.password` أو `env` في الإعدادات) عند تثبيت خدمة مُدارة. -- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مضبوطين وكانت `gateway.auth.mode` غير مضبوطة، فسيتم حظر التثبيت حتى يتم ضبط الوضع صراحةً. -- تقبل أوامر دورة الحياة `--json` لاستخدامها في السكربتات. +- عندما تتطلب مصادقة الرمز المميز وجود رمز مميز وكان `gateway.auth.token` مُدارًا عبر SecretRef، فإن `gateway install` يتحقق من إمكانية حل SecretRef لكنه لا يحفظ الرمز المميز المحلول في بيانات بيئة الخدمة الوصفية. +- إذا كانت مصادقة الرمز المميز تتطلب رمزًا مميزًا وكان SecretRef الخاص بالرمز المميز المضبوط غير محلول، يفشل التثبيت بشكل مغلق بدلًا من حفظ نص عادي احتياطي. +- لمصادقة كلمة المرور في `gateway run`، يُفضَّل استخدام `OPENCLAW_GATEWAY_PASSWORD` أو `--password-file` أو `gateway.auth.password` المدعوم عبر SecretRef بدلًا من `--password` المضمّن. +- في وضع المصادقة المستنتج، لا يؤدي `OPENCLAW_GATEWAY_PASSWORD` الموجود في shell فقط إلى تخفيف متطلبات رمز التثبيت المميز؛ استخدم إعدادًا دائمًا (`gateway.auth.password` أو `env` في config) عند تثبيت خدمة مُدارة. +- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مضبوطين وكانت `gateway.auth.mode` غير معيّنة، فسيتم حظر التثبيت حتى يُضبط الوضع صراحةً. +- تقبل أوامر دورة الحياة الخيار `--json` لأغراض السكربتات. ## اكتشاف Gateways ‏(Bonjour) -يقوم `gateway discover` بمسح إشارات Gateway ‏(`_openclaw-gw._tcp`). +يفحص `gateway discover` إشارات Gateway ‏(`_openclaw-gw._tcp`). - DNS-SD متعدد الإرسال: `local.` -- DNS-SD أحادي الإرسال (Wide-Area Bonjour): اختر مجالًا (مثال: `openclaw.internal.`) واضبط split DNS + خادم DNS؛ راجع [/gateway/bonjour](/ar/gateway/bonjour) +- DNS-SD أحادي الإرسال (Wide-Area Bonjour): اختر نطاقًا (مثال: `openclaw.internal.`) وأعد split DNS + خادم DNS؛ راجع [/gateway/bonjour](/ar/gateway/bonjour) -فقط Gateways التي تم تفعيل اكتشاف Bonjour فيها (افتراضيًا) هي التي تعلن الإشارة. +فقط الـ Gateways التي تم تمكين اكتشاف Bonjour فيها (افتراضيًا) تعلن عن الإشارة. تتضمن سجلات الاكتشاف واسع النطاق (TXT): -- `role` ‏(تلميح دور gateway) -- `transport` ‏(تلميح النقل، مثل `gateway`) -- `gatewayPort` ‏(منفذ WebSocket، وعادةً `18789`) -- `sshPort` ‏(اختياري؛ تفترض العملاء أن أهداف SSH الافتراضية هي `22` عند غيابه) -- `tailnetDns` ‏(اسم مضيف MagicDNS، عند توفره) -- `gatewayTls` / `gatewayTlsSha256` ‏(تفعيل TLS + بصمة الشهادة) -- `cliPath` ‏(تلميح التثبيت البعيد المكتوب إلى المنطقة واسعة النطاق) +- `role` (تلميح دور gateway) +- `transport` (تلميح النقل، مثل `gateway`) +- `gatewayPort` (منفذ WebSocket، وعادةً `18789`) +- `sshPort` (اختياري؛ تستخدم الأطراف العميلة `22` كهدف SSH افتراضي عند غيابه) +- `tailnetDns` (اسم مضيف MagicDNS، عند توفره) +- `gatewayTls` / `gatewayTlsSha256` (تمكين TLS + بصمة الشهادة) +- `cliPath` (تلميح التثبيت البعيد المكتوب إلى المنطقة واسعة النطاق) ### `gateway discover` @@ -361,7 +359,7 @@ openclaw gateway discover الخيارات: - `--timeout `: مهلة لكل أمر (browse/resolve)؛ الافتراضي `2000`. -- `--json`: خرج قابل للقراءة آليًا (ويعطل أيضًا التنسيق/مؤشر الدوران). +- `--json`: إخراج قابل للقراءة آليًا (ويعطّل أيضًا التنسيق/مؤشر الدوران). أمثلة: @@ -372,9 +370,9 @@ openclaw gateway discover --json | jq '.beacons[].wsUrl' ملاحظات: -- يقوم CLI بمسح `local.` بالإضافة إلى المجال واسع النطاق المضبوط عندما يكون مفعّلًا. -- يتم اشتقاق `wsUrl` في خرج JSON من نقطة نهاية الخدمة المحلولة، وليس من +- يفحص CLI النطاق `local.` بالإضافة إلى النطاق واسع النطاق المضبوط عندما يكون مفعّلًا. +- تُشتق `wsUrl` في إخراج JSON من نقطة نهاية الخدمة المحلولة، وليس من التلميحات المعتمدة على TXT فقط مثل `lanHost` أو `tailnetDns`. - في mDNS الخاص بـ `local.`، لا يتم بث `sshPort` و`cliPath` إلا عندما - تكون `discovery.mdns.mode` هي `full`. لا يزال DNS-SD واسع النطاق يكتب `cliPath`؛ كما يبقى `sshPort` - اختياريًا هناك أيضًا. + تكون `discovery.mdns.mode` مساوية لـ `full`. ولا يزال DNS-SD واسع النطاق يكتب `cliPath`؛ + كما يبقى `sshPort` اختياريًا هناك أيضًا. diff --git a/docs/ar/cli/index.md b/docs/ar/cli/index.md index 26deb0dd0..4da692f98 100644 --- a/docs/ar/cli/index.md +++ b/docs/ar/cli/index.md @@ -1,110 +1,69 @@ --- read_when: - - إضافة أو تعديل أوامر CLI أو الخيارات - - توثيق أسطح الأوامر الجديدة -summary: مرجع OpenClaw CLI لأوامر `openclaw` والأوامر الفرعية والخيارات + - العثور على الأمر الفرعي الصحيح `openclaw` + - البحث عن الخيارات العامة أو قواعد تنسيق المخرجات +summary: 'فهرس OpenClaw CLI: قائمة الأوامر، والخيارات العامة، وروابط إلى الصفحات الخاصة بكل أمر' title: مرجع CLI x-i18n: - generated_at: "2026-04-23T07:22:22Z" + generated_at: "2026-04-23T13:58:30Z" model: gpt-5.4 provider: openai - source_hash: 6e5d3de831331307203ac6f67a3f4b4c969c4ccc10e813ebab1e052b87f0426b + source_hash: 9ccf909596d6d4936fadecfa3a98d7bc24fd18d6ec828ec91bd524019565c54b source_path: cli/index.md workflow: 15 --- # مرجع CLI -تصف هذه الصفحة سلوك CLI الحالي. إذا تغيرت الأوامر، فحدّث هذا المستند. +يمثل `openclaw` نقطة الدخول الرئيسية لـ CLI. لكل أمر أساسي إما +صفحة مرجعية مخصصة أو توثيق مع الأمر الذي يعمل كاسم مستعار له؛ يسرد هذا +الفهرس الأوامر، والخيارات العامة، وقواعد تنسيق المخرجات التي +تُطبق عبر CLI. ## صفحات الأوامر -- [`setup`](/ar/cli/setup) -- [`onboard`](/ar/cli/onboard) -- [`configure`](/ar/cli/configure) -- [`config`](/ar/cli/config) -- [`completion`](/ar/cli/completion) -- [`doctor`](/ar/cli/doctor) -- [`dashboard`](/ar/cli/dashboard) -- [`backup`](/ar/cli/backup) -- [`reset`](/ar/cli/reset) -- [`uninstall`](/ar/cli/uninstall) -- [`update`](/ar/cli/update) -- [`message`](/ar/cli/message) -- [`agent`](/ar/cli/agent) -- [`agents`](/ar/cli/agents) -- [`acp`](/ar/cli/acp) -- [`mcp`](/ar/cli/mcp) -- [`status`](/ar/cli/status) -- [`health`](/ar/cli/health) -- [`sessions`](/ar/cli/sessions) -- [`gateway`](/ar/cli/gateway) -- [`logs`](/ar/cli/logs) -- [`system`](/ar/cli/system) -- [`models`](/ar/cli/models) -- [`infer`](/ar/cli/infer) -- [`memory`](/ar/cli/memory) -- [`wiki`](/ar/cli/wiki) -- [`directory`](/ar/cli/directory) -- [`nodes`](/ar/cli/nodes) -- [`devices`](/ar/cli/devices) -- [`node`](/ar/cli/node) -- [`approvals`](/ar/cli/approvals) -- [`sandbox`](/ar/cli/sandbox) -- [`tui`](/ar/cli/tui) -- [`browser`](/ar/cli/browser) -- [`cron`](/ar/cli/cron) -- [`tasks`](/ar/cli/tasks) -- [`flows`](/ar/cli/flows) -- [`dns`](/ar/cli/dns) -- [`docs`](/ar/cli/docs) -- [`hooks`](/ar/cli/hooks) -- [`webhooks`](/ar/cli/webhooks) -- [`pairing`](/ar/cli/pairing) -- [`qr`](/ar/cli/qr) -- [`plugins`](/ar/cli/plugins) (أوامر Plugin) -- [`channels`](/ar/cli/channels) -- [`security`](/ar/cli/security) -- [`secrets`](/ar/cli/secrets) -- [`skills`](/ar/cli/skills) -- [`daemon`](/ar/cli/daemon) (اسم مستعار قديم لأوامر خدمة Gateway) -- [`clawbot`](/ar/cli/clawbot) (مساحة اسم مستعارة قديمة) -- [`voicecall`](/ar/cli/voicecall) (Plugin؛ إذا كان مثبتًا) +| المجال | الأوامر | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| الإعداد والتهيئة الأولية | [`setup`](/ar/cli/setup) · [`onboard`](/ar/cli/onboard) · [`configure`](/ar/cli/configure) · [`config`](/ar/cli/config) · [`completion`](/ar/cli/completion) · [`doctor`](/ar/cli/doctor) · [`dashboard`](/ar/cli/dashboard) | +| إعادة الضبط وإزالة التثبيت | [`backup`](/ar/cli/backup) · [`reset`](/ar/cli/reset) · [`uninstall`](/ar/cli/uninstall) · [`update`](/ar/cli/update) | +| المراسلة والوكلاء | [`message`](/ar/cli/message) · [`agent`](/ar/cli/agent) · [`agents`](/ar/cli/agents) · [`acp`](/ar/cli/acp) · [`mcp`](/ar/cli/mcp) | +| السلامة والجلسات | [`status`](/ar/cli/status) · [`health`](/ar/cli/health) · [`sessions`](/ar/cli/sessions) | +| Gateway والسجلات | [`gateway`](/ar/cli/gateway) · [`logs`](/ar/cli/logs) · [`system`](/ar/cli/system) | +| النماذج والاستدلال | [`models`](/ar/cli/models) · [`infer`](/ar/cli/infer) · `capability` (اسم مستعار لـ [`infer`](/ar/cli/infer)) · [`memory`](/ar/cli/memory) · [`wiki`](/ar/cli/wiki) | +| الشبكة والعُقد | [`directory`](/ar/cli/directory) · [`nodes`](/ar/cli/nodes) · [`devices`](/ar/cli/devices) · [`node`](/ar/cli/node) | +| وقت التشغيل وSandbox | [`approvals`](/ar/cli/approvals) · `exec-policy` (راجع [`approvals`](/ar/cli/approvals)) · [`sandbox`](/ar/cli/sandbox) · [`tui`](/ar/cli/tui) · `chat`/`terminal` (أسماء مستعارة لـ [`tui --local`](/ar/cli/tui)) · [`browser`](/ar/cli/browser) | +| الأتمتة | [`cron`](/ar/cli/cron) · [`tasks`](/ar/cli/tasks) · [`hooks`](/ar/cli/hooks) · [`webhooks`](/ar/cli/webhooks) | +| الاكتشاف والوثائق | [`dns`](/ar/cli/dns) · [`docs`](/ar/cli/docs) | +| الاقتران والقنوات | [`pairing`](/ar/cli/pairing) · [`qr`](/ar/cli/qr) · [`channels`](/ar/cli/channels) | +| الأمان وPlugins | [`security`](/ar/cli/security) · [`secrets`](/ar/cli/secrets) · [`skills`](/ar/cli/skills) · [`plugins`](/ar/cli/plugins) · [`proxy`](/ar/cli/proxy) | +| الأسماء المستعارة القديمة | [`daemon`](/ar/cli/daemon) (خدمة gateway) · [`clawbot`](/ar/cli/clawbot) (نطاق أسماء) | +| Plugins (اختيارية) | [`voicecall`](/ar/cli/voicecall) (إذا كانت مثبتة) | -## الإشارات العامة +## الخيارات العامة -- `--dev`: يعزل الحالة تحت `~/.openclaw-dev` ويغيّر المنافذ الافتراضية. -- `--profile `: يعزل الحالة تحت `~/.openclaw-`. -- `--container `: يستهدف حاوية مسماة للتنفيذ. -- `--no-color`: يعطل ألوان ANSI. -- `--update`: اختصار لـ `openclaw update` (للتثبيتات من المصدر فقط). -- `-V`, `--version`, `-v`: يطبع الإصدار ثم يخرج. +| الخيار | الغرض | +| ----------------------- | -------------------------------------------------------------------- | +| `--dev` | عزل الحالة تحت `~/.openclaw-dev` وتغيير المنافذ الافتراضية | +| `--profile ` | عزل الحالة تحت `~/.openclaw-` | +| `--container ` | استهداف حاوية مسماة للتنفيذ | +| `--no-color` | تعطيل ألوان ANSI (ويتم أيضًا احترام `NO_COLOR=1`) | +| `--update` | اختصار لـ [`openclaw update`](/ar/cli/update) (لتثبيتات المصدر فقط) | +| `-V`, `--version`, `-v` | طباعة الإصدار والخروج | -## تنسيق المخرجات +## أوضاع المخرجات -- لا تُعرض ألوان ANSI ومؤشرات التقدم إلا في جلسات TTY. -- تُعرض الروابط التشعبية OSC-8 كروابط قابلة للنقر في الطرفيات المدعومة؛ وإلا نعود إلى عناوين URL عادية. -- يؤدي `--json` (و`--plain` حيثما كان مدعومًا) إلى تعطيل التنسيق للحصول على مخرجات نظيفة. -- يعطل `--no-color` تنسيق ANSI؛ كما يتم احترام `NO_COLOR=1`. -- تعرض الأوامر طويلة التشغيل مؤشر تقدم (OSC 9;4 عند الدعم). +- تُعرض ألوان ANSI ومؤشرات التقدم فقط في جلسات TTY. +- تُعرض الروابط التشعبية OSC-8 كروابط قابلة للنقر عند توفر الدعم؛ وإلا + يعود CLI إلى عناوين URL عادية. +- يعطّل `--json` (و`--plain` حيثما كان مدعومًا) التنسيق للحصول على مخرجات نظيفة. +- تعرض الأوامر طويلة التشغيل مؤشر تقدم (OSC 9;4 عند توفر الدعم). -## لوحة الألوان - -يستخدم OpenClaw لوحة ألوان lobster لمخرجات CLI. - -- `accent` (#FF5A2D): العناوين، والتسميات، والإبرازات الأساسية. -- `accentBright` (#FF7A3D): أسماء الأوامر، والتأكيد. -- `accentDim` (#D14A22): نصوص الإبراز الثانوية. -- `info` (#FF8A5B): القيم المعلوماتية. -- `success` (#2FBF71): حالات النجاح. -- `warn` (#FFB020): التحذيرات، والتراجعات، والتنبيهات. -- `error` (#E23D2D): الأخطاء، والإخفاقات. -- `muted` (#8B7F77): تقليل التركيز، والبيانات الوصفية. - -المصدر المرجعي للوحة: `src/terminal/palette.ts` ("لوحة lobster"). +المصدر المرجعي للألوان: `src/terminal/palette.ts`. ## شجرة الأوامر + + ``` openclaw [--dev] [--profile ] setup @@ -270,7 +229,7 @@ openclaw [--dev] [--profile ] fallbacks list|add|remove|clear image-fallbacks list|add|remove|clear scan - infer (اسم مستعار: capability) + infer (alias: capability) list inspect model run|list|inspect|providers|auth login|logout|status @@ -331,6 +290,10 @@ openclaw [--dev] [--profile ] get set allowlist add|remove + exec-policy + show + preset + set browser status start @@ -370,6 +333,14 @@ openclaw [--dev] [--profile ] update webhooks gmail setup|run + proxy + start + run + coverage + sessions + query + blob + purge pairing list approve @@ -380,1475 +351,37 @@ openclaw [--dev] [--profile ] dns setup tui + chat (alias: tui --local) + terminal (alias: tui --local) ``` -ملاحظة: يمكن أن تضيف Plugins أوامر إضافية في المستوى الأعلى (مثل `openclaw voicecall`). +يمكن أن تضيف Plugins أوامر إضافية على المستوى الأعلى (على سبيل المثال `openclaw voicecall`). -## الأمان + -- `openclaw security audit` — يدقق التهيئة + الحالة المحلية بحثًا عن أشهر الأخطاء الأمنية. -- `openclaw security audit --deep` — فحص Gateway مباشر بأفضل جهد. -- `openclaw security audit --fix` — يشدّد القيم الافتراضية الآمنة وأذونات الحالة/التهيئة. +## أوامر slash في الدردشة -## الأسرار - -### `secrets` - -إدارة SecretRef والنظافة المرتبطة بالتشغيل/التهيئة. - -الأوامر الفرعية: - -- `secrets reload` -- `secrets audit` -- `secrets configure` -- `secrets apply --from ` - -خيارات `secrets reload`: - -- `--url`, `--token`, `--timeout`, `--expect-final`, `--json` - -خيارات `secrets audit`: - -- `--check` -- `--allow-exec` -- `--json` - -خيارات `secrets configure`: - -- `--apply` -- `--yes` -- `--providers-only` -- `--skip-provider-setup` -- `--agent ` -- `--allow-exec` -- `--plan-out ` -- `--json` - -خيارات `secrets apply --from `: - -- `--dry-run` -- `--allow-exec` -- `--json` - -ملاحظات: - -- `reload` هو Gateway RPC ويحتفظ بآخر لقطة تشغيل سليمة معروفة عندما يفشل التحليل. -- يعيد `audit --check` قيمة غير صفرية عند وجود نتائج؛ وتستخدم المراجع غير المحلولة قيمة خروج غير صفرية ذات أولوية أعلى. -- يتم تخطي فحوصات exec التجريبية افتراضيًا؛ استخدم `--allow-exec` لتفعيلها. - -## Plugins - -إدارة Plugins وتهيئتها: - -- `openclaw plugins list` — يكتشف Plugins (استخدم `--json` للمخرجات الآلية). -- `openclaw plugins inspect ` — يعرض تفاصيل Plugin (`info` اسم مستعار). -- `openclaw plugins install ` — يثبت Plugin (أو يضيف مسار Plugin إلى `plugins.load.paths`؛ استخدم `--force` للكتابة فوق هدف تثبيت موجود). -- `openclaw plugins marketplace list ` — يسرد إدخالات marketplace قبل التثبيت. -- `openclaw plugins enable ` / `disable ` — يبدّل `plugins.entries..enabled`. -- `openclaw plugins doctor` — يبلغ عن أخطاء تحميل Plugin. - -تتطلب معظم تغييرات Plugin إعادة تشغيل gateway. راجع [/plugin](/ar/tools/plugin). - -## Memory - -بحث متجهي عبر `MEMORY.md` + `memory/*.md`: - -- `openclaw memory status` — يعرض إحصاءات الفهرس؛ استخدم `--deep` لفحوصات جاهزية المتجهات والتضمين أو `--fix` لإصلاح عناصر recall/promotion القديمة. -- `openclaw memory index` — يعيد فهرسة ملفات memory. -- `openclaw memory search ""` (أو `--query ""`) — بحث دلالي عبر memory. -- `openclaw memory promote` — يرتب عناصر الاستدعاء قصيرة الأجل ويمكنه اختياريًا إلحاق أفضل الإدخالات إلى `MEMORY.md`. - -## Sandbox - -إدارة بيئات sandbox للتنفيذ المعزول للوكلاء. راجع [/cli/sandbox](/ar/cli/sandbox). - -الأوامر الفرعية: - -- `sandbox list [--browser] [--json]` -- `sandbox recreate [--all] [--session ] [--agent ] [--browser] [--force]` -- `sandbox explain [--session ] [--agent ] [--json]` - -ملاحظات: - -- يزيل `sandbox recreate` بيئات التشغيل الحالية بحيث تعيد عملية الاستخدام التالية تهيئتها باستخدام التهيئة الحالية. -- بالنسبة إلى الخلفيات `ssh` وOpenShell `remote`، يؤدي recreate إلى حذف مساحة العمل البعيدة القياسية للنطاق المحدد. - -## أوامر الشرطة المائلة في الدردشة - -تدعم رسائل الدردشة أوامر `/...` (نصية وأصلية). راجع [/tools/slash-commands](/ar/tools/slash-commands). +تدعم رسائل الدردشة أوامر `/...`. راجع [أوامر slash](/ar/tools/slash-commands). أبرزها: -- `/status` لتشخيصات سريعة. -- `/trace` لأسطر تتبع/تصحيح Plugin على مستوى الجلسة. -- `/config` لتغييرات التهيئة المحفوظة. -- `/debug` لتجاوزات التهيئة الخاصة بالتشغيل فقط (في الذاكرة، وليس على القرص؛ وتتطلب `commands.debug: true`). +- `/status` — تشخيصات سريعة. +- `/trace` — أسطر تتبع/تصحيح Plugin على مستوى الجلسة. +- `/config` — تغييرات التكوين المحفوظة. +- `/debug` — تجاوزات تكوين لوقت التشغيل فقط (في الذاكرة، وليس على القرص؛ يتطلب `commands.debug: true`). -## الإعداد + الانضمام الأولي +## تتبع الاستخدام -### `completion` +يعرض `openclaw status --usage` وواجهة Control UI استخدام/حصة الموفر عندما +تكون بيانات اعتماد OAuth/API متاحة. تأتي البيانات مباشرة من نقاط نهاية استخدام +الموفر ويتم تطبيعها إلى `X% left`. الموفّرون الذين لديهم نوافذ استخدام +حالياً: Anthropic وGitHub Copilot وGemini CLI وOpenAI Codex وMiniMax +وXiaomi وz.ai. -يولد سكربتات إكمال shell ويمكنه اختياريًا تثبيتها في ملف shell الشخصي. +راجع [تتبع الاستخدام](/ar/concepts/usage-tracking) للتفاصيل. -الخيارات: +## ذو صلة -- `-s, --shell ` -- `-i, --install` -- `--write-state` -- `-y, --yes` - -ملاحظات: - -- من دون `--install` أو `--write-state`، يطبع `completion` السكربت إلى stdout. -- يكتب `--install` كتلة `OpenClaw Completion` في ملف shell الشخصي ويوجهها إلى السكربت المخزن مؤقتًا ضمن دليل حالة OpenClaw. - -### `setup` - -يهيئ التهيئة + مساحة العمل. - -الخيارات: - -- `--workspace `: مسار مساحة عمل الوكيل (الافتراضي `~/.openclaw/workspace`). -- `--wizard`: تشغيل الانضمام الأولي. -- `--non-interactive`: تشغيل الانضمام الأولي من دون مطالبات. -- `--mode `: وضع الانضمام الأولي. -- `--remote-url `: عنوان URL لـ Gateway البعيد. -- `--remote-token `: token الخاص بـ Gateway البعيد. - -يعمل الانضمام الأولي تلقائيًا عند وجود أي إشارات خاصة به (`--non-interactive` أو `--mode` أو `--remote-url` أو `--remote-token`). - -### `onboard` - -انضمام أولي تفاعلي لـ gateway ومساحة العمل وSkills. - -الخيارات: - -- `--workspace ` -- `--reset` (إعادة تعيين التهيئة + بيانات الاعتماد + الجلسات قبل الانضمام الأولي) -- `--reset-scope ` (الافتراضي `config+creds+sessions`؛ استخدم `full` لإزالة مساحة العمل أيضًا) -- `--non-interactive` -- `--mode ` -- `--flow ` (`manual` اسم مستعار لـ `advanced`) -- `--auth-choice ` حيث تكون قيمة `` واحدة من: - `chutes`، `deepseek-api-key`، `openai-codex`، `openai-api-key`، - `openrouter-api-key`، `kilocode-api-key`، `litellm-api-key`، `ai-gateway-api-key`، - `cloudflare-ai-gateway-api-key`، `moonshot-api-key`، `moonshot-api-key-cn`، - `kimi-code-api-key`، `synthetic-api-key`، `venice-api-key`، `together-api-key`، - `huggingface-api-key`، `apiKey`، `gemini-api-key`، `google-gemini-cli`، `zai-api-key`، - `zai-coding-global`، `zai-coding-cn`، `zai-global`، `zai-cn`، `xiaomi-api-key`، - `minimax-global-oauth`، `minimax-global-api`، `minimax-cn-oauth`، `minimax-cn-api`، - `opencode-zen`، `opencode-go`، `github-copilot`، `copilot-proxy`، `xai-api-key`، - `mistral-api-key`، `volcengine-api-key`، `byteplus-api-key`، `qianfan-api-key`، - `qwen-standard-api-key-cn`، `qwen-standard-api-key`، `qwen-api-key-cn`، `qwen-api-key`، - `modelstudio-standard-api-key-cn`، `modelstudio-standard-api-key`، - `modelstudio-api-key-cn`، `modelstudio-api-key`، `custom-api-key`، `skip` -- ملاحظة Qwen: تمثل `qwen-*` عائلة `auth-choice` الأساسية. وتظل معرّفات - `modelstudio-*` مقبولة كأسماء مستعارة قديمة للتوافق فقط. -- `--secret-input-mode ` (الافتراضي `plaintext`؛ استخدم `ref` لتخزين مراجع env الافتراضية للمزوّد بدلًا من المفاتيح النصية الصريحة) -- `--anthropic-api-key ` -- `--openai-api-key ` -- `--mistral-api-key ` -- `--openrouter-api-key ` -- `--ai-gateway-api-key ` -- `--moonshot-api-key ` -- `--kimi-code-api-key ` -- `--gemini-api-key ` -- `--zai-api-key ` -- `--minimax-api-key ` -- `--opencode-zen-api-key ` -- `--opencode-go-api-key ` -- `--custom-base-url ` (غير تفاعلي؛ يُستخدم مع `--auth-choice custom-api-key`) -- `--custom-model-id ` (غير تفاعلي؛ يُستخدم مع `--auth-choice custom-api-key`) -- `--custom-api-key ` (غير تفاعلي؛ اختياري؛ يُستخدم مع `--auth-choice custom-api-key`؛ ويعود إلى `CUSTOM_API_KEY` عند عدم توفيره) -- `--custom-provider-id ` (غير تفاعلي؛ معرّف مزود مخصص اختياري) -- `--custom-compatibility ` (غير تفاعلي؛ اختياري؛ الافتراضي `openai`) -- `--gateway-port ` -- `--gateway-bind ` -- `--gateway-auth ` -- `--gateway-token ` -- `--gateway-token-ref-env ` (غير تفاعلي؛ يخزّن `gateway.auth.token` كـ env SecretRef؛ ويتطلب أن يكون متغير البيئة هذا مضبوطًا؛ ولا يمكن دمجه مع `--gateway-token`) -- `--gateway-password ` -- `--remote-url ` -- `--remote-token ` -- `--tailscale ` -- `--tailscale-reset-on-exit` -- `--install-daemon` -- `--no-install-daemon` (اسم مستعار: `--skip-daemon`) -- `--daemon-runtime ` -- `--skip-channels` -- `--skip-skills` -- `--skip-search` -- `--skip-health` -- `--skip-ui` -- `--cloudflare-ai-gateway-account-id ` -- `--cloudflare-ai-gateway-gateway-id ` -- `--node-manager ` (مدير Node الخاص بالإعداد/الانضمام الأولي من أجل Skills؛ يُوصى بـ pnpm، كما أن bun مدعوم أيضًا) -- `--json` - -### `configure` - -معالج تهيئة تفاعلي (النماذج، والقنوات، وSkills، وGateway). - -الخيارات: - -- `--section
` (قابل للتكرار؛ يقيّد المعالج بأقسام محددة) - -### `config` - -أدوات مساعدة غير تفاعلية للتهيئة (`get`/`set`/`unset`/`file`/`schema`/`validate`). يؤدي تشغيل `openclaw config` دون -أمر فرعي إلى تشغيل المعالج. - -الأوامر الفرعية: - -- `config get `: يطبع قيمة تهيئة (مسار dot/bracket). -- `config set`: يدعم أربعة أوضاع للإسناد: - - وضع القيمة: `config set ` (تحليل JSON5 أو سلسلة) - - وضع منشئ SecretRef: `config set --ref-provider --ref-source --ref-id ` - - وضع منشئ المزوّد: `config set secrets.providers. --provider-source ...` - - وضع الدفعة: `config set --batch-json ''` أو `config set --batch-file ` -- `config set --dry-run`: يتحقق من صحة الإسنادات دون الكتابة إلى `openclaw.json` (يتم تخطي فحوصات exec SecretRef افتراضيًا). -- `config set --allow-exec --dry-run`: تفعيل اختياري لفحوصات dry-run الخاصة بـ exec SecretRef (قد ينفذ أوامر المزوّد). -- `config set --dry-run --json`: يصدر مخرجات dry-run قابلة للقراءة آليًا (الفحوصات + إشارة الاكتمال، والعمليات، والمراجع التي تم فحصها/تخطيها، والأخطاء). -- `config set --strict-json`: يفرض تحليل JSON5 لإدخال path/value. ويظل `--json` اسمًا مستعارًا قديمًا للتحليل الصارم خارج وضع مخرجات dry-run. -- `config unset `: يزيل قيمة. -- `config file`: يطبع مسار ملف التهيئة النشط. -- `config schema`: يطبع JSON schema المولدة لـ `openclaw.json`، بما في ذلك بيانات `title` / `description` الوصفية الموثقة للحقول والمنقولة عبر فروع الكائنات المتداخلة، وwildcard، وعناصر المصفوفات، وفروع التركيب، بالإضافة إلى بيانات وصفية حية بأفضل جهد لـ schema الخاصة بالقنوات/Plugin. -- `config validate`: يتحقق من صحة التهيئة الحالية مقابل schema من دون بدء gateway. -- `config validate --json`: يصدر مخرجات JSON قابلة للقراءة آليًا. - -### `doctor` - -فحوصات السلامة + إصلاحات سريعة (التهيئة + Gateway + الخدمات القديمة). - -الخيارات: - -- `--no-workspace-suggestions`: يعطل تلميحات memory الخاصة بمساحة العمل. -- `--yes`: يقبل القيم الافتراضية من دون مطالبة (بدون واجهة). -- `--non-interactive`: يتخطى المطالبات؛ ويطبق الترحيلات الآمنة فقط. -- `--deep`: يفحص خدمات النظام بحثًا عن عمليات تثبيت Gateway إضافية. -- `--repair` (اسم مستعار: `--fix`): يحاول إجراء إصلاحات تلقائية للمشكلات المكتشفة. -- `--force`: يفرض الإصلاحات حتى عندما لا تكون مطلوبة بدقة. -- `--generate-gateway-token`: يولّد token جديدًا لمصادقة gateway. - -### `dashboard` - -يفتح واجهة Control UI باستخدام token الحالي لديك. - -الخيارات: - -- `--no-open`: يطبع عنوان URL لكنه لا يشغّل متصفحًا - -ملاحظات: - -- بالنسبة إلى tokens الخاصة بـ gateway المُدارة عبر SecretRef، يطبع `dashboard` أو يفتح عنوان URL غير مضمّن فيه token بدلًا من كشف السر في مخرجات الطرفية أو وسائط تشغيل المتصفح. - -### `update` - -يحدّث CLI المثبّت. - -خيارات الجذر: - -- `--json` -- `--no-restart` -- `--dry-run` -- `--channel ` -- `--tag ` -- `--timeout ` -- `--yes` - -الأوامر الفرعية: - -- `update status` -- `update wizard` - -خيارات `update status`: - -- `--json` -- `--timeout ` - -خيارات `update wizard`: - -- `--timeout ` - -ملاحظات: - -- يعيد `openclaw --update` الكتابة إلى `openclaw update`. - -### `backup` - -ينشئ ويتحقق من أرشيفات نسخ احتياطي محلية لحالة OpenClaw. - -الأوامر الفرعية: - -- `backup create` -- `backup verify ` - -خيارات `backup create`: - -- `--output ` -- `--json` -- `--dry-run` -- `--verify` -- `--only-config` -- `--no-include-workspace` - -خيارات `backup verify `: - -- `--json` - -## أدوات مساعدة للقنوات - -### `channels` - -إدارة حسابات قنوات الدردشة (WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (Plugin)/Signal/iMessage/Microsoft Teams). - -الأوامر الفرعية: - -- `channels list`: يعرض القنوات المهيأة وملفات تعريف المصادقة. -- `channels status`: يتحقق من إمكانية الوصول إلى gateway وسلامة القنوات (يشغّل `--probe` فحوصات probe/audit مباشرة لكل حساب عندما يكون gateway قابلاً للوصول؛ وإذا لم يكن كذلك، يعود إلى ملخصات القنوات المبنية على التهيئة فقط. استخدم `openclaw health` أو `openclaw status --deep` لفحوصات أوسع لسلامة gateway). -- نصيحة: يطبع `channels status` تحذيرات مع إصلاحات مقترحة عندما يتمكن من اكتشاف أخطاء تهيئة شائعة (ثم يوجّهك إلى `openclaw doctor`). -- `channels logs`: يعرض أحدث سجلات القنوات من ملف سجل gateway. -- `channels add`: إعداد بأسلوب المعالج عندما لا يتم تمرير أي إشارات؛ وتحوّل الإشارات الوضع إلى غير تفاعلي. - - عند إضافة حساب غير افتراضي إلى قناة لا تزال تستخدم تهيئة أحادية الحساب في المستوى الأعلى، يقوم OpenClaw بترقية القيم ذات النطاق الخاص بالحساب إلى خريطة حسابات القناة قبل كتابة الحساب الجديد. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix الحفاظ بدلًا من ذلك على هدف مسمى/افتراضي موجود ومطابق. - - لا يقوم `channels add` غير التفاعلي بإنشاء/ترقية bindings تلقائيًا؛ وتستمر bindings الخاصة بالقناة فقط في مطابقة الحساب الافتراضي. -- `channels remove`: يعطّل افتراضيًا؛ مرّر `--delete` لإزالة إدخالات التهيئة من دون مطالبات. -- `channels login`: تسجيل دخول تفاعلي للقناة (WhatsApp Web فقط). -- `channels logout`: تسجيل الخروج من جلسة قناة (إن كان ذلك مدعومًا). - -الخيارات الشائعة: - -- `--channel `: `whatsapp|telegram|discord|googlechat|slack|mattermost|signal|imessage|msteams` -- `--account `: معرّف حساب القناة (الافتراضي `default`) -- `--name