diff --git a/docs/ar/channels/pairing.md b/docs/ar/channels/pairing.md index e4edfae3b..33c6a7e89 100644 --- a/docs/ar/channels/pairing.md +++ b/docs/ar/channels/pairing.md @@ -6,38 +6,38 @@ read_when: summary: 'نظرة عامة على الاقتران: وافق على من يمكنه مراسلتك مباشرة + العُقد التي يمكنها الانضمام' title: الاقتران x-i18n: - generated_at: "2026-05-04T02:22:04Z" + generated_at: "2026-05-04T07:46:44Z" model: gpt-5.5 provider: openai - source_hash: 4fb27840f7c9ef55e7270cc29f813e6db90b240aa2180f30952eb9485f0f8874 + source_hash: f2bce4cfba7708b0003f2ffeacada8bc1849cc301f28178b499a9a67bddcf36d source_path: channels/pairing.md workflow: 16 --- -"الإقران" هو خطوة الموافقة الصريحة على الوصول في OpenClaw. +«الإقران» هو خطوة موافقة صريحة على الوصول في OpenClaw. يُستخدم في موضعين: -1. **إقران الرسائل المباشرة** (من يُسمح له بالتحدث إلى البوت) -2. **إقران Node** (أي الأجهزة/العُقد يُسمح لها بالانضمام إلى شبكة Gateway) +1. **إقران الرسائل المباشرة** (من يُسمح له بالتحدث إلى الروبوت) +2. **إقران Node** (أي الأجهزة/Nodes يُسمح لها بالانضمام إلى شبكة Gateway) سياق الأمان: [الأمان](/ar/gateway/security) -## 1) إقران الرسائل المباشرة (الوصول إلى الدردشة الواردة) +## 1) إقران الرسائل المباشرة (وصول الدردشة الواردة) -عند تكوين قناة بسياسة رسائل مباشرة `pairing`، يحصل المرسلون غير المعروفين على رمز قصير و**لا تتم معالجة** رسالتهم حتى توافق عليها. +عند تكوين قناة بسياسة رسائل مباشرة `pairing`، يحصل المرسلون غير المعروفين على رمز قصير ولا تتم **معالجة** رسالتهم حتى توافق عليها. سياسات الرسائل المباشرة الافتراضية موثقة في: [الأمان](/ar/gateway/security) `dmPolicy: "open"` تكون عامة فقط عندما تتضمن قائمة السماح الفعلية للرسائل المباشرة `"*"`. -يتطلب الإعداد والتحقق هذا الرمز الشامل لتكوينات الفتح العام. إذا كانت الحالة الحالية -تحتوي على `open` مع إدخالات `allowFrom` محددة، فسيظل وقت التشغيل يسمح -لهؤلاء المرسلين فقط، ولا توسّع موافقات مخزن الإقران وصول `open`. +يتطلب الإعداد والتحقق وجود حرف البدل هذا لتكوينات الفتح العام. إذا كانت الحالة الحالية +تحتوي على `open` مع إدخالات `allowFrom` محددة، فسيظل وقت التشغيل يقبل +هؤلاء المرسلين فقط، ولا توسّع موافقات مخزن الإقران وصول `open`. رموز الإقران: -- 8 أحرف، أحرف كبيرة، من دون أحرف ملتبسة (`0O1I`). -- **تنتهي صلاحيتها بعد ساعة واحدة**. يرسل البوت رسالة الإقران فقط عند إنشاء طلب جديد (تقريبًا مرة واحدة في الساعة لكل مرسل). -- طلبات إقران الرسائل المباشرة المعلقة محدودة افتراضيًا بـ **3 لكل قناة**؛ يتم تجاهل الطلبات الإضافية حتى تنتهي صلاحية أحدها أو تتم الموافقة عليه. +- 8 أحرف، بأحرف كبيرة، من دون أحرف ملتبسة (`0O1I`). +- **تنتهي صلاحيتها بعد ساعة واحدة**. لا يرسل الروبوت رسالة الإقران إلا عند إنشاء طلب جديد (تقريبًا مرة واحدة في الساعة لكل مرسل). +- تُحدّ طلبات إقران الرسائل المباشرة المعلقة إلى **3 لكل قناة** افتراضيًا؛ ويتم تجاهل الطلبات الإضافية حتى تنتهي صلاحية أحدها أو تتم الموافقة عليه. ### الموافقة على مرسل @@ -46,21 +46,21 @@ openclaw pairing list telegram openclaw pairing approve telegram ``` -إذا لم يكن مالك الأوامر مكوّنًا بعد، فإن الموافقة على رمز إقران الرسائل المباشرة تؤسس أيضًا -`commands.ownerAllowFrom` للمرسل الموافق عليه، مثل `telegram:123456789`. -يمنح ذلك عمليات الإعداد لأول مرة مالكًا صريحًا للأوامر ذات الامتيازات ومطالبات موافقة -التنفيذ. بعد وجود مالك، تمنح موافقات الإقران اللاحقة وصول الرسائل المباشرة فقط؛ -ولا تضيف مزيدًا من المالكين. +إذا لم يكن مالك الأوامر مكوّنًا بعد، فإن الموافقة على رمز إقران الرسائل المباشرة تهيئ أيضًا +`commands.ownerAllowFrom` إلى المرسل الموافق عليه، مثل `telegram:123456789`. +يمنح ذلك إعدادات المرة الأولى مالكًا صريحًا للأوامر ذات الامتياز ومطالبات موافقة التنفيذ. +بعد وجود مالك، تمنح موافقات الإقران اللاحقة وصول الرسائل المباشرة فقط؛ +ولا تضيف مالكين آخرين. القنوات المدعومة: `bluebubbles`, `discord`, `feishu`, `googlechat`, `imessage`, `irc`, `line`, `matrix`, `mattermost`, `msteams`, `nextcloud-talk`, `nostr`, `openclaw-weixin`, `signal`, `slack`, `synology-chat`, `telegram`, `twitch`, `whatsapp`, `zalo`, `zalouser`. ### مجموعات مرسلين قابلة لإعادة الاستخدام -استخدم `accessGroups` على المستوى الأعلى عندما يجب أن تنطبق مجموعة المرسلين الموثوقين نفسها على -قنوات رسائل متعددة أو على قوائم السماح للرسائل المباشرة والمجموعات معًا. +استخدم `accessGroups` على المستوى الأعلى عندما ينبغي أن تنطبق مجموعة المرسلين الموثوقين نفسها على +قنوات رسائل متعددة أو على قوائم سماح الرسائل المباشرة والمجموعات معًا. -تستخدم المجموعات الثابتة `type: "message.senders"` وتتم الإشارة إليها باستخدام -`accessGroup:` من قوائم السماح الخاصة بالقنوات: +تستخدم المجموعات الثابتة `type: "message.senders"` وتُشار إليها باستخدام +`accessGroup:` من قوائم السماح في القنوات: ```json5 { @@ -83,63 +83,69 @@ openclaw pairing approve telegram مجموعات الوصول موثقة بالتفصيل هنا: [مجموعات الوصول](/ar/channels/access-groups) -### مكان تخزين الحالة +### مكان حفظ الحالة -مخزنة ضمن `~/.openclaw/credentials/`: +تُخزن ضمن `~/.openclaw/credentials/`: - الطلبات المعلقة: `-pairing.json` -- مخزن قائمة السماح المعتمدة: +- مخزن قائمة السماح الموافق عليها: - الحساب الافتراضي: `-allowFrom.json` - الحساب غير الافتراضي: `--allowFrom.json` سلوك نطاق الحساب: -- الحسابات غير الافتراضية تقرأ/تكتب ملف قائمة السماح المحدد النطاق الخاص بها فقط. -- يستخدم الحساب الافتراضي ملف قائمة السماح غير محدد النطاق الخاص بالقناة. +- الحسابات غير الافتراضية تقرأ/تكتب ملف قائمة السماح ذي النطاق الخاص بها فقط. +- يستخدم الحساب الافتراضي ملف قائمة السماح غير محدد النطاق والخاص بالقناة. -تعامل معها كبيانات حساسة (فهي تتحكم بالوصول إلى مساعدك). +عامل هذه الملفات باعتبارها حساسة (فهي تتحكم بالوصول إلى مساعدك). -مخزن قائمة السماح الخاصة بالإقران مخصص لوصول الرسائل المباشرة. تفويض المجموعات منفصل. -لا تسمح الموافقة على رمز إقران الرسائل المباشرة تلقائيًا لذلك المرسل بتشغيل أوامر المجموعة -أو التحكم في البوت داخل المجموعات. التأسيس الأول للمالك هو حالة تكوين منفصلة -في `commands.ownerAllowFrom`، ولا يزال تسليم دردشة المجموعة يتبع -قوائم السماح للمجموعات في القناة (مثل `groupAllowFrom` أو `groups` أو التجاوزات لكل مجموعة +مخزن قائمة سماح الإقران مخصص لوصول الرسائل المباشرة. تفويض المجموعات منفصل. +الموافقة على رمز إقران الرسائل المباشرة لا تسمح تلقائيًا لذلك المرسل بتشغيل أوامر المجموعة +أو التحكم في الروبوت داخل المجموعات. تهيئة المالك الأول هي حالة تكوين منفصلة +في `commands.ownerAllowFrom`، ويظل تسليم دردشة المجموعة يتبع +قوائم سماح المجموعات الخاصة بالقناة (مثل `groupAllowFrom` أو `groups` أو التجاوزات لكل مجموعة أو لكل موضوع بحسب القناة). -## 2) إقران أجهزة Node (iOS/Android/macOS/العُقد بلا واجهة) +## 2) إقران أجهزة Node ‏(iOS/Android/macOS/Nodes بلا واجهة) -تتصل العُقد بـ Gateway كـ **أجهزة** مع `role: node`. ينشئ Gateway +تتصل Nodes بـ Gateway بصفتها **أجهزة** مع `role: node`. ينشئ Gateway طلب إقران جهاز يجب الموافقة عليه. ### الإقران عبر Telegram (موصى به لـ iOS) -إذا كنت تستخدم Plugin `device-pair`، يمكنك إجراء إقران الجهاز لأول مرة بالكامل من Telegram: +إذا كنت تستخدم Plugin ‏`device-pair`، يمكنك إجراء إقران الجهاز لأول مرة بالكامل من Telegram: -1. في Telegram، أرسل إلى البوت: `/pair` -2. يرد البوت برسالتين: رسالة تعليمات ورسالة **رمز إعداد** منفصلة (سهلة النسخ/اللصق في Telegram). -3. على هاتفك، افتح تطبيق OpenClaw على iOS ← الإعدادات ← Gateway. -4. الصق رمز الإعداد واتصل. -5. بالعودة إلى Telegram: `/pair pending` (راجع معرّفات الطلبات والدور والنطاقات)، ثم وافق. +1. في Telegram، أرسل رسالة إلى روبوتك: `/pair` +2. يرد الروبوت برسالتين: رسالة تعليمات ورسالة **رمز إعداد** منفصلة (سهلة النسخ/اللصق في Telegram). +3. على هاتفك، افتح تطبيق OpenClaw لنظام iOS ← الإعدادات ← Gateway. +4. امسح رمز QR أو الصق رمز الإعداد واتصل. +5. عُد إلى Telegram: `/pair pending` (راجع معرّفات الطلبات والدور والنطاقات)، ثم وافق. -رمز الإعداد هو حمولة JSON مرمّزة بـ base64 تحتوي على: +رمز الإعداد هو حمولة JSON مشفرة بـ base64 تحتوي على: - `url`: عنوان URL لـ WebSocket الخاص بـ Gateway (`ws://...` أو `wss://...`) -- `bootstrapToken`: رمز تأسيس قصير العمر لجهاز واحد يُستخدم لمصافحة الإقران الأولية +- `bootstrapToken`: رمز تمهيد قصير العمر ومخصص لجهاز واحد يُستخدم لمصافحة الإقران الأولية -يحمل رمز التأسيس هذا ملف تعريف تأسيس الإقران المدمج: +يحمل رمز التمهيد هذا ملف تعريف تمهيد الإقران المدمج: -- يظل رمز `node` الأساسي الذي تم تسليمه `scopes: []` -- أي رمز `operator` تم تسليمه يظل محدودًا بقائمة السماح للتأسيس: +- يبقى رمز `node` الأساسي الذي تم تسليمه `scopes: []` +- يبقى أي رمز `operator` تم تسليمه مقيدًا بقائمة السماح للتمهيد: `operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write` -- فحوصات نطاق التأسيس مسبوقة بالدور، وليست مجموعة نطاقات مسطحة واحدة: - إدخالات نطاق المشغّل لا تفي إلا بطلبات المشغّل، ويجب على الأدوار غير المشغّلة - أن تظل تطلب النطاقات ضمن بادئة دورها الخاصة -- تظل عمليات تدوير/إلغاء الرموز اللاحقة محدودة بكل من عقد الدور الموافق عليه للجهاز - ونطاقات المشغّل لجلسة المستدعي +- فحوصات نطاق التمهيد مسبوقة بالدور، وليست تجميعة نطاقات مسطحة واحدة: + إدخالات نطاق operator تفي فقط بطلبات operator، ويجب أن تظل الأدوار غير operator + تطلب النطاقات تحت بادئة دورها الخاصة +- يظل تدوير/إبطال الرموز لاحقًا مقيدًا بكل من عقد الدور الموافق عليه للجهاز + ونطاقات operator لجلسة المستدعي -تعامل مع رمز الإعداد ككلمة مرور أثناء صلاحيته. +عامل رمز الإعداد ككلمة مرور أثناء صلاحيته. + +بالنسبة إلى Tailscale أو الإقران المحمول العام أو غيره من الإقران غير local loopback، استخدم Tailscale +Serve/Funnel أو عنوان URL آخر لـ Gateway بصيغة `wss://`. تُرفض عناوين URL الخاصة بالإعداد المباشر غير local loopback بصيغة `ws://` +قبل إصدار رمز QR/رمز الإعداد. تقتصر رموز إعداد `ws://` ذات النص الصريح +على عناوين URL المحلية؛ ولا يزال عملاء `ws://` على الشبكة الخاصة يتطلبون كسر الحاجز الصريح +`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1` الموضح في دليل Gateway البعيد. ### الموافقة على جهاز Node @@ -149,25 +155,24 @@ openclaw devices approve openclaw devices reject ``` -عند رفض موافقة صريحة لأن جلسة الجهاز المقترن التي توافق -فُتحت بنطاق مخصص للإقران فقط، يعيد CLI محاولة الطلب نفسه باستخدام -`operator.admin`. يتيح ذلك لجهاز مقترن قائم قادر على الإدارة استرداد إقران جديد -لـ Control UI/المتصفح من دون تعديل `devices/paired.json` يدويًا. لا يزال -Gateway يتحقق من الاتصال المعاد؛ الرموز التي لا يمكنها المصادقة -باستخدام `operator.admin` تظل محظورة. +عند رفض موافقة صريحة لأن جلسة الجهاز المقترن التي تقوم بالموافقة +فُتحت بنطاق الإقران فقط، يعيد CLI محاولة الطلب نفسه باستخدام +`operator.admin`. يتيح ذلك لجهاز مقترن حالي قادر على الإدارة استرداد إقران جديد +لـ Control UI/المتصفح من دون تحرير `devices/paired.json` يدويًا. لا يزال +Gateway يتحقق من الاتصال المعاد؛ وتظل الرموز التي لا يمكنها المصادقة +باستخدام `operator.admin` محظورة. -إذا أعاد الجهاز نفسه المحاولة بتفاصيل مصادقة مختلفة (على سبيل المثال دور/نطاقات/مفتاح عام مختلف)، -يتم استبدال الطلب المعلق السابق ويتم إنشاء +إذا أعاد الجهاز نفسه المحاولة بتفاصيل مصادقة مختلفة (مثل دور/نطاقات/مفتاح عام مختلف)، يتم استبدال الطلب المعلق السابق ويُنشأ `requestId` جديد. -لا يحصل الجهاز المقترن بالفعل على وصول أوسع بصمت. إذا أعاد الاتصال طالبًا نطاقات أكثر أو دورًا أوسع، يبقي OpenClaw الموافقة الحالية كما هي وينشئ طلب ترقية معلقًا جديدًا. استخدم `openclaw devices list` لمقارنة الوصول الموافق عليه حاليًا مع الوصول المطلوب حديثًا قبل الموافقة. +لا يحصل الجهاز المقترن مسبقًا على وصول أوسع بصمت. إذا أعاد الاتصال طالبًا نطاقات أكثر أو دورًا أوسع، يُبقي OpenClaw الموافقة الحالية كما هي وينشئ طلب ترقية معلقًا جديدًا. استخدم `openclaw devices list` لمقارنة الوصول الموافق عليه حاليًا بالوصول المطلوب حديثًا قبل الموافقة. -### الموافقة التلقائية الاختيارية لعُقد CIDR موثوقة +### موافقة تلقائية اختيارية على Node عبر CIDR موثوق -يبقى إقران الأجهزة يدويًا افتراضيًا. بالنسبة إلى شبكات العُقد المضبوطة بإحكام، -يمكنك الاشتراك في الموافقة التلقائية لأول مرة على Node باستخدام CIDR صريحة أو عناوين IP مطابقة: +يظل إقران الأجهزة يدويًا افتراضيًا. بالنسبة إلى شبكات Node الخاضعة لرقابة صارمة، +يمكنك الاشتراك في الموافقة التلقائية لأول مرة على Node باستخدام CIDR صريحة أو عناوين IP دقيقة: ```json5 { @@ -182,28 +187,28 @@ Gateway يتحقق من الاتصال المعاد؛ الرموز التي لا ``` ينطبق هذا فقط على طلبات إقران `role: node` الجديدة من دون نطاقات مطلوبة. -لا يزال عملاء المشغّل والمتصفح وControl UI وWebChat يتطلبون موافقة يدوية. -كما لا تزال تغييرات الدور والنطاق والبيانات الوصفية والمفتاح العام تتطلب موافقة يدوية. +لا يزال عملاء operator والمتصفح وControl UI وWebChat يتطلبون موافقة يدوية. +ولا تزال تغييرات الدور والنطاق والبيانات الوصفية والمفتاح العام تتطلب موافقة يدوية. ### تخزين حالة إقران Node -مخزنة ضمن `~/.openclaw/devices/`: +تُخزن ضمن `~/.openclaw/devices/`: - `pending.json` (قصير العمر؛ تنتهي صلاحية الطلبات المعلقة) - `paired.json` (الأجهزة المقترنة + الرموز) ### ملاحظات -- واجهة API القديمة `node.pair.*` (CLI: `openclaw nodes pending|approve|reject|remove|rename`) هي - مخزن إقران منفصل مملوك لـ Gateway. لا تزال عُقد WS تتطلب إقران الأجهزة. -- سجل الإقران هو مصدر الحقيقة الدائم للأدوار الموافق عليها. تظل - رموز الأجهزة النشطة محدودة بمجموعة الأدوار الموافق عليها تلك؛ ولا ينشئ إدخال رمز عارض +- واجهة API القديمة `node.pair.*` ‏(CLI: `openclaw nodes pending|approve|reject|remove|rename`) هي + مخزن إقران منفصل مملوك لـ Gateway. لا تزال WS Nodes تتطلب إقران الأجهزة. +- سجل الإقران هو مصدر الحقيقة الدائم للأدوار الموافق عليها. تظل رموز + الأجهزة النشطة مقيدة بمجموعة الأدوار الموافق عليها تلك؛ ولا ينشئ إدخال رمز عابر خارج الأدوار الموافق عليها وصولًا جديدًا. ## مستندات ذات صلة - نموذج الأمان + حقن المطالبات: [الأمان](/ar/gateway/security) -- التحديث بأمان (تشغيل doctor): [التحديث](/ar/install/updating) +- التحديث بأمان (تشغيل الطبيب): [التحديث](/ar/install/updating) - تكوينات القنوات: - Telegram: [Telegram](/ar/channels/telegram) - WhatsApp: [WhatsApp](/ar/channels/whatsapp) diff --git a/docs/ar/channels/telegram.md b/docs/ar/channels/telegram.md index 2e4e9ea7c..8bccbb450 100644 --- a/docs/ar/channels/telegram.md +++ b/docs/ar/channels/telegram.md @@ -1,42 +1,42 @@ --- read_when: - - العمل على ميزات Telegram أو Webhook + - العمل على ميزات Telegram أو خطافات Webhook summary: حالة دعم روبوت Telegram وإمكاناته وتكوينه title: Telegram x-i18n: - generated_at: "2026-05-04T07:02:48Z" + generated_at: "2026-05-04T07:46:21Z" model: gpt-5.5 provider: openai - source_hash: 6ef1b019a6a0e261b33972b5edffaedd29310b1333d112bade2e79e9d56887c6 + source_hash: 5711d53cf908a14024bc5a94f7d590bb4bcb6963a1d78049d7782871f4eae932 source_path: channels/telegram.md workflow: 16 --- -جاهز للإنتاج لرسائل bot المباشرة والمجموعات عبر grammY. Long polling هو الوضع الافتراضي؛ وضع webhook اختياري. +جاهز للإنتاج للرسائل المباشرة للبوت والمجموعات عبر grammY. وضع الاستقصاء الطويل هو الوضع الافتراضي؛ وضع Webhook اختياري. سياسة الرسائل المباشرة الافتراضية في Telegram هي الاقتران. - - تشخيصات وخطط إصلاح عبر القنوات. + + تشخيصات وخطط إصلاح عابرة للقنوات. - - أنماط وأمثلة كاملة لتكوين القنوات. + + أنماط وأمثلة كاملة لإعدادات القنوات. ## الإعداد السريع - - افتح Telegram وتحدث مع **@BotFather** (تأكد من أن المعرّف هو تمامًا `@BotFather`). + + افتح Telegram وتحدث مع **@BotFather** (تأكد أن المعرّف هو بالضبط `@BotFather`). - شغّل `/newbot`، واتبع المطالبات، واحفظ الرمز. + شغّل `/newbot`، واتبع التعليمات، واحفظ الرمز. - + ```json5 { @@ -51,12 +51,12 @@ x-i18n: } ``` - بديل Env: `TELEGRAM_BOT_TOKEN=...` (الحساب الافتراضي فقط). - لا يستخدم Telegram الأمر `openclaw channels login telegram`؛ كوّن الرمز في config/env، ثم ابدأ gateway. + الرجوع إلى متغير البيئة: `TELEGRAM_BOT_TOKEN=...` (للحساب الافتراضي فقط). + لا يستخدم Telegram الأمر `openclaw channels login telegram`؛ اضبط الرمز في الإعدادات/البيئة، ثم ابدأ Gateway. - + ```bash openclaw gateway @@ -68,41 +68,41 @@ openclaw pairing approve telegram - - أضف bot إلى مجموعتك، ثم اضبط `channels.telegram.groups` و`groupPolicy` بما يطابق نموذج الوصول لديك. + + أضف البوت إلى مجموعتك، ثم اضبط `channels.telegram.groups` و`groupPolicy` بما يطابق نموذج الوصول لديك. -ترتيب حلّ الرموز يراعي الحساب. عمليًا، قيم config تتغلب على بديل env، و`TELEGRAM_BOT_TOKEN` ينطبق فقط على الحساب الافتراضي. +ترتيب حلّ الرموز يراعي الحسابات. عمليًا، لقيم الإعدادات أولوية على الرجوع إلى البيئة، ولا ينطبق `TELEGRAM_BOT_TOKEN` إلا على الحساب الافتراضي. -## إعدادات جانب Telegram +## إعدادات جهة Telegram - - تستخدم bots في Telegram افتراضيًا **Privacy Mode**، ما يحدّ من رسائل المجموعة التي تتلقاها. + + تستخدم بوتات Telegram افتراضيًا **وضع الخصوصية**، وهو ما يحد مما تتلقاه من رسائل المجموعات. - إذا كان يجب أن يرى bot كل رسائل المجموعة، فإما: + إذا كان يجب أن يرى البوت كل رسائل المجموعة، فإما: - عطّل وضع الخصوصية عبر `/setprivacy`، أو - - اجعل bot مشرفًا في المجموعة. + - اجعل البوت مشرفًا في المجموعة. - عند تبديل وضع الخصوصية، أزل bot ثم أعد إضافته في كل مجموعة حتى يطبّق Telegram التغيير. + عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة حتى يطبق Telegram التغيير. تُدار حالة المشرف من إعدادات مجموعة Telegram. - تتلقى bots المشرفة كل رسائل المجموعة، وهذا مفيد لسلوك المجموعات الدائم التشغيل. + تتلقى البوتات المشرفة كل رسائل المجموعة، وهذا مفيد لسلوك المجموعات الدائم التشغيل. - + - - `/setjoingroups` للسماح بإضافات المجموعات أو منعها - - `/setprivacy` لسلوك ظهور المجموعات + - `/setjoingroups` للسماح بإضافة البوت إلى المجموعات أو منعها + - `/setprivacy` لسلوك إمكانية الرؤية في المجموعات @@ -118,27 +118,27 @@ openclaw pairing approve telegram - `open` (يتطلب أن يتضمن `allowFrom` القيمة `"*"`) - `disabled` - يتيح `dmPolicy: "open"` مع `allowFrom: ["*"]` لأي حساب Telegram يعثر على اسم مستخدم bot أو يخمّنه أن يأمر bot. استخدمه فقط مع bots العامة عمدًا ذات الأدوات المقيّدة بإحكام؛ يجب أن تستخدم bots ذات المالك الواحد `allowlist` مع معرّفات المستخدمين الرقمية. + يتيح `dmPolicy: "open"` مع `allowFrom: ["*"]` لأي حساب Telegram يعثر على اسم مستخدم البوت أو يخمنه أن يصدر أوامر للبوت. استخدمه فقط للبوتات العامة عمدًا ذات الأدوات المقيّدة بشدة؛ ويجب أن تستخدم البوتات ذات المالك الواحد `allowlist` مع معرّفات مستخدم رقمية. - يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram الرقمية. تُقبل بادئات `telegram:` / `tg:` وتُطبّع. - في تكوينات متعددة الحسابات، يُعامل `channels.telegram.allowFrom` المقيّد في المستوى الأعلى كحد أمان: لا تجعل إدخالات `allowFrom: ["*"]` على مستوى الحساب ذلك الحساب عامًا ما لم تظل قائمة السماح الفعالة للحساب تتضمن حرف بدل صريحًا بعد الدمج. - يحظر `dmPolicy: "allowlist"` مع `allowFrom` فارغ كل الرسائل المباشرة، ويرفضه تحقق config. - يطلب الإعداد معرّفات مستخدمين رقمية فقط. - إذا قمت بالترقية وكان config لديك يحتوي على إدخالات قائمة سماح `@username`، فشغّل `openclaw doctor --fix` لحلّها (أفضل جهد؛ يتطلب رمز Telegram bot). - إذا كنت تعتمد سابقًا على ملفات قائمة السماح في مخزن الاقتران، فيمكن لـ `openclaw doctor --fix` استرداد الإدخالات إلى `channels.telegram.allowFrom` في تدفقات allowlist (مثلًا عندما لا يحتوي `dmPolicy: "allowlist"` على معرّفات صريحة بعد). + يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram الرقمية. تُقبل البادئتان `telegram:` / `tg:` وتُطبّعان. + في إعدادات الحسابات المتعددة، يُعامل `channels.telegram.allowFrom` التقييدي في المستوى الأعلى كحد أمان: إدخالات `allowFrom: ["*"]` على مستوى الحساب لا تجعل ذلك الحساب عامًا إلا إذا ظلت قائمة السماح الفعلية للحساب تحتوي على حرف بدل صريح بعد الدمج. + يحظر `dmPolicy: "allowlist"` مع `allowFrom` فارغ كل الرسائل المباشرة، وترفضه عملية التحقق من الإعدادات. + يطلب الإعداد معرّفات المستخدم الرقمية فقط. + إذا أجريت ترقية وكانت إعداداتك تحتوي على إدخالات قائمة سماح بشكل `@username`، فشغّل `openclaw doctor --fix` لحلّها (بأفضل جهد؛ يتطلب رمز بوت Telegram). + إذا كنت تعتمد سابقًا على ملفات قائمة السماح في مخزن الاقتران، فيمكن لـ `openclaw doctor --fix` استعادة الإدخالات إلى `channels.telegram.allowFrom` في مسارات قوائم السماح (على سبيل المثال عندما لا يحتوي `dmPolicy: "allowlist"` على أي معرّفات صريحة بعد). - بالنسبة إلى bots ذات المالك الواحد، فضّل `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية صريحة لإبقاء سياسة الوصول ثابتة في config (بدلًا من الاعتماد على موافقات اقتران سابقة). + للبوتات ذات المالك الواحد، فضّل `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية صريحة لإبقاء سياسة الوصول ثابتة في الإعدادات (بدلًا من الاعتماد على موافقات اقتران سابقة). - لبس شائع: موافقة اقتران الرسائل المباشرة لا تعني "هذا المرسل مخوّل في كل مكان". - يمنح الاقتران وصول الرسائل المباشرة. إذا لم يكن يوجد مالك أوامر بعد، فإن أول اقتران معتمد يضبط أيضًا `commands.ownerAllowFrom` حتى يكون لأوامر المالك فقط وموافقات exec حساب مشغّل صريح. - ما يزال تخويل مرسل المجموعة يأتي من قوائم السماح الصريحة في config. - إذا أردت "أنا مخوّل مرة واحدة وتعمل الرسائل المباشرة وأوامر المجموعة معًا"، فضع معرّف مستخدم Telegram الرقمي في `channels.telegram.allowFrom`؛ ولأوامر المالك فقط، تأكد من أن `commands.ownerAllowFrom` يحتوي على `telegram:`. + لبس شائع: الموافقة على اقتران الرسائل المباشرة لا تعني أن "هذا المرسل مخول في كل مكان". + يمنح الاقتران وصول الرسائل المباشرة. إذا لم يكن هناك مالك أوامر بعد، فإن أول اقتران معتمد يضبط أيضًا `commands.ownerAllowFrom` بحيث يكون للأوامر المقتصرة على المالك وموافقات التنفيذ حساب مشغّل صريح. + ما زال تفويض مرسل المجموعة يأتي من قوائم السماح الصريحة في الإعدادات. + إذا أردت "أنا مخول مرة واحدة وتعمل كل من الرسائل المباشرة وأوامر المجموعة"، فضع معرّف مستخدم Telegram الرقمي الخاص بك في `channels.telegram.allowFrom`؛ وبالنسبة للأوامر المقتصرة على المالك، تأكد أن `commands.ownerAllowFrom` يحتوي على `telegram:`. ### العثور على معرّف مستخدم Telegram الخاص بك - أكثر أمانًا (بدون bot تابع لجهة خارجية): + طريقة أكثر أمانًا (من دون بوت طرف ثالث): - 1. أرسل رسالة مباشرة إلى bot الخاص بك. + 1. أرسل رسالة مباشرة إلى بوتك. 2. شغّل `openclaw logs --follow`. 3. اقرأ `from.id`. @@ -153,13 +153,13 @@ curl "https://api.telegram.org/bot/getUpdates" - ينطبق عنصران تحكمان معًا: + ينطبق تحكمان معًا: 1. **أي المجموعات مسموح بها** (`channels.telegram.groups`) - - لا يوجد config لـ `groups`: + - لا توجد إعدادات `groups`: - مع `groupPolicy: "open"`: يمكن لأي مجموعة اجتياز فحوصات معرّف المجموعة - مع `groupPolicy: "allowlist"` (الافتراضي): تُحظر المجموعات حتى تضيف إدخالات `groups` (أو `"*"`) - - تم تكوين `groups`: تعمل كقائمة سماح (معرّفات صريحة أو `"*"`) + - تم ضبط `groups`: تعمل كقائمة سماح (معرّفات صريحة أو `"*"`) 2. **أي المرسلين مسموح لهم داخل المجموعات** (`channels.telegram.groupPolicy`) - `open` @@ -167,14 +167,14 @@ curl "https://api.telegram.org/bot/getUpdates" - `disabled` يُستخدم `groupAllowFrom` لتصفية مرسلي المجموعة. إذا لم يُضبط، يعود Telegram إلى `allowFrom`. - يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدمي Telegram رقمية (تُطبّع بادئات `telegram:` / `tg:`). - لا تضع معرّفات دردشة مجموعات Telegram أو المجموعات الفائقة في `groupAllowFrom`. مكان معرّفات الدردشة السالبة هو ضمن `channels.telegram.groups`. - تُتجاهل الإدخالات غير الرقمية لتخويل المرسل. - حد الأمان (`2026.2.25+`): تخويل مرسل المجموعة لا يرث موافقات مخزن اقتران الرسائل المباشرة. - يبقى الاقتران خاصًا بالرسائل المباشرة فقط. بالنسبة إلى المجموعات، اضبط `groupAllowFrom` أو `allowFrom` لكل مجموعة/موضوع. - إذا لم يُضبط `groupAllowFrom`، يعود Telegram إلى `allowFrom` في config، وليس إلى مخزن الاقتران. - النمط العملي لـ bots ذات المالك الواحد: اضبط معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير مضبوط، واسمح بالمجموعات المستهدفة ضمن `channels.telegram.groups`. - ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا تمامًا، تكون افتراضيات وقت التشغيل fail-closed إلى `groupPolicy="allowlist"` ما لم يُضبط `channels.defaults.groupPolicy` صراحة. + يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدمي Telegram الرقمية (تُطبّع بادئتا `telegram:` / `tg:`). + لا تضع معرّفات محادثات مجموعات Telegram أو المجموعات الفائقة في `groupAllowFrom`. مكان معرّفات المحادثة السالبة هو `channels.telegram.groups`. + تُتجاهل الإدخالات غير الرقمية في تفويض المرسل. + حد الأمان (`2026.2.25+`): لا يرث تفويض مرسل المجموعة موافقات مخزن اقتران الرسائل المباشرة. + يبقى الاقتران مخصصًا للرسائل المباشرة فقط. بالنسبة للمجموعات، اضبط `groupAllowFrom` أو `allowFrom` لكل مجموعة/كل موضوع. + إذا لم يُضبط `groupAllowFrom`، يعود Telegram إلى `allowFrom` في الإعدادات، وليس إلى مخزن الاقتران. + نمط عملي للبوتات ذات المالك الواحد: ضع معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير مضبوط، واسمح بالمجموعات المستهدفة ضمن `channels.telegram.groups`. + ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا بالكامل، تكون افتراضات وقت التشغيل مغلقة افتراضيًا باستخدام `groupPolicy="allowlist"` ما لم يُضبط `channels.defaults.groupPolicy` صراحة. مثال: السماح لأي عضو في مجموعة محددة واحدة: @@ -213,32 +213,32 @@ curl "https://api.telegram.org/bot/getUpdates" خطأ شائع: `groupAllowFrom` ليست قائمة سماح لمجموعات Telegram. - - ضع معرّفات دردشة مجموعات Telegram أو المجموعات الفائقة السالبة مثل `-1001234567890` ضمن `channels.telegram.groups`. - - ضع معرّفات مستخدمي Telegram مثل `8734062810` ضمن `groupAllowFrom` عندما تريد تحديد الأشخاص داخل مجموعة مسموح بها الذين يمكنهم تشغيل bot. - - استخدم `groupAllowFrom: ["*"]` فقط عندما تريد أن يتمكن أي عضو في مجموعة مسموح بها من التحدث إلى bot. + - ضع معرّفات محادثات مجموعات Telegram أو المجموعات الفائقة السالبة مثل `-1001234567890` ضمن `channels.telegram.groups`. + - ضع معرّفات مستخدمي Telegram مثل `8734062810` ضمن `groupAllowFrom` عندما تريد تحديد الأشخاص داخل مجموعة مسموح بها الذين يمكنهم تشغيل البوت. + - استخدم `groupAllowFrom: ["*"]` فقط عندما تريد أن يتمكن أي عضو في مجموعة مسموح بها من التحدث إلى البوت. - تتطلب ردود المجموعة الإشارة افتراضيًا. + تتطلب ردود المجموعات إشارة افتراضيًا. يمكن أن تأتي الإشارة من: - - إشارة `@botusername` الأصلية، أو + - إشارة أصلية بشكل `@botusername`، أو - أنماط الإشارة في: - `agents.list[].groupChat.mentionPatterns` - `messages.groupChat.mentionPatterns` - مفاتيح تبديل الأوامر على مستوى الجلسة: + مفاتيح الأوامر على مستوى الجلسة: - `/activation always` - `/activation mention` - تحدّث هذه حالة الجلسة فقط. استخدم config للاستمرارية. + تحدّث هذه حالة الجلسة فقط. استخدم الإعدادات للاستمرارية. - مثال config دائم: + مثال إعداد مستمر: ```json5 { @@ -252,45 +252,45 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - الحصول على معرّف دردشة المجموعة: + الحصول على معرّف محادثة المجموعة: - - أعد توجيه رسالة مجموعة إلى `@userinfobot` / `@getidsbot` + - أعد توجيه رسالة من المجموعة إلى `@userinfobot` / `@getidsbot` - أو اقرأ `chat.id` من `openclaw logs --follow` - - أو افحص Bot API `getUpdates` + - أو افحص `getUpdates` في Bot API ## سلوك وقت التشغيل -- يملك عملية gateway Telegram. -- التوجيه حتمي: ترد الرسائل الواردة من Telegram إلى Telegram (لا يختار النموذج القنوات). -- تُطبّع الرسائل الواردة إلى مغلف القناة المشترك مع بيانات التعريف للرد وعناصر نائبة للوسائط. -- تُعزل جلسات المجموعات حسب معرّف المجموعة. تضيف مواضيع المنتدى `:topic:` لإبقاء المواضيع معزولة. -- يمكن أن تحمل رسائل الرسائل المباشرة `message_thread_id`؛ يحافظ OpenClaw على معرّف السلسلة للردود لكنه يبقي الرسائل المباشرة على الجلسة المسطحة افتراضيًا. كوّن `channels.telegram.dm.threadReplies: "inbound"` أو `channels.telegram.direct..threadReplies: "inbound"` أو `requireTopic: true` أو config موضوعًا مطابقًا عندما تريد عمدًا عزل جلسات مواضيع الرسائل المباشرة. -- يستخدم Long polling مشغّل grammY مع تسلسل لكل دردشة/كل سلسلة. يستخدم تزامن حوض المشغّل العام `agents.defaults.maxConcurrent`. -- يُحمى Long polling داخل كل عملية gateway بحيث يمكن لمستطلع نشط واحد فقط استخدام رمز bot في الوقت نفسه. إذا كنت ما تزال ترى تعارضات `getUpdates` 409، فمن المحتمل أن gateway آخر من OpenClaw أو سكربتًا أو مستطلعًا خارجيًا يستخدم الرمز نفسه. -- تبدأ إعادة تشغيل مراقب Long-polling افتراضيًا بعد 120 ثانية بدون اكتمال نبض حياة `getUpdates`. زِد `channels.telegram.pollingStallThresholdMs` فقط إذا كان نشرُك ما يزال يرى عمليات إعادة تشغيل كاذبة بسبب توقف الاستطلاع أثناء عمل طويل. القيمة بالمللي ثانية ومسموح بها من `30000` إلى `600000`؛ وتُدعم التجاوزات لكل حساب. +- يملك عملية Gateway تكامل Telegram. +- التوجيه حتمي: ترد رسائل Telegram الواردة إلى Telegram (لا يختار النموذج القنوات). +- تُطبّع الرسائل الواردة إلى مظروف القناة المشترك مع بيانات تعريف الرد والعناصر النائبة للوسائط. +- تُعزل جلسات المجموعات حسب معرّف المجموعة. تضيف موضوعات المنتديات `:topic:` لإبقاء الموضوعات معزولة. +- يمكن أن تحمل رسائل DM القيمة `message_thread_id`؛ يحافظ OpenClaw على معرّف السلسلة للردود لكنه يُبقي الرسائل المباشرة على الجلسة المسطحة افتراضيًا. اضبط `channels.telegram.dm.threadReplies: "inbound"` أو `channels.telegram.direct..threadReplies: "inbound"` أو `requireTopic: true` أو إعداد موضوع مطابقًا عندما تريد عمدًا عزل جلسة موضوع الرسائل المباشرة. +- يستخدم الاستقصاء الطويل مشغّل grammY مع تسلسل لكل محادثة/كل سلسلة. يستخدم تزامن حوض المشغّل العام `agents.defaults.maxConcurrent`. +- الاستقصاء الطويل محمي داخل كل عملية Gateway بحيث لا يستطيع استخدام رمز بوت إلا مستقصٍ نشط واحد في كل مرة. إذا كنت ما تزال ترى تعارضات `getUpdates` 409، فمن المرجح أن Gateway آخر من OpenClaw أو سكربتًا أو مستقصيًا خارجيًا يستخدم الرمز نفسه. +- تُشغَّل إعادة تشغيل مراقب الاستقصاء الطويل افتراضيًا بعد 120 ثانية من دون اكتمال حيوية `getUpdates`. زد `channels.telegram.pollingStallThresholdMs` فقط إذا كان نشرُك ما يزال يرى إعادات تشغيل خاطئة بسبب توقف الاستقصاء أثناء أعمال طويلة التشغيل. القيمة بالمللي ثانية ومسموح بها من `30000` إلى `600000`؛ وتُدعم التجاوزات لكل حساب. - لا يدعم Telegram Bot API إيصالات القراءة (`sendReadReceipts` لا ينطبق). ## مرجع الميزات - - يستطيع OpenClaw بث الردود الجزئية في الوقت الحقيقي: + + يستطيع OpenClaw بث ردود جزئية في الوقت الحقيقي: - - الدردشات المباشرة: رسالة معاينة + `editMessageText` - - المجموعات/المواضيع: رسالة معاينة + `editMessageText` + - المحادثات المباشرة: رسالة معاينة + `editMessageText` + - المجموعات/الموضوعات: رسالة معاينة + `editMessageText` المتطلب: - `channels.telegram.streaming` هو `off | partial | block | progress` (الافتراضي: `partial`) - - يحتفظ `progress` بمسودة حالة واحدة قابلة للتحرير ويحدّثها بتقدم الأداة حتى التسليم النهائي - - يتحكم `streaming.preview.toolProgress` فيما إذا كانت تحديثات الأداة/التقدم تعيد استخدام رسالة المعاينة المعدلة نفسها (الافتراضي: `true` عندما يكون بث المعاينة نشطًا) - - يتحكم `streaming.preview.commandText` في تفاصيل الأمر/exec داخل أسطر تقدم الأداة تلك: `raw` (الافتراضي، يحافظ على السلوك الصادر) أو `status` (تسمية الأداة فقط) - - تُكتشف `channels.telegram.streamMode` القديمة وقيم `streaming` المنطقية؛ شغّل `openclaw doctor --fix` لترحيلها إلى `channels.telegram.streaming.mode` + - يحافظ `progress` على مسودة حالة واحدة قابلة للتعديل ويحدّثها بتقدم الأدوات حتى التسليم النهائي + - يتحكم `streaming.preview.toolProgress` فيما إذا كانت تحديثات الأدوات/التقدم تعيد استخدام رسالة المعاينة المعدّلة نفسها (الافتراضي: `true` عندما يكون بث المعاينة نشطًا) + - يتحكم `streaming.preview.commandText` في تفاصيل الأمر/التنفيذ داخل سطور تقدم الأدوات تلك: `raw` (الافتراضي، يحافظ على السلوك المنشور) أو `status` (تسمية الأداة فقط) + - تُكتشف قيم `channels.telegram.streamMode` القديمة وقيم `streaming` المنطقية؛ شغّل `openclaw doctor --fix` لترحيلها إلى `channels.telegram.streaming.mode` - تحديثات معاينة تقدم الأداة هي أسطر الحالة القصيرة التي تظهر أثناء تشغيل الأدوات، مثل تنفيذ الأوامر، وقراءات الملفات، وتحديثات التخطيط، أو ملخصات التصحيحات. يبقيها Telegram مفعّلة افتراضيًا لمطابقة سلوك OpenClaw الصادر من `v2026.4.22` وما بعده. للإبقاء على المعاينة المعدلة لنص الإجابة مع إخفاء أسطر تقدم الأداة، اضبط: + تحديثات معاينة تقدم الأدوات هي سطور الحالة القصيرة التي تظهر أثناء تشغيل الأدوات، مثل تنفيذ الأوامر، أو قراءة الملفات، أو تحديثات التخطيط، أو ملخصات التصحيحات. يبقي Telegram هذه مفعلة افتراضيًا لمطابقة سلوك OpenClaw المنشور من `v2026.4.22` وما بعده. للإبقاء على المعاينة المعدّلة لنص الإجابة مع إخفاء سطور تقدم الأدوات، اضبط: ```json { @@ -307,7 +307,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - للإبقاء على تقدم الأداة ظاهرًا مع إخفاء نص الأمر/exec، اضبط: + للإبقاء على تقدم الأدوات مرئيًا مع إخفاء نص الأمر/التنفيذ، اضبط: ```json { @@ -324,7 +324,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - بالنسبة إلى وضع مسودة التقدم، ضع سياسة نص الأمر نفسها ضمن `streaming.progress`: + لوضع مسودة التقدم، ضع سياسة نص الأمر نفسها ضمن `streaming.progress`: ```json { @@ -342,36 +342,36 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - استخدم `streaming.mode: "off"` فقط عندما تريد تسليم النتيجة النهائية فقط: تُعطَّل تعديلات المعاينة في Telegram، ويُكبت حديث الأدوات/التقدم العام بدلًا من إرساله كرسائل حالة مستقلة. تظل مطالبات الموافقة، وحمولات الوسائط، والأخطاء تمر عبر التسليم النهائي المعتاد. استخدم `streaming.preview.toolProgress: false` عندما تريد فقط إبقاء تعديلات معاينة الإجابة مع إخفاء أسطر حالة تقدم الأدوات. + استخدم `streaming.mode: "off"` فقط عندما تريد تسليم الإجابة النهائية فقط: تُعطَّل تعديلات معاينة Telegram، وتُكتم ثرثرة الأدوات/التقدم العامة بدل إرسالها كرسائل حالة مستقلة. لا تزال مطالبات الموافقة، وحمولات الوسائط، والأخطاء تمر عبر مسار التسليم النهائي العادي. استخدم `streaming.preview.toolProgress: false` عندما تريد فقط إبقاء تعديلات معاينة الإجابة مع إخفاء أسطر حالة تقدم الأداة. - ردود الاقتباس المحدد في Telegram هي الاستثناء. عندما يكون `replyToMode` هو `"first"` أو `"all"` أو `"batched"` وتتضمن الرسالة الواردة نص اقتباس محددًا، يرسل OpenClaw الإجابة النهائية عبر مسار رد الاقتباس الأصلي في Telegram بدلًا من تعديل معاينة الإجابة، لذلك لا يمكن لـ `streaming.preview.toolProgress` إظهار أسطر الحالة القصيرة لذلك الدور. ما تزال الردود على الرسالة الحالية دون نص اقتباس محدد تحافظ على بث المعاينة. اضبط `replyToMode: "off"` عندما تكون رؤية تقدم الأدوات أهم من ردود الاقتباس الأصلية، أو اضبط `streaming.preview.toolProgress: false` للإقرار بهذه المفاضلة. + ردود الاقتباس المحدد في Telegram هي الاستثناء. عندما تكون `replyToMode` هي `"first"` أو `"all"` أو `"batched"` وتتضمن الرسالة الواردة نص اقتباس محددًا، يرسل OpenClaw الإجابة النهائية عبر مسار رد الاقتباس الأصلي في Telegram بدل تعديل معاينة الإجابة، لذلك لا يمكن لـ `streaming.preview.toolProgress` إظهار أسطر الحالة القصيرة لذلك الدور. لا تزال الردود على الرسالة الحالية من دون نص اقتباس محدد تحتفظ بتدفق المعاينة. اضبط `replyToMode: "off"` عندما تكون رؤية تقدم الأداة أهم من ردود الاقتباس الأصلية، أو اضبط `streaming.preview.toolProgress: false` للإقرار بالمفاضلة. للردود النصية فقط: - - معاينات الرسائل الخاصة/المجموعات/المواضيع القصيرة: يحافظ OpenClaw على رسالة المعاينة نفسها وينفذ تعديلًا نهائيًا في المكان نفسه، ما لم تُرسل رسالة مرئية غير معاينة بعد ظهور المعاينة - - المعاينات التي يتبعها إخراج مرئي غير معاينة: يرسل OpenClaw الرد المكتمل كرسالة نهائية جديدة وينظف المعاينة الأقدم، بحيث تظهر الإجابة النهائية بعد الإخراج الوسيط - - المعاينات الأقدم من نحو دقيقة واحدة: يرسل OpenClaw الرد المكتمل كرسالة نهائية جديدة ثم ينظف المعاينة، بحيث يعكس الطابع الزمني المرئي في Telegram وقت الاكتمال بدلًا من وقت إنشاء المعاينة + - معاينات DM/المجموعة/الموضوع القصيرة: يحتفظ OpenClaw برسالة المعاينة نفسها وينفذ تعديلًا نهائيًا في مكانها، ما لم تُرسَل رسالة مرئية غير معاينة بعد ظهور المعاينة + - معاينات تليها مخرجات مرئية غير معاينة: يرسل OpenClaw الرد المكتمل كرسالة نهائية جديدة وينظف المعاينة القديمة، بحيث تظهر الإجابة النهائية بعد المخرجات الوسيطة + - المعاينات الأقدم من نحو دقيقة واحدة: يرسل OpenClaw الرد المكتمل كرسالة نهائية جديدة ثم ينظف المعاينة، بحيث يعكس الطابع الزمني المرئي في Telegram وقت الإكمال بدل وقت إنشاء المعاينة - للردود المعقدة، مثل حمولات الوسائط، يعود OpenClaw إلى التسليم النهائي المعتاد ثم ينظف رسالة المعاينة. + للردود المعقدة (مثل حمولات الوسائط)، يعود OpenClaw إلى التسليم النهائي العادي ثم ينظف رسالة المعاينة. - بث المعاينة منفصل عن بث الكتل. عندما يُفعَّل بث الكتل صراحةً لـ Telegram، يتجاوز OpenClaw بث المعاينة لتجنب البث المزدوج. + تدفق المعاينة منفصل عن تدفق الكتل. عند تفعيل تدفق الكتل صراحةً لـ Telegram، يتجاوز OpenClaw تدفق المعاينة لتجنب التدفق المزدوج. تدفق الاستدلال الخاص بـ Telegram فقط: - يرسل `/reasoning stream` الاستدلال إلى المعاينة الحية أثناء التوليد - - تُحذف معاينة الاستدلال بعد التسليم النهائي؛ استخدم `/reasoning on` عندما ينبغي أن يبقى الاستدلال مرئيًا - - تُرسل الإجابة النهائية دون نص الاستدلال + - تُحذف معاينة الاستدلال بعد التسليم النهائي؛ استخدم `/reasoning on` عندما يجب أن يبقى الاستدلال مرئيًا + - تُرسل الإجابة النهائية من دون نص الاستدلال - يستخدم النص الصادر في Telegram ‏`parse_mode: "HTML"`. + يستخدم النص الصادر في Telegram `parse_mode: "HTML"`. - - يُعرَض النص الشبيه بـ Markdown على هيئة HTML آمن لـ Telegram. - - يُهرَّب HTML الخام الصادر من النموذج لتقليل إخفاقات التحليل في Telegram. - - إذا رفض Telegram ‏HTML المحلَّل، يعيد OpenClaw المحاولة كنص عادي. + - يُعرَض النص الشبيه بـ Markdown كـ HTML آمن لـ Telegram. + - يُهَرَّب HTML الخام من النموذج لتقليل حالات فشل التحليل في Telegram. + - إذا رفض Telegram HTML المحلل، يعيد OpenClaw المحاولة كنص عادي. تكون معاينات الروابط مفعلة افتراضيًا ويمكن تعطيلها باستخدام `channels.telegram.linkPreview: false`. @@ -380,11 +380,11 @@ curl "https://api.telegram.org/bot/getUpdates" يُعالَج تسجيل قائمة أوامر Telegram عند بدء التشغيل باستخدام `setMyCommands`. - الإعدادات الافتراضية للأوامر الأصلية: + افتراضيات الأوامر الأصلية: - يفعّل `commands.native: "auto"` الأوامر الأصلية لـ Telegram - أضف إدخالات أوامر مخصصة إلى القائمة: + أضف إدخالات قائمة أوامر مخصصة: ```json5 { @@ -401,47 +401,47 @@ curl "https://api.telegram.org/bot/getUpdates" القواعد: - - تُطبَّع الأسماء بإزالة `/` البادئة وتحويلها إلى أحرف صغيرة - - النمط الصالح: `a-z`، و`0-9`، و`_`، والطول `1..32` + - تُوحَّد الأسماء (إزالة `/` البادئة، وتحويلها إلى أحرف صغيرة) + - النمط الصالح: `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`. - - قد يعني فشل `deleteWebhook` أو `deleteMyCommands` أو `setMyCommands` مع `404: Not Found` بينما تعمل أوامر curl المباشرة لـ Bot API أن `channels.telegram.apiRoot` قد ضُبط على نقطة النهاية الكاملة `/bot`. يجب أن يكون `apiRoot` جذر Bot API فقط، ويزيل `openclaw doctor --fix` اللاحقة العرضية `/bot`. - - يعني `getMe returned 401` أن Telegram رفض رمز البوت المهيأ. حدّث `botToken` أو `tokenFile` أو `TELEGRAM_BOT_TOKEN` برمز BotFather الحالي؛ يتوقف OpenClaw قبل الاستقصاء، لذلك لا يُبلَّغ عن ذلك كفشل في تنظيف Webhook. + - يعني `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن قائمة Telegram لا تزال تتجاوز الحد بعد القص؛ قلل أوامر Plugin/Skills/المخصصة أو عطّل `channels.telegram.commands.native`. + - قد يعني فشل `deleteWebhook` أو `deleteMyCommands` أو `setMyCommands` مع `404: Not Found` بينما تعمل أوامر curl المباشرة لـ Bot API أن `channels.telegram.apiRoot` ضُبط على نقطة النهاية الكاملة `/bot`. يجب أن يكون `apiRoot` جذر Bot API فقط، ويزيل `openclaw doctor --fix` لاحقة `/bot` العرضية. + - يعني `getMe returned 401` أن Telegram رفض رمز البوت المضبوط. حدّث `botToken` أو `tokenFile` أو `TELEGRAM_BOT_TOKEN` برمز BotFather الحالي؛ يتوقف OpenClaw قبل الاستقصاء، لذلك لا يُبلَّغ عن هذا كفشل في تنظيف Webhook. - يعني `setMyCommands failed` مع أخطاء الشبكة/الجلب عادةً أن DNS/HTTPS الصادر إلى `api.telegram.org` محظور. - ### أوامر إقران الأجهزة (Plugin ‏`device-pair`) + ### أوامر اقتران الجهاز (`device-pair` Plugin) - عند تثبيت Plugin ‏`device-pair`: + عند تثبيت `device-pair` Plugin: - 1. يولّد `/pair` رمز إعداد + 1. ينشئ `/pair` رمز إعداد 2. الصق الرمز في تطبيق iOS - 3. يعرض `/pair pending` الطلبات المعلقة، بما في ذلك الدور/النطاقات + 3. يعرض `/pair pending` الطلبات المعلقة (بما في ذلك الدور/النطاقات) 4. وافق على الطلب: - `/pair approve ` للموافقة الصريحة - `/pair approve` عندما يكون هناك طلب معلق واحد فقط - `/pair approve latest` للأحدث - يحمل رمز الإعداد رمز تمهيد قصير العمر. يحافظ التسليم التمهيدي المضمن على رمز العقدة الأساسية عند `scopes: []`؛ وأي رمز مشغّل مُسلَّم يبقى محدودًا بـ `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. تكون فحوصات نطاق التمهيد مسبوقة بالدور، لذلك لا تلبي قائمة السماح للمشغّل إلا طلبات المشغّل؛ وما تزال الأدوار غير المشغّلة تحتاج إلى نطاقات تحت بادئة دورها الخاصة. + يحمل رمز الإعداد رمز تمهيد قصير العمر. يُبقي تسليم التمهيد المضمن رمز العقدة الأساسية عند `scopes: []`؛ وأي رمز مشغّل مُسلَّم يبقى محدودًا إلى `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. فحوص نطاق التمهيد مسبوقة بالدور، لذلك لا تفي قائمة سماح المشغل هذه إلا بطلبات المشغل؛ ولا تزال الأدوار غير المشغّلة تحتاج إلى نطاقات تحت بادئة دورها الخاصة. - إذا أعاد جهاز المحاولة مع تفاصيل مصادقة متغيرة، مثل الدور/النطاقات/المفتاح العام، يُستبدل الطلب المعلق السابق ويستخدم الطلب الجديد `requestId` مختلفًا. أعد تشغيل `/pair pending` قبل الموافقة. + إذا أعاد جهاز المحاولة مع تفاصيل مصادقة متغيرة (مثل الدور/النطاقات/المفتاح العام)، يُستبدل الطلب المعلق السابق ويستخدم الطلب الجديد `requestId` مختلفًا. شغّل `/pair pending` مجددًا قبل الموافقة. - مزيد من التفاصيل: [الإقران](/ar/channels/pairing#pair-via-telegram-recommended-for-ios). + مزيد من التفاصيل: [الاقتران](/ar/channels/pairing#pair-via-telegram-recommended-for-ios). - هيئ نطاق لوحة المفاتيح المضمنة: + اضبط نطاق لوحة المفاتيح المضمنة: ```json5 { @@ -479,9 +479,9 @@ curl "https://api.telegram.org/bot/getUpdates" - `dm` - `group` - `all` - - `allowlist` (افتراضي) + - `allowlist` (الافتراضي) - يُحوَّل `capabilities: ["inlineButtons"]` القديم إلى `inlineButtons: "all"`. + تُعيَّن الصيغة القديمة `capabilities: ["inlineButtons"]` إلى `inlineButtons: "all"`. مثال إجراء رسالة: @@ -501,71 +501,71 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - تُمرَّر نقرات الاستدعاء إلى الوكيل كنص: + تُمرَّر نقرات رد الاتصال إلى الوكيل كنص: `callback_data: ` - تتضمن إجراءات أدوات Telegram ما يلي: + تتضمن إجراءات أدوات 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` (افتراضي: معطل) + - `channels.telegram.actions.sticker` (الافتراضي: معطّل) - ملاحظة: `edit` و`topic-create` مفعّلان حاليًا افتراضيًا ولا يملكان مفاتيح تبديل منفصلة ضمن `channels.telegram.actions.*`. - تستخدم عمليات الإرسال وقت التشغيل لقطة التهيئة/الأسرار النشطة عند بدء التشغيل/إعادة التحميل، لذلك لا تنفذ مسارات الإجراء إعادة حل SecretRef مخصصة لكل إرسال. + ملاحظة: `edit` و`topic-create` مفعّلان حاليًا افتراضيًا ولا يملكان مفاتيح تبديل `channels.telegram.actions.*` منفصلة. + تستخدم عمليات الإرسال وقت التشغيل لقطة الإعداد/الأسرار النشطة (بدء التشغيل/إعادة التحميل)، لذلك لا تنفذ مسارات الإجراءات إعادة حل SecretRef ارتجالية لكل إرسال. دلالات إزالة التفاعل: [/tools/reactions](/ar/tools/reactions) - - يدعم Telegram وسوم تسلسل ردود صريحة في الإخراج المولّد: + + يدعم Telegram وسوم ترابط ردود صريحة في المخرجات المُولَّدة: - يرد `[[reply_to_current]]` على الرسالة المحفزة - - يرد `[[reply_to:]]` على معرّف رسالة Telegram محددة + - يرد `[[reply_to:]]` على معرّف رسالة Telegram محدد يتحكم `channels.telegram.replyToMode` في المعالجة: - - `off` (افتراضي) + - `off` (الافتراضي) - `first` - `all` - عندما يكون تسلسل الردود مفعّلًا ويكون نص Telegram الأصلي أو التعليق متاحًا، يضمن OpenClaw مقتطف اقتباس أصليًا من Telegram تلقائيًا. يحد Telegram نص الاقتباس الأصلي عند 1024 وحدة ترميز UTF-16، لذلك تُقتبس الرسائل الأطول من البداية وتعود إلى رد عادي إذا رفض Telegram الاقتباس. + عند تفعيل ترابط الردود وتوفر نص Telegram الأصلي أو التعليق، يضمّن OpenClaw مقتطف اقتباس أصليًا من Telegram تلقائيًا. يحد Telegram نص الاقتباس الأصلي عند 1024 وحدة ترميز UTF-16، لذلك تُقتبس الرسائل الأطول من البداية وتعود إلى رد عادي إذا رفض Telegram الاقتباس. - ملاحظة: يعطّل `off` تسلسل الردود الضمني. ما تزال وسوم `[[reply_to_*]]` الصريحة محترمة. + ملاحظة: يعطّل `off` ترابط الردود الضمني. لا تزال وسوم `[[reply_to_*]]` الصريحة محترمة. - - المجموعات الفائقة ذات المنتديات: + + المجموعات الفائقة للمنتدى: - - تضيف مفاتيح جلسات المواضيع `:topic:` - - تستهدف الردود وإجراءات الكتابة سلسلة الموضوع - - مسار تهيئة الموضوع: + - تضيف مفاتيح جلسة الموضوع `:topic:` + - تستهدف الردود وحالة الكتابة سلسلة الموضوع + - مسار إعداد الموضوع: `channels.telegram.groups..topics.` حالة خاصة للموضوع العام (`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` في إعداد الموضوع. يمنح هذا كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال: ```json5 { @@ -585,26 +585,26 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - يصبح لكل موضوع بعد ذلك مفتاح جلسة خاص به: `agent:zu:telegram:group:-1001234567890:topic:3` + بعد ذلك يكون لكل موضوع مفتاح جلسة خاص به: `agent:zu:telegram:group:-1001234567890:topic:3` - **ربط موضوع ACP دائم**: يمكن لمواضيع المنتدى تثبيت جلسات حزمة ACP عبر روابط ACP مكتوبة على المستوى الأعلى (`bindings[]` مع `type: "acp"` و`match.channel: "telegram"` و`peer.kind: "group"` ومعرّف مؤهل بالموضوع مثل `-1001234567890:topic:42`). النطاق الحالي مقتصر على مواضيع المنتدى في المجموعات/المجموعات الفائقة. راجع [وكلاء ACP](/ar/tools/acp-agents). + **ربط موضوع ACP الدائم**: يمكن لموضوعات المنتدى تثبيت جلسات حزمة ACP عبر روابط ACP typed عالية المستوى (`bindings[]` مع `type: "acp"` و`match.channel: "telegram"` و`peer.kind: "group"` ومعرّف مؤهل بالموضوع مثل `-1001234567890:topic:42`). النطاق الحالي مخصص لموضوعات المنتدى في المجموعات/المجموعات الفائقة. راجع [وكلاء ACP](/ar/tools/acp-agents). - **إنشاء ACP مرتبط بالسلسلة من المحادثة**: يربط `/acp spawn --thread here|auto` الموضوع الحالي بجلسة ACP جديدة؛ وتُوجَّه المتابعات إليها مباشرةً. يثبت OpenClaw تأكيد الإنشاء داخل الموضوع. يتطلب بقاء `channels.telegram.threadBindings.spawnSessions` مفعّلًا (افتراضي: `true`). + **إنشاء ACP المرتبط بالسلسلة من الدردشة**: يربط `/acp spawn --thread here|auto` الموضوع الحالي بجلسة ACP جديدة؛ وتُوجَّه المتابعات إليها مباشرة. يثبّت OpenClaw تأكيد الإنشاء داخل الموضوع. يتطلب بقاء `channels.telegram.threadBindings.spawnSessions` مفعّلًا (الافتراضي: `true`). - يوفّر سياق القالب `MessageThreadId` و`IsForum`. تحتفظ محادثات الرسائل المباشرة التي تتضمن `message_thread_id` بتوجيه الرسائل المباشرة وبيانات تعريف الرد في الجلسات المسطحة افتراضيًا؛ ولا تستخدم مفاتيح جلسات واعية بالسلاسل إلا عند تهيئتها باستخدام `threadReplies: "inbound"` أو `threadReplies: "always"` أو `requireTopic: true` أو تهيئة موضوع مطابقة. استخدم `channels.telegram.dm.threadReplies` على المستوى الأعلى للإعداد الافتراضي للحساب، أو `direct..threadReplies` لرسالة مباشرة واحدة. + يعرض سياق القالب `MessageThreadId` و`IsForum`. تحتفظ محادثات الرسائل المباشرة التي تحتوي على `message_thread_id` بتوجيه الرسائل المباشرة وبيانات الرد الوصفية في الجلسات المسطحة افتراضيًا؛ ولا تستخدم مفاتيح الجلسة المدركة للخيوط إلا عند تهيئتها باستخدام `threadReplies: "inbound"` أو `threadReplies: "always"` أو `requireTopic: true` أو إعداد موضوع مطابق. استخدم `channels.telegram.dm.threadReplies` في المستوى الأعلى للإعداد الافتراضي للحساب، أو `direct..threadReplies` لرسالة مباشرة واحدة. - + ### الرسائل الصوتية - يميز Telegram بين الملاحظات الصوتية والملفات الصوتية. + يميز Telegram بين الملاحظات الصوتية وملفات الصوت. - - الافتراضي: سلوك ملف صوتي + - الإعداد الافتراضي: سلوك ملف صوتي - الوسم `[[audio_as_voice]]` في رد الوكيل لفرض الإرسال كملاحظة صوتية - - تُؤطر تفريغات الملاحظات الصوتية الواردة كنص مولد آليًا - وغير موثوق في سياق الوكيل؛ لا يزال اكتشاف الإشارة يستخدم التفريغ - الخام، لذلك تستمر رسائل الصوت المقيدة بالإشارات في العمل. + - تُؤطَّر نصوص الملاحظات الصوتية الواردة كنص منشأ آليًا + وغير موثوق به في سياق الوكيل؛ ولا يزال اكتشاف الإشارات يستخدم النص + الخام، لذا تستمر رسائل الصوت المقيدة بالإشارة في العمل. مثال إجراء الرسالة: @@ -634,15 +634,15 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - لا تدعم ملاحظات الفيديو التسميات التوضيحية؛ يُرسل نص الرسالة المقدم بشكل منفصل. + لا تدعم ملاحظات الفيديو التسميات التوضيحية؛ ويُرسل نص الرسالة المقدم بشكل منفصل. ### الملصقات معالجة الملصقات الواردة: - - WEBP ثابت: يُنزّل ويُعالج (العنصر النائب ``) - - TGS متحرك: يُتجاوز - - WEBM فيديو: يُتجاوز + - WEBP ثابت: يُنزَّل ويُعالَج (العنصر النائب ``) + - TGS متحرك: يُتخطى + - WEBM فيديو: يُتخطى حقول سياق الملصق: @@ -656,7 +656,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `~/.openclaw/telegram/sticker-cache.json` - تُوصف الملصقات مرة واحدة (عند الإمكان) وتُخزن مؤقتًا لتقليل استدعاءات الرؤية المتكررة. + تُوصَف الملصقات مرة واحدة (عند الإمكان) وتُخزَّن مؤقتًا لتقليل استدعاءات الرؤية المتكررة. تفعيل إجراءات الملصقات: @@ -672,7 +672,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - إرسال إجراء ملصق: + إجراء إرسال ملصق: ```json5 { @@ -696,31 +696,31 @@ 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`) ملاحظات: - - `own` يعني تفاعلات المستخدم مع الرسائل المرسلة من البوت فقط (بأفضل جهد عبر ذاكرة الرسائل المرسلة المؤقتة). - - لا تزال أحداث التفاعل تحترم ضوابط الوصول في Telegram (`dmPolicy`، `allowFrom`، `groupPolicy`، `groupAllowFrom`)؛ يُسقط المرسلون غير المصرح لهم. - - لا يوفر Telegram معرفات السلاسل في تحديثات التفاعل. - - تُوجّه المجموعات غير المنتدية إلى جلسة محادثة المجموعة - - تُوجّه مجموعات المنتديات إلى جلسة الموضوع العام للمجموعة (`:topic:1`)، وليس إلى الموضوع الأصلي الدقيق + - تعني `own` تفاعلات المستخدمين مع الرسائل المرسلة من البوت فقط (بأفضل جهد عبر ذاكرة الرسائل المرسلة المؤقتة). + - لا تزال أحداث التفاعل تراعي عناصر التحكم في وصول Telegram (`dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom`)؛ ويُسقَط المرسلون غير المصرح لهم. + - لا يوفر Telegram معرّفات الخيوط في تحديثات التفاعل. + - تُوجَّه المجموعات غير المنتديات إلى جلسة محادثة المجموعة + - تُوجَّه مجموعات المنتديات إلى جلسة الموضوع العام للمجموعة (`:topic:1`)، وليس إلى الموضوع الأصلي الدقيق - يتضمن `allowed_updates` للاستقصاء/Webhook القيمة `message_reaction` تلقائيًا. + يتضمن `allowed_updates` للاستقصاء/Webhook `message_reaction` تلقائيًا. - + يرسل `ackReaction` رمزًا تعبيريًا للإقرار أثناء معالجة OpenClaw لرسالة واردة. ترتيب الحل: @@ -728,17 +728,17 @@ curl "https://api.telegram.org/bot/getUpdates" - `channels.telegram.accounts..ackReaction` - `channels.telegram.ackReaction` - `messages.ackReaction` - - بديل رمز تعبيري لهوية الوكيل (`agents.list[].identity.emoji`، وإلا "👀") + - الرجوع إلى رمز تعبيري لهوية الوكيل (`agents.list[].identity.emoji`، وإلا "👀") ملاحظات: - - يتوقع Telegram رموزًا تعبيرية Unicode (مثل "👀"). + - يتوقع Telegram رمزًا تعبيريًا unicode (مثل "👀"). - استخدم `""` لتعطيل التفاعل لقناة أو حساب. - - تكون كتابات تهيئة القناة مفعلة افتراضيًا (`configWrites !== false`). + + تكون كتابات إعدادات القناة مفعلة افتراضيًا (`configWrites !== false`). تشمل الكتابات التي يطلقها Telegram: @@ -759,39 +759,40 @@ curl "https://api.telegram.org/bot/getUpdates" - - الافتراضي هو الاستقصاء الطويل. لوضع Webhook عيّن `channels.telegram.webhookUrl` و`channels.telegram.webhookSecret`؛ اختياريًا `webhookPath` و`webhookHost` و`webhookPort` (القيم الافتراضية `/telegram-webhook` و`127.0.0.1` و`8787`). + + الإعداد الافتراضي هو الاستقصاء الطويل. لوضع Webhook عيّن `channels.telegram.webhookUrl` و`channels.telegram.webhookSecret`؛ والاختيارية `webhookPath` و`webhookHost` و`webhookPort` (الافتراضيات `/telegram-webhook` و`127.0.0.1` و`8787`). - يربط المستمع المحلي على `127.0.0.1:8787`. للدخول العام، إما ضع وكيلاً عكسيًا أمام المنفذ المحلي أو عيّن `webhookHost: "0.0.0.0"` عن قصد. + يرتبط المستمع المحلي بـ `127.0.0.1:8787`. للدخول العام، إما أن تضع وكيلاً عكسيًا أمام المنفذ المحلي أو تعيّن `webhookHost: "0.0.0.0"` عن قصد. - يتحقق وضع Webhook من حواجز الطلبات، والرمز السري لـ Telegram، وجسم JSON قبل إعادة `200` إلى Telegram. - ثم يعالج OpenClaw التحديث بشكل غير متزامن عبر مسارات البوت نفسها لكل محادثة/لكل موضوع المستخدمة في الاستقصاء الطويل، لذلك لا تُبقي دورات الوكيل البطيئة إقرار التسليم من Telegram قيد الانتظار. + يتحقق وضع Webhook من حراس الطلبات، ورمز Telegram السري، وجسم JSON قبل إرجاع `200` إلى Telegram. + يعالج OpenClaw بعد ذلك التحديث بشكل غير متزامن عبر مسارات البوت نفسها لكل محادثة/لكل موضوع المستخدمة في الاستقصاء الطويل، لذلك لا تؤخر أدوار الوكيل البطيئة إقرار التسليم الخاص بـ Telegram. - - - القيمة الافتراضية لـ `channels.telegram.textChunkLimit` هي 4000. + + - الافتراضي لـ `channels.telegram.textChunkLimit` هو 4000. - يفضل `channels.telegram.chunkMode="newline"` حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - - يضع `channels.telegram.mediaMaxMb` (الافتراضي 100) حدًا لحجم وسائط Telegram الواردة والصادرة. - - يتحكم `channels.telegram.mediaGroupFlushMs` (الافتراضي 500) في مدة تخزين ألبومات/مجموعات وسائط Telegram مؤقتًا قبل أن يرسلها OpenClaw كرسالة واردة واحدة. زدها إذا وصلت أجزاء الألبوم متأخرة؛ وقللها لتقليل زمن استجابة رد الألبوم. - - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم تُعيّن، تُطبق القيمة الافتراضية لـ grammY). يثبت عملاء البوت القيم المهيأة الأقل من حاجز طلب النص/الكتابة الصادر البالغ 60 ثانية حتى لا يجهض grammY تسليم الرد المرئي قبل أن يعمل حاجز النقل والبديل في OpenClaw. لا يزال الاستقصاء الطويل يستخدم حاجز طلب `getUpdates` مدته 45 ثانية حتى لا تُترك الاستقصاءات الخاملة إلى أجل غير مسمى. - - القيمة الافتراضية لـ `channels.telegram.pollingStallThresholdMs` هي `120000`؛ اضبطها بين `30000` و`600000` فقط لحالات إعادة تشغيل توقف الاستقصاء الإيجابية الكاذبة. - - يستخدم سجل سياق المجموعة `channels.telegram.historyLimit` أو `messages.groupChat.historyLimit` (الافتراضي 50)؛ يعطله `0`. - - يُمرر السياق التكميلي للرد/الاقتباس/إعادة التوجيه حاليًا كما ورد. - - تتحكم قوائم السماح في Telegram أساسًا في من يمكنه تشغيل الوكيل، وليست حدًا كاملاً لتنقيح السياق التكميلي. + - يحد `channels.telegram.mediaMaxMb` (الافتراضي 100) حجم وسائط Telegram الواردة والصادرة. + - يتحكم `channels.telegram.mediaGroupFlushMs` (الافتراضي 500) في مدة تخزين ألبومات/مجموعات وسائط Telegram مؤقتًا قبل أن يرسلها OpenClaw كرسالة واردة واحدة. زِد القيمة إذا وصلت أجزاء الألبوم متأخرة؛ وقللها لتقليل زمن انتظار الرد على الألبوم. + - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم يُعيّن، ينطبق افتراضي grammY). تثبت عملاء البوت القيم المهيأة الأقل من حارس طلبات النص/الكتابة الصادر ذي 60 ثانية حتى لا يوقف grammY تسليم الرد المرئي قبل تشغيل حارس نقل OpenClaw والرجوع الاحتياطي. لا يزال الاستقصاء الطويل يستخدم حارس طلب `getUpdates` مدته 45 ثانية حتى لا تُترك الاستقصاءات الخاملة إلى أجل غير مسمى. + - القيمة الافتراضية لـ `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 الصادرة القابلة للاسترداد. يستخدم تسليم الرد النهائي الوارد أيضًا إعادة محاولة محدودة للإرسال الآمن عند إخفاقات Telegram قبل الاتصال، لكنه لا يعيد محاولة أظرف الشبكة الغامضة بعد الإرسال التي قد تكرر الرسائل المرئية. + - ينطبق إعداد `channels.telegram.retry` على مساعدات إرسال Telegram (CLI/الأدوات/الإجراءات) لأخطاء API الصادرة القابلة للاسترداد. يستخدم تسليم الرد النهائي الوارد أيضًا إعادة محاولة إرسال آمنة محدودة لإخفاقات Telegram قبل الاتصال، لكنه لا يعيد محاولة أغطية الشبكة الغامضة بعد الإرسال التي قد تكرر الرسائل المرئية. - يمكن أن يكون هدف إرسال CLI معرف محادثة رقميًا أو اسم مستخدم: + يمكن أن تكون أهداف الإرسال في CLI وأداة الرسائل معرّف محادثة رقميًا أو اسم مستخدم أو هدف موضوع منتدى: ```bash openclaw message send --channel telegram --target 123456789 --message "hi" openclaw message send --channel telegram --target @name --message "hi" +openclaw message send --channel telegram --target -1001234567890:topic:42 --message "hi topic" ``` - تستخدم استطلاعات Telegram الأمر `openclaw message poll` وتدعم مواضيع المنتديات: + تستخدم استقصاءات Telegram الأمر `openclaw message poll` وتدعم مواضيع المنتديات: ```bash openclaw message poll --channel telegram --target 123456789 \ @@ -801,7 +802,7 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ --poll-duration-seconds 300 --poll-public ``` - أعلام الاستطلاع الخاصة بـ Telegram فقط: + أعلام الاستقصاء الخاصة بـ Telegram فقط: - `--poll-duration-seconds` (5-600) - `--poll-anonymous` @@ -810,32 +811,32 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ يدعم إرسال Telegram أيضًا: - - `--presentation` مع كتل `buttons` للوحات المفاتيح المضمنة عندما يسمح `channels.telegram.capabilities.inlineButtons` بذلك + - `--presentation` مع كتل `buttons` للوحات المفاتيح المضمنة عندما يسمح بها `channels.telegram.capabilities.inlineButtons` - `--pin` أو `--delivery '{"pin":true}'` لطلب تسليم مثبت عندما يستطيع البوت التثبيت في تلك المحادثة - - `--force-document` لإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من تحميلات الصور المضغوطة أو الوسائط المتحركة + - `--force-document` لإرسال الصور وGIF الصادرة كمستندات بدلاً من تحميلات الصور المضغوطة أو الوسائط المتحركة - تقييد الإجراءات: + ضبط الإجراءات: - - `channels.telegram.actions.sendMessage=false` يعطل رسائل Telegram الصادرة، بما في ذلك الاستطلاعات - - `channels.telegram.actions.poll=false` يعطل إنشاء استطلاعات Telegram مع إبقاء الإرسالات العادية مفعلة + - يعطل `channels.telegram.actions.sendMessage=false` رسائل Telegram الصادرة، بما في ذلك الاستقصاءات + - يعطل `channels.telegram.actions.poll=false` إنشاء استقصاءات Telegram مع إبقاء الإرسال العادي مفعلاً - - يدعم Telegram موافقات التنفيذ في الرسائل المباشرة للموافقين، ويمكنه اختياريًا نشر المطالبات في المحادثة أو الموضوع الأصلي. يجب أن يكون الموافقون معرفات مستخدمي Telegram رقمية. + + يدعم Telegram موافقات التنفيذ في الرسائل المباشرة للموافقين، ويمكنه اختياريًا نشر المطالبات في المحادثة أو الموضوع الأصلي. يجب أن يكون الموافقون معرّفات مستخدمي Telegram رقمية. - مسار التهيئة: + مسار الإعداد: - - `channels.telegram.execApprovals.enabled` (يُفعّل تلقائيًا عند إمكانية حل موافق واحد على الأقل) - - `channels.telegram.execApprovals.approvers` (يرجع إلى معرفات المالك الرقمية من `commands.ownerAllowFrom`) - - `channels.telegram.execApprovals.target`: `dm` (الافتراضي) | `channel` | `both` - - `agentFilter`، `sessionFilter` + - `channels.telegram.execApprovals.enabled` (يتفعّل تلقائيًا عندما يكون هناك موافق واحد على الأقل قابل للحل) + - `channels.telegram.execApprovals.approvers` (يرجع إلى معرّفات المالكين الرقمية من `commands.ownerAllowFrom`) + - `channels.telegram.execApprovals.target`: `dm` (افتراضي) | `channel` | `both` + - `agentFilter` و`sessionFilter` - تتحكم `channels.telegram.allowFrom` و`groupAllowFrom` و`defaultTo` في من يمكنه التحدث إلى البوت وأين يرسل الردود العادية. وهي لا تجعل شخصًا ما موافقًا على التنفيذ. يهيئ أول اقتران رسالة مباشرة معتمد `commands.ownerAllowFrom` عندما لا يوجد مالك أوامر بعد، لذلك لا يزال إعداد المالك الواحد يعمل دون تكرار المعرفات ضمن `execApprovals.approvers`. + يتحكم `channels.telegram.allowFrom` و`groupAllowFrom` و`defaultTo` في من يمكنه التحدث إلى البوت وأين يرسل الردود العادية. ولا تجعل شخصًا ما موافقًا على التنفيذ. يمهد أول اقتران رسالة مباشرة معتمد لـ `commands.ownerAllowFrom` عندما لا يوجد مالك أمر بعد، لذلك لا يزال إعداد المالك الواحد يعمل دون تكرار المعرّفات تحت `execApprovals.approvers`. - يعرض تسليم القناة نص الأمر في المحادثة؛ لا تفعّل `channel` أو `both` إلا في المجموعات/المواضيع الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لمطالبة الموافقة والمتابعة. تنتهي صلاحية موافقات التنفيذ بعد 30 دقيقة افتراضيًا. + يعرض تسليم القناة نص الأمر في المحادثة؛ فعّل `channel` أو `both` فقط في المجموعات/المواضيع الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لمطالبة الموافقة والمتابعة. تنتهي صلاحية موافقات التنفيذ بعد 30 دقيقة افتراضيًا. - تتطلب أزرار الموافقة المضمنة أيضًا أن يسمح `channels.telegram.capabilities.inlineButtons` بالسطح الهدف (`dm` أو `group` أو `all`). تُحل معرفات الموافقة التي تبدأ بـ `plugin:` عبر موافقات Plugin؛ وتُحل الأخرى عبر موافقات التنفيذ أولًا. + تتطلب أزرار الموافقة المضمنة أيضًا أن يسمح `channels.telegram.capabilities.inlineButtons` بالسطح المستهدف (`dm` أو `group` أو `all`). تُحل معرّفات الموافقة المسبوقة بـ `plugin:` عبر موافقات Plugin؛ أما غيرها فيُحل عبر موافقات التنفيذ أولاً. راجع [موافقات التنفيذ](/ar/tools/exec-approvals). @@ -844,14 +845,14 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ ## عناصر التحكم في ردود الأخطاء -عندما يواجه الوكيل خطأ في التسليم أو المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا تهيئة في هذا السلوك: +عندما يواجه الوكيل خطأ في التسليم أو المزود، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا إعداد في هذا السلوك: -| المفتاح | القيم | الافتراضي | الوصف | -| ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- | -| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | يرسل `reply` رسالة خطأ ودية إلى المحادثة. يكتم `silent` ردود الأخطاء بالكامل. | -| `channels.telegram.errorCooldownMs` | رقم (مللي ثانية) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء إلى المحادثة نفسها. يمنع الرسائل المزعجة للأخطاء أثناء الانقطاعات. | +| المفتاح | القيم | الافتراضي | الوصف | +| ----------------------------------- | ----------------- | --------- | ------------------------------------------------------------------------------------------- | +| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | يرسل `reply` رسالة خطأ ودية إلى المحادثة. يكتم `silent` ردود الأخطاء بالكامل. | +| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء إلى المحادثة نفسها. يمنع رسائل الخطأ المتكررة أثناء الانقطاعات. | -تُدعم التجاوزات لكل حساب ولكل مجموعة ولكل موضوع (بالوراثة نفسها مثل مفاتيح تهيئة Telegram الأخرى). +تُدعم التجاوزات لكل حساب، ولكل مجموعة، ولكل موضوع (بالوراثة نفسها مثل مفاتيح إعداد Telegram الأخرى). ```json5 { @@ -872,56 +873,56 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ ## استكشاف الأخطاء وإصلاحها - + - - إذا كانت `requireMention=false`، يجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة. - - BotFather: `/setprivacy` -> Disable - - ثم أزل البوت وأعد إضافته إلى المجموعة - - يحذر `openclaw channels status` عندما تتوقع التهيئة رسائل مجموعة من دون إشارات. - - يمكن لـ `openclaw channels status --probe` التحقق من معرفات المجموعات الرقمية الصريحة؛ لا يمكن فحص العضوية للبدل العام `"*"`. + - إذا كان `requireMention=false`، فيجب أن يسمح وضع خصوصية Telegram بالرؤية الكاملة. + - BotFather: `/setprivacy` -> تعطيل + - ثم أزِل البوت من المجموعة وأعد إضافته + - يحذّر `openclaw channels status` عندما يتوقع الإعداد رسائل مجموعة غير مذكورة. + - يمكن لـ `openclaw channels status --probe` فحص معرّفات المجموعات الرقمية الصريحة؛ ولا يمكن فحص عضوية حرف البدل `"*"`. - اختبار جلسة سريع: `/activation always`. - - عندما يوجد `channels.telegram.groups`، يجب إدراج المجموعة (أو تضمين `"*"`) + - عند وجود `channels.telegram.groups`، يجب إدراج المجموعة (أو تضمين `"*"`) - تحقّق من عضوية البوت في المجموعة - - راجع السجلات: `openclaw logs --follow` لمعرفة أسباب التجاوز + - راجع السجلات: `openclaw logs --follow` لمعرفة أسباب التخطي - + - - فوّض هوية المُرسِل لديك (الإقران و/أو `allowFrom` الرقمي) - - يظل تفويض الأوامر سارياً حتى عندما تكون سياسة المجموعة `open` - - يعني فشل `setMyCommands` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جداً من الإدخالات؛ قلّل أوامر Plugin/Skills/المخصصة أو عطّل القوائم الأصلية - - استدعاءات بدء التشغيل `deleteMyCommands` / `setMyCommands` واستدعاءات إظهار الكتابة `sendChatAction` محدودة وتُعاد مرة واحدة عبر مسار نقل Telegram الاحتياطي عند انتهاء مهلة الطلب. تشير أخطاء الشبكة/الجلب المستمرة عادةً إلى مشكلات في قابلية الوصول إلى DNS/HTTPS نحو `api.telegram.org` + - صرّح لهوية المرسل لديك (الاقتران و/أو `allowFrom` الرقمي) + - يظل تصريح الأوامر مطبقًا حتى عندما تكون سياسة المجموعة `open` + - يعني `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية + - استدعاءات بدء التشغيل `deleteMyCommands` / `setMyCommands` واستدعاءات الكتابة `sendChatAction` محدودة وتُعاد مرة واحدة عبر بديل نقل Telegram عند انتهاء مهلة الطلب. عادةً ما تشير أخطاء الشبكة/الجلب المستمرة إلى مشكلات في إمكانية الوصول عبر DNS/HTTPS إلى `api.telegram.org` - + - - `getMe returned 401` هو فشل مصادقة من Telegram لرمز البوت المكوّن. - - انسخ رمز البوت مجدداً أو أعد توليده في BotFather، ثم حدّث `channels.telegram.botToken` أو `channels.telegram.tokenFile` أو `channels.telegram.accounts..botToken` أو `TELEGRAM_BOT_TOKEN` للحساب الافتراضي. - - `deleteWebhook 401 Unauthorized` أثناء بدء التشغيل هو أيضاً فشل مصادقة؛ التعامل معه على أنه "لا يوجد Webhook" لن يؤدي إلا إلى تأجيل فشل الرمز السيئ نفسه إلى استدعاءات API اللاحقة. + - `getMe returned 401` هو فشل مصادقة Telegram لرمز البوت المكوّن. + - أعد نسخ رمز البوت أو أعد توليده في BotFather، ثم حدّث `channels.telegram.botToken` أو `channels.telegram.tokenFile` أو `channels.telegram.accounts..botToken` أو `TELEGRAM_BOT_TOKEN` للحساب الافتراضي. + - `deleteWebhook 401 Unauthorized` أثناء بدء التشغيل هو أيضًا فشل مصادقة؛ التعامل معه على أنه "لا يوجد Webhook" لن يؤدي إلا إلى تأجيل فشل الرمز السيئ نفسه إلى استدعاءات API لاحقة. - + - - يمكن أن يؤدي Node 22+ مع جلب/وكيل مخصص إلى سلوك إجهاض فوري إذا كانت أنواع AbortSignal غير متطابقة. - - تحل بعض المضيفات `api.telegram.org` إلى IPv6 أولاً؛ وقد يتسبب خروج IPv6 المعطّل في إخفاقات متقطعة في Telegram API. - - إذا تضمنت السجلات `TypeError: fetch failed` أو `Network request for 'getUpdates' failed!`، فإن OpenClaw يعيد الآن محاولة هذه الأخطاء كأخطاء شبكة قابلة للاسترداد. - - أثناء بدء تشغيل الاستطلاع، يعيد OpenClaw استخدام فحص بدء التشغيل الناجح `getMe` مع grammY بحيث لا يحتاج المشغّل إلى `getMe` ثانٍ قبل أول `getUpdates`. - - إذا فشل `deleteWebhook` بسبب خطأ شبكة عابر أثناء بدء تشغيل الاستطلاع، يواصل OpenClaw إلى الاستطلاع الطويل بدلاً من إجراء استدعاء آخر لمستوى التحكم قبل الاستطلاع. يظهر Webhook الذي لا يزال نشطاً كتعارض في `getUpdates`؛ ثم يعيد OpenClaw بناء نقل Telegram ويحاول تنظيف Webhook مجدداً. - - إذا كانت مقابس Telegram تُعاد تدويرها بوتيرة ثابتة قصيرة، فتحقق من انخفاض `channels.telegram.timeoutSeconds`؛ يقيّد عملاء البوت القيم المكوّنة التي تقل عن حواجز طلبات الخروج و`getUpdates`، لكن الإصدارات الأقدم كان يمكن أن تُجهض كل استطلاع أو رد عند ضبطها دون تلك الحواجز. - - إذا تضمنت السجلات `Polling stall detected`، يعيد OpenClaw تشغيل الاستطلاع ويعيد بناء نقل Telegram بعد 120 ثانية دون اكتمال حيوية الاستطلاع الطويل افتراضياً. - - يحذّر `openclaw channels status --probe` و`openclaw doctor` عندما لا يكون حساب استطلاع قيد التشغيل قد أكمل `getUpdates` بعد فترة السماح عند بدء التشغيل، أو عندما لا يكون حساب Webhook قيد التشغيل قد أكمل `setWebhook` بعد فترة السماح عند بدء التشغيل، أو عندما يكون آخر نشاط ناجح لنقل الاستطلاع قديماً. - - زد `channels.telegram.pollingStallThresholdMs` فقط عندما تكون استدعاءات `getUpdates` طويلة التشغيل سليمة لكن مضيفك لا يزال يبلغ خطأً عن إعادة تشغيل بسبب توقف الاستطلاع. تشير حالات التوقف المستمرة عادةً إلى مشكلات وكيل أو DNS أو IPv6 أو خروج TLS بين المضيف و`api.telegram.org`. - - يحترم Telegram أيضاً متغيرات بيئة وكيل العملية لنقل Bot API، بما في ذلك `HTTP_PROXY` و`HTTPS_PROXY` و`ALL_PROXY` وصيغها بالأحرف الصغيرة. لا يزال بإمكان `NO_PROXY` / `no_proxy` تجاوز `api.telegram.org`. - - إذا كان وكيل OpenClaw المُدار مكوّناً عبر `OPENCLAW_PROXY_URL` لبيئة خدمة ولا توجد متغيرات بيئة وكيل قياسية، يستخدم Telegram ذلك URL لنقل Bot API أيضاً. - - على مضيفات VPS ذات خروج مباشر/TLS غير مستقر، وجّه استدعاءات Telegram API عبر `channels.telegram.proxy`: + - يمكن أن يؤدي Node 22+ مع fetch/وكيل مخصص إلى سلوك إجهاض فوري إذا لم تتطابق أنواع AbortSignal. + - بعض المضيفين يحلون `api.telegram.org` إلى IPv6 أولًا؛ وقد يتسبب خروج IPv6 المعطل في إخفاقات متقطعة في API الخاص بـ Telegram. + - إذا تضمنت السجلات `TypeError: fetch failed` أو `Network request for 'getUpdates' failed!`، فإن OpenClaw يعيد الآن المحاولة مع هذه الأخطاء كأخطاء شبكة قابلة للاسترداد. + - أثناء بدء تشغيل الاستقصاء، يعيد OpenClaw استخدام فحص بدء التشغيل الناجح `getMe` لـ grammY حتى لا يحتاج المشغّل إلى `getMe` ثانٍ قبل أول `getUpdates`. + - إذا فشل `deleteWebhook` بخطأ شبكة عابر أثناء بدء تشغيل الاستقصاء، يواصل OpenClaw إلى الاستقصاء الطويل بدلًا من إجراء استدعاء آخر لمستوى التحكم قبل الاستقصاء. يظهر Webhook الذي ما زال نشطًا كتعارض في `getUpdates`؛ ثم يعيد OpenClaw بناء نقل Telegram ويعيد محاولة تنظيف Webhook. + - إذا كانت مقابس Telegram تُعاد تدويرها وفق وتيرة ثابتة قصيرة، فتحقّق من انخفاض `channels.telegram.timeoutSeconds`؛ يقيّد عملاء البوت القيم المكوّنة أدنى من حراس الطلب الصادر و`getUpdates`، لكن الإصدارات الأقدم قد تُجهض كل استقصاء أو رد عندما كانت هذه القيمة مضبوطة أدنى من تلك الحراس. + - إذا تضمنت السجلات `Polling stall detected`، فإن OpenClaw يعيد تشغيل الاستقصاء ويعيد بناء نقل Telegram بعد 120 ثانية افتراضيًا دون اكتمال حيوية الاستقصاء الطويل. + - يحذّر `openclaw channels status --probe` و`openclaw doctor` عندما لا يكون حساب استقصاء قيد التشغيل قد أكمل `getUpdates` بعد مهلة بدء التشغيل، أو عندما لا يكون حساب Webhook قيد التشغيل قد أكمل `setWebhook` بعد مهلة بدء التشغيل، أو عندما يكون آخر نشاط ناجح لنقل الاستقصاء قديمًا. + - لا تزد `channels.telegram.pollingStallThresholdMs` إلا عندما تكون استدعاءات `getUpdates` طويلة التشغيل سليمة، لكن مضيفك ما زال يبلغ خطأً عن إعادة تشغيل بسبب توقف الاستقصاء. عادةً ما تشير التوقفات المستمرة إلى مشكلات في الوكيل أو DNS أو IPv6 أو خروج TLS بين المضيف و`api.telegram.org`. + - يحترم Telegram أيضًا متغيرات بيئة وكيل العملية لنقل Bot API، بما في ذلك `HTTP_PROXY` و`HTTPS_PROXY` و`ALL_PROXY` وصيغها بحروف صغيرة. لا يزال بإمكان `NO_PROXY` / `no_proxy` تجاوز `api.telegram.org`. + - إذا كان وكيل OpenClaw المُدار مكوّنًا عبر `OPENCLAW_PROXY_URL` لبيئة خدمة ولا توجد بيئة وكيل قياسية، يستخدم Telegram ذلك الرابط لنقل Bot API أيضًا. + - على مضيفي VPS ذوي خروج/TLS المباشر غير المستقر، وجّه استدعاءات API الخاصة بـ Telegram عبر `channels.telegram.proxy`: ```yaml channels: @@ -929,8 +930,8 @@ channels: proxy: socks5://:@proxy-host:1080 ``` - - يضبط Node 22+ افتراضياً `autoSelectFamily=true` (باستثناء WSL2). يحترم ترتيب نتائج DNS في Telegram `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`، ثم `channels.telegram.network.dnsResultOrder`، ثم افتراضي العملية مثل `NODE_OPTIONS=--dns-result-order=ipv4first`؛ إذا لم ينطبق أي منها، يعود Node 22+ إلى `ipv4first`. - - إذا كان مضيفك WSL2 أو يعمل صراحةً بشكل أفضل بسلوك IPv4 فقط، فافرض اختيار العائلة: + - يضبط Node 22+ افتراضيًا `autoSelectFamily=true` (باستثناء WSL2). يتبع ترتيب نتائج DNS لـ Telegram `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`، ثم `channels.telegram.network.dnsResultOrder`، ثم الإعداد الافتراضي للعملية مثل `NODE_OPTIONS=--dns-result-order=ipv4first`؛ إذا لم ينطبق أي منها، يعود Node 22+ إلى `ipv4first`. + - إذا كان مضيفك WSL2 أو يعمل بوضوح على نحو أفضل بسلوك IPv4 فقط، فافرض اختيار العائلة: ```yaml channels: @@ -939,10 +940,10 @@ channels: autoSelectFamily: false ``` - - إجابات نطاق القياس المعياري RFC 2544 (`198.18.0.0/15`) مسموح بها بالفعل - لتنزيلات وسائط Telegram افتراضياً. إذا أعاد وكيل fake-IP موثوق أو - وكيل شفاف كتابة `api.telegram.org` إلى عنوان خاص/داخلي/ذي استخدام خاص آخر - أثناء تنزيلات الوسائط، يمكنك الاشتراك في التجاوز الخاص بـ Telegram فقط: + - إجابات نطاق القياس المعياري RFC 2544 ‏(`198.18.0.0/15`) مسموح بها بالفعل + لتنزيلات وسائط Telegram افتراضيًا. إذا كان وكيل fake-IP موثوق أو + وكيل شفاف يعيد كتابة `api.telegram.org` إلى عنوان خاص/داخلي/خاص الاستخدام آخر + أثناء تنزيلات الوسائط، يمكنك الاشتراك في تجاوز خاص بـ Telegram فقط: ```yaml channels: @@ -953,16 +954,16 @@ channels: - يتوفر الاشتراك نفسه لكل حساب عند `channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`. - - إذا كان وكيلك يحل مضيفات وسائط Telegram إلى `198.18.x.x`، فاترك - العلم الخطر معطلاً أولاً. تسمح وسائط Telegram بالفعل بنطاق القياس - المعياري RFC 2544 افتراضياً. + - إذا كان وكيلك يحل مضيفي وسائط Telegram إلى `198.18.x.x`، فاترك + العلم الخطر متوقفًا أولًا. تسمح وسائط Telegram بالفعل بنطاق القياس + المعياري RFC 2544 افتراضيًا. يضعف `channels.telegram.network.dangerouslyAllowPrivateNetwork` وسائل حماية SSRF - لوسائط Telegram. استخدمه فقط لبيئات الوكيل الموثوقة التي يتحكم بها المشغّل - مثل توجيه fake-IP في Clash أو Mihomo أو Surge عندما تُنشئ - إجابات خاصة أو ذات استخدام خاص خارج نطاق القياس المعياري RFC 2544. - اتركه معطلاً للوصول العادي إلى Telegram عبر الإنترنت العام. + لوسائط Telegram. استخدمه فقط في بيئات الوكلاء الموثوقة التي يتحكم بها المشغّل + مثل توجيه fake-IP في Clash أو Mihomo أو Surge عندما تولّد + إجابات خاصة أو خاصة الاستخدام خارج نطاق القياس المعياري RFC 2544. + اتركه متوقفًا للوصول العادي إلى Telegram عبر الإنترنت العام. - تجاوزات البيئة (مؤقتة): @@ -979,40 +980,40 @@ dig +short api.telegram.org AAAA -مزيد من المساعدة: [استكشاف أخطاء القنوات وإصلاحها](/ar/channels/troubleshooting). +مزيد من المساعدة: [استكشاف مشكلات القنوات وإصلاحها](/ar/channels/troubleshooting). -## مرجع التكوين +## مرجع الإعداد -المرجع الأساسي: [مرجع التكوين - Telegram](/ar/gateway/config-channels#telegram). +المرجع الأساسي: [مرجع الإعداد - Telegram](/ar/gateway/config-channels#telegram). - + -- بدء التشغيل/المصادقة: `enabled`, `botToken`, `tokenFile`, `accounts.*` (يجب أن يشير `tokenFile` إلى ملف عادي؛ تُرفض الروابط الرمزية) -- التحكم في الوصول: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` على المستوى الأعلى (`type: "acp"`) -- موافقات التنفيذ: `execApprovals`, `accounts.*.execApprovals` -- الأمر/القائمة: `commands.native`, `commands.nativeSkills`, `customCommands` -- الترابط/الردود: `replyToMode`, `dm.threadReplies`, `direct.*.threadReplies` -- البث: `streaming` (معاينة), `streaming.preview.toolProgress`, `blockStreaming` -- التنسيق/التسليم: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix` -- الوسائط/الشبكة: `mediaMaxMb`, `mediaGroupFlushMs`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy` +- بدء التشغيل/المصادقة: `enabled`، `botToken`، `tokenFile`، `accounts.*` (يجب أن يشير `tokenFile` إلى ملف عادي؛ تُرفض الروابط الرمزية) +- التحكم في الوصول: `dmPolicy`، `allowFrom`، `groupPolicy`، `groupAllowFrom`، `groups`، `groups.*.topics.*`، `bindings[]` في المستوى الأعلى (`type: "acp"`) +- موافقات التنفيذ: `execApprovals`، `accounts.*.execApprovals` +- الأوامر/القائمة: `commands.native`، `commands.nativeSkills`، `customCommands` +- الخيوط/الردود: `replyToMode`، `dm.threadReplies`، `direct.*.threadReplies` +- البث: `streaming` (معاينة)، `streaming.preview.toolProgress`، `blockStreaming` +- التنسيق/التسليم: `textChunkLimit`، `chunkMode`، `linkPreview`، `responsePrefix` +- الوسائط/الشبكة: `mediaMaxMb`، `mediaGroupFlushMs`، `timeoutSeconds`، `pollingStallThresholdMs`، `retry`، `network.autoSelectFamily`، `network.dangerouslyAllowPrivateNetwork`، `proxy` - جذر API مخصص: `apiRoot` (جذر Bot API فقط؛ لا تضمّن `/bot`) -- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost` -- الإجراءات/القدرات: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker` -- التفاعلات: `reactionNotifications`, `reactionLevel` -- الأخطاء: `errorPolicy`, `errorCooldownMs` -- الكتابات/السجل: `configWrites`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` +- Webhook: `webhookUrl`، `webhookSecret`، `webhookPath`، `webhookHost` +- الإجراءات/القدرات: `capabilities.inlineButtons`، `actions.sendMessage|editMessage|deleteMessage|reactions|sticker` +- التفاعلات: `reactionNotifications`، `reactionLevel` +- الأخطاء: `errorPolicy`، `errorCooldownMs` +- الكتابات/السجل: `configWrites`، `historyLimit`، `dmHistoryLimit`، `dms.*.historyLimit` -أسبقية الحسابات المتعددة: عند تكوين معرّفَي حساب أو أكثر، اضبط `channels.telegram.defaultAccount` (أو ضمّن `channels.telegram.accounts.default`) لجعل التوجيه الافتراضي صريحاً. وإلا يعود OpenClaw إلى أول معرّف حساب مُطبّع ويحذّر `openclaw doctor`. ترث الحسابات المسماة `channels.telegram.allowFrom` / `groupAllowFrom`، لكنها لا ترث قيم `accounts.default.*`. +أسبقية الحسابات المتعددة: عندما يكون معرّفا حسابين أو أكثر مكوّنين، اضبط `channels.telegram.defaultAccount` (أو ضمّن `channels.telegram.accounts.default`) لجعل التوجيه الافتراضي صريحًا. وإلا يعود OpenClaw إلى أول معرّف حساب مطبّع ويحذّر `openclaw doctor`. ترث الحسابات المسماة `channels.telegram.allowFrom` / `groupAllowFrom`، لكنها لا ترث قيم `accounts.default.*`. ## ذات صلة - - أقرن مستخدم Telegram بـ Gateway. + + اربط مستخدم Telegram بـ Gateway. سلوك قائمة السماح للمجموعات والمواضيع. @@ -1023,10 +1024,10 @@ dig +short api.telegram.org AAAA نموذج التهديد والتقوية. - + اربط المجموعات والمواضيع بالوكلاء. - تشخيصات عبر القنوات. + تشخيصات عابرة للقنوات. diff --git a/docs/ar/cli/message.md b/docs/ar/cli/message.md index b7dd0e068..fb5c50f10 100644 --- a/docs/ar/cli/message.md +++ b/docs/ar/cli/message.md @@ -1,14 +1,14 @@ --- read_when: - - إضافة إجراءات CLI للرسائل أو تعديلها + - إضافة إجراءات CLI الخاصة بالرسائل أو تعديلها - تغيير سلوك القناة الصادرة -summary: مرجع CLI لـ `openclaw message` (إجراءات send + القنوات) +summary: مرجع CLI لـ `openclaw message` (الإرسال + إجراءات القناة) title: رسالة x-i18n: - generated_at: "2026-05-02T20:42:33Z" + generated_at: "2026-05-04T07:46:36Z" model: gpt-5.5 provider: openai - source_hash: 6b73a50da34838f80ad5d0d266f5c66f95436f8535e6312296ae022918b1ab55 + source_hash: 9ef57d33c93206a61a6d044667de4faf6340f7d8cc324300f235e838ee3b7ff1 source_path: cli/message.md workflow: 16 --- @@ -26,103 +26,103 @@ openclaw message [flags] اختيار القناة: -- يكون `--channel` مطلوبًا إذا كانت هناك أكثر من قناة واحدة مكوّنة. -- إذا كانت قناة واحدة بالضبط مكوّنة، تصبح هي الافتراضية. +- يكون `--channel` مطلوبًا إذا كانت هناك أكثر من قناة واحدة مهيأة. +- إذا كانت هناك قناة واحدة مهيأة بالضبط، فتصبح هي الافتراضية. - القيم: `discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp` (يتطلب Mattermost وجود Plugin) -- يحلّ `openclaw message` القناة المحددة إلى Plugin المالك لها عند وجود `--channel` أو هدف مسبوق باسم قناة؛ وإلا فإنه يحمّل مكوّنات Plugin للقنوات المكوّنة لاستنتاج القناة الافتراضية. +- يحل `openclaw message` القناة المحددة إلى Plugin المالك لها عند وجود `--channel` أو هدف مسبوق باسم قناة؛ وإلا فإنه يحمّل Plugins القنوات المهيأة لاستنتاج القناة الافتراضية. تنسيقات الهدف (`--target`): -- WhatsApp: رقم E.164، أو JID لمجموعة، أو JID لقناة/نشرة WhatsApp (`...@newsletter`) -- Telegram: معرّف المحادثة أو `@username` -- Discord: `channel:` أو `user:` (أو إشارة `<@id>`؛ تُعامل المعرّفات الرقمية الخام كقنوات) +- WhatsApp: رقم E.164، أو JID مجموعة، أو JID قناة/نشرة WhatsApp (`...@newsletter`) +- Telegram: معرّف دردشة، أو `@username`، أو هدف موضوع منتدى (`-1001234567890:topic:42`، أو `--thread-id 42`) +- Discord: `channel:` أو `user:` (أو إشارة `<@id>`؛ وتُعامل المعرّفات الرقمية الخام كقنوات) - Google Chat: `spaces/` أو `users/` - Slack: `channel:` أو `user:` (يُقبل معرّف القناة الخام) - Mattermost (Plugin): `channel:`، أو `user:`، أو `@username` (تُعامل المعرّفات المجردة كقنوات) - Signal: `+E.164`، أو `group:`، أو `signal:+E.164`، أو `signal:group:`، أو `username:`/`u:` -- iMessage: معرّف، أو `chat_id:`، أو `chat_guid:`، أو `chat_identifier:` +- iMessage: مقبض، أو `chat_id:`، أو `chat_guid:`، أو `chat_identifier:` - Matrix: `@user:server`، أو `!room:server`، أو `#alias:server` -- Microsoft Teams: معرّف المحادثة (`19:...@thread.tacv2`) أو `conversation:` أو `user:` +- Microsoft Teams: معرّف محادثة (`19:...@thread.tacv2`) أو `conversation:` أو `user:` البحث بالاسم: -- بالنسبة للموفّرين المدعومين (Discord/Slack/إلخ)، تُحلّ أسماء القنوات مثل `Help` أو `#help` عبر ذاكرة التخزين المؤقت للدليل. -- عند عدم وجود نتيجة في ذاكرة التخزين المؤقت، سيحاول OpenClaw إجراء بحث مباشر في الدليل عندما يدعمه الموفّر. +- لمقدمي الخدمة المدعومين (Discord/Slack/وغيرهما)، تُحل أسماء القنوات مثل `Help` أو `#help` عبر ذاكرة التخزين المؤقت للدليل. +- عند عدم العثور في ذاكرة التخزين المؤقت، سيحاول OpenClaw إجراء بحث مباشر في الدليل عندما يدعم مقدم الخدمة ذلك. ## الأعلام الشائعة - `--channel ` - `--account ` -- `--target ` (القناة أو المستخدم الهدف للإرسال/الاستطلاع/القراءة/إلخ) -- `--targets ` (مكرر؛ للبث فقط) +- `--target ` (القناة أو المستخدم الهدف للإرسال/الاستطلاع/القراءة/وغير ذلك) +- `--targets ` (يُكرر؛ للبث فقط) - `--json` - `--dry-run` - `--verbose` ## سلوك SecretRef -- يحلّ `openclaw message` مراجع SecretRefs للقنوات المدعومة قبل تشغيل الإجراء المحدد. -- يكون الحل محصورًا بهدف الإجراء النشط عندما يكون ذلك ممكنًا: - - على نطاق القناة عند تعيين `--channel` (أو استنتاجه من الأهداف المسبوقة مثل `discord:...`) - - على نطاق الحساب عند تعيين `--account` (عموميات القناة + أسطح الحساب المحدد) - - عند حذف `--account`، لا يفرض OpenClaw نطاق SecretRef لحساب `default` -- لا تمنع SecretRefs غير المحلولة في القنوات غير المرتبطة إجراء رسالة مستهدف. -- إذا كان SecretRef للقناة/الحساب المحدد غير محلول، يفشل الأمر بشكل مغلق لذلك الإجراء. +- يحل `openclaw message` قيم SecretRef المدعومة للقنوات قبل تشغيل الإجراء المحدد. +- يكون الحل محدودًا بهدف الإجراء النشط عندما يكون ذلك ممكنًا: + - على مستوى القناة عندما يُعيّن `--channel` (أو يُستنتج من الأهداف المسبوقة مثل `discord:...`) + - على مستوى الحساب عندما يُعيّن `--account` (عموميات القناة + واجهات الحساب المحدد) + - عندما يُحذف `--account`، لا يفرض OpenClaw نطاق SecretRef لحساب `default` +- لا تمنع قيم SecretRef غير المحلولة في قنوات غير مرتبطة إجراء رسالة مستهدفًا. +- إذا كانت قيمة SecretRef للقناة/الحساب المحدد غير محلولة، يفشل الأمر فشلًا مغلقًا لذلك الإجراء. ## الإجراءات -### الأساس +### الأساسي - `send` - القنوات: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (Plugin)/Signal/iMessage/Matrix/Microsoft Teams - مطلوب: `--target`، بالإضافة إلى `--message` أو `--media` أو `--presentation` - اختياري: `--media`، `--presentation`، `--delivery`، `--pin`، `--reply-to`، `--thread-id`، `--gif-playback`، `--force-document`، `--silent` - - حمولات العرض التقديمي المشتركة: يرسل `--presentation` كتلًا دلالية (`text`، `context`، `divider`، `buttons`، `select`) يعرضها الأساس عبر الإمكانات المعلنة للقناة المحددة. راجع [عرض الرسائل](/ar/plugins/message-presentation). - - تفضيلات التسليم العامة: يقبل `--delivery` تلميحات تسليم مثل `{ "pin": true }`؛ ويكون `--pin` اختصارًا للتسليم المثبّت عندما تدعمه القناة. - - Telegram فقط: `--force-document` (إرسال الصور وصور GIF كمستندات لتجنب ضغط Telegram) + - حمولات العرض التقديمي المشتركة: يرسل `--presentation` كتلًا دلالية (`text`، `context`، `divider`، `buttons`، `select`) يعرضها القلب عبر القدرات المعلنة للقناة المحددة. راجع [عرض الرسائل](/ar/plugins/message-presentation). + - تفضيلات التسليم العامة: يقبل `--delivery` تلميحات تسليم مثل `{ "pin": true }`؛ ويكون `--pin` اختصارًا للتسليم المثبت عندما تدعمه القناة. + - Telegram فقط: `--force-document` (إرسال الصور وملفات GIF كمستندات لتجنب ضغط Telegram) - Telegram فقط: `--thread-id` (معرّف موضوع المنتدى) - - Slack فقط: `--thread-id` (الطابع الزمني لسلسلة المحادثات؛ يستخدم `--reply-to` الحقل نفسه) + - Slack فقط: `--thread-id` (الطابع الزمني للسلسلة؛ يستخدم `--reply-to` الحقل نفسه) - Telegram + Discord: `--silent` - - WhatsApp فقط: `--gif-playback`؛ تُخاطَب قنوات/نشرات WhatsApp باستخدام JID الأصلي الخاص بها `@newsletter`. + - WhatsApp فقط: `--gif-playback`؛ تُخاطَب قنوات/نشرات WhatsApp باستخدام JID الأصلي `@newsletter`. - `poll` - القنوات: WhatsApp/Telegram/Discord/Matrix/Microsoft Teams - - مطلوب: `--target`، `--poll-question`، `--poll-option` (مكرر) + - مطلوب: `--target`، و`--poll-question`، و`--poll-option` (يُكرر) - اختياري: `--poll-multi` - - Discord فقط: `--poll-duration-hours`، `--silent`، `--message` - - Telegram فقط: `--poll-duration-seconds` (5-600)، `--silent`، `--poll-anonymous` / `--poll-public`، `--thread-id` + - Discord فقط: `--poll-duration-hours`، و`--silent`، و`--message` + - Telegram فقط: `--poll-duration-seconds` (5-600)، و`--silent`، و`--poll-anonymous` / `--poll-public`، و`--thread-id` - `react` - القنوات: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/Matrix - - مطلوب: `--message-id`، `--target` - - اختياري: `--emoji`، `--remove`، `--participant`، `--from-me`، `--target-author`، `--target-author-uuid` - - ملاحظة: يتطلب `--remove` وجود `--emoji` (احذف `--emoji` لمسح تفاعلاتك عندما يكون ذلك مدعومًا؛ راجع /tools/reactions) - - WhatsApp فقط: `--participant`، `--from-me` - - تفاعلات مجموعات Signal: يلزم `--target-author` أو `--target-author-uuid` + - مطلوب: `--message-id`، و`--target` + - اختياري: `--emoji`، و`--remove`، و`--participant`، و`--from-me`، و`--target-author`، و`--target-author-uuid` + - ملاحظة: يتطلب `--remove` وجود `--emoji` (احذف `--emoji` لمسح تفاعلاتك الخاصة حيث يكون ذلك مدعومًا؛ راجع /tools/reactions) + - WhatsApp فقط: `--participant`، و`--from-me` + - تفاعلات مجموعات Signal: يكون `--target-author` أو `--target-author-uuid` مطلوبًا - `reactions` - القنوات: Discord/Google Chat/Slack/Matrix - - مطلوب: `--message-id`، `--target` + - مطلوب: `--message-id`، و`--target` - اختياري: `--limit` - `read` - القنوات: Discord/Slack/Matrix - مطلوب: `--target` - - اختياري: `--limit`، `--message-id`، `--before`، `--after` - - Slack فقط: يقرأ `--message-id` طابعًا زمنيًا محددًا لرسالة Slack؛ ادمجه مع `--thread-id` لقراءة رد محدد في سلسلة محادثات. + - اختياري: `--limit`، و`--message-id`، و`--before`، و`--after` + - Slack فقط: يقرأ `--message-id` طابعًا زمنيًا محددًا لرسالة Slack؛ ادمجه مع `--thread-id` لقراءة رد محدد في سلسلة بدقة. - Discord فقط: `--around` - `edit` - القنوات: Discord/Slack/Matrix - - مطلوب: `--message-id`، `--message`، `--target` + - مطلوب: `--message-id`، و`--message`، و`--target` - `delete` - القنوات: Discord/Slack/Telegram/Matrix - - مطلوب: `--message-id`، `--target` + - مطلوب: `--message-id`، و`--target` - `pin` / `unpin` - القنوات: Discord/Slack/Matrix - - مطلوب: `--message-id`، `--target` + - مطلوب: `--message-id`، و`--target` - `pins` (قائمة) - القنوات: Discord/Slack/Matrix @@ -131,80 +131,80 @@ openclaw message [flags] - `permissions` - القنوات: Discord/Matrix - مطلوب: `--target` - - Matrix فقط: متاح عند تمكين تشفير Matrix والسماح بإجراءات التحقق + - Matrix فقط: متاح عندما يكون تشفير Matrix ممكّنًا وتكون إجراءات التحقق مسموحًا بها - `search` - القنوات: Discord - - مطلوب: `--guild-id`، `--query` - - اختياري: `--channel-id`، `--channel-ids` (مكرر)، `--author-id`، `--author-ids` (مكرر)، `--limit` + - مطلوب: `--guild-id`، و`--query` + - اختياري: `--channel-id`، و`--channel-ids` (يُكرر)، و`--author-id`، و`--author-ids` (يُكرر)، و`--limit` -### سلاسل المحادثات +### السلاسل - `thread create` - القنوات: Discord - - مطلوب: `--thread-name`، `--target` (معرّف القناة) - - اختياري: `--message-id`، `--message`، `--auto-archive-min` + - مطلوب: `--thread-name`، و`--target` (معرّف القناة) + - اختياري: `--message-id`، و`--message`، و`--auto-archive-min` - `thread list` - القنوات: Discord - مطلوب: `--guild-id` - - اختياري: `--channel-id`، `--include-archived`، `--before`، `--limit` + - اختياري: `--channel-id`، و`--include-archived`، و`--before`، و`--limit` - `thread reply` - القنوات: Discord - - مطلوب: `--target` (معرّف سلسلة المحادثات)، `--message` - - اختياري: `--media`، `--reply-to` + - مطلوب: `--target` (معرّف السلسلة)، و`--message` + - اختياري: `--media`، و`--reply-to` ### الرموز التعبيرية - `emoji list` - Discord: `--guild-id` - - Slack: لا أعلام إضافية + - Slack: لا توجد أعلام إضافية - `emoji upload` - القنوات: Discord - - مطلوب: `--guild-id`، `--emoji-name`، `--media` - - اختياري: `--role-ids` (مكرر) + - مطلوب: `--guild-id`، و`--emoji-name`، و`--media` + - اختياري: `--role-ids` (يُكرر) ### الملصقات - `sticker send` - القنوات: Discord - - مطلوب: `--target`، `--sticker-id` (مكرر) + - مطلوب: `--target`، و`--sticker-id` (يُكرر) - اختياري: `--message` - `sticker upload` - القنوات: Discord - - مطلوب: `--guild-id`، `--sticker-name`، `--sticker-desc`، `--sticker-tags`، `--media` + - مطلوب: `--guild-id`، و`--sticker-name`، و`--sticker-desc`، و`--sticker-tags`، و`--media` ### الأدوار / القنوات / الأعضاء / الصوت - `role info` (Discord): `--guild-id` -- `role add` / `role remove` (Discord): `--guild-id`، `--user-id`، `--role-id` +- `role add` / `role remove` (Discord): `--guild-id`، و`--user-id`، و`--role-id` - `channel info` (Discord): `--target` - `channel list` (Discord): `--guild-id` - `member info` (Discord/Slack): `--user-id` (+ `--guild-id` لـ Discord) -- `voice status` (Discord): `--guild-id`، `--user-id` +- `voice status` (Discord): `--guild-id`، و`--user-id` ### الأحداث - `event list` (Discord): `--guild-id` -- `event create` (Discord): `--guild-id`، `--event-name`، `--start-time` - - اختياري: `--end-time`، `--desc`، `--channel-id`، `--location`، `--event-type` +- `event create` (Discord): `--guild-id`، و`--event-name`، و`--start-time` + - اختياري: `--end-time`، و`--desc`، و`--channel-id`، و`--location`، و`--event-type` ### الإشراف (Discord) -- `timeout`: `--guild-id`، `--user-id` (اختياريًا `--duration-min` أو `--until`؛ احذف كليهما لمسح المهلة) -- `kick`: `--guild-id`، `--user-id` (+ `--reason`) -- `ban`: `--guild-id`، `--user-id` (+ `--delete-days`، `--reason`) +- `timeout`: `--guild-id`، و`--user-id` (اختياريًا `--duration-min` أو `--until`؛ احذف كليهما لمسح المهلة) +- `kick`: `--guild-id`، و`--user-id` (+ `--reason`) +- `ban`: `--guild-id`، و`--user-id` (+ `--delete-days`، و`--reason`) - يدعم `timeout` أيضًا `--reason` ### البث - `broadcast` - - القنوات: أي قناة مكوّنة؛ استخدم `--channel all` لاستهداف جميع الموفّرين + - القنوات: أي قناة مهيأة؛ استخدم `--channel all` لاستهداف جميع مقدمي الخدمة - مطلوب: `--targets ` - - اختياري: `--message`، `--media`، `--dry-run` + - اختياري: `--message`، و`--media`، و`--dry-run` ## أمثلة @@ -215,7 +215,7 @@ openclaw message send --channel discord \ --target channel:123 --message "hi" --reply-to 456 ``` -إرسال رسالة مع أزرار دلالية: +إرسال رسالة بأزرار دلالية: ``` openclaw message send --channel discord \ @@ -223,9 +223,9 @@ openclaw message send --channel discord \ --presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Approve","value":"approve","style":"success"},{"label":"Decline","value":"decline","style":"danger"}]}]}' ``` -يعرض الأساس حمولة `presentation` نفسها إلى مكوّنات Discord، وكتل Slack، وأزرار Telegram المضمنة، وخصائص Mattermost، أو بطاقات Teams/Feishu بحسب إمكانية القناة. راجع [عرض الرسائل](/ar/plugins/message-presentation) للاطلاع على العقد الكامل وقواعد الرجوع الاحتياطي. +يعرض القلب حمولة `presentation` نفسها في مكوّنات Discord، أو كتل Slack، أو أزرار Telegram المضمنة، أو خصائص Mattermost، أو بطاقات Teams/Feishu بحسب قدرة القناة. راجع [عرض الرسائل](/ar/plugins/message-presentation) للاطلاع على العقد الكامل وقواعد الرجوع الاحتياطي. -إرسال حمولة عرض تقديمي أكثر ثراءً: +إرسال حمولة عرض تقديمي أغنى: ```bash openclaw message send --channel googlechat --target spaces/AAA... \ diff --git a/docs/ar/web/control-ui.md b/docs/ar/web/control-ui.md index 4d362d979..c0b91940e 100644 --- a/docs/ar/web/control-ui.md +++ b/docs/ar/web/control-ui.md @@ -1,25 +1,25 @@ --- read_when: - تريد تشغيل Gateway من متصفح - - تريد الوصول إلى Tailnet بدون أنفاق SSH + - تريد الوصول إلى Tailnet دون أنفاق SSH sidebarTitle: Control UI -summary: واجهة التحكم المستندة إلى المتصفح لـ Gateway (الدردشة، العُقد، التكوين) +summary: واجهة تحكم مستندة إلى المتصفح لـ Gateway (الدردشة، العُقد، الإعدادات) title: واجهة التحكم x-i18n: - generated_at: "2026-05-04T07:12:12Z" + generated_at: "2026-05-04T07:46:40Z" model: gpt-5.5 provider: openai - source_hash: 07fbbe1c7fec5f67a04a231e02bdf0f7d16be9c5fe188915674d71fcd69002a5 + source_hash: 896c75116d7a396571017ac6e6db7ff6ce328617e44470c303fd41af58aa2bd7 source_path: web/control-ui.md workflow: 16 --- -واجهة التحكم هي تطبيق صفحة واحدة صغير مبني بـ **Vite + Lit** يقدمه Gateway: +واجهة التحكم هي تطبيق صغير أحادي الصفحة مبني بـ **Vite + Lit** يقدمه Gateway: - الافتراضي: `http://:18789/` -- بادئة اختيارية: عيّن `gateway.controlUi.basePath` (مثل `/openclaw`) +- بادئة اختيارية: اضبط `gateway.controlUi.basePath` (مثل `/openclaw`) -تتواصل **مباشرة مع WebSocket الخاص بـ Gateway** على المنفذ نفسه. +يتواصل **مباشرة مع Gateway WebSocket** على المنفذ نفسه. ## فتح سريع (محلي) @@ -27,16 +27,16 @@ x-i18n: - [http://127.0.0.1:18789/](http://127.0.0.1:18789/) (أو [http://localhost:18789/](http://localhost:18789/)) -إذا فشل تحميل الصفحة، فابدأ Gateway أولاً: `openclaw gateway`. +إذا فشل تحميل الصفحة، فابدأ Gateway أولًا: `openclaw gateway`. -تُقدَّم المصادقة أثناء مصافحة WebSocket عبر: +تُوفَّر المصادقة أثناء مصافحة WebSocket عبر: - `connect.params.auth.token` - `connect.params.auth.password` - ترويسات هوية Tailscale Serve عند ضبط `gateway.auth.allowTailscale: true` - ترويسات هوية الوكيل الموثوق عند ضبط `gateway.auth.mode: "trusted-proxy"` -تحتفظ لوحة إعدادات لوحة المعلومات برمز مميز لجلسة تبويب المتصفح الحالية وعنوان URL المحدد للـ gateway؛ ولا يتم الاحتفاظ بكلمات المرور. عادةً ما ينشئ الإعداد الأولي رمز gateway لمصادقة السر المشترك عند أول اتصال، لكن مصادقة كلمة المرور تعمل أيضاً عندما يكون `gateway.auth.mode` مضبوطاً على `"password"`. +تحتفظ لوحة إعدادات لوحة المعلومات برمز مميز لجلسة تبويب المتصفح الحالية وعنوان URL المحدد للبوابة؛ ولا تُحفَظ كلمات المرور. عادةً ينشئ الإعداد الأولي رمز Gateway للمصادقة بالسر المشترك عند الاتصال الأول، لكن مصادقة كلمة المرور تعمل أيضًا عندما يكون `gateway.auth.mode` هو `"password"`. ## إقران الجهاز (الاتصال الأول) @@ -45,108 +45,109 @@ x-i18n: **ما ستراه:** "disconnected (1008): pairing required" - + ```bash openclaw devices list ``` - + ```bash openclaw devices approve ``` -إذا أعاد المتصفح محاولة الإقران بتفاصيل مصادقة متغيرة (الدور/النطاقات/المفتاح العام)، فسيتم تجاوز الطلب المعلق السابق وإنشاء `requestId` جديد. أعد تشغيل `openclaw devices list` قبل الموافقة. +إذا أعاد المتصفح محاولة الإقران مع تفاصيل مصادقة متغيرة (الدور/النطاقات/المفتاح العام)، فسيتم تجاوز الطلب المعلق السابق وإنشاء `requestId` جديد. شغّل `openclaw devices list` مرة أخرى قبل الموافقة. -إذا كان المتصفح مقترناً بالفعل وغيّرته من وصول للقراءة إلى وصول للكتابة/الإدارة، فسيُعامل ذلك كترقية موافقة، وليس إعادة اتصال صامتة. يبقي OpenClaw الموافقة القديمة نشطة، ويحظر إعادة الاتصال ذات النطاق الأوسع، ويطلب منك الموافقة صراحةً على مجموعة النطاقات الجديدة. +إذا كان المتصفح مقترنًا بالفعل وغيّرته من صلاحية قراءة إلى صلاحية كتابة/مسؤول، فيُعامَل ذلك كترقية موافقة، وليس إعادة اتصال صامتة. يُبقي OpenClaw الموافقة القديمة نشطة، ويمنع إعادة الاتصال ذات النطاق الأوسع، ويطلب منك الموافقة صراحةً على مجموعة النطاقات الجديدة. -بعد الموافقة، يتم تذكّر الجهاز ولن يتطلب إعادة موافقة إلا إذا ألغيتَه باستخدام `openclaw devices revoke --device --role `. راجع [CLI الأجهزة](/ar/cli/devices) لتدوير الرموز المميزة والإلغاء. +بعد الموافقة، يتم تذكّر الجهاز ولن يتطلب موافقة جديدة إلا إذا ألغيتَه باستخدام `openclaw devices revoke --device --role `. راجع [CLI الأجهزة](/ar/cli/devices) لتدوير الرموز وإلغائها. -- تتم الموافقة تلقائياً على اتصالات متصفح local loopback المباشرة (`127.0.0.1` / `localhost`). -- يستطيع Tailscale Serve تخطي جولة الإقران لجلسات مشغّل واجهة التحكم عندما يكون `gateway.auth.allowTailscale: true`، ويتم التحقق من هوية Tailscale، ويقدم المتصفح هوية جهازه. +- تتم الموافقة تلقائيًا على اتصالات متصفح local loopback المباشرة (`127.0.0.1` / `localhost`). +- يستطيع Tailscale Serve تخطي جولة الإقران لجلسات مشغل واجهة التحكم عندما يكون `gateway.auth.allowTailscale: true`، وتتحقق هوية Tailscale، ويعرض المتصفح هوية جهازه. - لا تزال روابط Tailnet المباشرة، واتصالات متصفح LAN، وملفات تعريف المتصفح التي لا تحتوي على هوية جهاز تتطلب موافقة صريحة. -- ينشئ كل ملف تعريف متصفح معرّف جهاز فريداً، لذلك سيتطلب تبديل المتصفحات أو مسح بيانات المتصفح إعادة الإقران. +- ينشئ كل ملف تعريف متصفح معرّف جهاز فريدًا، لذا فإن تبديل المتصفحات أو مسح بيانات المتصفح سيتطلب إعادة الإقران. ## الهوية الشخصية (محلية للمتصفح) -تدعم واجهة التحكم هوية شخصية لكل متصفح (اسم عرض وصورة رمزية) تُرفق بالرسائل الصادرة للإسناد في الجلسات المشتركة. تعيش هذه الهوية في تخزين المتصفح، وتكون مقصورة على ملف تعريف المتصفح الحالي، ولا تتم مزامنتها مع أجهزة أخرى أو الاحتفاظ بها من جانب الخادم بخلاف بيانات تعريف مؤلفي الرسائل المعتادة في الرسائل التي ترسلها فعلياً. يؤدي مسح بيانات الموقع أو تبديل المتصفحات إلى إعادتها إلى فارغة. +تدعم واجهة التحكم هوية شخصية لكل متصفح (اسم عرض وصورة رمزية) تُرفق بالرسائل الصادرة للإسناد في الجلسات المشتركة. تعيش هذه الهوية في تخزين المتصفح، وتكون مقصورة على ملف تعريف المتصفح الحالي، ولا تتم مزامنتها مع أجهزة أخرى أو حفظها على جانب الخادم باستثناء بيانات وصف مؤلف النص العادية على الرسائل التي ترسلها فعليًا. يؤدي مسح بيانات الموقع أو تبديل المتصفحات إلى إعادة ضبطها إلى فارغة. -ينطبق النمط المحلي للمتصفح نفسه على تجاوز صورة المساعد الرمزية. تغطي صور المساعد الرمزية المرفوعة الهوية التي حلّها gateway في المتصفح المحلي فقط، ولا تدور أبداً عبر `config.patch`. لا يزال حقل الإعدادات المشترك `ui.assistant.avatar` متاحاً للعملاء غير المرتبطين بواجهة المستخدم الذين يكتبون الحقل مباشرةً (مثل gateways النصية أو لوحات المعلومات المخصصة). +ينطبق نمط المتصفح المحلي نفسه على تجاوز الصورة الرمزية للمساعد. توضع صور المساعد الرمزية المرفوعة فوق الهوية التي حلّها Gateway في المتصفح المحلي فقط ولا تمر ذهابًا وإيابًا عبر `config.patch`. لا يزال حقل إعدادات `ui.assistant.avatar` المشترك متاحًا للعملاء غير التابعين لواجهة المستخدم الذين يكتبون الحقل مباشرة (مثل البوابات المؤتمتة أو لوحات المعلومات المخصصة). ## نقطة نهاية إعدادات وقت التشغيل -تجلب واجهة التحكم إعدادات وقت التشغيل من `/__openclaw/control-ui-config.json`. هذه النقطة محمية بمصادقة gateway نفسها مثل بقية سطح HTTP: لا يمكن للمتصفحات غير المصادقة جلبها، ويتطلب الجلب الناجح إما رمز gateway/كلمة مرور صالحة مسبقاً، أو هوية Tailscale Serve، أو هوية وكيل موثوق. +تجلب واجهة التحكم إعدادات وقت التشغيل من `/__openclaw/control-ui-config.json`. تخضع نقطة النهاية هذه لمصادقة Gateway نفسها مثل بقية سطح HTTP: لا تستطيع المتصفحات غير المصادق عليها جلبها، ويتطلب الجلب الناجح إما رمز/كلمة مرور Gateway صالحة بالفعل، أو هوية Tailscale Serve، أو هوية وكيل موثوق. ## دعم اللغة -يمكن لواجهة التحكم ترجمة نفسها عند التحميل الأول بناءً على لغة المتصفح. لتجاوز ذلك لاحقاً، افتح **نظرة عامة -> الوصول إلى Gateway -> اللغة**. يوجد منتقي اللغة في بطاقة الوصول إلى Gateway، وليس ضمن المظهر. +يمكن لواجهة التحكم تعريب نفسها عند التحميل الأول استنادًا إلى لغة متصفحك. لتجاوز ذلك لاحقًا، افتح **نظرة عامة -> وصول Gateway -> اللغة**. يوجد منتقي اللغة في بطاقة وصول Gateway، وليس ضمن المظهر. - اللغات المدعومة: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, `fa` -- يتم تحميل الترجمات غير الإنجليزية بشكل كسول في المتصفح. -- تُحفظ اللغة المحددة في تخزين المتصفح وتُعاد استخدامها في الزيارات المستقبلية. +- تُحمَّل الترجمات غير الإنجليزية تحميلًا كسولًا في المتصفح. +- تُحفَظ اللغة المحددة في تخزين المتصفح وتُعاد استخدامها في الزيارات المستقبلية. - تعود مفاتيح الترجمة المفقودة إلى الإنجليزية. -يتم توليد ترجمات الوثائق لمجموعة اللغات غير الإنجليزية نفسها، لكن منتقي اللغة المدمج في موقع الوثائق Mintlify محدود بأكواد اللغات التي يقبلها Mintlify. لا تزال وثائق التايلاندية (`th`) والفارسية (`fa`) تُولَّد في مستودع النشر؛ وقد لا تظهر في ذلك المنتقي حتى يدعم Mintlify تلك الأكواد. +تُولَّد ترجمات الوثائق لمجموعة اللغات غير الإنجليزية نفسها، لكن منتقي اللغة المدمج في موقع الوثائق من Mintlify يقتصر على رموز اللغات التي يقبلها Mintlify. لا تزال وثائق التايلاندية (`th`) والفارسية (`fa`) تُولَّد في مستودع النشر؛ وقد لا تظهر في ذلك المنتقي حتى يدعم Mintlify تلك الرموز. ## سمات المظهر -تحتفظ لوحة المظهر بسمات Claw وKnot وDash المدمجة، بالإضافة إلى خانة استيراد tweakcn محلية واحدة للمتصفح. لاستيراد سمة، افتح [محرر tweakcn](https://tweakcn.com/editor/theme)، واختر سمة أو أنشئ واحدة، وانقر **مشاركة**، ثم الصق رابط السمة المنسوخ في المظهر. يقبل المستورد أيضاً عناوين URL لسجل `https://tweakcn.com/r/themes/`، وعناوين URL للمحرر مثل `https://tweakcn.com/editor/theme?theme=amethyst-haze`، ومسارات `/themes/` النسبية، ومعرّفات السمات الخام، وأسماء السمات الافتراضية مثل `amethyst-haze`. +تحتفظ لوحة المظهر بالسمات المدمجة Claw وKnot وDash، بالإضافة إلى موضع استيراد tweakcn محلي للمتصفح. لاستيراد سمة، افتح [محرر tweakcn](https://tweakcn.com/editor/theme)، واختر سمة أو أنشئ واحدة، وانقر **مشاركة**، ثم الصق رابط السمة المنسوخ في المظهر. يقبل المستورد أيضًا عناوين URL لسجل `https://tweakcn.com/r/themes/`، وعناوين URL للمحرر مثل `https://tweakcn.com/editor/theme?theme=amethyst-haze`، ومسارات `/themes/` النسبية، ومعرّفات السمات الخام، وأسماء السمات الافتراضية مثل `amethyst-haze`. -تُخزَّن السمات المستوردة فقط في ملف تعريف المتصفح الحالي. لا تُكتب في إعدادات gateway ولا تتم مزامنتها عبر الأجهزة. يؤدي استبدال السمة المستوردة إلى تحديث الخانة المحلية الواحدة؛ ويؤدي مسحها إلى إعادة السمة النشطة إلى Claw إذا كانت السمة المستوردة محددة. +تُخزَّن السمات المستوردة في ملف تعريف المتصفح الحالي فقط. لا تُكتب إلى إعدادات Gateway ولا تتم مزامنتها عبر الأجهزة. يؤدي استبدال السمة المستوردة إلى تحديث الموضع المحلي الواحد؛ ويؤدي مسحها إلى إعادة السمة النشطة إلى Claw إذا كانت السمة المستوردة محددة. -## ما يمكنها فعله (اليوم) +## ما يمكنه فعله (اليوم) - الدردشة مع النموذج عبر Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`). - - التحدث عبر جلسات المتصفح في الوقت الحقيقي. يستخدم OpenAI اتصال WebRTC مباشراً، ويستخدم Google Live رمز متصفح محدوداً لمرة واحدة عبر WebSocket، وتستخدم Plugins الصوت في الوقت الحقيقي الخاصة بالخلفية فقط نقل الترحيل عبر Gateway. يحتفظ الترحيل ببيانات اعتماد المزوّد على Gateway بينما يبث المتصفح PCM الميكروفون عبر استدعاءات RPC `talk.realtime.relay*` ويرسل استدعاءات أداة `openclaw_agent_consult` مرة أخرى عبر `chat.send` إلى نموذج OpenClaw الأكبر المُعد. - - بث استدعاءات الأدوات + بطاقات مخرجات الأدوات المباشرة في الدردشة (أحداث الوكيل). + - التحدث عبر جلسات المتصفح الفورية. يستخدم OpenAI اتصال WebRTC مباشرًا، ويستخدم Google Live رمز متصفح مقيّدًا للاستخدام مرة واحدة عبر WebSocket، وتستخدم Plugins الصوت الفوري المخصصة للخلفية فقط نقل ترحيل Gateway. يحافظ الترحيل على بيانات اعتماد الموفر على Gateway بينما يبث المتصفح PCM الميكروفون عبر استدعاءات RPC من `talk.realtime.relay*` ويرسل استدعاءات أداة `openclaw_agent_consult` مرة أخرى عبر `chat.send` إلى نموذج OpenClaw الأكبر المضبوط. + - بث استدعاءات الأدوات + بطاقات مخرجات الأدوات الحية في الدردشة (أحداث الوكيل). - - - القنوات: حالة القنوات المدمجة وقنوات Plugin المضمّنة/الخارجية، وتسجيل الدخول عبر QR، وإعدادات كل قناة (`channels.status`, `web.login.*`, `config.patch`). + + - القنوات: حالة القنوات المدمجة وقنوات Plugin المرفقة/الخارجية، وتسجيل الدخول عبر QR، وإعدادات كل قناة (`channels.status`, `web.login.*`, `config.patch`). - المثيلات: قائمة الحضور + التحديث (`system-presence`). - - الجلسات: القائمة + تجاوزات النموذج/التفكير/السريع/المفصل/التتبع/الاستدلال لكل جلسة (`sessions.list`, `sessions.patch`). - - الأحلام: حالة Dreaming، ومفتاح التفعيل/التعطيل، وقارئ مفكرة الأحلام (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). + - الجلسات: القائمة + تجاوزات النموذج/التفكير/السريع/المطوّل/التتبع/الاستدلال لكل جلسة (`sessions.list`, `sessions.patch`). + - الأحلام: حالة Dreaming، ومفتاح التفعيل/التعطيل، وقارئ يوميات الأحلام (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`). - - - مهام Cron: سرد/إضافة/تحرير/تشغيل/تفعيل/تعطيل + سجل التشغيل (`cron.*`). + + - مهام Cron: عرض/إضافة/تحرير/تشغيل/تفعيل/تعطيل + سجل التشغيل (`cron.*`). - Skills: الحالة، التفعيل/التعطيل، التثبيت، تحديثات مفتاح API (`skills.*`). - - العقد: القائمة + القدرات (`node.list`). - - موافقات التنفيذ: تحرير قوائم السماح في gateway أو العقدة + سياسة الطلب لـ `exec host=gateway/node` (`exec.approvals.*`). + - العقد: القائمة + الإمكانات (`node.list`). + - موافقات exec: تحرير قوائم السماح الخاصة بالبوابة أو العقدة + سياسة السؤال لـ `exec host=gateway/node` (`exec.approvals.*`). - عرض/تحرير `~/.openclaw/openclaw.json` (`config.get`, `config.set`). - التطبيق + إعادة التشغيل مع التحقق (`config.apply`) وإيقاظ آخر جلسة نشطة. - - تتضمن عمليات الكتابة حارس تجزئة أساسي لمنع الكتابة فوق التعديلات المتزامنة. - - تجري عمليات الكتابة (`config.set`/`config.apply`/`config.patch`) فحصاً مسبقاً لحل SecretRef النشط للمراجع في حمولة الإعدادات المقدمة؛ وتُرفض المراجع النشطة المقدمة غير المحلولة قبل الكتابة. - - عرض المخطط + النموذج (`config.schema` / `config.schema.lookup`، بما في ذلك `title` / `description` للحقل، وتلميحات واجهة المستخدم المطابقة، وملخصات الأبناء المباشرة، وبيانات تعريف الوثائق على عقد الكائنات المتداخلة/أحرف البدل/المصفوفات/التركيب، بالإضافة إلى مخططات Plugin + القنوات عند توفرها)؛ محرر JSON الخام متاح فقط عندما تحتوي اللقطة على دورة ذهاب وعودة خام آمنة. - - إذا تعذر على اللقطة إجراء دورة ذهاب وعودة آمنة للنص الخام، تفرض واجهة التحكم وضع النموذج وتعطل الوضع الخام لتلك اللقطة. - - يحافظ "إعادة التعيين إلى المحفوظ" في محرر JSON الخام على الشكل المكتوب خاماً (التنسيق، التعليقات، تخطيط `$include`) بدلاً من إعادة عرض لقطة مسطحة، لذلك تبقى التعديلات الخارجية بعد إعادة التعيين عندما تتمكن اللقطة من إجراء دورة ذهاب وعودة آمنة. - - تُعرض قيم كائن SecretRef المنظم للقراءة فقط في مدخلات نص النموذج لمنع تلف تحويل الكائن إلى سلسلة نصية دون قصد. + - تتضمن عمليات الكتابة حارس تجزئة أساس لمنع طمس التعديلات المتزامنة. + - تُجري عمليات الكتابة (`config.set`/`config.apply`/`config.patch`) فحصًا مسبقًا لحل SecretRef النشط للمراجع الموجودة في حمولة الإعدادات المقدمة؛ وتُرفض المراجع النشطة غير المحلولة المقدمة قبل الكتابة. + - عرض المخطط + النموذج (`config.schema` / `config.schema.lookup`، بما في ذلك `title` / `description` للحقل، وتلميحات واجهة المستخدم المطابقة، وملخصات الأبناء المباشرة، وبيانات وصف الوثائق على عقد الكائنات/أحرف البدل/المصفوفات/التركيب المتداخلة، بالإضافة إلى مخططات Plugin + القنوات عند توفرها)؛ لا يتوفر محرر Raw JSON إلا عندما تحتوي اللقطة على ذهاب وإياب خام آمن. + - إذا تعذر على لقطة إجراء ذهاب وإياب آمن للنص الخام، تفرض واجهة التحكم وضع النموذج وتعطل الوضع الخام لتلك اللقطة. + - يحافظ محرر Raw JSON عند "إعادة الضبط إلى المحفوظ" على الشكل المؤلف خامًا (التنسيق، والتعليقات، وتخطيط `$include`) بدلًا من إعادة عرض لقطة مسطحة، لذلك تبقى التعديلات الخارجية بعد إعادة الضبط عندما تستطيع اللقطة إجراء ذهاب وإياب آمن. + - تُعرض قيم كائن SecretRef المنظمة للقراءة فقط في مدخلات نص النموذج لمنع تلف تحويل الكائن إلى سلسلة نصية بالخطأ. - - - التصحيح: لقطات الحالة/الصحة/النماذج + سجل الأحداث + استدعاءات RPC يدوية (`status`, `health`, `models.list`). - - السجلات: ذيل مباشر لسجلات ملفات gateway مع التصفية/التصدير (`logs.tail`). - - التحديث: تشغيل تحديث حزمة/git + إعادة التشغيل (`update.run`) مع تقرير إعادة تشغيل، ثم استطلاع `update.status` بعد إعادة الاتصال للتحقق من إصدار gateway العامل. + + - التصحيح: لقطات الحالة/الصحة/النماذج + سجل الأحداث + استدعاءات RPC اليدوية (`status`, `health`, `models.list`). + - يتضمن سجل الأحداث توقيتات تحديث/RPC لواجهة التحكم بالإضافة إلى إدخالات استجابة المتصفح لإطارات الرسوم المتحركة الطويلة أو المهام الطويلة عندما يعرض المتصفح أنواع إدخالات PerformanceObserver تلك. + - السجلات: متابعة حية لسجلات ملف Gateway مع التصفية/التصدير (`logs.tail`). + - التحديث: تشغيل تحديث حزمة/ git + إعادة التشغيل (`update.run`) مع تقرير إعادة التشغيل، ثم استطلاع `update.status` بعد إعادة الاتصال للتحقق من إصدار Gateway الجاري تشغيله. - - بالنسبة إلى المهام المعزولة، يكون التسليم افتراضياً على إعلان الملخص. يمكنك التبديل إلى لا شيء إذا كنت تريد تشغيلات داخلية فقط. + - بالنسبة للمهام المعزولة، يكون التسليم افتراضيًا على إعلان الملخص. يمكنك التبديل إلى لا شيء إذا أردت تشغيلات داخلية فقط. - تظهر حقول القناة/الهدف عند تحديد الإعلان. - يستخدم وضع Webhook القيمة `delivery.mode = "webhook"` مع ضبط `delivery.to` على عنوان URL صالح لـ HTTP(S) webhook. - - بالنسبة إلى مهام الجلسة الرئيسية، تتوفر أوضاع تسليم webhook ولا شيء. - - تشمل عناصر التحكم المتقدمة في التحرير الحذف بعد التشغيل، ومسح تجاوز الوكيل، وخيارات cron الدقيقة/المتدرجة، وتجاوزات نموذج/تفكير الوكيل، ومفاتيح تسليم بأفضل جهد. - - يكون تحقق النموذج مضمناً مع أخطاء على مستوى الحقول؛ وتعطل القيم غير الصالحة زر الحفظ حتى يتم إصلاحها. - - عيّن `cron.webhookToken` لإرسال رمز حامل مخصص، وإذا تم حذفه فسيُرسل webhook بدون ترويسة مصادقة. - - بديل مهمل: لا تزال المهام القديمة المخزنة ذات `notify: true` قادرة على استخدام `cron.webhook` حتى يتم ترحيلها. + - بالنسبة لمهام الجلسة الرئيسية، تتوفر أوضاع تسليم webhook ولا شيء. + - تتضمن عناصر التحكم المتقدمة في التحرير الحذف بعد التشغيل، ومسح تجاوز الوكيل، وخيارات cron الدقيقة/المتدرجة، وتجاوزات نموذج/تفكير الوكيل، ومفاتيح تسليم بأفضل جهد. + - يكون التحقق من النموذج مضمّنًا مع أخطاء على مستوى الحقل؛ وتؤدي القيم غير الصالحة إلى تعطيل زر الحفظ حتى إصلاحها. + - اضبط `cron.webhookToken` لإرسال رمز bearer مخصص، وإذا حُذف يُرسل Webhook بدون ترويسة مصادقة. + - بديل مهمل: لا تزال المهام القديمة المخزنة التي تحتوي على `notify: true` تستطيع استخدام `cron.webhook` حتى يتم ترحيلها. @@ -155,85 +156,85 @@ x-i18n: - - `chat.send` هو **غير حاجب**: يقر فورًا بـ `{ runId, status: "started" }` ويتدفق الرد عبر أحداث `chat`. - - تقبل تحميلات الدردشة الصور بالإضافة إلى الملفات غير المرئية. تحتفظ الصور بمسار الصورة الأصلي؛ وتُخزَّن الملفات الأخرى كوسائط مُدارة وتظهر في السجل كروابط مرفقات. - - تؤدي إعادة الإرسال بنفس `idempotencyKey` إلى إرجاع `{ status: "in_flight" }` أثناء التشغيل، و`{ status: "ok" }` بعد الاكتمال. - - تكون ردود `chat.history` محدودة الحجم لسلامة واجهة المستخدم. عندما تكون إدخالات النص كبيرة جدًا، قد يقتطع Gateway حقول النص الطويلة، ويحذف كتل البيانات الوصفية الثقيلة، ويستبدل الرسائل المفرطة الحجم بعنصر نائب (`[chat.history omitted: message too large]`). - - تُحفظ الصور التي ينشئها المساعد كإشارات وسائط مُدارة وتُقدَّم مرة أخرى عبر عناوين URL لوسائط Gateway موثَّقة، لذلك لا تعتمد عمليات إعادة التحميل على بقاء حمولات الصور الخام بتنسيق base64 في رد سجل الدردشة. - - يزيل `chat.history` أيضًا وسوم التوجيه المضمنة المخصصة للعرض فقط من نص المساعد المرئي (على سبيل المثال `[[reply_to_*]]` و`[[audio_as_voice]]`)، وحمولات XML لاستدعاءات الأدوات بنص عادي (بما في ذلك `...` و`...` و`...` و`...` وكتل استدعاءات الأدوات المقتطعة)، ورموز تحكم النموذج المسرَّبة ASCII/كاملة العرض، ويحذف إدخالات المساعد التي يكون كامل نصها المرئي هو الرمز الصامت الدقيق فقط `NO_REPLY` / `no_reply`. - - أثناء إرسال نشط وتحديث السجل النهائي، تُبقي طريقة عرض الدردشة رسائل المستخدم/المساعد المحلية التفاؤلية مرئية إذا أعاد `chat.history` لقطة أقدم لفترة وجيزة؛ ويستبدل النص الرسمي تلك الرسائل المحلية بمجرد أن يلحق سجل Gateway. - - أحداث `chat` الحية هي حالة تسليم، بينما يُعاد بناء `chat.history` من نص الجلسة الدائم. بعد أحداث tool-final تعيد واجهة التحكم تحميل السجل وتدمج ذيلًا تفاؤليًا صغيرًا فقط؛ وقد وُثِّق حد النص في [WebChat](/ar/web/webchat). - - يضيف `chat.inject` ملاحظة مساعد إلى نص الجلسة ويبث حدث `chat` للتحديثات الخاصة بواجهة المستخدم فقط (بلا تشغيل وكيل، وبلا تسليم قناة). - - تقوم منتقيات النموذج والتفكير في ترويسة الدردشة بتصحيح الجلسة النشطة فورًا عبر `sessions.patch`؛ وهي تجاوزات جلسة دائمة، وليست خيارات إرسال لدورة واحدة فقط. - - تؤدي كتابة `/new` في واجهة التحكم إلى إنشاء جلسة لوحة معلومات جديدة والتبديل إليها، مثل New Chat. وتحافظ كتابة `/reset` على إعادة الضبط الصريحة في المكان نفسه من Gateway للجلسة الحالية. - - يطلب منتقي نموذج الدردشة عرض النموذج المُكوَّن في Gateway. إذا كان `agents.defaults.models` موجودًا، فستقود قائمة السماح هذه المنتقي. وإلا يعرض المنتقي إدخالات `models.providers.*.models` الصريحة بالإضافة إلى المزوّدين ذوي المصادقة القابلة للاستخدام. يبقى الفهرس الكامل متاحًا عبر RPC التصحيحي `models.list` مع `view: "all"`. - - عندما تُظهر تقارير استخدام جلسة Gateway الحديثة ضغطًا عاليًا على السياق، تعرض منطقة مؤلِّف الدردشة إشعارًا بالسياق، وعند مستويات Compaction الموصى بها، زرًا مضغوطًا يشغّل مسار Compaction العادي للجلسة. تُخفى لقطات الرموز القديمة حتى يبلغ Gateway عن استخدام حديث مرة أخرى. + - `chat.send` **غير حاجب**: يقرّ فورًا بـ `{ runId, status: "started" }` ويتدفق الرد عبر أحداث `chat`. + - تقبل عمليات رفع الدردشة الصور إضافة إلى الملفات غير المرئية. تحتفظ الصور بمسار الصورة الأصلي؛ وتُخزَّن الملفات الأخرى كوسائط مُدارة وتظهر في السجل كروابط مرفقات. + - تؤدي إعادة الإرسال باستخدام `idempotencyKey` نفسه إلى إرجاع `{ status: "in_flight" }` أثناء التشغيل، و`{ status: "ok" }` بعد الاكتمال. + - تكون ردود `chat.history` محدودة الحجم لضمان سلامة واجهة المستخدم. عندما تكون إدخالات النص المنسوخ كبيرة جدًا، قد يقتطع Gateway حقول النص الطويلة، ويحذف كتل البيانات الوصفية الثقيلة، ويستبدل الرسائل كبيرة الحجم بعنصر نائب (`[chat.history omitted: message too large]`). + - تُحفَظ الصور التي ينشئها المساعد كإشارات إلى وسائط مُدارة وتُقدَّم مرة أخرى عبر عناوين URL لوسائط Gateway المصادَق عليها، لذلك لا تعتمد عمليات إعادة التحميل على بقاء حمولات الصور الخام بترميز base64 في رد سجل الدردشة. + - يزيل `chat.history` أيضًا وسوم التوجيه المضمنة الخاصة بالعرض فقط من نص المساعد المرئي (مثل `[[reply_to_*]]` و`[[audio_as_voice]]`)، وحمولات XML لاستدعاءات الأدوات ذات النص العادي (بما في ذلك `...` و`...` و`...` و`...` وكتل استدعاءات الأدوات المقتطعة)، ورموز التحكم المسرّبة للنموذج بصيغة ASCII/العرض الكامل، ويحذف إدخالات المساعد التي يكون نصها المرئي بالكامل هو الرمز الصامت الدقيق فقط `NO_REPLY` / `no_reply`. + - أثناء إرسال نشط وتحديث السجل النهائي، تُبقي طريقة عرض الدردشة رسائل المستخدم/المساعد المحلية المتفائلة مرئية إذا أعاد `chat.history` لفترة وجيزة لقطة أقدم؛ ويستبدل النص المنسوخ المعتمد تلك الرسائل المحلية عندما يلحق سجل Gateway. + - أحداث `chat` الحية تمثل حالة التسليم، بينما يُعاد بناء `chat.history` من النص المنسوخ الدائم للجلسة. بعد أحداث tool-final، تعيد Control UI تحميل السجل وتدمج فقط ذيلًا متفائلًا صغيرًا؛ ويُوثَّق حد النص المنسوخ في [WebChat](/ar/web/webchat). + - يضيف `chat.inject` ملاحظة مساعد إلى النص المنسوخ للجلسة ويبث حدث `chat` لتحديثات واجهة المستخدم فقط (لا تشغيل للوكيل، ولا تسليم للقناة). + - تُصحّح منتقيات نموذج ترويسة الدردشة والتفكير الجلسة النشطة فورًا عبر `sessions.patch`؛ وهي تجاوزات جلسة دائمة، وليست خيارات إرسال لدورة واحدة فقط. + - تؤدي كتابة `/new` في Control UI إلى إنشاء جلسة لوحة معلومات جديدة والتحويل إليها مثل New Chat. وتُبقي كتابة `/reset` إعادة الضبط الصريحة في المكان نفسه من Gateway للجلسة الحالية. + - يطلب منتقي نموذج الدردشة عرض النموذج المُعدّ في Gateway. إذا كان `agents.defaults.models` موجودًا، فإن قائمة السماح هذه تقود المنتقي. وإلا فيعرض المنتقي إدخالات `models.providers.*.models` الصريحة إضافة إلى المزوّدين ذوي المصادقة القابلة للاستخدام. ويبقى الفهرس الكامل متاحًا عبر استدعاء RPC للتصحيح `models.list` مع `view: "all"`. + - عندما تُظهر تقارير استخدام جلسة Gateway الجديدة ضغط سياق مرتفعًا، تعرض منطقة مؤلف الدردشة تنبيه سياق، وعند مستويات Compaction الموصى بها، زرًا مضغوطًا يشغّل مسار Compaction العادي للجلسة. تُخفى لقطات الرموز القديمة حتى يبلّغ Gateway عن استخدام جديد مرة أخرى. - - يستخدم وضع التحدث مزوّد صوت فوريًا مسجّلًا. اضبط OpenAI باستخدام `talk.provider: "openai"` بالإضافة إلى `talk.providers.openai.apiKey`، أو اضبط Google باستخدام `talk.provider: "google"` بالإضافة إلى `talk.providers.google.apiKey`؛ ولا يزال من الممكن إعادة استخدام إعدادات مزوّد الوقت الفعلي للمكالمات الصوتية كخيار احتياطي. لا يتلقى المتصفح أبدًا مفتاح API قياسيًا للمزوّد. تتلقى OpenAI سر عميل Realtime مؤقتًا لـ WebRTC. وتتلقى Google Live رمز مصادقة Live API مقيّدًا أحادي الاستخدام لجلسة WebSocket في المتصفح، مع تعليمات وتصريحات الأدوات مقفلة داخل الرمز بواسطة Gateway. تعمل المزوّدات التي لا تكشف إلا جسرًا فوريًا خلفيًا عبر نقل ترحيل Gateway، لذلك تبقى بيانات الاعتماد ومقابس المورّد من جهة الخادم بينما ينتقل صوت المتصفح عبر RPCs موثَّقة من Gateway. يجمع Gateway موجّه جلسة Realtime؛ ولا يقبل `talk.realtime.session` تجاوزات تعليمات مقدَّمة من المستدعي. + + يستخدم وضع الحديث مزوّد صوت في الوقت الحقيقي مسجلًا. اضبط OpenAI باستخدام `talk.provider: "openai"` مع `talk.providers.openai.apiKey`، أو اضبط Google باستخدام `talk.provider: "google"` مع `talk.providers.google.apiKey`؛ ولا يزال بالإمكان إعادة استخدام إعداد مزوّد الوقت الحقيقي للمكالمات الصوتية كخيار احتياطي. لا يتلقى المتصفح أبدًا مفتاح API قياسيًا للمزوّد. يتلقى OpenAI سر عميل Realtime مؤقتًا لـ WebRTC. ويتلقى Google Live رمز مصادقة Live API مقيدًا للاستخدام مرة واحدة لجلسة WebSocket في المتصفح، مع تعليمات وتصريحات أدوات مقفلة داخل الرمز بواسطة Gateway. يعمل المزوّدون الذين لا يوفّرون إلا جسرًا خلفيًا للوقت الحقيقي عبر نقل ترحيل Gateway، وبذلك تبقى بيانات الاعتماد ومقابس المورّد على جانب الخادم بينما ينتقل صوت المتصفح عبر استدعاءات RPC مصادَق عليها من Gateway. تُجمَّع مطالبة جلسة Realtime بواسطة Gateway؛ ولا يقبل `talk.realtime.session` تجاوزات تعليمات يقدّمها المستدعي. - في مؤلِّف الدردشة، عنصر تحكم Talk هو زر الموجات بجوار زر الإملاء بالميكروفون. عند بدء Talk، يعرض صف حالة المؤلِّف `Connecting Talk...`، ثم `Talk live` أثناء اتصال الصوت، أو `Asking OpenClaw...` أثناء استشارة استدعاء أداة فوري للنموذج الأكبر المُكوَّن عبر `chat.send`. + في مؤلف الدردشة، يكون عنصر التحكم Talk هو زر الموجات بجانب زر إملاء الميكروفون. عند بدء Talk، يعرض صف حالة المؤلف `Connecting Talk...`، ثم `Talk live` أثناء اتصال الصوت، أو `Asking OpenClaw...` بينما يستشير استدعاء أداة في الوقت الحقيقي النموذج الأكبر المُعدّ عبر `chat.send`. - اختبار الدخان الحي للمشرف: يتحقق `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` من تبادل SDP الخاص بـ OpenAI عبر WebRTC في المتصفح، وإعداد WebSocket للمتصفح برمز مقيّد في Google Live، ومحوّل متصفح ترحيل Gateway بوسائط ميكروفون وهمية. يطبع الأمر حالة المزوّد فقط ولا يسجّل الأسرار. + اختبار دخان حي للمشرف: يتحقق `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` من تبادل SDP لـ WebRTC في متصفح OpenAI، وإعداد WebSocket المتصفح برمز مقيد لـ Google Live، ومحوّل متصفح ترحيل Gateway مع وسائط ميكروفون مزيفة. لا يطبع الأمر إلا حالة المزوّد ولا يسجل الأسرار. - + - انقر **إيقاف** (يستدعي `chat.abort`). - - أثناء نشاط تشغيل ما، تُصفّ المتابعات العادية في الطابور. انقر **توجيه** على رسالة مصفوفة لحقن تلك المتابعة في الدور قيد التشغيل. - - اكتب `/stop` (أو عبارات إلغاء مستقلة مثل `stop` و`stop action` و`stop run` و`stop openclaw` و`please stop`) للإلغاء خارج النطاق. - - يدعم `chat.abort` القيمة `{ sessionKey }` (بلا `runId`) لإلغاء جميع التشغيلات النشطة لتلك الجلسة. + - أثناء نشاط تشغيل، تصطف المتابعات العادية في قائمة انتظار. انقر **توجيه** على رسالة في قائمة الانتظار لحقن تلك المتابعة في الدورة الجارية. + - اكتب `/stop` (أو عبارات إجهاض مستقلة مثل `stop` و`stop action` و`stop run` و`stop openclaw` و`please stop`) للإجهاض خارج المسار. + - يدعم `chat.abort` الصيغة `{ sessionKey }` (دون `runId`) لإجهاض كل عمليات التشغيل النشطة لتلك الجلسة. - - - عند إلغاء تشغيل ما، لا يزال يمكن عرض نص المساعد الجزئي في واجهة المستخدم. - - يحفظ Gateway نص المساعد الجزئي المُلغى في سجل النص عند وجود خرج مخزّن مؤقتًا. - - تتضمن الإدخالات المحفوظة بيانات وصفية للإلغاء لكي يتمكن مستهلكو النص من تمييز الجزئيات المُلغاة عن خرج الاكتمال العادي. + + - عند إجهاض تشغيل، يمكن أن يظل نص المساعد الجزئي معروضًا في واجهة المستخدم. + - يحفظ Gateway نص المساعد الجزئي المُجهَض في سجل النص المنسوخ عند وجود مخرجات مخزنة مؤقتًا. + - تتضمن الإدخالات المحفوظة بيانات وصفية للإجهاض حتى يستطيع مستهلكو النص المنسوخ تمييز الأجزاء الجزئية الناتجة عن الإجهاض من مخرجات الاكتمال العادية. ## تثبيت PWA والدفع عبر الويب -تأتي واجهة التحكم مع `manifest.webmanifest` وعامل خدمة، لذلك يمكن للمتصفحات الحديثة تثبيتها كتطبيق PWA مستقل. يتيح Web Push لـ Gateway إيقاظ PWA المثبّت بإشعارات حتى عندما لا تكون علامة التبويب أو نافذة المتصفح مفتوحة. +تتضمن Control UI ملف `manifest.webmanifest` وعامل خدمة، لذلك يمكن للمتصفحات الحديثة تثبيتها كتطبيق PWA مستقل. يتيح Web Push لـ Gateway إيقاظ PWA المثبت باستخدام الإشعارات حتى عندما لا تكون علامة التبويب أو نافذة المتصفح مفتوحة. | السطح | ما يفعله | -| ----------------------------------------------------- | ------------------------------------------------------------------ | -| `ui/public/manifest.webmanifest` | بيان PWA. تعرض المتصفحات "تثبيت التطبيق" بمجرد أن يصبح قابلًا للوصول. | -| `ui/public/sw.js` | عامل خدمة يتعامل مع أحداث `push` ونقرات الإشعارات. | -| `push/vapid-keys.json` (ضمن دليل حالة OpenClaw) | زوج مفاتيح VAPID مُنشأ تلقائيًا يُستخدم لتوقيع حمولات Web Push. | -| `push/web-push-subscriptions.json` | نقاط نهاية اشتراك المتصفح المحفوظة. | +| ---------------------------------------------------- | ------------------------------------------------------------------ | +| `ui/public/manifest.webmanifest` | بيان PWA. تعرض المتصفحات "Install app" بمجرد أن يصبح قابلًا للوصول. | +| `ui/public/sw.js` | عامل خدمة يتعامل مع أحداث `push` ونقرات الإشعارات. | +| `push/vapid-keys.json` (ضمن دليل حالة OpenClaw) | زوج مفاتيح VAPID يُنشأ تلقائيًا ويُستخدم لتوقيع حمولات Web Push. | +| `push/web-push-subscriptions.json` | نقاط نهاية اشتراك المتصفح المحفوظة. | -تجاوز زوج مفاتيح VAPID عبر متغيرات البيئة في عملية Gateway عندما تريد تثبيت المفاتيح (لعمليات النشر متعددة المضيفين، أو تدوير الأسرار، أو الاختبارات): +تجاوز زوج مفاتيح VAPID عبر متغيرات البيئة على عملية Gateway عندما تريد تثبيت المفاتيح (لعمليات النشر متعددة المضيفين، أو تدوير الأسرار، أو الاختبارات): - `OPENCLAW_VAPID_PUBLIC_KEY` - `OPENCLAW_VAPID_PRIVATE_KEY` -- `OPENCLAW_VAPID_SUBJECT` (الافتراضي هو `mailto:openclaw@localhost`) +- `OPENCLAW_VAPID_SUBJECT` (الافتراضي `mailto:openclaw@localhost`) -تستخدم واجهة التحكم طرق Gateway هذه المقيّدة بالنطاق لتسجيل اشتراكات المتصفح واختبارها: +تستخدم Control UI طرق Gateway هذه المقيدة بالنطاق لتسجيل اشتراكات المتصفح واختبارها: - `push.web.vapidPublicKey` — يجلب مفتاح VAPID العام النشط. -- `push.web.subscribe` — يسجل `endpoint` بالإضافة إلى `keys.p256dh`/`keys.auth`. +- `push.web.subscribe` — يسجل `endpoint` إضافة إلى `keys.p256dh`/`keys.auth`. - `push.web.unsubscribe` — يزيل نقطة نهاية مسجلة. - `push.web.test` — يرسل إشعار اختبار إلى اشتراك المستدعي. -Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد](/ar/gateway/configuration) للدفع المدعوم بالترحيل) وعن طريقة `push.test` الحالية، التي تستهدف إقران الأجهزة المحمولة الأصلية. +Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعداد](/ar/gateway/configuration) للدفع المدعوم بالترحيل) وعن طريقة `push.test` الحالية، التي تستهدف إقران الأجهزة المحمولة الأصلية. ## التضمينات المستضافة -يمكن لرسائل المساعد عرض محتوى ويب مستضاف مضمنًا باستخدام الرمز القصير `[embed ...]`. تتحكم `gateway.controlUi.embedSandbox` في سياسة عزل iframe: +يمكن لرسائل المساعد عرض محتوى ويب مستضاف مضمنًا باستخدام الرمز المختصر `[embed ...]`. تتحكم `gateway.controlUi.embedSandbox` في سياسة صندوق عزل iframe: - يعطّل تنفيذ السكربتات داخل التضمينات المستضافة. + يعطل تنفيذ البرامج النصية داخل التضمينات المستضافة. يسمح بالتضمينات التفاعلية مع الحفاظ على عزل الأصل؛ وهذا هو الإعداد الافتراضي ويكفي عادةً لألعاب/ودجات المتصفح المستقلة. - يضيف `allow-same-origin` فوق `allow-scripts` للمستندات من الموقع نفسه التي تحتاج عمدًا إلى امتيازات أقوى. + يضيف `allow-same-origin` فوق `allow-scripts` للمستندات من الموقع نفسه التي تحتاج عمدًا إلى صلاحيات أقوى. @@ -250,14 +251,14 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] ``` -استخدم `trusted` فقط عندما يحتاج المستند المضمّن فعلًا إلى سلوك الأصل نفسه. بالنسبة إلى معظم الألعاب واللوحات التفاعلية التي ينشئها الوكيل، يكون `scripts` هو الخيار الأكثر أمانًا. +استخدم `trusted` فقط عندما يحتاج المستند المضمّن فعلًا إلى سلوك الأصل نفسه. بالنسبة إلى معظم الألعاب واللوحات التفاعلية التي ينشئها الوكيل، يكون `scripts` الخيار الأكثر أمانًا. -تبقى عناوين URL للتضمين الخارجية المطلقة `http(s)` محظورة افتراضيًا. إذا كنت تريد عمدًا أن يحمّل `[embed url="https://..."]` صفحات تابعة لجهات خارجية، فعيّن `gateway.controlUi.allowExternalEmbedUrls: true`. +تبقى عناوين URL الخارجية المطلقة من نوع `http(s)` للتضمين محظورة افتراضيًا. إذا كنت تريد عمدًا أن يحمّل `[embed url="https://..."]` صفحات تابعة لجهات خارجية، فاضبط `gateway.controlUi.allowExternalEmbedUrls: true`. ## عرض رسالة الدردشة -تستخدم رسائل الدردشة المجمّعة حدًا أقصى افتراضيًا مقروءًا للعرض. يمكن لعمليات النشر على الشاشات العريضة تجاوزه دون تصحيح CSS المضمّن بتعيين `gateway.controlUi.chatMessageMaxWidth`: +تستخدم رسائل الدردشة المجمعة حدًا أقصى افتراضيًا للعرض يسهل قراءته. يمكن لعمليات النشر على الشاشات العريضة تجاوزه دون تعديل CSS المضمنة، وذلك بضبط `gateway.controlUi.chatMessageMaxWidth`: ```json5 { @@ -269,13 +270,13 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] } ``` -تُتحقق القيمة قبل وصولها إلى المتصفح. تشمل القيم المدعومة الأطوال والنسب المئوية البسيطة مثل `960px` أو `82%`، بالإضافة إلى تعبيرات عرض مقيّدة مثل `min(...)` و`max(...)` و`clamp(...)` و`calc(...)` و`fit-content(...)`. +تُتحقق القيمة قبل أن تصل إلى المتصفح. تشمل القيم المدعومة الأطوال والنسب المئوية البسيطة مثل `960px` أو `82%`، إضافة إلى تعبيرات العرض المقيدة `min(...)` و`max(...)` و`clamp(...)` و`calc(...)` و`fit-content(...)`. -## وصول tailnet (موصى به) +## الوصول إلى tailnet (موصى به) - - أبقِ Gateway على local loopback ودع Tailscale Serve يوكّله عبر HTTPS: + + أبقِ Gateway على loopback ودع Tailscale Serve يوكّله عبر HTTPS: ```bash openclaw gateway --tailscale serve @@ -283,14 +284,14 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] افتح: - - `https:///` (أو `gateway.controlUi.basePath` الذي قمت بتكوينه) + - `https:///` (أو `gateway.controlUi.basePath` الذي ضبطته) - افتراضيًا، يمكن لمتطلبات Serve الخاصة بواجهة التحكم/WebSocket المصادقة عبر ترويسات هوية Tailscale (`tailscale-user-login`) عندما تكون `gateway.auth.allowTailscale` هي `true`. يتحقق OpenClaw من الهوية بحل عنوان `x-forwarded-for` باستخدام `tailscale whois` ومطابقته مع الترويسة، ولا يقبلها إلا عندما يصل الطلب إلى local loopback مع ترويسات `x-forwarded-*` الخاصة بـ Tailscale. بالنسبة إلى جلسات مشغّل واجهة التحكم ذات هوية جهاز المتصفح، يتجاوز مسار Serve المتحقق هذا أيضًا رحلة إقران الجهاز؛ أما المتصفحات بلا جهاز واتصالات دور العقدة فتظل تتبع فحوصات الجهاز العادية. عيّن `gateway.auth.allowTailscale: false` إذا كنت تريد طلب بيانات اعتماد سر مشترك صريحة حتى لحركة Serve. ثم استخدم `gateway.auth.mode: "token"` أو `"password"`. + افتراضيًا، يمكن لمتطلبات Control UI/WebSocket Serve المصادقة عبر ترويسات هوية Tailscale (`tailscale-user-login`) عندما تكون `gateway.auth.allowTailscale` هي `true`. يتحقق OpenClaw من الهوية بحل عنوان `x-forwarded-for` باستخدام `tailscale whois` ومطابقته مع الترويسة، ولا يقبلها إلا عندما يصل الطلب إلى loopback مع ترويسات Tailscale من نوع `x-forwarded-*`. بالنسبة إلى جلسات مشغل Control UI ذات هوية جهاز المتصفح، يتجاوز مسار Serve المتحقق هذا أيضًا رحلة إقران الجهاز؛ أما المتصفحات بلا جهاز واتصالات دور العقدة فتظل تتبع فحوصات الجهاز العادية. اضبط `gateway.auth.allowTailscale: false` إذا كنت تريد طلب بيانات اعتماد سر مشترك صريحة حتى لحركة Serve. ثم استخدم `gateway.auth.mode: "token"` أو `"password"`. - بالنسبة إلى مسار هوية Serve غير المتزامن هذا، تُسلسَل محاولات المصادقة الفاشلة لنفس IP العميل ونطاق المصادقة قبل كتابات حد المعدل. لذلك يمكن أن تعرض المحاولات السيئة المتزامنة من المتصفح نفسه `retry later` في الطلب الثاني بدلًا من تسابق عدم تطابقين عاديين بالتوازي. + بالنسبة إلى مسار هوية Serve غير المتزامن هذا، تُسلسَل محاولات المصادقة الفاشلة لعنوان IP العميل ونطاق المصادقة نفسيهما قبل كتابات حد المعدل. لذلك يمكن أن تُظهر محاولات إعادة المحاولة السيئة المتزامنة من المتصفح نفسه `retry later` في الطلب الثاني بدلًا من عدم تطابقين عاديين يتسابقان بالتوازي. - تفترض مصادقة Serve بلا رمز أن مضيف Gateway موثوق به. إذا كان قد يعمل كود محلي غير موثوق على ذلك المضيف، فاطلب مصادقة برمز/كلمة مرور. + تفترض مصادقة Serve بلا رمز أن مضيف Gateway موثوق. إذا كان من الممكن تشغيل تعليمات برمجية محلية غير موثوقة على ذلك المضيف، فاطلب مصادقة برمز/كلمة مرور. @@ -301,30 +302,30 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] ثم افتح: - - `http://:18789/` (أو `gateway.controlUi.basePath` الذي قمت بتكوينه) + - `http://:18789/` (أو `gateway.controlUi.basePath` الذي ضبطته) الصق السر المشترك المطابق في إعدادات واجهة المستخدم (يُرسل كـ `connect.params.auth.token` أو `connect.params.auth.password`). -## HTTP غير آمن +## HTTP غير الآمن -إذا فتحت لوحة المعلومات عبر HTTP عادي (`http://` أو `http://`)، يعمل المتصفح في **سياق غير آمن** ويحظر WebCrypto. افتراضيًا، **يحظر** OpenClaw اتصالات واجهة التحكم من دون هوية جهاز. +إذا فتحت لوحة المعلومات عبر HTTP عادي (`http://` أو `http://`)، يعمل المتصفح في **سياق غير آمن** ويحظر WebCrypto. افتراضيًا، **يحظر** OpenClaw اتصالات Control UI دون هوية جهاز. الاستثناءات الموثقة: - توافق HTTP غير الآمن الخاص بـ localhost فقط مع `gateway.controlUi.allowInsecureAuth=true` -- نجاح مصادقة واجهة تحكم المشغّل عبر `gateway.auth.mode: "trusted-proxy"` +- نجاح مصادقة مشغل Control UI عبر `gateway.auth.mode: "trusted-proxy"` - خيار الطوارئ `gateway.controlUi.dangerouslyDisableDeviceAuth=true` -**الإصلاح الموصى به:** استخدم HTTPS (Tailscale Serve) أو افتح واجهة المستخدم محليًا: +**الإصلاح الموصى به:** استخدم HTTPS (Tailscale Serve) أو افتح الواجهة محليًا: - `https:///` (Serve) - `http://127.0.0.1:18789/` (على مضيف Gateway) - + ```json5 { gateway: { @@ -337,7 +338,7 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] `allowInsecureAuth` هو مفتاح توافق محلي فقط: - - يسمح لجلسات واجهة مستخدم التحكم على localhost بالمتابعة من دون هوية جهاز في سياقات HTTP غير الآمنة. + - يسمح لجلسات واجهة التحكم على localhost بالمتابعة دون هوية الجهاز في سياقات HTTP غير الآمنة. - لا يتجاوز فحوصات الإقران. - لا يخفف متطلبات هوية الجهاز البعيد (غير localhost). @@ -354,13 +355,13 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] ``` - يعطل `dangerouslyDisableDeviceAuth` فحوصات هوية جهاز واجهة مستخدم التحكم، وهو تخفيض أمني شديد الخطورة. أعده سريعًا بعد الاستخدام الطارئ. + يعطل `dangerouslyDisableDeviceAuth` فحوصات هوية الجهاز في واجهة التحكم، وهو خفض أمني شديد. أعده سريعًا بعد الاستخدام الطارئ. - - يمكن لمصادقة الوكيل الموثوق الناجحة قبول جلسات واجهة مستخدم التحكم الخاصة بـ **المشغّل** من دون هوية جهاز. - - لا يمتد هذا إلى جلسات واجهة مستخدم التحكم ذات دور node. + - يمكن لمصادقة الوكيل الموثوق الناجحة إدخال جلسات واجهة التحكم الخاصة بـ **المشغل** دون هوية الجهاز. + - هذا **لا** يمتد إلى جلسات واجهة التحكم ذات دور العقدة. - لا تزال وكلاء reverse proxy عبر loopback على المضيف نفسه لا تستوفي مصادقة الوكيل الموثوق؛ راجع [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth). @@ -370,46 +371,46 @@ Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد] ## سياسة أمان المحتوى -تأتي واجهة مستخدم التحكم مع سياسة `img-src` محكمة: لا يُسمح إلا بأصول **نفس المصدر**، وروابط URL من نوع `data:`، وروابط URL من نوع `blob:` المنشأة محليًا. يرفض المتصفح روابط صور `http(s)` البعيدة والروابط النسبية إلى البروتوكول، ولا يصدر طلبات جلب عبر الشبكة. +تأتي واجهة التحكم مع سياسة `img-src` صارمة: يُسمح فقط بالأصول من **نفس المصدر**، وعناوين URL من نوع `data:`، وعناوين URL من نوع `blob:` المنشأة محليًا. يرفض المتصفح عناوين URL البعيدة من نوع `http(s)` والعناوين النسبية إلى البروتوكول، ولا يصدر طلبات جلب شبكية. ما يعنيه ذلك عمليًا: -- لا تزال الصور الرمزية والصور المقدمة ضمن مسارات نسبية (على سبيل المثال `/avatars/`) تُعرض، بما في ذلك مسارات الصور الرمزية المصادق عليها التي تجلبها واجهة المستخدم وتحولها إلى روابط URL محلية من نوع `blob:`. -- لا تزال روابط URL المضمنة من نوع `data:image/...` تُعرض (مفيدة للحمولات داخل البروتوكول). -- لا تزال روابط URL المحلية من نوع `blob:` التي تنشئها واجهة مستخدم التحكم تُعرض. -- تُزال روابط الصور الرمزية البعيدة التي تصدرها بيانات تعريف القناة عند مساعدين الصور الرمزية في واجهة مستخدم التحكم وتُستبدل بالشعار/الشارة المدمجة، لذلك لا تستطيع قناة مخترقة أو خبيثة فرض عمليات جلب صور بعيدة عشوائية من متصفح المشغّل. +- لا تزال الصور الرمزية والصور المقدمة ضمن مسارات نسبية (على سبيل المثال `/avatars/`) تُعرض، بما في ذلك مسارات الصور الرمزية المصادق عليها التي تجلبها الواجهة وتحولها إلى عناوين URL محلية من نوع `blob:`. +- لا تزال عناوين URL المضمنة `data:image/...` تُعرض (مفيدة للحمولات داخل البروتوكول). +- لا تزال عناوين URL المحلية من نوع `blob:` التي تنشئها واجهة التحكم تُعرض. +- تُزال عناوين URL البعيدة للصور الرمزية التي تصدرها بيانات تعريف القناة عند مساعدات الصور الرمزية في واجهة التحكم وتُستبدل بالشعار/الشارة المدمجة، لذلك لا يمكن لقناة مخترقة أو خبيثة أن تجبر متصفح المشغل على جلب صور بعيدة عشوائية. -لا تحتاج إلى تغيير أي شيء للحصول على هذا السلوك — فهو مفعّل دائمًا وغير قابل للتكوين. +لا تحتاج إلى تغيير أي شيء للحصول على هذا السلوك — فهو مفعل دائمًا وغير قابل للتكوين. ## مصادقة مسار الصورة الرمزية -عند تكوين مصادقة Gateway، تتطلب نقطة نهاية الصورة الرمزية في واجهة مستخدم التحكم رمز Gateway نفسه مثل بقية API: +عند تكوين مصادقة Gateway، تتطلب نقطة نهاية الصورة الرمزية في واجهة التحكم رمز Gateway نفسه كبقية API: -- يعيد `GET /avatar/` صورة الصورة الرمزية للمتصلين المصادق عليهم فقط. يعيد `GET /avatar/?meta=1` بيانات تعريف الصورة الرمزية وفق القاعدة نفسها. -- تُرفض الطلبات غير المصادق عليها إلى أي من المسارين (مطابقة لمسار وسائط المساعد المجاور). يمنع هذا مسار الصورة الرمزية من تسريب هوية الوكيل على المضيفين المحميين بخلاف ذلك. -- تمرر واجهة مستخدم التحكم نفسها رمز Gateway كترويسة bearer عند جلب الصور الرمزية، وتستخدم روابط URL مصادقًا عليها من نوع blob حتى تظل الصورة معروضة في لوحات المعلومات. +- يعيد `GET /avatar/` صورة الصورة الرمزية للمتصلين المصادق عليهم فقط. ويعيد `GET /avatar/?meta=1` بيانات تعريف الصورة الرمزية وفق القاعدة نفسها. +- تُرفض الطلبات غير المصادق عليها إلى أي من المسارين (مطابقة لمسار وسائط المساعد الشقيق). يمنع هذا مسار الصورة الرمزية من تسريب هوية الوكيل على المضيفين المحمية بخلاف ذلك. +- تمرر واجهة التحكم نفسها رمز Gateway كترويسة bearer عند جلب الصور الرمزية، وتستخدم عناوين URL مصادقًا عليها من نوع blob بحيث تظل الصورة معروضة في لوحات المعلومات. -إذا عطّلت مصادقة Gateway (غير موصى به على المضيفين المشتركين)، يصبح مسار الصورة الرمزية أيضًا غير مصادق عليه، بما يتماشى مع بقية Gateway. +إذا عطلت مصادقة Gateway (غير موصى به على المضيفين المشتركين)، يصبح مسار الصورة الرمزية أيضًا غير مصادق عليه، بما يتماشى مع بقية Gateway. ## مصادقة مسار وسائط المساعد عند تكوين مصادقة Gateway، تستخدم معاينات الوسائط المحلية للمساعد مسارًا من خطوتين: -- يتطلب `GET /__openclaw__/assistant-media?meta=1&source=` مصادقة مشغّل واجهة مستخدم التحكم العادية. يرسل المتصفح رمز Gateway كترويسة bearer عند التحقق من التوفر. -- تتضمن استجابات بيانات التعريف الناجحة `mediaTicket` قصير العمر ومحدد النطاق إلى مسار المصدر هذا بالضبط. -- تستخدم روابط URL للصور والصوت والفيديو والمستندات المعروضة في المتصفح `mediaTicket=` بدلًا من رمز Gateway النشط أو كلمة المرور. تنتهي صلاحية التذكرة سريعًا ولا يمكنها تخويل مصدر مختلف. +- يتطلب `GET /__openclaw__/assistant-media?meta=1&source=` مصادقة مشغل واجهة التحكم العادية. يرسل المتصفح رمز Gateway كترويسة bearer عند التحقق من التوفر. +- تتضمن استجابات بيانات التعريف الناجحة `mediaTicket` قصير العمر ومقيدًا بمسار المصدر الدقيق. +- تستخدم عناوين URL للصور والصوت والفيديو والمستندات التي يعرضها المتصفح `mediaTicket=` بدلًا من رمز Gateway النشط أو كلمة المرور. تنتهي صلاحية التذكرة سريعًا ولا يمكنها تخويل مصدر مختلف. -يحافظ هذا على توافق عرض الوسائط العادي مع عناصر الوسائط الأصلية في المتصفح من دون وضع بيانات اعتماد Gateway القابلة لإعادة الاستخدام في روابط URL ظاهرة للوسائط. +يحافظ هذا على توافق عرض الوسائط العادي مع عناصر الوسائط الأصلية في المتصفح دون وضع بيانات اعتماد Gateway القابلة لإعادة الاستخدام في عناوين URL المرئية للوسائط. -## بناء واجهة المستخدم +## بناء الواجهة -يقدم Gateway الملفات الثابتة من `dist/control-ui`. ابنها باستخدام: +يقدم Gateway ملفات ثابتة من `dist/control-ui`. ابنها باستخدام: ```bash pnpm ui:build ``` -أساس مطلق اختياري (عندما تريد روابط URL ثابتة للأصول): +قاعدة مطلقة اختيارية (عندما تريد عناوين URL ثابتة للأصول): ```bash OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build @@ -421,14 +422,14 @@ OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build pnpm ui:dev ``` -ثم وجّه واجهة المستخدم إلى رابط Gateway WS الخاص بك (مثل `ws://127.0.0.1:18789`). +ثم وجّه الواجهة إلى عنوان URL الخاص بـ Gateway WS (مثل `ws://127.0.0.1:18789`). -## التصحيح/الاختبار: خادم تطوير + Gateway بعيد +## تصحيح الأخطاء/الاختبار: خادم التطوير + Gateway بعيد -واجهة مستخدم التحكم هي ملفات ثابتة؛ هدف WebSocket قابل للتكوين ويمكن أن يختلف عن أصل HTTP. هذا مفيد عندما تريد خادم تطوير Vite محليًا بينما يعمل Gateway في مكان آخر. +واجهة التحكم هي ملفات ثابتة؛ هدف WebSocket قابل للتكوين ويمكن أن يكون مختلفًا عن مصدر HTTP. هذا مفيد عندما تريد خادم تطوير Vite محليًا بينما يعمل Gateway في مكان آخر. - + ```bash pnpm ui:dev ``` @@ -449,17 +450,17 @@ pnpm ui:dev - - يُخزّن `gatewayUrl` في localStorage بعد التحميل ويُزال من رابط URL. - - إذا مررت نقطة نهاية كاملة `ws://` أو `wss://` عبر `gatewayUrl`، فقم بترميز قيمة `gatewayUrl` في رابط URL حتى يحلل المتصفح سلسلة الاستعلام بشكل صحيح. - - ينبغي تمرير `token` عبر جزء رابط URL (`#token=...`) كلما أمكن. لا تُرسل الأجزاء إلى الخادم، ما يتجنب تسربها في سجلات الطلبات وترويسة Referer. لا تزال معاملات الاستعلام القديمة `?token=` تُستورد مرة واحدة للتوافق، ولكن كخيار احتياطي فقط، وتُزال فورًا بعد bootstrap. + - يُخزن `gatewayUrl` في localStorage بعد التحميل ويُزال من عنوان URL. + - إذا مررت نقطة نهاية كاملة `ws://` أو `wss://` عبر `gatewayUrl`، فقم بترميز قيمة `gatewayUrl` كعنوان URL حتى يفسر المتصفح سلسلة الاستعلام بشكل صحيح. + - يجب تمرير `token` عبر جزء عنوان URL (`#token=...`) كلما أمكن. لا تُرسل الأجزاء إلى الخادم، مما يتجنب تسربها في سجلات الطلب وReferer. لا تزال معاملات الاستعلام القديمة `?token=` تُستورد مرة واحدة للتوافق، لكن كخيار احتياطي فقط، وتُزال فورًا بعد bootstrap. - يُحتفظ بـ `password` في الذاكرة فقط. - - عند تعيين `gatewayUrl`، لا تعود واجهة المستخدم إلى بيانات اعتماد التكوين أو البيئة. قدّم `token` (أو `password`) صراحة. نقص بيانات الاعتماد الصريحة يُعد خطأ. - - استخدم `wss://` عندما يكون Gateway خلف TLS (Tailscale Serve، وكيل HTTPS، إلخ). - - لا يُقبل `gatewayUrl` إلا في نافذة على المستوى الأعلى (غير مضمّنة) لمنع clickjacking. - - يجب أن تضبط عمليات نشر واجهة مستخدم التحكم غير loopback قيمة `gateway.controlUi.allowedOrigins` صراحة (أصول كاملة). يشمل ذلك إعدادات التطوير البعيدة. - - قد يزرع بدء تشغيل Gateway أصولًا محلية مثل `http://localhost:` و`http://127.0.0.1:` من ربط ومنفذ وقت التشغيل الفعليين، لكن أصول المتصفح البعيدة لا تزال تحتاج إلى إدخالات صريحة. - - لا تستخدم `gateway.controlUi.allowedOrigins: ["*"]` إلا للاختبار المحلي المحكوم بإحكام. فهذا يعني السماح لأي أصل متصفح، وليس "طابق أي مضيف أستخدمه." - - يفعّل `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` وضع الرجوع إلى أصل ترويسة Host، لكنه وضع أمني خطير. + - عند تعيين `gatewayUrl`، لا تعود الواجهة إلى بيانات اعتماد التكوين أو البيئة. وفر `token` (أو `password`) صراحةً. غياب بيانات الاعتماد الصريحة خطأ. + - استخدم `wss://` عندما يكون Gateway خلف TLS (Tailscale Serve، وكيل HTTPS، وما إلى ذلك). + - لا يُقبل `gatewayUrl` إلا في نافذة على المستوى الأعلى (وليس مضمنًا) لمنع clickjacking. + - يجب أن تضبط عمليات نشر واجهة التحكم غير loopback قيمة `gateway.controlUi.allowedOrigins` صراحةً (مصادر كاملة). يشمل ذلك إعدادات التطوير البعيدة. + - قد يبذر بدء تشغيل Gateway مصادر محلية مثل `http://localhost:` و`http://127.0.0.1:` من bind والمنفذ الفعالين وقت التشغيل، لكن مصادر المتصفح البعيدة لا تزال تحتاج إلى إدخالات صريحة. + - لا تستخدم `gateway.controlUi.allowedOrigins: ["*"]` إلا للاختبار المحلي الخاضع لرقابة صارمة. فهي تعني السماح لأي مصدر متصفح، وليس "طابق أي مضيف أستخدمه." + - يفعّل `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` وضع الرجوع إلى مصدر ترويسة Host، لكنه وضع أمني خطير. @@ -478,9 +479,9 @@ pnpm ui:dev تفاصيل إعداد الوصول البعيد: [الوصول البعيد](/ar/gateway/remote). -## ذات صلة +## ذو صلة - [لوحة المعلومات](/ar/web/dashboard) — لوحة معلومات Gateway - [فحوصات الصحة](/ar/gateway/health) — مراقبة صحة Gateway - [TUI](/ar/web/tui) — واجهة مستخدم طرفية -- [WebChat](/ar/web/webchat) — واجهة محادثة مستندة إلى المتصفح +- [WebChat](/ar/web/webchat) — واجهة دردشة مستندة إلى المتصفح