chore(i18n): refresh ar translations
This commit is contained in:
parent
2ddda7d091
commit
ed2c30ffd9
@ -1,49 +1,49 @@
|
||||
---
|
||||
read_when:
|
||||
- إعداد قناة BlueBubbles
|
||||
- استكشاف أخطاء إقران Webhook وإصلاحها
|
||||
- تكوين iMessage على macOS
|
||||
- استكشاف أخطاء اقتران Webhook وإصلاحها
|
||||
- إعداد iMessage على macOS
|
||||
sidebarTitle: BlueBubbles
|
||||
summary: iMessage عبر خادم BlueBubbles على macOS (الإرسال/الاستقبال عبر REST، الكتابة، التفاعلات، الإقران، الإجراءات المتقدمة).
|
||||
summary: iMessage عبر خادم BlueBubbles على macOS (الإرسال/الاستقبال عبر REST، الكتابة، التفاعلات، الاقتران، الإجراءات المتقدمة).
|
||||
title: BlueBubbles
|
||||
x-i18n:
|
||||
generated_at: "2026-05-01T07:37:59Z"
|
||||
generated_at: "2026-05-04T02:21:58Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 499cc2a46db6e0eddfb897e96ec4b3e4a39ba9f2f6da8e7485c1c46562de4145
|
||||
source_hash: 78a054da0c7c32b161997acd05914896259dd1a050e736a4c9e438a452ab6a51
|
||||
source_path: channels/bluebubbles.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
الحالة: Plugin مضمن يتواصل مع خادم BlueBubbles على macOS عبر HTTP. **موصى به لتكامل iMessage** بفضل API الأغنى والإعداد الأسهل مقارنة بقناة imsg القديمة.
|
||||
الحالة: Plugin مضمّن يتواصل مع خادم BlueBubbles على macOS عبر HTTP. **موصى به لتكامل iMessage** بسبب واجهة API الأغنى وسهولة الإعداد مقارنة بقناة imsg القديمة.
|
||||
|
||||
<Note>
|
||||
تضم إصدارات OpenClaw الحالية BlueBubbles، لذلك لا تحتاج البنيات المعبأة العادية إلى خطوة `openclaw plugins install` منفصلة.
|
||||
تضمّن إصدارات OpenClaw الحالية BlueBubbles، لذلك لا تحتاج البنى المعبأة العادية إلى خطوة `openclaw plugins install` منفصلة.
|
||||
</Note>
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
- يعمل على macOS عبر تطبيق BlueBubbles المساعد ([bluebubbles.app](https://bluebubbles.app)).
|
||||
- موصى به/مختبر: macOS Sequoia (15). يعمل macOS Tahoe (26)؛ التحرير معطل حاليا على Tahoe، وقد تبلغ تحديثات أيقونة المجموعة عن النجاح لكنها لا تتزامن.
|
||||
- يتواصل OpenClaw معه عبر REST API الخاص به (`GET /api/v1/ping`، `POST /message/text`، `POST /chat/:id/*`).
|
||||
- تصل الرسائل الواردة عبر Webhook؛ أما الردود الصادرة، ومؤشرات الكتابة، وإيصالات القراءة، وتفاعلات tapback فهي استدعاءات REST.
|
||||
- يتم استيعاب المرفقات والملصقات كوسائط واردة (وتعرض على الوكيل عند الإمكان).
|
||||
- يتم تسليم ردود Auto-TTS التي تنشئ صوت MP3 أو CAF كفقاعات مذكرة صوتية في iMessage بدلا من مرفقات ملفات عادية.
|
||||
- موصى به/مختبر: macOS Sequoia (15). يعمل macOS Tahoe (26)؛ التحرير معطل حاليا على Tahoe، وقد تبلغ تحديثات أيقونة المجموعة عن النجاح لكنها لا تتم مزامنتها.
|
||||
- يتواصل OpenClaw معه عبر REST API الخاصة به (`GET /api/v1/ping`، `POST /message/text`، `POST /chat/:id/*`).
|
||||
- تصل الرسائل الواردة عبر Webhook؛ أما الردود الصادرة ومؤشرات الكتابة وإيصالات القراءة وtapbacks فهي استدعاءات REST.
|
||||
- تُستوعب المرفقات والملصقات كوسائط واردة (وتُعرض على الوكيل عندما يكون ذلك ممكنا).
|
||||
- تُسلّم ردود Auto-TTS التي تنشئ صوت MP3 أو CAF كفقاعات مذكرة صوتية في iMessage بدلا من مرفقات ملفات عادية.
|
||||
- يعمل الاقتران/قائمة السماح بالطريقة نفسها مثل القنوات الأخرى (`/channels/pairing` وما إلى ذلك) مع `channels.bluebubbles.allowFrom` + رموز الاقتران.
|
||||
- تعرض التفاعلات كأحداث نظام تماما مثل Slack/Telegram حتى تتمكن الوكلاء من "ذكرها" قبل الرد.
|
||||
- الميزات المتقدمة: التحرير، إلغاء الإرسال، تسلسل الردود، تأثيرات الرسائل، إدارة المجموعات.
|
||||
- تُعرض التفاعلات كأحداث نظام تماما مثل Slack/Telegram لكي يتمكن الوكلاء من "ذكرها" قبل الرد.
|
||||
- ميزات متقدمة: التحرير، إلغاء الإرسال، تسلسل الردود، تأثيرات الرسائل، إدارة المجموعات.
|
||||
|
||||
## البدء السريع
|
||||
|
||||
<Steps>
|
||||
<Step title="Install BlueBubbles">
|
||||
ثبت خادم BlueBubbles على جهاز Mac لديك (اتبع التعليمات في [bluebubbles.app/install](https://bluebubbles.app/install)).
|
||||
ثبّت خادم BlueBubbles على جهاز Mac الخاص بك (اتبع التعليمات في [bluebubbles.app/install](https://bluebubbles.app/install)).
|
||||
</Step>
|
||||
<Step title="Enable the web API">
|
||||
في إعداد BlueBubbles، فعل web API واضبط كلمة مرور.
|
||||
في إعدادات BlueBubbles، فعّل web API واضبط كلمة مرور.
|
||||
</Step>
|
||||
<Step title="Configure OpenClaw">
|
||||
شغل `openclaw onboard` واختر BlueBubbles، أو اضبطه يدويا:
|
||||
شغّل `openclaw onboard` واختر BlueBubbles، أو اضبطه يدويا:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -60,25 +60,25 @@ x-i18n:
|
||||
|
||||
</Step>
|
||||
<Step title="Point webhooks at the gateway">
|
||||
وجه Webhook الخاصة بـ BlueBubbles إلى Gateway لديك (مثال: `https://your-gateway-host:3000/bluebubbles-webhook?password=<password>`).
|
||||
وجّه Webhook الخاصة بـ BlueBubbles إلى Gateway لديك (مثال: `https://your-gateway-host:3000/bluebubbles-webhook?password=<password>`).
|
||||
</Step>
|
||||
<Step title="Start the gateway">
|
||||
ابدأ Gateway؛ سيسجل معالج Webhook ويبدأ الاقتران.
|
||||
ابدأ Gateway؛ سيسجّل معالج Webhook ويبدأ الاقتران.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
<Warning>
|
||||
**الأمان**
|
||||
|
||||
- اضبط كلمة مرور Webhook دائما.
|
||||
- مصادقة Webhook مطلوبة دائما. يرفض OpenClaw طلبات Webhook من BlueBubbles ما لم تتضمن كلمة مرور/guid تطابق `channels.bluebubbles.password` (على سبيل المثال `?password=<password>` أو `x-password`)، بغض النظر عن بنية loopback/proxy.
|
||||
- اضبط دائما كلمة مرور Webhook.
|
||||
- مصادقة Webhook مطلوبة دائما. يرفض OpenClaw طلبات Webhook من BlueBubbles ما لم تتضمن كلمة مرور/guid تطابق `channels.bluebubbles.password` (على سبيل المثال `?password=<password>` أو `x-password`)، بغض النظر عن بنية local loopback/الوكيل.
|
||||
- يتم التحقق من مصادقة كلمة المرور قبل قراءة/تحليل أجسام Webhook الكاملة.
|
||||
|
||||
</Warning>
|
||||
|
||||
## إبقاء Messages.app نشطا (إعدادات VM / بلا واجهة)
|
||||
## إبقاء Messages.app نشطا (إعدادات VM / دون واجهة)
|
||||
|
||||
قد تنتهي بعض إعدادات macOS VM / التشغيل الدائم إلى انتقال Messages.app إلى حالة "خمول" (تتوقف الأحداث الواردة حتى يتم فتح التطبيق/إحضاره إلى المقدمة). حل بديل بسيط هو **تنبيه Messages كل 5 دقائق** باستخدام AppleScript + LaunchAgent.
|
||||
قد تنتهي بعض إعدادات VM على macOS / الدائمة التشغيل إلى جعل Messages.app في حالة "خمول" (تتوقف الأحداث الواردة حتى يتم فتح التطبيق/إحضاره إلى المقدمة). حل بسيط هو **تنبيه Messages كل 5 دقائق** باستخدام AppleScript + LaunchAgent.
|
||||
|
||||
<Steps>
|
||||
<Step title="Save the AppleScript">
|
||||
@ -132,7 +132,7 @@ x-i18n:
|
||||
</plist>
|
||||
```
|
||||
|
||||
يعمل هذا **كل 300 ثانية** و**عند تسجيل الدخول**. قد يؤدي التشغيل الأول إلى ظهور مطالبات **Automation** في macOS (`osascript` → Messages). وافق عليها في جلسة المستخدم نفسها التي تشغل LaunchAgent.
|
||||
يعمل هذا **كل 300 ثانية** و**عند تسجيل الدخول**. قد يؤدي التشغيل الأول إلى ظهور مطالبات **Automation** في macOS (`osascript` → Messages). وافق عليها في جلسة المستخدم نفسها التي تشغّل LaunchAgent.
|
||||
|
||||
</Step>
|
||||
<Step title="Load it">
|
||||
@ -143,15 +143,15 @@ x-i18n:
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## الإعداد الأولي
|
||||
## التهيئة الأولية
|
||||
|
||||
يتوفر BlueBubbles في الإعداد الأولي التفاعلي:
|
||||
يتوفر BlueBubbles في التهيئة الأولية التفاعلية:
|
||||
|
||||
```
|
||||
openclaw onboard
|
||||
```
|
||||
|
||||
يطالب المعالج بما يلي:
|
||||
يطالبك المعالج بما يلي:
|
||||
|
||||
<ParamField path="Server URL" type="string" required>
|
||||
عنوان خادم BlueBubbles (مثلا، `http://192.168.1.100:1234`).
|
||||
@ -163,10 +163,10 @@ openclaw onboard
|
||||
مسار نقطة نهاية Webhook.
|
||||
</ParamField>
|
||||
<ParamField path="DM policy" type="string">
|
||||
`pairing`، أو `allowlist`، أو `open`، أو `disabled`.
|
||||
`pairing` أو `allowlist` أو `open` أو `disabled`.
|
||||
</ParamField>
|
||||
<ParamField path="Allow list" type="string[]">
|
||||
أرقام الهاتف، أو عناوين البريد الإلكتروني، أو أهداف الدردشة.
|
||||
أرقام الهاتف أو عناوين البريد الإلكتروني أو أهداف الدردشة.
|
||||
</ParamField>
|
||||
|
||||
يمكنك أيضا إضافة BlueBubbles عبر CLI:
|
||||
@ -180,8 +180,8 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
<Tabs>
|
||||
<Tab title="DMs">
|
||||
- الافتراضي: `channels.bluebubbles.dmPolicy = "pairing"`.
|
||||
- يتلقى المرسلون غير المعروفين رمز اقتران؛ يتم تجاهل الرسائل حتى تتم الموافقة عليها (تنتهي صلاحية الرموز بعد ساعة واحدة).
|
||||
- وافق عبر:
|
||||
- يتلقى المرسلون المجهولون رمز اقتران؛ ويتم تجاهل الرسائل حتى تتم الموافقة (تنتهي صلاحية الرموز بعد ساعة واحدة).
|
||||
- الموافقة عبر:
|
||||
- `openclaw pairing list bluebubbles`
|
||||
- `openclaw pairing approve bluebubbles <CODE>`
|
||||
- الاقتران هو تبادل الرمز الافتراضي. التفاصيل: [الاقتران](/ar/channels/pairing)
|
||||
@ -189,19 +189,19 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
</Tab>
|
||||
<Tab title="Groups">
|
||||
- `channels.bluebubbles.groupPolicy = open | allowlist | disabled` (الافتراضي: `allowlist`).
|
||||
- يتحكم `channels.bluebubbles.groupAllowFrom` في من يمكنه التشغيل داخل المجموعات عند ضبط `allowlist`.
|
||||
- يتحكم `channels.bluebubbles.groupAllowFrom` في من يمكنه التحفيز في المجموعات عندما يكون `allowlist` مضبوطا.
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### إثراء أسماء جهات الاتصال (macOS، اختياري)
|
||||
|
||||
غالبا ما تتضمن Webhook مجموعات BlueBubbles عناوين المشاركين الخام فقط. إذا أردت أن يعرض سياق `GroupMembers` أسماء جهات الاتصال المحلية بدلا من ذلك، يمكنك الاشتراك في إثراء Contacts المحلي على macOS:
|
||||
غالبا ما تتضمن Webhook الخاصة بمجموعات BlueBubbles عناوين المشاركين الخام فقط. إذا أردت أن يعرض سياق `GroupMembers` أسماء جهات الاتصال المحلية بدلا من ذلك، يمكنك الاشتراك في إثراء Contacts المحلي على macOS:
|
||||
|
||||
- يفعل `channels.bluebubbles.enrichGroupParticipantsFromContacts = true` البحث. الافتراضي: `false`.
|
||||
- لا تعمل عمليات البحث إلا بعد أن تسمح صلاحية وصول المجموعة، وتفويض الأوامر، وبوابة الذكر بمرور الرسالة.
|
||||
- يتم إثراء المشاركين الهاتفيين غير المسمين فقط.
|
||||
- تبقى أرقام الهاتف الخام كخيار احتياطي عند عدم العثور على تطابق محلي.
|
||||
- يفعّل `channels.bluebubbles.enrichGroupParticipantsFromContacts = true` البحث. الافتراضي: `false`.
|
||||
- لا تعمل عمليات البحث إلا بعد أن يسمح وصول المجموعة وتفويض الأوامر وبوابة الذكر بمرور الرسالة.
|
||||
- يتم إثراء المشاركين عبر الهاتف الذين لا يحملون أسماء فقط.
|
||||
- تبقى أرقام الهاتف الخام كبديل عند عدم العثور على تطابق محلي.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -217,11 +217,11 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
|
||||
يدعم BlueBubbles بوابة الذكر لدردشات المجموعات، بما يطابق سلوك iMessage/WhatsApp:
|
||||
|
||||
- يستخدم `agents.list[].groupChat.mentionPatterns` (أو `messages.groupChat.mentionPatterns`) لاكتشاف الذكر.
|
||||
- عند تفعيل `requireMention` لمجموعة، لا يرد الوكيل إلا عند ذكره.
|
||||
- تتجاوز أوامر التحكم من المرسلين المفوضين بوابة الذكر.
|
||||
- يستخدم `agents.list[].groupChat.mentionPatterns` (أو `messages.groupChat.mentionPatterns`) لاكتشاف الإشارات.
|
||||
- عندما يتم تفعيل `requireMention` لمجموعة، لا يستجيب الوكيل إلا عند ذكره.
|
||||
- تتجاوز أوامر التحكم من المرسلين المخولين بوابة الذكر.
|
||||
|
||||
إعداد لكل مجموعة:
|
||||
الإعداد لكل مجموعة:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -240,13 +240,13 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
|
||||
### بوابة الأوامر
|
||||
|
||||
- تتطلب أوامر التحكم (مثلا، `/config`، `/model`) تفويضا.
|
||||
- تتطلب أوامر التحكم (مثلا، `/config`، `/model`) التفويض.
|
||||
- يستخدم `allowFrom` و`groupAllowFrom` لتحديد تفويض الأوامر.
|
||||
- يمكن للمرسلين المفوضين تشغيل أوامر التحكم حتى من دون ذكر في المجموعات.
|
||||
- يمكن للمرسلين المخولين تشغيل أوامر التحكم حتى دون ذكر في المجموعات.
|
||||
|
||||
### مطالبة نظام لكل مجموعة
|
||||
### موجّه النظام لكل مجموعة
|
||||
|
||||
يقبل كل إدخال ضمن `channels.bluebubbles.groups.*` سلسلة `systemPrompt` اختيارية. يتم حقن القيمة في مطالبة نظام الوكيل في كل دورة تتعامل مع رسالة في تلك المجموعة، بحيث يمكنك ضبط شخصية أو قواعد سلوكية لكل مجموعة من دون تعديل مطالبات الوكيل:
|
||||
يقبل كل إدخال ضمن `channels.bluebubbles.groups.*` سلسلة `systemPrompt` اختيارية. تُحقن القيمة في موجّه نظام الوكيل في كل دورة تتعامل مع رسالة في تلك المجموعة، بحيث يمكنك ضبط شخصية أو قواعد سلوك لكل مجموعة دون تعديل موجّهات الوكيل:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -262,11 +262,11 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
}
|
||||
```
|
||||
|
||||
يطابق المفتاح ما يبلغ عنه BlueBubbles باعتباره `chatGuid` / `chatIdentifier` / `chatId` رقمي للمجموعة، ويوفر إدخال البدل `"*"` افتراضيا لكل مجموعة لا تملك تطابقا دقيقا (النمط نفسه المستخدم بواسطة `requireMention` وسياسات الأدوات لكل مجموعة). تتفوق التطابقات الدقيقة دائما على البدل. تتجاهل الرسائل المباشرة هذا الحقل؛ استخدم تخصيص المطالبة على مستوى الوكيل أو الحساب بدلا من ذلك.
|
||||
يطابق المفتاح أيا كان ما يبلّغ عنه BlueBubbles كـ `chatGuid` / `chatIdentifier` / `chatId` رقمي للمجموعة، ويوفر إدخال البدل `"*"` قيمة افتراضية لكل مجموعة دون تطابق دقيق (النمط نفسه المستخدم بواسطة `requireMention` وسياسات الأدوات لكل مجموعة). تتغلب المطابقات الدقيقة دائما على البدل. تتجاهل الرسائل المباشرة هذا الحقل؛ استخدم تخصيص الموجّه على مستوى الوكيل أو الحساب بدلا من ذلك.
|
||||
|
||||
#### مثال عملي: الردود المتسلسلة وتفاعلات tapback (Private API)
|
||||
|
||||
مع تفعيل BlueBubbles Private API، تصل الرسائل الواردة مع معرفات رسائل قصيرة (على سبيل المثال `[[reply_to:5]]`) ويمكن للوكيل استدعاء `action=reply` للرد ضمن رسالة محددة أو `action=react` لإضافة tapback. تعد `systemPrompt` لكل مجموعة طريقة موثوقة لإبقاء الوكيل يختار الأداة الصحيحة:
|
||||
مع تفعيل BlueBubbles Private API، تصل الرسائل الواردة بمعرّفات رسائل قصيرة (على سبيل المثال `[[reply_to:5]]`) ويمكن للوكيل استدعاء `action=reply` لإدراج رد ضمن رسالة محددة أو `action=react` لإضافة tapback. تعد `systemPrompt` لكل مجموعة طريقة موثوقة لإبقاء الوكيل يختار الأداة الصحيحة:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -274,15 +274,7 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
bluebubbles: {
|
||||
groups: {
|
||||
"iMessage;+;chat-family": {
|
||||
systemPrompt: [
|
||||
"When replying in this group, always call action=reply with the",
|
||||
"[[reply_to:N]] messageId from context so your response threads",
|
||||
"under the triggering message. Never send a new unlinked message.",
|
||||
"",
|
||||
"For short acknowledgements ('ok', 'got it', 'on it'), use",
|
||||
"action=react with an appropriate tapback emoji (❤️, 👍, 😂, ‼️, ❓)",
|
||||
"instead of sending a text reply.",
|
||||
].join(" "),
|
||||
systemPrompt: "When replying in this group, always call action=reply with the [[reply_to:N]] messageId from context so your response threads under the triggering message. Never send a new unlinked message. For short acknowledgements ('ok', 'got it', 'on it'), use action=react with an appropriate tapback emoji (❤️, 👍, 😂, ‼️, ❓) instead of sending a text reply.",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -290,29 +282,29 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
}
|
||||
```
|
||||
|
||||
تتطلب تفاعلات tapback والردود المتسلسلة كلاهما BlueBubbles Private API؛ راجع [الإجراءات المتقدمة](#advanced-actions) و[معرفات الرسائل](#message-ids-short-vs-full) لمعرفة الآليات الأساسية.
|
||||
تتطلب كل من تفاعلات tapback والردود المتسلسلة BlueBubbles Private API؛ راجع [الإجراءات المتقدمة](#advanced-actions) و[معرّفات الرسائل](#message-ids-short-vs-full) لمعرفة الآليات الأساسية.
|
||||
|
||||
## روابط محادثات ACP
|
||||
|
||||
يمكن تحويل دردشات BlueBubbles إلى مساحات عمل ACP دائمة من دون تغيير طبقة النقل.
|
||||
يمكن تحويل دردشات BlueBubbles إلى مساحات عمل ACP دائمة دون تغيير طبقة النقل.
|
||||
|
||||
تدفق سريع للمشغل:
|
||||
|
||||
- شغل `/acp spawn codex --bind here` داخل الرسالة المباشرة أو دردشة المجموعة المسموح بها.
|
||||
- ستوجه الرسائل المستقبلية في محادثة BlueBubbles نفسها إلى جلسة ACP التي تم إنشاؤها.
|
||||
- شغّل `/acp spawn codex --bind here` داخل الرسالة المباشرة أو دردشة المجموعة المسموح بها.
|
||||
- تُوجّه الرسائل المستقبلية في محادثة BlueBubbles نفسها إلى جلسة ACP المنشأة.
|
||||
- يعيد `/new` و`/reset` ضبط جلسة ACP المرتبطة نفسها في مكانها.
|
||||
- يغلق `/acp close` جلسة ACP ويزيل الربط.
|
||||
- يغلق `/acp close` جلسة ACP ويزيل الرابط.
|
||||
|
||||
تدعم أيضا الروابط الدائمة المضبوطة عبر إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` و`match.channel: "bluebubbles"`.
|
||||
تُدعم الروابط الدائمة المضبوطة أيضا عبر إدخالات `bindings[]` في المستوى الأعلى مع `type: "acp"` و`match.channel: "bluebubbles"`.
|
||||
|
||||
يمكن أن يستخدم `match.peer.id` أي صيغة هدف مدعومة في BlueBubbles:
|
||||
|
||||
- مقبض رسالة مباشرة مطبع مثل `+15555550123` أو `user@example.com`
|
||||
- معرّف DM مطبّع مثل `+15555550123` أو `user@example.com`
|
||||
- `chat_id:<id>`
|
||||
- `chat_guid:<guid>`
|
||||
- `chat_identifier:<identifier>`
|
||||
|
||||
للروابط المستقرة للمجموعات، فضل `chat_id:*` أو `chat_identifier:*`.
|
||||
لروابط المجموعات المستقرة، فضّل `chat_id:*` أو `chat_identifier:*`.
|
||||
|
||||
مثال:
|
||||
|
||||
@ -348,9 +340,9 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
|
||||
## الكتابة + إيصالات القراءة
|
||||
|
||||
- **مؤشرات الكتابة**: تُرسل تلقائياً قبل إنشاء الرد وأثناءه.
|
||||
- **مؤشرات الكتابة**: تُرسل تلقائيا قبل وأثناء إنشاء الرد.
|
||||
- **إيصالات القراءة**: يتحكم بها `channels.bluebubbles.sendReadReceipts` (الافتراضي: `true`).
|
||||
- **مؤشرات الكتابة**: يرسل OpenClaw أحداث بدء الكتابة؛ ويمسح BlueBubbles حالة الكتابة تلقائياً عند الإرسال أو انتهاء المهلة (الإيقاف اليدوي عبر DELETE غير موثوق).
|
||||
- **مؤشرات الكتابة**: يرسل OpenClaw أحداث بدء الكتابة؛ يمسح BlueBubbles الكتابة تلقائيا عند الإرسال أو انتهاء المهلة (الإيقاف اليدوي عبر DELETE غير موثوق).
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -364,7 +356,7 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
|
||||
## الإجراءات المتقدمة
|
||||
|
||||
يدعم BlueBubbles إجراءات رسائل متقدمة عند تفعيلها في الإعدادات:
|
||||
يدعم BlueBubbles إجراءات الرسائل المتقدمة عند تمكينها في الإعدادات:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -389,34 +381,34 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
```
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="الإجراءات المتاحة">
|
||||
- **react**: أضف/أزل تفاعلات tapback (`messageId`، `emoji`، `remove`). مجموعة tapback الأصلية في iMessage هي `love`، و`like`، و`dislike`، و`laugh`، و`emphasize`، و`question`. عندما يختار وكيل رمزاً تعبيرياً خارج تلك المجموعة (مثلاً `👀`)، تعود أداة التفاعل إلى `love` كي يستمر عرض tapback بدلاً من فشل الطلب بالكامل. لا تزال تفاعلات الإقرار المكوّنة تتحقق بصرامة وتُرجع خطأ عند القيم غير المعروفة.
|
||||
<Accordion title="Available actions">
|
||||
- **react**: أضف/أزل تفاعلات tapback (`messageId`، `emoji`، `remove`). مجموعة tapback الأصلية في iMessage هي `love` و`like` و`dislike` و`laugh` و`emphasize` و`question`. عندما يختار الوكيل رمزًا تعبيريًا خارج هذه المجموعة (مثل `👀`)، تعود أداة التفاعل إلى `love` بحيث يظل tapback معروضًا بدلًا من فشل الطلب بالكامل. تظل تفاعلات الإقرار المكوّنة تتحقق بصرامة وتعرض خطأ عند القيم غير المعروفة.
|
||||
- **edit**: عدّل رسالة مرسلة (`messageId`، `text`).
|
||||
- **unsend**: ألغِ إرسال رسالة (`messageId`).
|
||||
- **reply**: رد على رسالة محددة (`messageId`، `text`، `to`).
|
||||
- **sendWithEffect**: أرسل مع تأثير iMessage (`text`، `to`، `effectId`).
|
||||
- **renameGroup**: أعد تسمية دردشة جماعية (`chatGuid`، `displayName`).
|
||||
- **setGroupIcon**: عيّن أيقونة/صورة دردشة جماعية (`chatGuid`، `media`) — غير مستقرة على macOS 26 Tahoe (قد تُرجع API نجاحاً لكن الأيقونة لا تتزامن).
|
||||
- **addParticipant**: أضف شخصاً إلى مجموعة (`chatGuid`، `address`).
|
||||
- **removeParticipant**: أزل شخصاً من مجموعة (`chatGuid`، `address`).
|
||||
- **leaveGroup**: غادر دردشة جماعية (`chatGuid`).
|
||||
- **renameGroup**: أعد تسمية محادثة جماعية (`chatGuid`، `displayName`).
|
||||
- **setGroupIcon**: عيّن أيقونة/صورة محادثة جماعية (`chatGuid`، `media`) — غير مستقر على macOS 26 Tahoe (قد تعيد API نجاحًا لكن الأيقونة لا تتزامن).
|
||||
- **addParticipant**: أضف شخصًا إلى مجموعة (`chatGuid`، `address`).
|
||||
- **removeParticipant**: أزل شخصًا من مجموعة (`chatGuid`، `address`).
|
||||
- **leaveGroup**: غادر محادثة جماعية (`chatGuid`).
|
||||
- **upload-file**: أرسل وسائط/ملفات (`to`، `buffer`، `filename`، `asVoice`).
|
||||
- المذكرات الصوتية: اضبط `asVoice: true` مع صوت **MP3** أو **CAF** للإرسال كرسالة صوتية في iMessage. يحوّل BlueBubbles MP3 → CAF عند إرسال المذكرات الصوتية.
|
||||
- المذكرات الصوتية: عيّن `asVoice: true` مع صوت **MP3** أو **CAF** للإرسال كرسالة صوتية في iMessage. يحوّل BlueBubbles MP3 → CAF عند إرسال المذكرات الصوتية.
|
||||
- الاسم المستعار القديم: لا يزال `sendAttachment` يعمل، لكن `upload-file` هو اسم الإجراء المعتمد.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
### معرّفات الرسائل (قصيرة مقابل كاملة)
|
||||
### معرّفات الرسائل (قصيرة أم كاملة)
|
||||
|
||||
قد يعرض OpenClaw معرّفات رسائل _قصيرة_ (مثل `1`، `2`) لتوفير الرموز.
|
||||
|
||||
- يمكن أن تكون `MessageSid` / `ReplyToId` معرّفات قصيرة.
|
||||
- تحتوي `MessageSidFull` / `ReplyToIdFull` على المعرّفات الكاملة للمزوّد.
|
||||
- المعرّفات القصيرة موجودة في الذاكرة؛ يمكن أن تنتهي صلاحيتها عند إعادة التشغيل أو إخلاء ذاكرة التخزين المؤقت.
|
||||
- تقبل الإجراءات `messageId` قصيراً أو كاملاً، لكن المعرّفات القصيرة ستُرجع خطأ إذا لم تعد متاحة.
|
||||
- تحتوي `MessageSidFull` / `ReplyToIdFull` على المعرّفات الكاملة من المزوّد.
|
||||
- المعرّفات القصيرة موجودة في الذاكرة؛ ويمكن أن تنتهي صلاحيتها عند إعادة التشغيل أو إخراجها من ذاكرة التخزين المؤقت.
|
||||
- تقبل الإجراءات `messageId` قصيرًا أو كاملًا، لكن المعرّفات القصيرة ستعرض خطأ إذا لم تعد متاحة.
|
||||
|
||||
استخدم المعرّفات الكاملة للأتمتة والتخزين الدائمين:
|
||||
استخدم المعرّفات الكاملة للأتمتات والتخزين الدائمين:
|
||||
|
||||
- القوالب: `{{MessageSidFull}}`، `{{ReplyToIdFull}}`
|
||||
- السياق: `MessageSidFull` / `ReplyToIdFull` في الحمولات الواردة
|
||||
@ -427,30 +419,30 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
|
||||
## دمج الرسائل المباشرة المقسّمة عند الإرسال (أمر + URL في تركيب واحد)
|
||||
|
||||
عندما يكتب مستخدم أمراً وURL معاً في iMessage — مثل `Dump https://example.com/article` — تقسّم Apple الإرسال إلى **تسليمين منفصلين عبر Webhook**:
|
||||
عندما يكتب مستخدم أمرًا وURL معًا في iMessage — مثل `Dump https://example.com/article` — تقسّم Apple الإرسال إلى **تسليمين منفصلين عبر Webhook**:
|
||||
|
||||
1. رسالة نصية (`"Dump"`).
|
||||
2. فقاعة معاينة URL (`"https://..."`) مع صور معاينة OG كمرفقات.
|
||||
2. فقاعة معاينة URL (`"https://..."`) مع صور معاينة OG كمرفقات.
|
||||
|
||||
يصل Webhookان إلى OpenClaw بفاصل يقارب 0.8-2.0 ثانية في معظم الإعدادات. من دون الدمج، يتلقى الوكيل الأمر وحده في الدور 1، ويرد (غالباً "أرسل لي URL")، ولا يرى URL إلا في الدور 2 — وعندها يكون سياق الأمر قد فُقد بالفعل.
|
||||
يصل Webhookان إلى OpenClaw بفاصل يقارب 0.8-2.0 ثانية في معظم الإعدادات. من دون الدمج، يتلقى الوكيل الأمر وحده في الجولة 1، ويرد (غالبًا "أرسل لي URL")، ولا يرى URL إلا في الجولة 2 — وعندها يكون سياق الأمر قد فُقد بالفعل.
|
||||
|
||||
يختار `channels.bluebubbles.coalesceSameSenderDms` دمج Webhookات متتالية من المرسل نفسه في الرسائل المباشرة ضمن دور وكيل واحد. تستمر الدردشات الجماعية في استخدام مفتاح لكل رسالة كي تُحفظ بنية الأدوار متعددة المستخدمين.
|
||||
يتيح `channels.bluebubbles.coalesceSameSenderDms` دمج Webhooks المتتابعة من المرسل نفسه في رسالة مباشرة ضمن جولة وكيل واحدة. تستمر المحادثات الجماعية في استخدام مفتاح لكل رسالة بحيث يُحافظ على بنية الجولات متعددة المستخدمين.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="متى تفعّله">
|
||||
<Tab title="When to enable">
|
||||
فعّله عندما:
|
||||
|
||||
- توفر Skills تتوقع `command + payload` في رسالة واحدة (تفريغ، لصق، حفظ، صف انتظار، إلخ).
|
||||
- يلصق مستخدموك URLات أو صوراً أو محتوى طويلاً إلى جانب الأوامر.
|
||||
- يمكنك قبول زمن انتظار إضافي في دور الرسالة المباشرة (انظر أدناه).
|
||||
- تشحن Skills تتوقع `command + payload` في رسالة واحدة (dump، paste، save، queue، وما إلى ذلك).
|
||||
- يلصق مستخدموك عناوين URL أو صورًا أو محتوى طويلًا إلى جانب الأوامر.
|
||||
- يمكنك قبول التأخير الإضافي في جولة الرسائل المباشرة (انظر أدناه).
|
||||
|
||||
اتركه معطلاً عندما:
|
||||
اتركه معطّلًا عندما:
|
||||
|
||||
- تحتاج إلى أقل زمن انتظار للأوامر في مشغلات الرسائل المباشرة ذات الكلمة الواحدة.
|
||||
- تكون كل تدفقاتك أوامر لمرة واحدة بلا متابعات حمولة.
|
||||
- تحتاج إلى أدنى زمن استجابة للأوامر لمشغلات الرسائل المباشرة ذات الكلمة الواحدة.
|
||||
- تكون كل تدفقاتك أوامر من خطوة واحدة من دون متابعات حمولة.
|
||||
|
||||
</Tab>
|
||||
<Tab title="التفعيل">
|
||||
<Tab title="Enabling">
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
@ -461,7 +453,7 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
}
|
||||
```
|
||||
|
||||
عند تشغيل الراية وعدم وجود `messages.inbound.byChannel.bluebubbles` صريح، تتسع نافذة debounce إلى **2500 ms** (الافتراضي لعدم الدمج هو 500 ms). النافذة الأوسع مطلوبة — وتيرة الإرسال المقسّم لدى Apple التي تبلغ 0.8-2.0 ثانية لا تناسب الافتراضي الأضيق.
|
||||
عند تشغيل العلامة وعدم وجود `messages.inbound.byChannel.bluebubbles` صريح، تتسع نافذة debounce إلى **2500 ms** (الافتراضي لعدم الدمج هو 500 ms). النافذة الأوسع مطلوبة — إيقاع الإرسال المقسّم من Apple البالغ 0.8-2.0 ثانية لا يتناسب مع الافتراضي الأضيق.
|
||||
|
||||
لضبط النافذة بنفسك:
|
||||
|
||||
@ -480,62 +472,62 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
```
|
||||
|
||||
</Tab>
|
||||
<Tab title="المفاضلات">
|
||||
- **زمن انتظار إضافي لأوامر التحكم في الرسائل المباشرة.** عند تشغيل الراية، تنتظر رسائل أوامر التحكم في الرسائل المباشرة (مثل `Dump` و`Save` وغيرهما) الآن حتى نافذة debounce قبل الإرسال، تحسباً لوصول Webhook حمولة. تحتفظ أوامر الدردشات الجماعية بالإرسال الفوري.
|
||||
- **المخرجات المدمجة محدودة** — النص المدمج محدود بـ 4000 حرف مع علامة `…[truncated]` صريحة؛ والمرفقات محدودة بـ 20؛ وإدخالات المصدر محدودة بـ 10 (يُحتفظ بالأول زائد الأحدث بعد ذلك). لا يزال كل `messageId` مصدر يصل إلى إزالة التكرار الواردة، لذلك يُتعرّف على أي إعادة تشغيل لاحقة من MessagePoller لأي حدث فردي كتكرار.
|
||||
- **اختياري، لكل قناة.** لا تتأثر القنوات الأخرى (Telegram، WhatsApp، Slack، …).
|
||||
<Tab title="Trade-offs">
|
||||
- **تأخير إضافي لأوامر التحكم في الرسائل المباشرة.** عند تشغيل العلامة، تنتظر رسائل أوامر التحكم في الرسائل المباشرة (مثل `Dump` و`Save` وما إلى ذلك) الآن حتى نافذة debounce قبل الإرسال، تحسبًا لوصول Webhook للحمولة. تحافظ أوامر المحادثات الجماعية على الإرسال الفوري.
|
||||
- **المخرجات المدمجة محدودة** — النص المدمج محدد عند 4000 حرف مع علامة `…[truncated]` صريحة؛ والمرفقات محددة عند 20؛ وإدخالات المصدر محددة عند 10 (يُحتفظ بالأول زائد الأحدث بعد ذلك). لا يزال كل `messageId` للمصدر يصل إلى إزالة التكرار الواردة بحيث يُعرَف أي تكرار لاحق من MessagePoller لأي حدث فردي كتكرار.
|
||||
- **اختياري، لكل قناة.** لا تتأثر القنوات الأخرى (Telegram وWhatsApp وSlack و…).
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### السيناريوهات وما يراه الوكيل
|
||||
|
||||
| ما يركّبه المستخدم | ما تسلّمه Apple | الراية متوقفة (الافتراضي) | الراية مفعلة + نافذة 2500 ms |
|
||||
| ما يؤلفه المستخدم | ما تسلمه Apple | العلامة متوقفة (افتراضي) | العلامة مشغلة + نافذة 2500 ms |
|
||||
| ------------------------------------------------------------------ | ------------------------- | --------------------------------------- | ----------------------------------------------------------------------- |
|
||||
| `Dump https://example.com` (إرسال واحد) | Webhookان بفاصل ~1 ثانية | دورا وكيل: "Dump" وحدها، ثم URL | دور واحد: نص مدمج `Dump https://example.com` |
|
||||
| `Save this 📎image.jpg caption` (مرفق + نص) | Webhookان | دوران | دور واحد: نص + صورة |
|
||||
| `/status` (أمر مستقل) | Webhook واحد | إرسال فوري | **انتظار حتى النافذة، ثم إرسال** |
|
||||
| URL ملصق وحده | Webhook واحد | إرسال فوري | إرسال فوري (إدخال واحد فقط في الحاوية) |
|
||||
| نص + URL أُرسلا كرسالتين منفصلتين مقصودتين، بفاصل دقائق | Webhookان خارج النافذة | دوران | دوران (تنتهي النافذة بينهما) |
|
||||
| تدفق سريع (>10 رسائل مباشرة صغيرة داخل النافذة) | N Webhookات | N أدوار | دور واحد، مخرجات محدودة (الأول + الأحدث، مع تطبيق حدود النص/المرفقات) |
|
||||
| `Dump https://example.com` (إرسال واحد) | 2 Webhooks بفاصل ~1 ثانية | جولتا وكيل: "Dump" وحدها، ثم URL | جولة واحدة: نص مدمج `Dump https://example.com` |
|
||||
| `Save this 📎image.jpg caption` (مرفق + نص) | 2 Webhooks | جولتان | جولة واحدة: نص + صورة |
|
||||
| `/status` (أمر مستقل) | 1 Webhook | إرسال فوري | **انتظر حتى النافذة، ثم أرسل** |
|
||||
| URL ملصوق وحده | 1 Webhook | إرسال فوري | إرسال فوري (إدخال واحد فقط في الحاوية) |
|
||||
| نص + URL أُرسلا كرسالتين منفصلتين عمدًا، بفاصل دقائق | 2 Webhooks خارج النافذة | جولتان | جولتان (تنتهي النافذة بينهما) |
|
||||
| تدفق سريع (>10 رسائل مباشرة صغيرة داخل النافذة) | N Webhooks | N جولات | جولة واحدة، مخرجات محدودة (الأول + الأحدث، مع تطبيق حدود النص/المرفقات) |
|
||||
|
||||
### استكشاف أخطاء دمج الإرسال المقسّم وإصلاحها
|
||||
|
||||
إذا كانت الراية مفعلة ولا تزال عمليات الإرسال المقسّم تصل كدورين، فتحقق من كل طبقة:
|
||||
إذا كانت العلامة مشغلة ولا تزال الإرسالات المقسّمة تصل كجولتين، فتحقق من كل طبقة:
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="تم تحميل الإعدادات فعلاً">
|
||||
<Accordion title="Config actually loaded">
|
||||
```
|
||||
grep coalesceSameSenderDms ~/.openclaw/openclaw.json
|
||||
```
|
||||
|
||||
ثم `openclaw gateway restart` — تُقرأ الراية عند إنشاء سجل debouncer.
|
||||
ثم `openclaw gateway restart` — تُقرأ العلامة عند إنشاء سجل debouncer.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="نافذة debounce واسعة بما يكفي لإعدادك">
|
||||
انظر إلى سجل خادم BlueBubbles ضمن `~/Library/Logs/bluebubbles-server/main.log`:
|
||||
<Accordion title="Debounce window wide enough for your setup">
|
||||
انظر إلى سجل خادم BlueBubbles تحت `~/Library/Logs/bluebubbles-server/main.log`:
|
||||
|
||||
```
|
||||
grep -E "Dispatching event to webhook" main.log | tail -20
|
||||
```
|
||||
|
||||
قِس الفاصل بين إرسال النص بنمط `"Dump"` وإرسال `"https://..."; Attachments:` الذي يليه. ارفع `messages.inbound.byChannel.bluebubbles` ليغطي ذلك الفاصل براحة.
|
||||
قِس الفجوة بين إرسال النص بنمط `"Dump"` وإرسال `"https://..."; Attachments:` الذي يليه. ارفع `messages.inbound.byChannel.bluebubbles` ليغطي تلك الفجوة بشكل مريح.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="طوابع JSONL الزمنية للجلسة ≠ وصول Webhook">
|
||||
تعكس طوابع أحداث الجلسة الزمنية (`~/.openclaw/agents/<id>/sessions/*.jsonl`) الوقت الذي يسلّم فيه Gateway رسالة إلى الوكيل، **وليس** وقت وصول Webhook. تعني رسالة ثانية موضوعة في الصف وموسومة بـ `[Queued messages while agent was busy]` أن الدور الأول كان لا يزال جارياً عند وصول Webhook الثاني — وكانت حاوية الدمج قد فُرغت بالفعل. اضبط النافذة مقابل سجل خادم BB، وليس سجل الجلسة.
|
||||
<Accordion title="Session JSONL timestamps ≠ webhook arrival">
|
||||
تعكس طوابع وقت أحداث الجلسة (`~/.openclaw/agents/<id>/sessions/*.jsonl`) وقت تسليم Gateway رسالة إلى الوكيل، **وليس** وقت وصول Webhook. تعني الرسالة الثانية في الطابور والموسومة `[Queued messages while agent was busy]` أن الجولة الأولى كانت لا تزال قيد التشغيل عندما وصل Webhook الثاني — وكانت حاوية الدمج قد أُفرغت بالفعل. اضبط النافذة مقابل سجل خادم BB، وليس سجل الجلسة.
|
||||
</Accordion>
|
||||
<Accordion title="ضغط الذاكرة يبطئ إرسال الرد">
|
||||
على الأجهزة الأصغر (8 GB)، قد تستغرق أدوار الوكيل وقتاً كافياً لتُفرغ حاوية الدمج قبل اكتمال الرد، وينتهي URL كدور ثانٍ في الصف. تحقق من `memory_pressure` و`ps -o rss -p $(pgrep openclaw-gateway)`؛ إذا كان Gateway يتجاوز ~500 MB RSS وكان الضاغط نشطاً، فأغلق العمليات الثقيلة الأخرى أو انتقل إلى مضيف أكبر.
|
||||
<Accordion title="Memory pressure slowing reply dispatch">
|
||||
على الأجهزة الأصغر (8 GB)، يمكن أن تستغرق جولات الوكيل وقتًا كافيًا بحيث تُفرغ حاوية الدمج قبل اكتمال الرد، ويصل URL كجولة ثانية في الطابور. تحقق من `memory_pressure` و`ps -o rss -p $(pgrep openclaw-gateway)`؛ إذا كان Gateway فوق ~500 MB RSS وكان الضاغط نشطًا، فأغلق العمليات الثقيلة الأخرى أو انتقل إلى مضيف أكبر.
|
||||
</Accordion>
|
||||
<Accordion title="إرسالات اقتباس الرد مسار مختلف">
|
||||
إذا نقر المستخدم على `Dump` كـ **رد** على فقاعة URL موجودة (يعرض iMessage شارة "1 Reply" على فقاعة Dump)، فإن URL موجود في `replyToBody`، وليس في Webhook ثانٍ. لا ينطبق الدمج — فهذا شأن Skill/المطالبة، وليس شأن debouncer.
|
||||
<Accordion title="Reply-quote sends are a different path">
|
||||
إذا نقر المستخدم على `Dump` كـ **رد** على فقاعة URL موجودة (يعرض iMessage شارة "1 Reply" على فقاعة Dump)، فإن URL يعيش في `replyToBody`، وليس في Webhook ثانٍ. لا ينطبق الدمج — هذه مسألة skill/موجه، وليست مسألة debouncer.
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## بث الكتل
|
||||
|
||||
تحكم فيما إذا كانت الردود تُرسل كرسالة واحدة أو تُبث في كتل:
|
||||
تحكم في ما إذا كانت الردود تُرسل كرسالة واحدة أم تُبث في كتل:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -550,50 +542,50 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
## الوسائط + الحدود
|
||||
|
||||
- تُنزّل المرفقات الواردة وتُخزّن في ذاكرة التخزين المؤقت للوسائط.
|
||||
- حد الوسائط عبر `channels.bluebubbles.mediaMaxMb` للوسائط الواردة والصادرة (الافتراضي: 8 MB).
|
||||
- يُقسّم النص الصادر إلى `channels.bluebubbles.textChunkLimit` (الافتراضي: 4000 حرف).
|
||||
- حد الوسائط عبر `channels.bluebubbles.mediaMaxMb` للوسائط الواردة والصادرة (افتراضيًا: 8 MB).
|
||||
- يُقسّم النص الصادر إلى `channels.bluebubbles.textChunkLimit` (افتراضيًا: 4000 حرف).
|
||||
|
||||
## مرجع الإعدادات
|
||||
|
||||
الإعدادات الكاملة: [الإعدادات](/ar/gateway/configuration)
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="الاتصال وWebhook">
|
||||
- `channels.bluebubbles.enabled`: فعّل/عطّل القناة.
|
||||
- `channels.bluebubbles.serverUrl`: عنوان URL الأساسي لـ BlueBubbles REST API.
|
||||
<Accordion title="Connection and webhook">
|
||||
- `channels.bluebubbles.enabled`: تمكين/تعطيل القناة.
|
||||
- `channels.bluebubbles.serverUrl`: عنوان URL الأساسي لـ REST API في BlueBubbles.
|
||||
- `channels.bluebubbles.password`: كلمة مرور API.
|
||||
- `channels.bluebubbles.webhookPath`: مسار نقطة نهاية Webhook (الافتراضي: `/bluebubbles-webhook`).
|
||||
- `channels.bluebubbles.webhookPath`: مسار نقطة نهاية Webhook (افتراضيًا: `/bluebubbles-webhook`).
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="سياسة الوصول">
|
||||
- `channels.bluebubbles.dmPolicy`: `pairing | allowlist | open | disabled` (الافتراضي: `pairing`).
|
||||
- `channels.bluebubbles.allowFrom`: قائمة سماح الرسائل المباشرة (المعرّفات، عناوين البريد الإلكتروني، أرقام E.164، `chat_id:*`، `chat_guid:*`).
|
||||
- `channels.bluebubbles.groupPolicy`: `open | allowlist | disabled` (الافتراضي: `allowlist`).
|
||||
- `channels.bluebubbles.groupAllowFrom`: قائمة سماح مرسلي المجموعات.
|
||||
- `channels.bluebubbles.enrichGroupParticipantsFromContacts`: على macOS، إثراء مشاركي المجموعات غير المسمّين اختيارياً من جهات الاتصال المحلية بعد اجتياز بوابات السماح. الافتراضي: `false`.
|
||||
- `channels.bluebubbles.groups`: إعدادات لكل مجموعة (`requireMention`، إلخ).
|
||||
<Accordion title="Access policy">
|
||||
- `channels.bluebubbles.dmPolicy`: `pairing | allowlist | open | disabled` (افتراضيًا: `pairing`).
|
||||
- `channels.bluebubbles.allowFrom`: قائمة سماح الرسائل المباشرة (المعرّفات، رسائل البريد الإلكتروني، أرقام E.164، `chat_id:*`، `chat_guid:*`).
|
||||
- `channels.bluebubbles.groupPolicy`: `open | allowlist | disabled` (افتراضيًا: `allowlist`).
|
||||
- `channels.bluebubbles.groupAllowFrom`: قائمة سماح مرسلي المجموعة.
|
||||
- `channels.bluebubbles.enrichGroupParticipantsFromContacts`: على macOS، إثراء اختياري للمشاركين غير المسمّين في المجموعة من جهات الاتصال المحلية بعد اجتياز البوابات. الافتراضي: `false`.
|
||||
- `channels.bluebubbles.groups`: إعداد لكل مجموعة (`requireMention`، وما إلى ذلك).
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="التسليم والتقسيم إلى أجزاء">
|
||||
<Accordion title="التسليم والتقسيم">
|
||||
- `channels.bluebubbles.sendReadReceipts`: إرسال إيصالات القراءة (الافتراضي: `true`).
|
||||
- `channels.bluebubbles.blockStreaming`: تفعيل البث على شكل كتل (الافتراضي: `false`؛ مطلوب للردود المتدفقة).
|
||||
- `channels.bluebubbles.blockStreaming`: تفعيل البث الكتلي (الافتراضي: `false`؛ مطلوب للردود المتدفقة).
|
||||
- `channels.bluebubbles.textChunkLimit`: حجم الجزء الصادر بالأحرف (الافتراضي: 4000).
|
||||
- `channels.bluebubbles.sendTimeoutMs`: مهلة كل طلب بالمللي ثانية لإرسال النصوص الصادرة عبر `/api/v1/message/text` (الافتراضي: 30000). ارفعها في إعدادات macOS 26 حيث يمكن أن تتوقف عمليات إرسال iMessage عبر Private API لمدة تزيد عن 60 ثانية داخل إطار عمل iMessage؛ مثلًا `45000` أو `60000`. تحافظ المجسات، وعمليات البحث في الدردشات، والتفاعلات، والتعديلات، وفحوصات السلامة حاليًا على الافتراضي الأقصر البالغ 10 ثوانٍ؛ ومن المخطط توسيع التغطية لتشمل التفاعلات والتعديلات في متابعة لاحقة. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.sendTimeoutMs`.
|
||||
- `channels.bluebubbles.chunkMode`: يقسم `length` (الافتراضي) فقط عند تجاوز `textChunkLimit`؛ ويقسم `newline` عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول.
|
||||
- `channels.bluebubbles.sendTimeoutMs`: مهلة كل طلب بالمللي ثانية لإرسال النصوص الصادرة عبر `/api/v1/message/text` (الافتراضي: 30000). ارفعها في إعدادات macOS 26 حيث يمكن أن تتوقف عمليات إرسال iMessage عبر Private API لأكثر من 60 ثانية داخل إطار عمل iMessage؛ على سبيل المثال `45000` أو `60000`. تحتفظ المجسات وعمليات البحث في الدردشة والتفاعلات والتعديلات وفحوصات السلامة حاليًا بالمهلة الافتراضية الأقصر وهي 10 ثوانٍ؛ ومن المخطط توسيع التغطية لتشمل التفاعلات والتعديلات كمتابعة. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.sendTimeoutMs`.
|
||||
- `channels.bluebubbles.chunkMode`: يقسّم `length` (الافتراضي) فقط عند تجاوز `textChunkLimit`؛ ويقسّم `newline` عند الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="الوسائط والسجل">
|
||||
- `channels.bluebubbles.mediaMaxMb`: حد الوسائط الواردة/الصادرة بالميغابايت (الافتراضي: 8).
|
||||
- `channels.bluebubbles.mediaLocalRoots`: قائمة سماح صريحة للأدلة المحلية المطلقة المسموح بها لمسارات الوسائط المحلية الصادرة. يتم رفض إرسال المسارات المحلية افتراضيًا ما لم يتم تكوين هذا. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.mediaLocalRoots`.
|
||||
- `channels.bluebubbles.coalesceSameSenderDms`: دمج Webhook للرسائل المباشرة المتتالية من المرسل نفسه في دورة وكيل واحدة، بحيث تصل عملية الإرسال المقسمة من Apple للنص+عنوان URL كرسالة واحدة (الافتراضي: `false`). راجع [دمج الرسائل المباشرة المقسمة](#coalescing-split-send-dms-command--url-in-one-composition) للاطلاع على السيناريوهات، وضبط النافذة، والمفاضلات. يوسع نافذة إزالة الارتداد الافتراضية للوارد من 500 مللي ثانية إلى 2500 مللي ثانية عند التفعيل بدون `messages.inbound.byChannel.bluebubbles` صريح.
|
||||
- `channels.bluebubbles.historyLimit`: الحد الأقصى لرسائل المجموعة للسياق (0 يعطلها).
|
||||
- `channels.bluebubbles.dmHistoryLimit`: حد سجل الرسائل المباشرة.
|
||||
- `channels.bluebubbles.replyContextApiFallback`: عندما يصل رد وارد بدون `replyToBody`/`replyToSender` ولا يجد مخبأ سياق الرد في الذاكرة نتيجة، اجلب الرسالة الأصلية من BlueBubbles HTTP API كخيار احتياطي بأفضل جهد (الافتراضي: `false`). مفيد لعمليات النشر متعددة المثيلات التي تشارك حساب BlueBubbles واحدًا، أو بعد إعادة تشغيل العملية، أو بعد طرد مخبأ TTL/LRU طويل العمر. يخضع الجلب لحماية SSRF بالسياسة نفسها مثل كل طلب عميل BlueBubbles آخر، ولا يرمي خطأ أبدًا، ويملأ المخبأ بحيث تستفيد الردود اللاحقة من ذلك. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.replyContextApiFallback`. ينتشر إعداد مستوى القناة إلى الحسابات التي تحذف العلم.
|
||||
- `channels.bluebubbles.mediaLocalRoots`: قائمة سماح صريحة بالأدلة المحلية المطلقة المسموح بها لمسارات الوسائط المحلية الصادرة. تُرفض عمليات الإرسال عبر المسارات المحلية افتراضيًا ما لم يُضبط هذا الخيار. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.mediaLocalRoots`.
|
||||
- `channels.bluebubbles.coalesceSameSenderDms`: دمج Webhook رسائل DM المتتالية من المرسل نفسه في دورة وكيل واحدة حتى يصل إرسال Apple المقسّم إلى نص+عنوان URL كرسالة واحدة (الافتراضي: `false`). راجع [دمج رسائل DM المقسّمة الإرسال](#coalescing-split-send-dms-command--url-in-one-composition) لمعرفة السيناريوهات وضبط النافذة والمفاضلات. يوسّع نافذة إزالة الارتداد الافتراضية للوارد من 500 مللي ثانية إلى 2500 مللي ثانية عند تفعيله دون `messages.inbound.byChannel.bluebubbles` صريح.
|
||||
- `channels.bluebubbles.historyLimit`: الحد الأقصى لرسائل المجموعة للسياق (0 يعطّلها).
|
||||
- `channels.bluebubbles.dmHistoryLimit`: حد سجل رسائل DM.
|
||||
- `channels.bluebubbles.replyContextApiFallback`: عند وصول رد وارد دون `replyToBody`/`replyToSender` وفشل العثور في ذاكرة التخزين المؤقت لسياق الرد في الذاكرة، اجلب الرسالة الأصلية من BlueBubbles HTTP API كخيار احتياطي بأفضل جهد (الافتراضي: `false`). مفيد لعمليات النشر متعددة المثيلات التي تشارك حساب BlueBubbles واحدًا، أو بعد إعادة تشغيل العملية، أو بعد إخلاء ذاكرة التخزين المؤقت طويلة العمر TTL/LRU. الجلب محمي من SSRF بالسياسة نفسها مثل كل طلب عميل BlueBubbles آخر، ولا يرمي استثناءات أبدًا، ويملأ ذاكرة التخزين المؤقت حتى تُستهلك الردود اللاحقة بكلفة موزعة. تجاوز لكل حساب: `channels.bluebubbles.accounts.<accountId>.replyContextApiFallback`. ينتشر إعداد مستوى القناة إلى الحسابات التي تحذف العلامة.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="الإجراءات والحسابات">
|
||||
- `channels.bluebubbles.actions`: تفعيل/تعطيل إجراءات محددة.
|
||||
- `channels.bluebubbles.accounts`: تكوين متعدد الحسابات.
|
||||
- `channels.bluebubbles.accounts`: إعداد متعدد الحسابات.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -603,36 +595,36 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
- `agents.list[].groupChat.mentionPatterns` (أو `messages.groupChat.mentionPatterns`).
|
||||
- `messages.responsePrefix`.
|
||||
|
||||
## العناوين / أهداف التسليم
|
||||
## عناوين / أهداف التسليم
|
||||
|
||||
فضّل `chat_guid` للتوجيه المستقر:
|
||||
|
||||
- `chat_guid:iMessage;-;+15555550123` (مفضّل للمجموعات)
|
||||
- `chat_id:123`
|
||||
- `chat_identifier:...`
|
||||
- المعرفات المباشرة: `+15555550123`، `user@example.com`
|
||||
- إذا لم يكن للمعرف المباشر دردشة رسائل مباشرة موجودة، فسينشئ OpenClaw واحدة عبر `POST /api/v1/chat/new`. يتطلب ذلك تفعيل BlueBubbles Private API.
|
||||
- المعالجات المباشرة: `+15555550123`، `user@example.com`
|
||||
- إذا لم يكن للمعالج المباشر دردشة DM موجودة، فسينشئ OpenClaw واحدة عبر `POST /api/v1/chat/new`. يتطلب هذا تفعيل BlueBubbles Private API.
|
||||
|
||||
### توجيه iMessage مقابل SMS
|
||||
|
||||
عندما يكون للمعرف نفسه دردشة iMessage ودردشة SMS على Mac (مثل رقم هاتف مسجل في iMessage لكنه تلقى أيضًا بدائل الفقاعة الخضراء)، يفضّل OpenClaw دردشة iMessage ولا يخفضها بصمت إلى SMS أبدًا. لفرض دردشة SMS، استخدم بادئة هدف `sms:` صريحة (مثل `sms:+15555550123`). لا تزال المعرفات التي لا تملك دردشة iMessage مطابقة تُرسل عبر أي دردشة يبلّغ عنها BlueBubbles.
|
||||
عندما يكون للمعالج نفسه دردشة iMessage ودردشة SMS على Mac (على سبيل المثال رقم هاتف مسجل في iMessage لكنه تلقى أيضًا رسائل احتياطية ذات فقاعات خضراء)، يفضّل OpenClaw دردشة iMessage ولا يخفضها بصمت إلى SMS أبدًا. لفرض دردشة SMS، استخدم بادئة هدف صريحة `sms:` (على سبيل المثال `sms:+15555550123`). لا تزال المعالجات التي لا تملك دردشة iMessage مطابقة تُرسل عبر أي دردشة يبلغ عنها BlueBubbles.
|
||||
|
||||
## الأمان
|
||||
|
||||
- تتم مصادقة طلبات Webhook بمقارنة معاملات الاستعلام أو الترويسات `guid`/`password` مع `channels.bluebubbles.password`.
|
||||
- أبقِ كلمة مرور API ونقطة نهاية Webhook سريتين (عاملها كبيانات اعتماد).
|
||||
- لا يوجد تجاوز localhost لمصادقة Webhook في BlueBubbles. إذا كنت تمرر حركة Webhook عبر وكيل، فأبقِ كلمة مرور BlueBubbles على الطلب من الطرف إلى الطرف. لا يستبدل `gateway.trustedProxies` هنا `channels.bluebubbles.password`. راجع [أمان Gateway](/ar/gateway/security#reverse-proxy-configuration).
|
||||
- تُصادق طلبات Webhook بمقارنة معاملات الاستعلام أو الترويسات `guid`/`password` مع `channels.bluebubbles.password`.
|
||||
- أبقِ كلمة مرور API ونقطة نهاية Webhook سريتين (تعامل معهما مثل بيانات الاعتماد).
|
||||
- لا يوجد تجاوز localhost لمصادقة BlueBubbles Webhook. إذا كنت تمرر حركة Webhook عبر وكيل، فاحتفظ بكلمة مرور BlueBubbles في الطلب من البداية إلى النهاية. لا يستبدل `gateway.trustedProxies` هنا `channels.bluebubbles.password`. راجع [أمان Gateway](/ar/gateway/security#reverse-proxy-configuration).
|
||||
- فعّل HTTPS + قواعد جدار الحماية على خادم BlueBubbles إذا كنت تعرضه خارج شبكة LAN لديك.
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- إذا توقفت أحداث الكتابة/القراءة عن العمل، فتحقق من سجلات Webhook في BlueBubbles وتأكد من أن مسار Gateway يطابق `channels.bluebubbles.webhookPath`.
|
||||
- إذا توقفت أحداث الكتابة/القراءة عن العمل، فتحقق من سجلات BlueBubbles Webhook وتأكد أن مسار Gateway يطابق `channels.bluebubbles.webhookPath`.
|
||||
- تنتهي صلاحية رموز الاقتران بعد ساعة واحدة؛ استخدم `openclaw pairing list bluebubbles` و`openclaw pairing approve bluebubbles <code>`.
|
||||
- تتطلب التفاعلات BlueBubbles private API (`POST /api/v1/message/react`)؛ تأكد من أن إصدار الخادم يعرّضها.
|
||||
- يتطلب التعديل/إلغاء الإرسال macOS 13+ وإصدار خادم BlueBubbles متوافقًا. على macOS 26 (Tahoe)، التعديل معطل حاليًا بسبب تغييرات private API.
|
||||
- قد تكون تحديثات أيقونة المجموعة غير مستقرة على macOS 26 (Tahoe): قد تعيد API نجاحًا لكن الأيقونة الجديدة لا تتم مزامنتها.
|
||||
- يخفي OpenClaw تلقائيًا الإجراءات المعروفة بأنها معطلة بناءً على إصدار macOS لخادم BlueBubbles. إذا كان التعديل لا يزال يظهر على macOS 26 (Tahoe)، فعطله يدويًا باستخدام `channels.bluebubbles.actions.edit=false`.
|
||||
- إذا كان `coalesceSameSenderDms` مفعّلًا لكن عمليات الإرسال المقسمة (مثل `Dump` + URL) لا تزال تصل كدورتين: راجع قائمة تحقق [استكشاف أخطاء دمج الإرسال المقسم وإصلاحها](#split-send-coalescing-troubleshooting) — الأسباب الشائعة هي نافذة إزالة ارتداد ضيقة جدًا، أو قراءة طوابع سجل الجلسة الزمنية خطأً كوقت وصول Webhook، أو إرسال اقتباس رد (والذي يستخدم `replyToBody`، وليس Webhook ثانيًا).
|
||||
- تتطلب التفاعلات BlueBubbles private API (`POST /api/v1/message/react`)؛ تأكد أن إصدار الخادم يوفّرها.
|
||||
- يتطلب التعديل/إلغاء الإرسال macOS 13+ وإصدار خادم BlueBubbles متوافقًا. على macOS 26 (Tahoe)، التعديل معطل حاليًا بسبب تغييرات Private API.
|
||||
- قد تكون تحديثات أيقونات المجموعات غير مستقرة على macOS 26 (Tahoe): قد تُرجع API نجاحًا لكن الأيقونة الجديدة لا تتزامن.
|
||||
- يخفي OpenClaw تلقائيًا الإجراءات المعروفة بأنها معطلة بناءً على إصدار macOS لخادم BlueBubbles. إذا كان التعديل لا يزال يظهر على macOS 26 (Tahoe)، فعطّله يدويًا باستخدام `channels.bluebubbles.actions.edit=false`.
|
||||
- إذا كان `coalesceSameSenderDms` مفعّلًا لكن الرسائل المقسّمة الإرسال (مثل `Dump` + عنوان URL) لا تزال تصل كدورتين: راجع قائمة تحقق [استكشاف أخطاء دمج الرسائل المقسّمة الإرسال وإصلاحها](#split-send-coalescing-troubleshooting) — الأسباب الشائعة هي نافذة إزالة ارتداد ضيقة جدًا، أو قراءة الطوابع الزمنية لسجل الجلسة خطأً كوقت وصول Webhook، أو إرسال اقتباس رد (الذي يستخدم `replyToBody`، وليس Webhook ثانيًا).
|
||||
- لمعلومات الحالة/السلامة: `openclaw status --all` أو `openclaw status --deep`.
|
||||
|
||||
للمرجع العام لسير عمل القنوات، راجع [القنوات](/ar/channels) ودليل [Plugins](/ar/tools/plugin).
|
||||
@ -640,7 +632,7 @@ openclaw channels add bluebubbles --http-url http://192.168.1.100:1234 --passwor
|
||||
## ذات صلة
|
||||
|
||||
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل
|
||||
- [نظرة عامة على القنوات](/ar/channels) — كل القنوات المدعومة
|
||||
- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعة وبوابة الإشارات
|
||||
- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران
|
||||
- [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة
|
||||
- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعات وبوابة الإشارات
|
||||
- [الاقتران](/ar/channels/pairing) — مصادقة DM وتدفق الاقتران
|
||||
- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
---
|
||||
read_when:
|
||||
- تكوين مجموعات البث
|
||||
- استكشاف أخطاء الردود متعددة الوكلاء في WhatsApp وإصلاحها
|
||||
- تصحيح أخطاء الردود متعددة الوكلاء في WhatsApp
|
||||
sidebarTitle: Broadcast groups
|
||||
status: experimental
|
||||
summary: بثّ رسالة WhatsApp إلى عدة وكلاء
|
||||
summary: بث رسالة WhatsApp إلى عدة وكلاء
|
||||
title: مجموعات البث
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T07:40:12Z"
|
||||
generated_at: "2026-05-04T02:21:53Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: b0de4ccc85bf79e2ceb1dddd60db067309b15b7f876c92e7d591ff0b4b4315ec
|
||||
source_hash: eab43d3c3ffddb360340469433d74a380fbab98e662b2463a54f62eafc375b55
|
||||
source_path: channels/broadcast-groups.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -21,17 +21,17 @@ x-i18n:
|
||||
|
||||
## نظرة عامة
|
||||
|
||||
تتيح مجموعات البث لعدة وكلاء معالجة الرسالة نفسها والرد عليها في الوقت نفسه. يتيح لك ذلك إنشاء فرق وكلاء متخصصة تعمل معا داخل مجموعة WhatsApp واحدة أو رسالة مباشرة واحدة، وكل ذلك باستخدام رقم هاتف واحد.
|
||||
تتيح مجموعات البث لعدة وكلاء معالجة الرسالة نفسها والرد عليها في الوقت نفسه. يتيح لك هذا إنشاء فرق وكلاء متخصصة تعمل معا داخل مجموعة WhatsApp واحدة أو رسالة مباشرة واحدة، وكل ذلك باستخدام رقم هاتف واحد.
|
||||
|
||||
النطاق الحالي: **WhatsApp فقط** (قناة الويب).
|
||||
|
||||
تُقيَّم مجموعات البث بعد قوائم السماح للقنوات وقواعد تفعيل المجموعات. في مجموعات WhatsApp، يعني ذلك أن البث يحدث عندما كان OpenClaw سيرد عادة (مثلا: عند الإشارة، بحسب إعدادات مجموعتك).
|
||||
تُقيَّم مجموعات البث بعد قوائم السماح للقنوات وقواعد تفعيل المجموعات. في مجموعات WhatsApp، يعني ذلك أن البث يحدث عندما كان OpenClaw سيرد عادة (على سبيل المثال: عند الإشارة، حسب إعدادات مجموعتك).
|
||||
|
||||
## حالات الاستخدام
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="1. فرق وكلاء متخصصة">
|
||||
انشر عدة وكلاء بمسؤوليات محددة ومركزة:
|
||||
انشر عدة وكلاء بمسؤوليات ذرية ومركزة:
|
||||
|
||||
```
|
||||
Group: "Development Team"
|
||||
@ -73,14 +73,14 @@ x-i18n:
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## الإعداد
|
||||
## الإعدادات
|
||||
|
||||
### الإعداد الأساسي
|
||||
|
||||
أضف قسم `broadcast` على المستوى الأعلى (بجوار `bindings`). المفاتيح هي معرفات أقران WhatsApp:
|
||||
أضف قسما عالي المستوى باسم `broadcast` (بجوار `bindings`). المفاتيح هي معرفات أقران WhatsApp:
|
||||
|
||||
- محادثات المجموعات: JID المجموعة (مثلا `120363403215116621@g.us`)
|
||||
- الرسائل المباشرة: رقم هاتف بصيغة E.164 (مثلا `+15551234567`)
|
||||
- محادثات المجموعات: JID المجموعة (مثال: `120363403215116621@g.us`)
|
||||
- الرسائل المباشرة: رقم هاتف بصيغة E.164 (مثال: `+15551234567`)
|
||||
|
||||
```json
|
||||
{
|
||||
@ -90,14 +90,14 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
**النتيجة:** عندما كان OpenClaw سيرد في هذه المحادثة، سيشغل الوكلاء الثلاثة جميعا.
|
||||
**النتيجة:** عندما كان OpenClaw سيرد في هذه المحادثة، سيشغّل الوكلاء الثلاثة جميعا.
|
||||
|
||||
### استراتيجية المعالجة
|
||||
|
||||
تحكم في كيفية معالجة الوكلاء للرسائل:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="parallel (default)">
|
||||
<Tab title="parallel (الافتراضي)">
|
||||
يعالج جميع الوكلاء في الوقت نفسه:
|
||||
|
||||
```json
|
||||
@ -169,12 +169,12 @@ x-i18n:
|
||||
تصل رسالة مجموعة WhatsApp أو رسالة مباشرة.
|
||||
</Step>
|
||||
<Step title="فحص البث">
|
||||
يتحقق النظام مما إذا كان معرف النظير موجودا في `broadcast`.
|
||||
يتحقق النظام مما إذا كان معرف القرين موجودا في `broadcast`.
|
||||
</Step>
|
||||
<Step title="إذا كان ضمن قائمة البث">
|
||||
- يعالج جميع الوكلاء المدرجين الرسالة.
|
||||
- لكل وكيل مفتاح جلسة خاص به وسياق معزول.
|
||||
- يعالج الوكلاء بالتوازي (افتراضيا) أو بالتتابع.
|
||||
- يمتلك كل وكيل مفتاح جلسة خاصا به وسياقا معزولا.
|
||||
- يعالج الوكلاء بالتوازي (الافتراضي) أو بالتتابع.
|
||||
|
||||
</Step>
|
||||
<Step title="إذا لم يكن ضمن قائمة البث">
|
||||
@ -188,19 +188,19 @@ x-i18n:
|
||||
|
||||
### عزل الجلسات
|
||||
|
||||
يحتفظ كل وكيل في مجموعة بث بما يلي منفصلا تماما:
|
||||
يحافظ كل وكيل في مجموعة بث على ما يلي بشكل منفصل تماما:
|
||||
|
||||
- **مفاتيح الجلسة** (`agent:alfred:whatsapp:group:120363...` مقابل `agent:baerbel:whatsapp:group:120363...`)
|
||||
- **مفاتيح الجلسات** (`agent:alfred:whatsapp:group:120363...` مقابل `agent:baerbel:whatsapp:group:120363...`)
|
||||
- **سجل المحادثة** (لا يرى الوكيل رسائل الوكلاء الآخرين)
|
||||
- **مساحة العمل** (بيئات sandbox منفصلة إذا تم إعدادها)
|
||||
- **الوصول إلى الأدوات** (قوائم سماح/رفض مختلفة)
|
||||
- **مساحة العمل** (صناديق عزل منفصلة إذا تم إعدادها)
|
||||
- **الوصول إلى الأدوات** (قوائم سماح/منع مختلفة)
|
||||
- **الذاكرة/السياق** (ملفات IDENTITY.md وSOUL.md منفصلة، إلخ)
|
||||
- **مخزن سياق المجموعة** (رسائل المجموعة الحديثة المستخدمة للسياق) مشترك لكل نظير، لذلك يرى جميع وكلاء البث السياق نفسه عند تشغيلهم
|
||||
- **مخزن سياق المجموعة** (رسائل المجموعة الحديثة المستخدمة للسياق) مشترك لكل قرين، لذلك يرى جميع وكلاء البث السياق نفسه عند تشغيلهم
|
||||
|
||||
يتيح هذا لكل وكيل أن يمتلك:
|
||||
يتيح هذا لكل وكيل امتلاك:
|
||||
|
||||
- شخصيات مختلفة
|
||||
- وصولا مختلفا إلى الأدوات (مثلا، قراءة فقط مقابل قراءة وكتابة)
|
||||
- وصول مختلف إلى الأدوات (مثلا، قراءة فقط مقابل قراءة وكتابة)
|
||||
- نماذج مختلفة (مثلا، opus مقابل sonnet)
|
||||
- Skills مختلفة مثبتة
|
||||
|
||||
@ -258,28 +258,30 @@ x-i18n:
|
||||
```
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="3. اضبط وصولا مختلفا إلى الأدوات">
|
||||
<Accordion title="3. اضبط وصولا مختلفا للأدوات">
|
||||
امنح الوكلاء الأدوات التي يحتاجونها فقط:
|
||||
|
||||
```json
|
||||
{
|
||||
"agents": {
|
||||
"reviewer": {
|
||||
"tools": { "allow": ["read", "exec"] } // Read-only
|
||||
"tools": { "allow": ["read", "exec"] }
|
||||
},
|
||||
"fixer": {
|
||||
"tools": { "allow": ["read", "write", "edit", "exec"] } // Read-write
|
||||
"tools": { "allow": ["read", "write", "edit", "exec"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`reviewer` للقراءة فقط. يستطيع `fixer` القراءة والكتابة.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="4. راقب الأداء">
|
||||
مع كثرة الوكلاء، ضع في الحسبان:
|
||||
عند وجود عدد كبير من الوكلاء، ضع في اعتبارك:
|
||||
|
||||
- استخدام `"strategy": "parallel"` (الافتراضي) للسرعة
|
||||
- قصر مجموعات البث على 5-10 وكلاء
|
||||
- حصر مجموعات البث في 5-10 وكلاء
|
||||
- استخدام نماذج أسرع للوكلاء الأبسط
|
||||
|
||||
</Accordion>
|
||||
@ -296,7 +298,7 @@ x-i18n:
|
||||
|
||||
## التوافق
|
||||
|
||||
### المزوّدون
|
||||
### المزودون
|
||||
|
||||
تعمل مجموعات البث حاليا مع:
|
||||
|
||||
@ -323,24 +325,24 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
- `GROUP_A`: يرد alfred فقط (التوجيه العادي).
|
||||
- `GROUP_B`: يرد agent1 وagent2 (البث).
|
||||
- `GROUP_A`: يرد alfred فقط (توجيه عادي).
|
||||
- `GROUP_B`: يرد agent1 وagent2 (بث).
|
||||
|
||||
<Note>
|
||||
**الأسبقية:** تأخذ `broadcast` الأولوية على `bindings`.
|
||||
**الأسبقية:** يأخذ `broadcast` الأولوية على `bindings`.
|
||||
</Note>
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="الوكلاء لا يردون">
|
||||
**تحقق مما يلي:**
|
||||
**تحقق من:**
|
||||
|
||||
1. معرفات الوكلاء موجودة في `agents.list`.
|
||||
2. تنسيق معرف النظير صحيح (مثلا، `120363403215116621@g.us`).
|
||||
3. الوكلاء ليسوا في قوائم الرفض.
|
||||
2. تنسيق معرف القرين صحيح (مثلا، `120363403215116621@g.us`).
|
||||
3. الوكلاء غير موجودين في قوائم المنع.
|
||||
|
||||
**التصحيح:**
|
||||
**تصحيح الأخطاء:**
|
||||
|
||||
```bash
|
||||
tail -f ~/.openclaw/logs/gateway.log | grep broadcast
|
||||
@ -348,17 +350,17 @@ x-i18n:
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="وكيل واحد فقط يرد">
|
||||
**السبب:** قد يكون معرف النظير موجودا في `bindings` لكنه غير موجود في `broadcast`.
|
||||
**السبب:** قد يكون معرف القرين موجودا في `bindings` لكن ليس في `broadcast`.
|
||||
|
||||
**الإصلاح:** أضفه إلى إعداد البث أو أزله من bindings.
|
||||
**الإصلاح:** أضفه إلى إعدادات البث أو أزله من الربط.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="مشكلات الأداء">
|
||||
إذا كان الأداء بطيئا مع كثرة الوكلاء:
|
||||
إذا كان بطيئا مع عدد كبير من الوكلاء:
|
||||
|
||||
- قلل عدد الوكلاء لكل مجموعة.
|
||||
- استخدم نماذج أخف (sonnet بدلا من opus).
|
||||
- تحقق من وقت بدء تشغيل sandbox.
|
||||
- تحقق من وقت بدء صندوق العزل.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -366,7 +368,7 @@ x-i18n:
|
||||
## أمثلة
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="المثال 1: فريق مراجعة الكود">
|
||||
<Accordion title="مثال 1: فريق مراجعة الكود">
|
||||
```json
|
||||
{
|
||||
"broadcast": {
|
||||
@ -405,13 +407,13 @@ x-i18n:
|
||||
|
||||
**الردود:**
|
||||
|
||||
- code-formatter: "تم إصلاح المسافات البادئة وإضافة تلميحات الأنواع"
|
||||
- code-formatter: "تم إصلاح المسافات البادئة وإضافة تلميحات النوع"
|
||||
- security-scanner: "⚠️ ثغرة حقن SQL في السطر 12"
|
||||
- test-coverage: "التغطية 45%، والاختبارات لحالات الخطأ مفقودة"
|
||||
- docs-checker: "سلسلة التوثيق مفقودة للدالة `process_data`"
|
||||
- test-coverage: "التغطية 45%، وتوجد اختبارات مفقودة لحالات الخطأ"
|
||||
- docs-checker: "سلسلة توثيق مفقودة للدالة `process_data`"
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="المثال 2: دعم متعدد اللغات">
|
||||
<Accordion title="مثال 2: دعم متعدد اللغات">
|
||||
```json
|
||||
{
|
||||
"broadcast": {
|
||||
@ -432,7 +434,7 @@ x-i18n:
|
||||
|
||||
## مرجع API
|
||||
|
||||
### مخطط الإعداد
|
||||
### مخطط الإعدادات
|
||||
|
||||
```typescript
|
||||
interface OpenClawConfig {
|
||||
@ -446,15 +448,15 @@ interface OpenClawConfig {
|
||||
### الحقول
|
||||
|
||||
<ParamField path="strategy" type='"parallel" | "sequential"' default='"parallel"'>
|
||||
كيفية معالجة الوكلاء. يشغل `parallel` جميع الوكلاء في الوقت نفسه؛ ويشغلهم `sequential` بترتيب المصفوفة.
|
||||
كيفية معالجة الوكلاء. يشغّل `parallel` جميع الوكلاء في الوقت نفسه؛ ويشغلهم `sequential` بترتيب المصفوفة.
|
||||
</ParamField>
|
||||
<ParamField path="[peerId]" type="string[]">
|
||||
JID مجموعة WhatsApp أو رقم E.164 أو معرف نظير آخر. القيمة هي مصفوفة معرفات الوكلاء الذين ينبغي أن يعالجوا الرسائل.
|
||||
JID مجموعة WhatsApp، أو رقم E.164، أو معرف قرين آخر. القيمة هي مصفوفة معرفات الوكلاء التي يجب أن تعالج الرسائل.
|
||||
</ParamField>
|
||||
|
||||
## القيود
|
||||
|
||||
1. **الحد الأقصى للوكلاء:** لا يوجد حد صارم، لكن 10 وكلاء أو أكثر قد يكون بطيئا.
|
||||
1. **الحد الأقصى للوكلاء:** لا يوجد حد صارم، لكن 10+ وكلاء قد يكونون بطيئين.
|
||||
2. **السياق المشترك:** لا يرى الوكلاء ردود بعضهم البعض (حسب التصميم).
|
||||
3. **ترتيب الرسائل:** قد تصل الردود المتوازية بأي ترتيب.
|
||||
4. **حدود المعدل:** يحتسب جميع الوكلاء ضمن حدود معدل WhatsApp.
|
||||
@ -466,12 +468,12 @@ interface OpenClawConfig {
|
||||
- [ ] وضع السياق المشترك (يرى الوكلاء ردود بعضهم البعض)
|
||||
- [ ] تنسيق الوكلاء (يمكن للوكلاء إرسال إشارات لبعضهم البعض)
|
||||
- [ ] اختيار الوكلاء ديناميكيا (اختيار الوكلاء بناء على محتوى الرسالة)
|
||||
- [ ] أولويات الوكلاء (يرد بعض الوكلاء قبل غيرهم)
|
||||
- [ ] أولويات الوكلاء (يرد بعض الوكلاء قبل الآخرين)
|
||||
|
||||
## ذو صلة
|
||||
## ذات صلة
|
||||
|
||||
- [توجيه القنوات](/ar/channels/channel-routing)
|
||||
- [المجموعات](/ar/channels/groups)
|
||||
- [أدوات صندوق الرمل متعددة الوكلاء](/ar/tools/multi-agent-sandbox-tools)
|
||||
- [أدوات وضع الحماية متعددة الوكلاء](/ar/tools/multi-agent-sandbox-tools)
|
||||
- [الإقران](/ar/channels/pairing)
|
||||
- [إدارة الجلسات](/ar/concepts/session)
|
||||
|
||||
@ -4,15 +4,15 @@ read_when:
|
||||
summary: حالة دعم تطبيق Google Chat وإمكاناته وتكوينه
|
||||
title: Google Chat
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T07:17:39Z"
|
||||
generated_at: "2026-05-04T02:21:29Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: fdb8dcf651602e92801d7107646d853871ea6cef188a8733a831695a1243740e
|
||||
source_hash: afa2ca4d9673396aa24a55ca5855a34ad26a4640c3a1f6928dbf7246e403cb04
|
||||
source_path: channels/googlechat.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
الحالة: Plugin قابل للتنزيل للرسائل المباشرة + المساحات عبر Webhooks الخاصة بواجهة Google Chat API (HTTP فقط).
|
||||
الحالة: Plugin قابل للتنزيل للرسائل المباشرة والمساحات عبر webhooks الخاصة بواجهة Google Chat API (HTTP فقط).
|
||||
|
||||
## التثبيت
|
||||
|
||||
@ -32,61 +32,61 @@ openclaw plugins install ./path/to/local/googlechat-plugin
|
||||
|
||||
1. أنشئ مشروع Google Cloud وفعّل **Google Chat API**.
|
||||
- انتقل إلى: [بيانات اعتماد Google Chat API](https://console.cloud.google.com/apis/api/chat.googleapis.com/credentials)
|
||||
- فعّل API إذا لم تكن مفعّلة بالفعل.
|
||||
- فعّل واجهة API إذا لم تكن مفعّلة بالفعل.
|
||||
2. أنشئ **حساب خدمة**:
|
||||
- اضغط **إنشاء بيانات اعتماد** > **حساب خدمة**.
|
||||
- سمّه بأي اسم تريده (مثل `openclaw-chat`).
|
||||
- اترك الأذونات فارغة (اضغط **متابعة**).
|
||||
- اترك أصحاب الوصول فارغين (اضغط **تم**).
|
||||
- اضغط **Create Credentials** > **Service Account**.
|
||||
- سمّه كما تريد (مثلًا: `openclaw-chat`).
|
||||
- اترك الأذونات فارغة (اضغط **Continue**).
|
||||
- اترك الأطراف الرئيسية التي لديها وصول فارغة (اضغط **Done**).
|
||||
3. أنشئ **مفتاح JSON** ونزّله:
|
||||
- في قائمة حسابات الخدمة، انقر الحساب الذي أنشأته للتو.
|
||||
- انتقل إلى تبويب **المفاتيح**.
|
||||
- انقر **إضافة مفتاح** > **إنشاء مفتاح جديد**.
|
||||
- اختر **JSON** واضغط **إنشاء**.
|
||||
4. خزّن ملف JSON الذي تم تنزيله على مضيف Gateway لديك (مثل `~/.openclaw/googlechat-service-account.json`).
|
||||
- انتقل إلى تبويب **Keys**.
|
||||
- انقر **Add Key** > **Create new key**.
|
||||
- اختر **JSON** واضغط **Create**.
|
||||
4. خزّن ملف JSON الذي تم تنزيله على مضيف Gateway لديك (مثلًا: `~/.openclaw/googlechat-service-account.json`).
|
||||
5. أنشئ تطبيق Google Chat في [تكوين Chat في Google Cloud Console](https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat):
|
||||
- املأ **معلومات التطبيق**:
|
||||
- **اسم التطبيق**: (مثل `OpenClaw`)
|
||||
- **رابط الصورة الرمزية**: (مثل `https://openclaw.ai/logo.png`)
|
||||
- **الوصف**: (مثل `Personal AI Assistant`)
|
||||
- **اسم التطبيق**: (مثلًا `OpenClaw`)
|
||||
- **رابط الصورة الرمزية**: (مثلًا `https://openclaw.ai/logo.png`)
|
||||
- **الوصف**: (مثلًا `Personal AI Assistant`)
|
||||
- فعّل **الميزات التفاعلية**.
|
||||
- ضمن **الوظائف**، حدّد **الانضمام إلى المساحات ومحادثات المجموعات**.
|
||||
- ضمن **الوظائف**، حدّد **الانضمام إلى المساحات والمحادثات الجماعية**.
|
||||
- ضمن **إعدادات الاتصال**، اختر **رابط نقطة نهاية HTTP**.
|
||||
- ضمن **المشغّلات**، اختر **استخدام رابط نقطة نهاية HTTP مشتركة لكل المشغّلات** واضبطه على الرابط العام الخاص بـ Gateway متبوعًا بـ `/googlechat`.
|
||||
- _تلميح: شغّل `openclaw status` للعثور على الرابط العام الخاص بـ Gateway لديك._
|
||||
- ضمن **المشغّلات**، اختر **استخدام رابط نقطة نهاية HTTP مشتركة لجميع المشغّلات** واضبطه على الرابط العام لـ Gateway لديك متبوعًا بـ `/googlechat`.
|
||||
- _نصيحة: شغّل `openclaw status` للعثور على الرابط العام لـ Gateway لديك._
|
||||
- ضمن **الرؤية**، حدّد **إتاحة تطبيق Chat هذا لأشخاص ومجموعات محددين في `<Your Domain>`**.
|
||||
- أدخل عنوان بريدك الإلكتروني (مثل `user@example.com`) في مربع النص.
|
||||
- انقر **حفظ** في الأسفل.
|
||||
- أدخل عنوان بريدك الإلكتروني (مثلًا `user@example.com`) في مربع النص.
|
||||
- انقر **Save** في الأسفل.
|
||||
6. **فعّل حالة التطبيق**:
|
||||
- بعد الحفظ، **حدّث الصفحة**.
|
||||
- ابحث عن قسم **حالة التطبيق** (عادةً قرب الأعلى أو الأسفل بعد الحفظ).
|
||||
- غيّر الحالة إلى **مباشر - متاح للمستخدمين**.
|
||||
- انقر **حفظ** مرة أخرى.
|
||||
7. كوّن OpenClaw باستخدام مسار حساب الخدمة + جمهور Webhook:
|
||||
- ابحث عن قسم **حالة التطبيق** (عادةً يكون قرب الأعلى أو الأسفل بعد الحفظ).
|
||||
- غيّر الحالة إلى **Live - available to users**.
|
||||
- انقر **Save** مرة أخرى.
|
||||
7. كوّن OpenClaw بمسار حساب الخدمة + جمهور Webhook:
|
||||
- Env: `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE=/path/to/service-account.json`
|
||||
- أو config: `channels.googlechat.serviceAccountFile: "/path/to/service-account.json"`.
|
||||
8. اضبط نوع جمهور Webhook + قيمته (بما يطابق تكوين تطبيق Chat لديك).
|
||||
9. ابدأ Gateway. سيرسل Google Chat طلب POST إلى مسار Webhook لديك.
|
||||
- أو التكوين: `channels.googlechat.serviceAccountFile: "/path/to/service-account.json"`.
|
||||
8. اضبط نوع جمهور Webhook وقيمته (بما يطابق تكوين تطبيق Chat لديك).
|
||||
9. ابدأ Gateway. سيرسل Google Chat طلبات POST إلى مسار Webhook لديك.
|
||||
|
||||
## الإضافة إلى Google Chat
|
||||
|
||||
بعد تشغيل Gateway وإضافة بريدك الإلكتروني إلى قائمة الرؤية:
|
||||
|
||||
1. انتقل إلى [Google Chat](https://chat.google.com/).
|
||||
2. انقر أيقونة **+** (زائد) بجانب **الرسائل المباشرة**.
|
||||
2. انقر أيقونة **+** (زائد) بجانب **Direct Messages**.
|
||||
3. في شريط البحث (حيث تضيف الأشخاص عادةً)، اكتب **اسم التطبيق** الذي كوّنته في Google Cloud Console.
|
||||
- **ملاحظة**: لن يظهر البوت في قائمة تصفح "Marketplace" لأنه تطبيق خاص. يجب البحث عنه بالاسم.
|
||||
- **ملاحظة**: لن يظهر البوت في قائمة تصفح "Marketplace" لأنه تطبيق خاص. يجب أن تبحث عنه بالاسم.
|
||||
4. اختر البوت من النتائج.
|
||||
5. انقر **إضافة** أو **دردشة** لبدء محادثة 1:1.
|
||||
5. انقر **Add** أو **Chat** لبدء محادثة فردية.
|
||||
6. أرسل "Hello" لتشغيل المساعد!
|
||||
|
||||
## الرابط العام (Webhook فقط)
|
||||
|
||||
تتطلب Webhooks الخاصة بـ Google Chat نقطة نهاية HTTPS عامة. للأمان، **اعرض مسار `/googlechat` فقط** على الإنترنت. أبقِ لوحة معلومات OpenClaw ونقاط النهاية الحساسة الأخرى على شبكتك الخاصة.
|
||||
تتطلب webhooks الخاصة بـ Google Chat نقطة نهاية HTTPS عامة. للأمان، **اكشف مسار `/googlechat` فقط** للإنترنت. أبقِ لوحة تحكم OpenClaw ونقاط النهاية الحساسة الأخرى على شبكتك الخاصة.
|
||||
|
||||
### الخيار A: Tailscale Funnel (موصى به)
|
||||
### الخيار أ: Tailscale Funnel (موصى به)
|
||||
|
||||
استخدم Tailscale Serve للوحة المعلومات الخاصة وFunnel لمسار Webhook العام. هذا يبقي `/` خاصًا مع عرض `/googlechat` فقط.
|
||||
استخدم Tailscale Serve للوحة التحكم الخاصة وFunnel لمسار Webhook العام. هذا يُبقي `/` خاصًا مع كشف `/googlechat` فقط.
|
||||
|
||||
1. **تحقق من العنوان الذي يرتبط به Gateway لديك:**
|
||||
|
||||
@ -94,9 +94,9 @@ openclaw plugins install ./path/to/local/googlechat-plugin
|
||||
ss -tlnp | grep 18789
|
||||
```
|
||||
|
||||
لاحظ عنوان IP (مثل `127.0.0.1` أو `0.0.0.0` أو عنوان Tailscale IP لديك مثل `100.x.x.x`).
|
||||
لاحظ عنوان IP (مثلًا `127.0.0.1` أو `0.0.0.0` أو عنوان Tailscale IP الخاص بك مثل `100.x.x.x`).
|
||||
|
||||
2. **اعرض لوحة المعلومات على tailnet فقط (المنفذ 8443):**
|
||||
2. **اكشف لوحة التحكم للـ tailnet فقط (المنفذ 8443):**
|
||||
|
||||
```bash
|
||||
# If bound to localhost (127.0.0.1 or 0.0.0.0):
|
||||
@ -106,7 +106,7 @@ openclaw plugins install ./path/to/local/googlechat-plugin
|
||||
tailscale serve --bg --https 8443 http://100.106.161.80:18789
|
||||
```
|
||||
|
||||
3. **اعرض مسار Webhook فقط للعامة:**
|
||||
3. **اكشف مسار Webhook فقط للعامة:**
|
||||
|
||||
```bash
|
||||
# If bound to localhost (127.0.0.1 or 0.0.0.0):
|
||||
@ -116,8 +116,8 @@ openclaw plugins install ./path/to/local/googlechat-plugin
|
||||
tailscale funnel --bg --set-path /googlechat http://100.106.161.80:18789/googlechat
|
||||
```
|
||||
|
||||
4. **خوّل Node للوصول إلى Funnel:**
|
||||
إذا طُلب منك ذلك، زر رابط التفويض الظاهر في المخرجات لتمكين Funnel لهذا Node في سياسة tailnet لديك.
|
||||
4. **فوّض العقدة للوصول إلى Funnel:**
|
||||
إذا طُلب منك ذلك، فزر رابط التفويض الظاهر في المخرجات لتمكين Funnel لهذه العقدة في سياسة tailnet لديك.
|
||||
|
||||
5. **تحقق من التكوين:**
|
||||
|
||||
@ -129,16 +129,16 @@ openclaw plugins install ./path/to/local/googlechat-plugin
|
||||
سيكون رابط Webhook العام لديك:
|
||||
`https://<node-name>.<tailnet>.ts.net/googlechat`
|
||||
|
||||
تبقى لوحة معلوماتك الخاصة مقتصرة على tailnet:
|
||||
تبقى لوحة التحكم الخاصة بك مقصورة على tailnet:
|
||||
`https://<node-name>.<tailnet>.ts.net:8443/`
|
||||
|
||||
استخدم الرابط العام (بدون `:8443`) في تكوين تطبيق Google Chat.
|
||||
|
||||
> ملاحظة: يستمر هذا التكوين عبر عمليات إعادة التشغيل. لإزالته لاحقًا، شغّل `tailscale funnel reset` و`tailscale serve reset`.
|
||||
> ملاحظة: يستمر هذا التكوين بعد إعادة التشغيل. لإزالته لاحقًا، شغّل `tailscale funnel reset` و `tailscale serve reset`.
|
||||
|
||||
### الخيار B: وكيل عكسي (Caddy)
|
||||
### الخيار ب: وكيل عكسي (Caddy)
|
||||
|
||||
إذا كنت تستخدم وكيلاً عكسيًا مثل Caddy، فمرّر المسار المحدد فقط عبر الوكيل:
|
||||
إذا كنت تستخدم وكيلًا عكسيًا مثل Caddy، فمرّر المسار المحدد فقط:
|
||||
|
||||
```caddy
|
||||
your-domain.com {
|
||||
@ -146,37 +146,37 @@ your-domain.com {
|
||||
}
|
||||
```
|
||||
|
||||
مع هذا التكوين، سيتم تجاهل أي طلب إلى `your-domain.com/` أو إرجاع 404، بينما يتم توجيه `your-domain.com/googlechat` بأمان إلى OpenClaw.
|
||||
بهذا التكوين، سيتم تجاهل أي طلب إلى `your-domain.com/` أو إرجاع 404، بينما يتم توجيه `your-domain.com/googlechat` بأمان إلى OpenClaw.
|
||||
|
||||
### الخيار C: Cloudflare Tunnel
|
||||
### الخيار ج: Cloudflare Tunnel
|
||||
|
||||
كوّن قواعد ingress للنفق لديك لتوجيه مسار Webhook فقط:
|
||||
كوّن قواعد الدخول للنفق لديك لتوجيه مسار Webhook فقط:
|
||||
|
||||
- **المسار**: `/googlechat` -> `http://localhost:18789/googlechat`
|
||||
- **القاعدة الافتراضية**: HTTP 404 (غير موجود)
|
||||
- **القاعدة الافتراضية**: HTTP 404 (Not Found)
|
||||
|
||||
## كيف يعمل
|
||||
## آلية العمل
|
||||
|
||||
1. يرسل Google Chat طلبات POST الخاصة بـ Webhook إلى Gateway. يتضمن كل طلب ترويسة `Authorization: Bearer <token>`.
|
||||
- يتحقق OpenClaw من مصادقة bearer قبل قراءة/تحليل أجسام Webhook الكاملة عند وجود الترويسة.
|
||||
- تُدعم طلبات Google Workspace Add-on التي تحمل `authorizationEventObject.systemIdToken` في الجسم عبر ميزانية جسم أكثر صرامة قبل المصادقة.
|
||||
- يتم دعم طلبات Google Workspace Add-on التي تحمل `authorizationEventObject.systemIdToken` في الجسم عبر ميزانية جسم أكثر صرامة قبل المصادقة.
|
||||
2. يتحقق OpenClaw من الرمز مقابل `audienceType` + `audience` المكوّنين:
|
||||
- `audienceType: "app-url"` → الجمهور هو رابط Webhook عبر HTTPS لديك.
|
||||
- `audienceType: "app-url"` → الجمهور هو رابط HTTPS الخاص بـ Webhook لديك.
|
||||
- `audienceType: "project-number"` → الجمهور هو رقم مشروع Cloud.
|
||||
3. تُوجّه الرسائل حسب المساحة:
|
||||
3. يتم توجيه الرسائل حسب المساحة:
|
||||
- تستخدم الرسائل المباشرة مفتاح الجلسة `agent:<agentId>:googlechat:direct:<spaceId>`.
|
||||
- تستخدم المساحات مفتاح الجلسة `agent:<agentId>:googlechat:group:<spaceId>`.
|
||||
4. يكون الوصول عبر الرسائل المباشرة بالمزاوجة افتراضيًا. يتلقى المرسلون غير المعروفين رمز مزاوجة؛ وافق باستخدام:
|
||||
4. يكون الوصول إلى الرسائل المباشرة عبر الاقتران افتراضيًا. يتلقى المرسلون غير المعروفين رمز اقتران؛ وافق عليه باستخدام:
|
||||
- `openclaw pairing approve googlechat <code>`
|
||||
5. تتطلب مساحات المجموعات إشارة @ افتراضيًا. استخدم `botUser` إذا احتاج اكتشاف الإشارات إلى اسم مستخدم التطبيق.
|
||||
5. تتطلب المساحات الجماعية إشارة @ افتراضيًا. استخدم `botUser` إذا كان اكتشاف الإشارة يحتاج اسم مستخدم التطبيق.
|
||||
|
||||
## الأهداف
|
||||
|
||||
استخدم هذه المعرّفات للتسليم وقوائم السماح:
|
||||
|
||||
- الرسائل المباشرة: `users/<userId>` (موصى به).
|
||||
- البريد الإلكتروني الخام `name@example.com` قابل للتغيير ويُستخدم فقط لمطابقة قائمة السماح المباشرة عندما يكون `channels.googlechat.dangerouslyAllowNameMatching: true`.
|
||||
- مهمل: يُعامل `users/<email>` كمعرّف مستخدم، وليس كقائمة سماح للبريد الإلكتروني.
|
||||
- البريد الإلكتروني الخام `name@example.com` قابل للتغيير ويُستخدم فقط لمطابقة قائمة السماح المباشرة عندما تكون `channels.googlechat.dangerouslyAllowNameMatching: true`.
|
||||
- مهمل: يتم التعامل مع `users/<email>` كمعرّف مستخدم، وليس قائمة سماح بريد إلكتروني.
|
||||
- المساحات: `spaces/<spaceId>`.
|
||||
|
||||
## أبرز إعدادات التكوين
|
||||
@ -199,7 +199,7 @@ your-domain.com {
|
||||
groupPolicy: "allowlist",
|
||||
groups: {
|
||||
"spaces/AAAA": {
|
||||
allow: true,
|
||||
enabled: true,
|
||||
requireMention: true,
|
||||
users: ["users/1234567890"],
|
||||
systemPrompt: "Short answers only.",
|
||||
@ -215,16 +215,16 @@ your-domain.com {
|
||||
|
||||
ملاحظات:
|
||||
|
||||
- يمكن أيضًا تمرير بيانات اعتماد حساب الخدمة ضمنيًا باستخدام `serviceAccount` (سلسلة JSON).
|
||||
- `serviceAccountRef` مدعوم أيضًا (env/file SecretRef)، بما في ذلك المراجع لكل حساب ضمن `channels.googlechat.accounts.<id>.serviceAccountRef`.
|
||||
- مسار Webhook الافتراضي هو `/googlechat` إذا لم يُضبط `webhookPath`.
|
||||
- يعيد `dangerouslyAllowNameMatching` تمكين مطابقة أصحاب البريد الإلكتروني القابلين للتغيير لقوائم السماح (وضع توافق لكسر القفل).
|
||||
- يمكن أيضًا تمرير بيانات اعتماد حساب الخدمة مضمّنة باستخدام `serviceAccount` (سلسلة JSON).
|
||||
- يتم دعم `serviceAccountRef` أيضًا (env/file SecretRef)، بما في ذلك المراجع لكل حساب ضمن `channels.googlechat.accounts.<id>.serviceAccountRef`.
|
||||
- مسار Webhook الافتراضي هو `/googlechat` إذا لم يتم ضبط `webhookPath`.
|
||||
- يعيد `dangerouslyAllowNameMatching` تمكين مطابقة أطراف البريد الإلكتروني القابلة للتغيير لقوائم السماح (وضع توافق للطوارئ).
|
||||
- تتوفر التفاعلات عبر أداة `reactions` و`channels action` عند تمكين `actions.reactions`.
|
||||
- تعرض إجراءات الرسائل `send` للنص و`upload-file` لعمليات إرسال المرفقات الصريحة. يقبل `upload-file` القيم `media` / `filePath` / `path` إضافةً إلى `message` و`filename` الاختياريين واستهداف السلسلة.
|
||||
- يدعم `typingIndicator` القيم `none` و`message` (الافتراضي) و`reaction` (يتطلب reaction OAuth للمستخدم).
|
||||
- تُنزّل المرفقات عبر Chat API وتُخزّن في مسار الوسائط (مع حد للحجم بواسطة `mediaMaxMb`).
|
||||
- تكشف إجراءات الرسائل `send` للنص و`upload-file` لإرسال المرفقات الصريح. يقبل `upload-file` قيمة `media` / `filePath` / `path` بالإضافة إلى `message` و`filename` اختياريين واستهداف سلسلة النقاش.
|
||||
- يدعم `typingIndicator` القيم `none` و`message` (الافتراضية) و`reaction` (يتطلب التفاعل OAuth للمستخدم).
|
||||
- يتم تنزيل المرفقات عبر Chat API وتخزينها في مسار الوسائط (مع حد حجم يحدده `mediaMaxMb`).
|
||||
|
||||
تفاصيل مراجع الأسرار: [إدارة الأسرار](/ar/gateway/secrets).
|
||||
تفاصيل مرجع الأسرار: [إدارة الأسرار](/ar/gateway/secrets).
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
@ -236,15 +236,15 @@ your-domain.com {
|
||||
status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Allowed
|
||||
```
|
||||
|
||||
فهذا يعني أن معالج Webhook غير مسجل. الأسباب الشائعة:
|
||||
فهذا يعني أن معالج Webhook غير مسجّل. الأسباب الشائعة:
|
||||
|
||||
1. **القناة غير مكوّنة**: قسم `channels.googlechat` مفقود من التكوين لديك. تحقق باستخدام:
|
||||
1. **القناة غير مكوّنة**: قسم `channels.googlechat` مفقود من تكوينك. تحقق باستخدام:
|
||||
|
||||
```bash
|
||||
openclaw config get channels.googlechat
|
||||
```
|
||||
|
||||
إذا أعاد "Config path not found"، فأضف التكوين (انظر [أبرز إعدادات التكوين](#config-highlights)).
|
||||
إذا أعاد "Config path not found"، فأضف التكوين (راجع [أبرز إعدادات التكوين](#config-highlights)).
|
||||
|
||||
2. **Plugin غير مفعّل**: تحقق من حالة Plugin:
|
||||
|
||||
@ -252,7 +252,7 @@ status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Al
|
||||
openclaw plugins list | grep googlechat
|
||||
```
|
||||
|
||||
إذا أظهر "disabled"، فأضف `plugins.entries.googlechat.enabled: true` إلى التكوين لديك.
|
||||
إذا أظهر "disabled"، فأضف `plugins.entries.googlechat.enabled: true` إلى تكوينك.
|
||||
|
||||
3. **لم تتم إعادة تشغيل Gateway**: بعد إضافة التكوين، أعد تشغيل Gateway:
|
||||
|
||||
@ -260,7 +260,7 @@ status code: 405, reason phrase: HTTP error response: HTTP/1.1 405 Method Not Al
|
||||
openclaw gateway restart
|
||||
```
|
||||
|
||||
تحقق من أن القناة قيد التشغيل:
|
||||
تحقق من أن القناة تعمل:
|
||||
|
||||
```bash
|
||||
openclaw channels status
|
||||
@ -269,9 +269,9 @@ openclaw channels status
|
||||
|
||||
### مشكلات أخرى
|
||||
|
||||
- تحقق من `openclaw channels status --probe` لأخطاء المصادقة أو تكوين الجمهور المفقود.
|
||||
- تحقق من `openclaw channels status --probe` لاكتشاف أخطاء المصادقة أو تكوين الجمهور المفقود.
|
||||
- إذا لم تصل أي رسائل، فتأكد من رابط Webhook الخاص بتطبيق Chat + اشتراكات الأحداث.
|
||||
- إذا منع شرط الإشارة الردود، فاضبط `botUser` على اسم مورد مستخدم التطبيق وتحقق من `requireMention`.
|
||||
- إذا منع تقييد الإشارة الردود، فاضبط `botUser` على اسم مورد مستخدم التطبيق وتحقق من `requireMention`.
|
||||
- استخدم `openclaw logs --follow` أثناء إرسال رسالة اختبار لمعرفة ما إذا كانت الطلبات تصل إلى Gateway.
|
||||
|
||||
مستندات ذات صلة:
|
||||
@ -280,10 +280,10 @@ openclaw channels status
|
||||
- [الأمان](/ar/gateway/security)
|
||||
- [التفاعلات](/ar/tools/reactions)
|
||||
|
||||
## ذو صلة
|
||||
## ذات صلة
|
||||
|
||||
- [نظرة عامة على القنوات](/ar/channels) — كل القنوات المدعومة
|
||||
- [المزاوجة](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق المزاوجة
|
||||
- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعات وشرط الإشارة
|
||||
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه جلسات الرسائل
|
||||
- [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة
|
||||
- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران
|
||||
- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وتقييد الإشارات
|
||||
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل
|
||||
- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية
|
||||
|
||||
@ -1,38 +1,38 @@
|
||||
---
|
||||
read_when:
|
||||
- تغيير سلوك الدردشة الجماعية أو تقييد الإشارات
|
||||
- تغيير سلوك دردشة المجموعة أو ضبط بوابة الإشارات
|
||||
sidebarTitle: Groups
|
||||
summary: سلوك الدردشة الجماعية عبر الواجهات (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
|
||||
title: المجموعات
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T21:27:19Z"
|
||||
generated_at: "2026-05-04T02:21:47Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 6fd4fcaa8335f1dc4b4b1a719d6654ab0c10530f74284269ed6205dd5f87c116
|
||||
source_hash: dea506c011a5d8f6155b2f56aacb236482cb8c5b7457001cb2171fd45932443d
|
||||
source_path: channels/groups.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
يتعامل OpenClaw مع الدردشات الجماعية باتساق عبر الواجهات: Discord، وiMessage، وMatrix، وMicrosoft Teams، وSignal، وSlack، وTelegram، وWhatsApp، وZalo.
|
||||
يتعامل OpenClaw مع الدردشات الجماعية بشكل متسق عبر الأسطح: Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo.
|
||||
|
||||
## مقدمة للمبتدئين (دقيقتان)
|
||||
|
||||
"يعيش" OpenClaw على حسابات المراسلة الخاصة بك. لا يوجد مستخدم بوت WhatsApp منفصل. إذا كنت **أنت** موجودًا في مجموعة، فيمكن لـ OpenClaw رؤية تلك المجموعة والرد فيها.
|
||||
"يعيش" OpenClaw على حسابات المراسلة الخاصة بك. لا يوجد مستخدم بوت WhatsApp منفصل. إذا كنت **أنت** في مجموعة، يمكن لـ OpenClaw رؤية تلك المجموعة والرد فيها.
|
||||
|
||||
السلوك الافتراضي:
|
||||
|
||||
- المجموعات مقيدة (`groupPolicy: "allowlist"`).
|
||||
- تتطلب الردود إشارة ما لم تعطل بوابة الإشارات صراحة.
|
||||
- الردود النهائية العادية في المجموعات/القنوات تكون خاصة افتراضيًا. يستخدم الإخراج المرئي في الغرفة أداة `message`.
|
||||
- المجموعات مقيّدة (`groupPolicy: "allowlist"`).
|
||||
- تتطلب الردود إشارة ما لم تعطّل صراحةً بوابة الإشارات.
|
||||
- الردود النهائية العادية في المجموعات/القنوات تكون خاصة افتراضياً. يستخدم الإخراج المرئي في الغرفة أداة `message`.
|
||||
|
||||
الترجمة: يمكن للمرسلين المدرجين في قائمة السماح تشغيل OpenClaw عبر الإشارة إليه.
|
||||
|
||||
<Note>
|
||||
**الخلاصة**
|
||||
**خلاصة سريعة**
|
||||
|
||||
- **وصول الرسائل المباشرة** تتحكم به `*.allowFrom`.
|
||||
- **وصول المجموعات** تتحكم به `*.groupPolicy` + قوائم السماح (`*.groups`، `*.groupAllowFrom`).
|
||||
- **تشغيل الرد** تتحكم به بوابة الإشارات (`requireMention`، `/activation`).
|
||||
- يتم التحكم في **وصول الرسائل المباشرة** بواسطة `*.allowFrom`.
|
||||
- يتم التحكم في **وصول المجموعات** بواسطة `*.groupPolicy` + قوائم السماح (`*.groups`, `*.groupAllowFrom`).
|
||||
- يتم التحكم في **تشغيل الردود** بواسطة بوابة الإشارات (`requireMention`, `/activation`).
|
||||
|
||||
</Note>
|
||||
|
||||
@ -47,19 +47,19 @@ otherwise -> reply
|
||||
|
||||
## الردود المرئية
|
||||
|
||||
بالنسبة إلى غرف المجموعات/القنوات، يكون الإعداد الافتراضي في OpenClaw هو `messages.groupChat.visibleReplies: "message_tool"`.
|
||||
يكتب `openclaw doctor --fix` هذا الإعداد الافتراضي في إعدادات القنوات المهيأة التي لا تتضمنه.
|
||||
يعني ذلك أن الوكيل لا يزال يعالج الدور ويمكنه تحديث حالة الذاكرة/الجلسة، لكن إجابته النهائية العادية لا تُنشر تلقائيًا مرة أخرى في الغرفة. للتحدث بشكل مرئي، يستخدم الوكيل `message(action=send)`.
|
||||
بالنسبة لغرف المجموعات/القنوات، يضبط OpenClaw افتراضياً `messages.groupChat.visibleReplies: "message_tool"`.
|
||||
يكتب `openclaw doctor --fix` هذا الإعداد الافتراضي في إعدادات القنوات المكوّنة التي لا تتضمنه.
|
||||
يعني ذلك أن الوكيل لا يزال يعالج الدور ويمكنه تحديث الذاكرة/حالة الجلسة، لكن إجابته النهائية العادية لا تُنشر تلقائياً مرة أخرى في الغرفة. للتحدث بشكل مرئي، يستخدم الوكيل `message(action=send)`.
|
||||
|
||||
إذا لم تكن أداة الرسائل متاحة ضمن سياسة الأدوات النشطة، يعود OpenClaw
|
||||
إلى الردود المرئية التلقائية بدلًا من كتم الاستجابة بصمت.
|
||||
يحذر `openclaw doctor` من هذا التعارض.
|
||||
يعتمد هذا الإعداد الافتراضي على نموذج/وقت تشغيل يستدعي الأدوات بشكل موثوق. إذا أظهرت السجلات نص المساعد لكن `didSendViaMessagingTool: false`، فهذا يعني أن النموذج أجاب بشكل خاص بدلاً من استدعاء أداة الرسائل. هذا ليس فشل إرسال في Discord/Slack/Telegram. استخدم نموذجاً موثوقاً في استدعاء الأدوات لجلسات المجموعات/القنوات، أو اضبط `messages.groupChat.visibleReplies: "automatic"` لاستعادة الردود النهائية المرئية القديمة.
|
||||
|
||||
بالنسبة إلى الدردشات المباشرة وأي دور مصدر آخر، استخدم `messages.visibleReplies: "message_tool"` لتطبيق السلوك نفسه للردود المرئية المعتمدة على الأداة فقط على مستوى عام. يمكن لحاضنات الاختبار أيضًا اختيار هذا كإعداد افتراضي عند عدم ضبطه؛ تفعل حاضنة Codex ذلك للدردشات المباشرة في وضع Codex. يظل `messages.groupChat.visibleReplies` التجاوز الأكثر تحديدًا لغرف المجموعات/القنوات.
|
||||
إذا كانت أداة الرسائل غير متاحة ضمن سياسة الأدوات النشطة، يعود OpenClaw إلى الردود المرئية التلقائية بدلاً من كتم الاستجابة بصمت. يحذر `openclaw doctor` من عدم التطابق هذا.
|
||||
|
||||
يحل هذا محل النمط القديم الذي كان يفرض على النموذج الإجابة بـ `NO_REPLY` في معظم أدوار وضع المراقبة الصامتة. في وضع الأداة فقط، يعني عدم فعل أي شيء مرئي ببساطة عدم استدعاء أداة الرسائل.
|
||||
بالنسبة للدردشات المباشرة وأي دور مصدر آخر، استخدم `messages.visibleReplies: "message_tool"` لتطبيق سلوك الردود المرئية المعتمد على الأداة فقط عالمياً. يمكن لأدوات الاختبار أيضاً اختيار هذا كإعداد افتراضي غير مضبوط لديها؛ تفعل أداة اختبار Codex ذلك للدردشات المباشرة في وضع Codex. يبقى `messages.groupChat.visibleReplies` التجاوز الأكثر تحديداً لغرف المجموعات/القنوات.
|
||||
|
||||
لا تزال مؤشرات الكتابة تُرسل بينما يعمل الوكيل في وضع الأداة فقط. تتم ترقية وضع الكتابة الجماعي الافتراضي من "message" إلى "instant" لهذه الأدوار لأنه قد لا يكون هناك أي نص رسالة مساعد عادي قبل أن يقرر الوكيل ما إذا كان سيستدعي أداة الرسائل. تظل إعدادات وضع الكتابة الصريحة هي صاحبة الأولوية.
|
||||
يستبدل هذا النمط القديم الذي كان يجبر النموذج على الإجابة بـ `NO_REPLY` لمعظم أدوار وضع الترقب. في وضع الأداة فقط، يعني عدم فعل أي شيء مرئي ببساطة عدم استدعاء أداة الرسائل.
|
||||
|
||||
لا تزال مؤشرات الكتابة تُرسل أثناء عمل الوكيل في وضع الأداة فقط. تتم ترقية وضع كتابة المجموعة الافتراضي من "message" إلى "instant" لهذه الأدوار لأنه قد لا يكون هناك أبداً نص رسالة مساعد عادي قبل أن يقرر الوكيل ما إذا كان سيستدعي أداة الرسائل. يبقى إعداد وضع الكتابة الصريح هو الحاكم.
|
||||
|
||||
لاستعادة الردود النهائية التلقائية القديمة لغرف المجموعات/القنوات:
|
||||
|
||||
@ -73,10 +73,9 @@ otherwise -> reply
|
||||
}
|
||||
```
|
||||
|
||||
يعيد Gateway تحميل إعدادات `messages` تحميلًا ساخنًا بعد حفظ الملف. أعد التشغيل فقط
|
||||
عندما تكون مراقبة الملفات أو إعادة تحميل الإعدادات معطلة في النشر.
|
||||
يعيد Gateway تحميل إعدادات `messages` فورياً بعد حفظ الملف. أعد التشغيل فقط عندما تكون مراقبة الملفات أو إعادة تحميل الإعدادات معطلة في النشر.
|
||||
|
||||
لاشتراط أن يمر الإخراج المرئي عبر أداة الرسائل لكل دردشة مصدر:
|
||||
لاشتراط مرور الإخراج المرئي عبر أداة الرسائل لكل دردشة مصدر:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -86,69 +85,69 @@ otherwise -> reply
|
||||
}
|
||||
```
|
||||
|
||||
تتجاوز أوامر الشرطة المائلة الأصلية (Discord، وTelegram، والواجهات الأخرى التي تدعم الأوامر الأصلية) `visibleReplies: "message_tool"` وترد دائمًا بشكل مرئي كي تحصل واجهة أوامر القناة الأصلية على الاستجابة التي تتوقعها. ينطبق هذا على أدوار الأوامر الأصلية المتحقق منها فقط؛ أما أوامر `/...` المكتوبة نصيًا وأدوار الدردشة العادية فلا تزال تتبع الإعداد الافتراضي المهيأ للمجموعة.
|
||||
تتجاوز أوامر الشرطة المائلة الأصلية (Discord وTelegram والأسطح الأخرى ذات دعم الأوامر الأصلي) `visibleReplies: "message_tool"` وترد دائماً بشكل مرئي حتى تحصل واجهة أوامر القناة الأصلية على الاستجابة التي تتوقعها. ينطبق هذا على أدوار الأوامر الأصلية التي تم التحقق منها فقط؛ أما أوامر `/...` المكتوبة نصياً وأدوار الدردشة العادية فلا تزال تتبع الإعداد الافتراضي المكوّن للمجموعة.
|
||||
|
||||
## رؤية السياق وقوائم السماح
|
||||
|
||||
يوجد عنصران مختلفان للتحكم في أمان المجموعات:
|
||||
هناك عنصران مختلفان للتحكم في سلامة المجموعات:
|
||||
|
||||
- **تفويض التشغيل**: من يمكنه تشغيل الوكيل (`groupPolicy`، و`groups`، و`groupAllowFrom`، وقوائم السماح الخاصة بالقنوات).
|
||||
- **رؤية السياق**: ما السياق التكميلي الذي يُحقن في النموذج (نص الرد، والاقتباسات، وسجل السلسلة، والبيانات الوصفية المعاد توجيهها).
|
||||
- **تفويض التشغيل**: من يمكنه تشغيل الوكيل (`groupPolicy`, `groups`, `groupAllowFrom`, قوائم السماح الخاصة بالقنوات).
|
||||
- **رؤية السياق**: ما السياق التكميلي الذي يُحقن في النموذج (نص الرد، الاقتباسات، سجل سلسلة المحادثة، بيانات التعريف المعاد توجيهها).
|
||||
|
||||
افتراضيًا، يعطي OpenClaw الأولوية لسلوك الدردشة العادي ويحافظ على السياق غالبًا كما تم استلامه. يعني هذا أن قوائم السماح تحدد في المقام الأول من يمكنه تشغيل الإجراءات، وليست حدًا عامًا للتنقيح لكل مقتطف مقتبس أو تاريخي.
|
||||
افتراضياً، يعطي OpenClaw الأولوية لسلوك الدردشة الطبيعي ويبقي السياق في الغالب كما ورد. يعني هذا أن قوائم السماح تحدد أساساً من يمكنه تشغيل الإجراءات، وليست حداً عاماً للتنقيح لكل مقتطف مقتبس أو تاريخي.
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="السلوك الحالي خاص بكل قناة">
|
||||
- تطبق بعض القنوات بالفعل تصفية مبنية على المرسل للسياق التكميلي في مسارات محددة (مثل تهيئة سلاسل Slack، وعمليات البحث عن ردود/سلاسل Matrix).
|
||||
- لا تزال قنوات أخرى تمرر سياق الاقتباس/الرد/إعادة التوجيه كما تم استلامه.
|
||||
<Accordion title="السلوك الحالي خاص بالقناة">
|
||||
- تطبق بعض القنوات بالفعل تصفية مستندة إلى المرسل للسياق التكميلي في مسارات محددة (على سبيل المثال تهيئة سلاسل Slack، وعمليات البحث عن الردود/السلاسل في Matrix).
|
||||
- لا تزال قنوات أخرى تمرر سياق الاقتباس/الرد/إعادة التوجيه كما ورد.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="اتجاه التقوية (مخطط له)">
|
||||
- `contextVisibility: "all"` (افتراضي) يحافظ على السلوك الحالي كما تم استلامه.
|
||||
- `contextVisibility: "allowlist"` يرشح السياق التكميلي إلى المرسلين المدرجين في قائمة السماح.
|
||||
- `contextVisibility: "allowlist_quote"` هو `allowlist` مع استثناء صريح واحد للاقتباس/الرد.
|
||||
<Accordion title="اتجاه التحصين (مخطط)">
|
||||
- يحافظ `contextVisibility: "all"` (الافتراضي) على السلوك الحالي كما ورد.
|
||||
- يرشح `contextVisibility: "allowlist"` السياق التكميلي إلى المرسلين المدرجين في قائمة السماح.
|
||||
- `contextVisibility: "allowlist_quote"` هو `allowlist` مع استثناء اقتباس/رد صريح واحد.
|
||||
|
||||
إلى أن يُنفذ نموذج التقوية هذا باتساق عبر القنوات، توقع اختلافات حسب الواجهة.
|
||||
إلى أن يتم تنفيذ نموذج التحصين هذا بشكل متسق عبر القنوات، توقع اختلافات حسب السطح.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||

|
||||

|
||||
|
||||
إذا كنت تريد...
|
||||
|
||||
| الهدف | ما يجب ضبطه |
|
||||
| -------------------------------------------- | ---------------------------------------------------------- |
|
||||
| السماح لكل المجموعات مع الرد فقط على إشارات @ | `groups: { "*": { requireMention: true } }` |
|
||||
| السماح بكل المجموعات لكن الرد فقط عند @الإشارات | `groups: { "*": { requireMention: true } }` |
|
||||
| تعطيل كل ردود المجموعات | `groupPolicy: "disabled"` |
|
||||
| مجموعات محددة فقط | `groups: { "<group-id>": { ... } }` (بدون مفتاح `"*"` ) |
|
||||
| يمكنك أنت فقط التشغيل في المجموعات | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
|
||||
| إعادة استخدام مجموعة مرسلين موثوقين عبر القنوات | `groupAllowFrom: ["accessGroup:operators"]` |
|
||||
| مجموعات محددة فقط | `groups: { "<group-id>": { ... } }` (بلا مفتاح `"*"` ) |
|
||||
| أنت فقط يمكنك التشغيل في المجموعات | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
|
||||
| إعادة استخدام مجموعة مرسلين موثوقة واحدة عبر القنوات | `groupAllowFrom: ["accessGroup:operators"]` |
|
||||
|
||||
لقوائم سماح المرسلين القابلة لإعادة الاستخدام، راجع [مجموعات الوصول](/ar/channels/access-groups).
|
||||
|
||||
## مفاتيح الجلسات
|
||||
|
||||
- تستخدم جلسات المجموعات مفاتيح جلسات `agent:<agentId>:<channel>:group:<id>` (تستخدم الغرف/القنوات `agent:<agentId>:<channel>:channel:<id>`).
|
||||
- تضيف موضوعات منتديات Telegram `:topic:<threadId>` إلى معرف المجموعة بحيث يكون لكل موضوع جلسته الخاصة.
|
||||
- تستخدم الدردشات المباشرة الجلسة الرئيسية (أو جلسة لكل مرسل إذا تمت تهيئتها).
|
||||
- يتم تخطي رسائل Heartbeat لجلسات المجموعات.
|
||||
- تضيف مواضيع منتديات Telegram `:topic:<threadId>` إلى معرّف المجموعة بحيث يكون لكل موضوع جلسته الخاصة.
|
||||
- تستخدم الدردشات المباشرة الجلسة الرئيسية (أو لكل مرسل إذا تم تكوين ذلك).
|
||||
- يتم تخطي Heartbeat لجلسات المجموعات.
|
||||
|
||||
<a id="pattern-personal-dms-public-groups-single-agent"></a>
|
||||
|
||||
## نمط: رسائل مباشرة شخصية + مجموعات عامة (وكيل واحد)
|
||||
|
||||
نعم — يعمل هذا جيدًا إذا كانت حركة المرور "الشخصية" لديك هي **رسائل مباشرة** وكانت حركة المرور "العامة" هي **مجموعات**.
|
||||
نعم — يعمل هذا جيداً إذا كانت حركة المرور "الشخصية" لديك هي **رسائل مباشرة** وكانت حركة المرور "العامة" لديك هي **مجموعات**.
|
||||
|
||||
السبب: في وضع الوكيل الواحد، تصل الرسائل المباشرة عادةً إلى مفتاح الجلسة **الرئيسية** (`agent:main:main`)، بينما تستخدم المجموعات دائمًا مفاتيح جلسات **غير رئيسية** (`agent:main:<channel>:group:<id>`). إذا فعّلت وضع العزل باستخدام `mode: "non-main"`، فستعمل جلسات المجموعات تلك في خلفية العزل المهيأة بينما تبقى جلسة الرسائل المباشرة الرئيسية لديك على المضيف. Docker هو الخلفية الافتراضية إذا لم تختر واحدة.
|
||||
السبب: في وضع الوكيل الواحد، تصل الرسائل المباشرة عادةً إلى مفتاح الجلسة **الرئيسي** (`agent:main:main`)، بينما تستخدم المجموعات دائماً مفاتيح جلسات **غير رئيسية** (`agent:main:<channel>:group:<id>`). إذا فعّلت العزل باستخدام `mode: "non-main"`، فستعمل جلسات المجموعات هذه في خلفية العزل المكوّنة بينما تبقى جلسة الرسائل المباشرة الرئيسية على المضيف. Docker هو الخلفية الافتراضية إذا لم تختر واحدة.
|
||||
|
||||
يمنحك هذا "عقل" وكيل واحدًا (مساحة عمل + ذاكرة مشتركتان)، لكن بوضعين للتنفيذ:
|
||||
يعطيك هذا "عقلاً" واحداً للوكيل (مساحة عمل + ذاكرة مشتركتان)، لكن وضعين للتنفيذ:
|
||||
|
||||
- **الرسائل المباشرة**: أدوات كاملة (المضيف)
|
||||
- **المجموعات**: عزل + أدوات مقيدة
|
||||
- **المجموعات**: عزل + أدوات مقيّدة
|
||||
|
||||
<Note>
|
||||
إذا كنت تحتاج إلى مساحات عمل/شخصيات منفصلة تمامًا (يجب ألا تختلط "الشخصية" و"العامة" أبدًا)، فاستخدم وكيلًا ثانيًا + روابط. راجع [توجيه متعدد الوكلاء](/ar/concepts/multi-agent).
|
||||
إذا كنت بحاجة إلى مساحات عمل/شخصيات منفصلة حقاً (يجب ألا يختلط "الشخصي" و"العام" أبداً)، فاستخدم وكيلاً ثانياً + ربطاً. راجع [توجيه متعدد الوكلاء](/ar/concepts/multi-agent).
|
||||
</Note>
|
||||
|
||||
<Tabs>
|
||||
@ -176,8 +175,8 @@ otherwise -> reply
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="ترى المجموعات مجلدًا مدرجًا في قائمة السماح فقط">
|
||||
هل تريد أن "تتمكن المجموعات من رؤية المجلد X فقط" بدلًا من "عدم الوصول إلى المضيف"؟ أبقِ `workspaceAccess: "none"` واربط فقط المسارات المدرجة في قائمة السماح داخل العزل:
|
||||
<Tab title="ترى المجموعات مجلداً مدرجاً في قائمة السماح فقط">
|
||||
هل تريد "يمكن للمجموعات رؤية المجلد X فقط" بدلاً من "لا وصول إلى المضيف"؟ أبقِ `workspaceAccess: "none"` واربط المسارات المدرجة في قائمة السماح فقط داخل العزل:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -202,20 +201,20 @@ otherwise -> reply
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
ذات صلة:
|
||||
ذو صلة:
|
||||
|
||||
- مفاتيح الإعدادات والقيم الافتراضية: [إعدادات Gateway](/ar/gateway/config-agents#agentsdefaultssandbox)
|
||||
- تصحيح سبب حظر أداة: [العزل مقابل سياسة الأدوات مقابل الصلاحيات المرتفعة](/ar/gateway/sandbox-vs-tool-policy-vs-elevated)
|
||||
- تفاصيل روابط التحميل: [العزل](/ar/gateway/sandboxing#custom-bind-mounts)
|
||||
- تفاصيل ربط المسارات: [العزل](/ar/gateway/sandboxing#custom-bind-mounts)
|
||||
|
||||
## تسميات العرض
|
||||
|
||||
- تستخدم تسميات واجهة المستخدم `displayName` عند توفرها، منسقة كـ `<channel>:<token>`.
|
||||
- `#room` محجوز للغرف/القنوات؛ تستخدم الدردشات الجماعية `g-<slug>` (أحرف صغيرة، المسافات -> `-`، مع الاحتفاظ بـ `#@+._-`).
|
||||
- تستخدم تسميات واجهة المستخدم `displayName` عندما يكون متاحاً، منسقاً كـ `<channel>:<token>`.
|
||||
- `#room` محجوز للغرف/القنوات؛ تستخدم دردشات المجموعات `g-<slug>` (أحرف صغيرة، المسافات -> `-`، مع إبقاء `#@+._-`).
|
||||
|
||||
## سياسة المجموعات
|
||||
|
||||
تحكم في كيفية التعامل مع رسائل المجموعات/الغرف لكل قناة:
|
||||
تحكم في كيفية معالجة رسائل المجموعات/الغرف لكل قناة:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -266,44 +265,44 @@ otherwise -> reply
|
||||
| ------------- | ------------------------------------------------------------ |
|
||||
| `"open"` | تتجاوز المجموعات قوائم السماح؛ لا تزال بوابة الإشارات مطبقة. |
|
||||
| `"disabled"` | حظر كل رسائل المجموعات بالكامل. |
|
||||
| `"allowlist"` | السماح فقط بالمجموعات/الغرف التي تطابق قائمة السماح المهيأة. |
|
||||
| `"allowlist"` | السماح فقط بالمجموعات/الغرف التي تطابق قائمة السماح المكوّنة. |
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="ملاحظات لكل قناة">
|
||||
- `groupPolicy` منفصلة عن بوابة الإشارات (التي تتطلب إشارات @).
|
||||
- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: استخدم `groupAllowFrom` (احتياطيًا: `allowFrom` الصريح).
|
||||
- Signal: يمكن أن يطابق `groupAllowFrom` إما معرف مجموعة Signal الوارد أو هاتف/UUID المرسل.
|
||||
- تنطبق موافقات إقران الرسائل المباشرة (إدخالات مخزن `*-allowFrom`) على وصول الرسائل المباشرة فقط؛ يبقى تفويض مرسل المجموعة صريحًا لقوائم سماح المجموعات.
|
||||
- `groupPolicy` منفصل عن اشتراط الإشارة (الذي يتطلب @mentions).
|
||||
- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: استخدم `groupAllowFrom` (الاحتياطي: `allowFrom` صريح).
|
||||
- Signal: يمكن أن يطابق `groupAllowFrom` إما معرف مجموعة Signal الواردة أو هاتف/UUID المرسل.
|
||||
- تنطبق موافقات إقران الرسائل المباشرة (مدخلات تخزين `*-allowFrom`) على وصول الرسائل المباشرة فقط؛ ويبقى تفويض مرسل المجموعة صريحا عبر قوائم سماح المجموعات.
|
||||
- Discord: تستخدم قائمة السماح `channels.discord.guilds.<id>.channels`.
|
||||
- Slack: تستخدم قائمة السماح `channels.slack.channels`.
|
||||
- Matrix: تستخدم قائمة السماح `channels.matrix.groups`. فضّل معرفات الغرف أو الأسماء البديلة؛ البحث عن اسم الغرفة المنضم إليها يكون بأفضل جهد، ويتم تجاهل الأسماء غير المحلولة وقت التشغيل. استخدم `channels.matrix.groupAllowFrom` لتقييد المرسلين؛ كما تدعم قوائم سماح `users` لكل غرفة.
|
||||
- Matrix: تستخدم قائمة السماح `channels.matrix.groups`. فضّل معرفات الغرف أو الأسماء المستعارة؛ البحث عن اسم الغرفة المنضمة هو أفضل محاولة، ويتم تجاهل الأسماء غير المحلولة وقت التشغيل. استخدم `channels.matrix.groupAllowFrom` لتقييد المرسلين؛ قوائم سماح `users` لكل غرفة مدعومة أيضا.
|
||||
- يتم التحكم في الرسائل المباشرة الجماعية بشكل منفصل (`channels.discord.dm.*`، `channels.slack.dm.*`).
|
||||
- يمكن لقائمة سماح Telegram مطابقة معرفات المستخدمين (`"123456789"`، `"telegram:123456789"`، `"tg:123456789"`) أو أسماء المستخدمين (`"@alice"` أو `"alice"`); البادئات غير حساسة لحالة الأحرف.
|
||||
- الإعداد الافتراضي هو `groupPolicy: "allowlist"`؛ إذا كانت قائمة سماح المجموعات لديك فارغة، فسيتم حظر رسائل المجموعات.
|
||||
- أمان وقت التشغيل: عندما تكون كتلة موفر مفقودة تمامًا (`channels.<provider>` غائبة)، تعود سياسة المجموعات إلى وضع مغلق عند الفشل (عادةً `allowlist`) بدلًا من وراثة `channels.defaults.groupPolicy`.
|
||||
- يمكن أن تطابق قائمة سماح Telegram معرفات المستخدمين (`"123456789"`، `"telegram:123456789"`، `"tg:123456789"`) أو أسماء المستخدمين (`"@alice"` أو `"alice"`); ولا تتحسس البادئات حالة الأحرف.
|
||||
- الافتراضي هو `groupPolicy: "allowlist"`؛ إذا كانت قائمة سماح مجموعتك فارغة، فسيتم حظر رسائل المجموعة.
|
||||
- سلامة وقت التشغيل: عندما تكون كتلة المزوّد مفقودة بالكامل (`channels.<provider>` غير موجودة)، تعود سياسة المجموعة إلى وضع مغلق عند الفشل (عادة `allowlist`) بدلا من وراثة `channels.defaults.groupPolicy`.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
نموذج ذهني سريع (ترتيب التقييم لرسائل المجموعات):
|
||||
النموذج الذهني السريع (ترتيب التقييم لرسائل المجموعات):
|
||||
|
||||
<Steps>
|
||||
<Step title="groupPolicy">
|
||||
`groupPolicy` (مفتوح/معطّل/قائمة سماح).
|
||||
`groupPolicy` (open/disabled/allowlist).
|
||||
</Step>
|
||||
<Step title="قوائم سماح المجموعات">
|
||||
قوائم سماح المجموعات (`*.groups`، `*.groupAllowFrom`، قائمة السماح الخاصة بالقناة).
|
||||
</Step>
|
||||
<Step title="بوابة الإشارة">
|
||||
بوابة الإشارة (`requireMention`، `/activation`).
|
||||
<Step title="اشتراط الإشارة">
|
||||
اشتراط الإشارة (`requireMention`، `/activation`).
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## بوابة الإشارة (الافتراضية)
|
||||
## اشتراط الإشارة (افتراضي)
|
||||
|
||||
تتطلب رسائل المجموعات إشارة ما لم يتم تجاوز ذلك لكل مجموعة. توجد الإعدادات الافتراضية لكل نظام فرعي ضمن `*.groups."*"`.
|
||||
تتطلب رسائل المجموعات إشارة ما لم يتم تجاوز ذلك لكل مجموعة. توجد الافتراضيات لكل نظام فرعي ضمن `*.groups."*"`.
|
||||
|
||||
يُعد الرد على رسالة بوت إشارة ضمنية عندما تدعم القناة بيانات تعريف الرد. ويمكن أن يُعد اقتباس رسالة بوت أيضًا إشارة ضمنية في القنوات التي تعرض بيانات تعريف الاقتباس. تشمل الحالات المدمجة الحالية Telegram وWhatsApp وSlack وDiscord وMicrosoft Teams وZaloUser.
|
||||
يُحتسب الرد على رسالة bot كإشارة ضمنية عندما تدعم القناة بيانات تعريف الرد. ويمكن أن يُحتسب اقتباس رسالة bot أيضا كإشارة ضمنية على القنوات التي تكشف بيانات تعريف الاقتباس. تشمل الحالات المضمنة الحالية Telegram وWhatsApp وSlack وDiscord وMicrosoft Teams وZaloUser.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -342,16 +341,16 @@ otherwise -> reply
|
||||
```
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="ملاحظات بوابة الإشارة">
|
||||
<Accordion title="ملاحظات اشتراط الإشارة">
|
||||
- `mentionPatterns` هي أنماط regex آمنة وغير حساسة لحالة الأحرف؛ يتم تجاهل الأنماط غير الصالحة وأشكال التكرار المتداخل غير الآمنة.
|
||||
- الأسطح التي توفر إشارات صريحة تمررها مع ذلك؛ الأنماط وسيلة احتياطية.
|
||||
- الأسطح التي توفر إشارات صريحة تظل تمر؛ الأنماط هي احتياطي.
|
||||
- تجاوز لكل وكيل: `agents.list[].groupChat.mentionPatterns` (مفيد عندما يشارك عدة وكلاء مجموعة واحدة).
|
||||
- لا تُفرض بوابة الإشارة إلا عندما يكون اكتشاف الإشارة ممكنًا (تم تكوين إشارات أصلية أو `mentionPatterns`).
|
||||
- لا يؤدي إدراج مجموعة أو مرسل في قائمة السماح إلى تعطيل بوابة الإشارة؛ اضبط `requireMention` لتلك المجموعة على `false` عندما ينبغي أن تؤدي كل الرسائل إلى التشغيل.
|
||||
- لا يتم فرض اشتراط الإشارة إلا عندما يكون اكتشاف الإشارة ممكنا (تم تكوين إشارات أصلية أو `mentionPatterns`).
|
||||
- لا يؤدي وضع مجموعة أو مرسل في قائمة السماح إلى تعطيل اشتراط الإشارة؛ اضبط `requireMention` لتلك المجموعة على `false` عندما يجب أن تؤدي كل الرسائل إلى التشغيل.
|
||||
- يحمل سياق مطالبة دردشة المجموعة تعليمة الرد الصامت المحلولة في كل دور؛ يجب ألا تكرر ملفات مساحة العمل آليات `NO_REPLY`.
|
||||
- تعامل المجموعات التي يُسمح فيها بالردود الصامتة أدوار النموذج النظيفة الفارغة أو التي تحتوي على استدلال فقط كصامتة، بما يعادل `NO_REPLY`. تفعل الدردشات المباشرة الشيء نفسه فقط عندما تكون الردود الصامتة المباشرة مسموحة صراحة؛ وإلا تظل الردود الفارغة أدوار وكيل فاشلة.
|
||||
- توجد إعدادات Discord الافتراضية في `channels.discord.guilds."*"` (قابلة للتجاوز لكل نقابة/قناة).
|
||||
- يُغلّف سياق سجل المجموعة بشكل موحد عبر القنوات وهو **للمعلّق فقط** (الرسائل التي تم تخطيها بسبب بوابة الإشارة)؛ استخدم `messages.groupChat.historyLimit` للإعداد الافتراضي العام و`channels.<channel>.historyLimit` (أو `channels.<channel>.accounts.*.historyLimit`) للتجاوزات. اضبطه على `0` للتعطيل.
|
||||
- تتعامل المجموعات التي تسمح بالردود الصامتة مع أدوار النموذج النظيفة الفارغة أو التي تحتوي على تفكير فقط كصامتة، بما يعادل `NO_REPLY`. تفعل الدردشات المباشرة الشيء نفسه فقط عندما تكون الردود الصامتة المباشرة مسموحة صراحة؛ وإلا تبقى الردود الفارغة أدوارا فاشلة للوكيل.
|
||||
- توجد افتراضيات Discord في `channels.discord.guilds."*"` (قابلة للتجاوز لكل خادم/قناة).
|
||||
- يتم تغليف سياق سجل المجموعة بشكل موحد عبر القنوات وهو **للمعلّق فقط** (الرسائل التي تم تخطيها بسبب اشتراط الإشارة)؛ استخدم `messages.groupChat.historyLimit` للافتراضي العام و`channels.<channel>.historyLimit` (أو `channels.<channel>.accounts.*.historyLimit`) للتجاوزات. اضبط `0` للتعطيل.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -360,19 +359,19 @@ otherwise -> reply
|
||||
|
||||
تدعم بعض تكوينات القنوات تقييد الأدوات المتاحة **داخل مجموعة/غرفة/قناة محددة**.
|
||||
|
||||
- `tools`: السماح/الرفض للأدوات على مستوى المجموعة كلها.
|
||||
- `toolsBySender`: تجاوزات لكل مرسل داخل المجموعة. استخدم بادئات مفاتيح صريحة: `id:<senderId>` و`e164:<phone>` و`username:<handle>` و`name:<displayName>` وحرف البدل `"*"`. لا تزال المفاتيح القديمة غير المسبوقة مقبولة وتتم مطابقتها كـ `id:` فقط.
|
||||
- `tools`: السماح بالأدوات أو منعها للمجموعة كلها.
|
||||
- `toolsBySender`: تجاوزات لكل مرسل داخل المجموعة. استخدم بادئات مفاتيح صريحة: `id:<senderId>`، `e164:<phone>`، `username:<handle>`، `name:<displayName>`، وبدل `"*"` الشامل. لا تزال المفاتيح القديمة غير المسبوقة مقبولة وتطابق كـ `id:` فقط.
|
||||
|
||||
ترتيب الحل (الأكثر تحديدًا يفوز):
|
||||
ترتيب الحل (الأكثر تحديدا يفوز):
|
||||
|
||||
<Steps>
|
||||
<Step title="أدوات المجموعة حسب المرسل">
|
||||
<Step title="toolsBySender للمجموعة">
|
||||
تطابق `toolsBySender` للمجموعة/القناة.
|
||||
</Step>
|
||||
<Step title="أدوات المجموعة">
|
||||
`tools` للمجموعة/القناة.
|
||||
</Step>
|
||||
<Step title="الأدوات الافتراضية حسب المرسل">
|
||||
<Step title="toolsBySender الافتراضي">
|
||||
تطابق `toolsBySender` الافتراضي (`"*"`).
|
||||
</Step>
|
||||
<Step title="الأدوات الافتراضية">
|
||||
@ -401,15 +400,15 @@ otherwise -> reply
|
||||
```
|
||||
|
||||
<Note>
|
||||
تُطبق قيود أدوات المجموعة/القناة إضافةً إلى سياسة الأدوات العامة/الخاصة بالوكيل (لا يزال الرفض يفوز). تستخدم بعض القنوات تداخلًا مختلفًا للغرف/القنوات (مثل Discord `guilds.*.channels.*` وSlack `channels.*` وMicrosoft Teams `teams.*.channels.*`).
|
||||
تُطبق قيود أدوات المجموعة/القناة بالإضافة إلى سياسة الأدوات العامة/الخاصة بالوكيل (لا يزال المنع يفوز). تستخدم بعض القنوات تداخلا مختلفا للغرف/القنوات (مثل Discord `guilds.*.channels.*`، وSlack `channels.*`، وMicrosoft Teams `teams.*.channels.*`).
|
||||
</Note>
|
||||
|
||||
## قوائم سماح المجموعات
|
||||
|
||||
عند تكوين `channels.whatsapp.groups` أو `channels.telegram.groups` أو `channels.imessage.groups`، تعمل المفاتيح كقائمة سماح للمجموعات. استخدم `"*"` للسماح بكل المجموعات مع الاستمرار في تعيين سلوك الإشارة الافتراضي.
|
||||
عند تكوين `channels.whatsapp.groups` أو `channels.telegram.groups` أو `channels.imessage.groups`، تعمل المفاتيح كقائمة سماح للمجموعات. استخدم `"*"` للسماح بكل المجموعات مع الاستمرار في ضبط سلوك الإشارة الافتراضي.
|
||||
|
||||
<Warning>
|
||||
التباس شائع: موافقة إقران الرسائل المباشرة ليست هي نفسها تخويل المجموعة. بالنسبة إلى القنوات التي تدعم إقران الرسائل المباشرة، يفتح مخزن الإقران الرسائل المباشرة فقط. لا تزال أوامر المجموعة تتطلب تخويلًا صريحًا لمرسل المجموعة من قوائم سماح التكوين مثل `groupAllowFrom` أو بديل التكوين الموثق لتلك القناة.
|
||||
لبس شائع: موافقة إقران الرسائل المباشرة ليست هي نفسها تفويض المجموعة. بالنسبة إلى القنوات التي تدعم إقران الرسائل المباشرة، يفتح مخزن الإقران الرسائل المباشرة فقط. لا تزال أوامر المجموعات تتطلب تفويضا صريحا لمرسل المجموعة من قوائم سماح التكوين مثل `groupAllowFrom` أو احتياطي التكوين الموثق لتلك القناة.
|
||||
</Warning>
|
||||
|
||||
النوايا الشائعة (انسخ/الصق):
|
||||
@ -447,7 +446,7 @@ otherwise -> reply
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="مشغلات المالك فقط (WhatsApp)">
|
||||
<Tab title="مشغلات للمالك فقط (WhatsApp)">
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
@ -462,46 +461,46 @@ otherwise -> reply
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## التفعيل (للمالك فقط)
|
||||
## التنشيط (للمالك فقط)
|
||||
|
||||
يمكن لمالكي المجموعات تبديل التفعيل لكل مجموعة:
|
||||
يمكن لمالكي المجموعات تبديل التنشيط لكل مجموعة:
|
||||
|
||||
- `/activation mention`
|
||||
- `/activation always`
|
||||
|
||||
يُحدد المالك بواسطة `channels.whatsapp.allowFrom` (أو E.164 الذاتي للبوت عند عدم تعيينه). أرسل الأمر كرسالة مستقلة. تتجاهل الأسطح الأخرى حاليًا `/activation`.
|
||||
يُحدد المالك بواسطة `channels.whatsapp.allowFrom` (أو رقم E.164 الذاتي للبوت عندما لا يكون مضبوطا). أرسل الأمر كرسالة مستقلة. تتجاهل الأسطح الأخرى حاليا `/activation`.
|
||||
|
||||
## حقول السياق
|
||||
|
||||
تضبط حمولات المجموعة الواردة:
|
||||
تضبط حمولات المجموعات الواردة:
|
||||
|
||||
- `ChatType=group`
|
||||
- `GroupSubject` (إذا كان معروفًا)
|
||||
- `GroupMembers` (إذا كان معروفًا)
|
||||
- `WasMentioned` (نتيجة بوابة الإشارة)
|
||||
- تتضمن مواضيع منتديات Telegram أيضًا `MessageThreadId` و`IsForum`.
|
||||
- `GroupSubject` (إذا كان معروفا)
|
||||
- `GroupMembers` (إذا كان معروفا)
|
||||
- `WasMentioned` (نتيجة اشتراط الإشارة)
|
||||
- تتضمن مواضيع منتدى Telegram أيضا `MessageThreadId` و`IsForum`.
|
||||
|
||||
ملاحظات خاصة بالقنوات:
|
||||
|
||||
- يمكن لـ BlueBubbles اختياريًا إثراء مشاركي مجموعات macOS غير المسمّين من قاعدة بيانات جهات الاتصال المحلية قبل ملء `GroupMembers`. يكون هذا متوقفًا افتراضيًا ولا يعمل إلا بعد اجتياز بوابة المجموعة العادية.
|
||||
- يمكن لـ BlueBubbles اختياريا إثراء مشاركي مجموعات macOS غير المسماة من قاعدة بيانات جهات الاتصال المحلية قبل ملء `GroupMembers`. يكون هذا معطلا افتراضيا ولا يعمل إلا بعد نجاح بوابات المجموعة العادية.
|
||||
|
||||
تتضمن مطالبة نظام الوكيل مقدمة للمجموعة في أول دور من جلسة مجموعة جديدة. وهي تذكّر النموذج بأن يرد مثل إنسان، وأن يتجنب جداول Markdown، وأن يقلل الأسطر الفارغة ويتبع تباعد الدردشة العادي، وأن يتجنب كتابة تسلسلات `\n` حرفيًا. تُعرض أسماء المجموعات وتسميات المشاركين المستمدة من القناة كبيانات تعريف غير موثوقة داخل كتل مسيجة، وليست تعليمات نظام مضمنة.
|
||||
تتضمن مطالبة نظام الوكيل مقدمة للمجموعة في الدور الأول لجلسة مجموعة جديدة. تذكّر النموذج بأن يرد كإنسان، ويتجنب جداول Markdown، ويقلل الأسطر الفارغة ويتبع تباعد الدردشة الطبيعي، ويتجنب كتابة تسلسلات `\n` حرفيا. تُعرض أسماء المجموعات وتسميات المشاركين المأخوذة من القنوات كبيانات تعريف غير موثوقة داخل كتل مسيجة، لا كتعليمات نظام مضمنة.
|
||||
|
||||
## تفاصيل iMessage
|
||||
|
||||
- فضّل `chat_id:<id>` عند التوجيه أو الإدراج في قائمة السماح.
|
||||
- سرد الدردشات: `imsg chats --limit 20`.
|
||||
- تعود ردود المجموعة دائمًا إلى `chat_id` نفسه.
|
||||
- تعود ردود المجموعات دائما إلى `chat_id` نفسه.
|
||||
|
||||
## مطالبات نظام WhatsApp
|
||||
|
||||
راجع [WhatsApp](/ar/channels/whatsapp#system-prompts) للاطلاع على قواعد مطالبة نظام WhatsApp المعيارية، بما في ذلك حل مطالبات المجموعة والمباشرة، وسلوك أحرف البدل، ودلالات تجاوز الحساب.
|
||||
راجع [WhatsApp](/ar/channels/whatsapp#system-prompts) للاطلاع على قواعد مطالبة نظام WhatsApp المرجعية، بما في ذلك حل مطالبات المجموعات والمباشرة، وسلوك البدل الشامل، ودلالات تجاوز الحساب.
|
||||
|
||||
## تفاصيل WhatsApp
|
||||
|
||||
راجع [رسائل المجموعات](/ar/channels/group-messages) للاطلاع على السلوك الخاص بـ WhatsApp فقط (حقن السجل، تفاصيل التعامل مع الإشارات).
|
||||
راجع [رسائل المجموعات](/ar/channels/group-messages) لمعرفة السلوك الخاص بـ WhatsApp فقط (حقن السجل، تفاصيل التعامل مع الإشارات).
|
||||
|
||||
## ذات صلة
|
||||
## ذو صلة
|
||||
|
||||
- [مجموعات البث](/ar/channels/broadcast-groups)
|
||||
- [توجيه القنوات](/ar/channels/channel-routing)
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
---
|
||||
read_when:
|
||||
- تريد توصيل OpenClaw بقنوات IRC أو الرسائل الخاصة فيها
|
||||
- أنت تقوم بتكوين قوائم السماح في IRC، أو سياسة المجموعات، أو تقييد الإشارات
|
||||
summary: إعداد Plugin IRC، وعناصر التحكم في الوصول، واستكشاف الأخطاء وإصلاحها
|
||||
- تريد توصيل OpenClaw بقنوات IRC أو الرسائل المباشرة
|
||||
- أنت تقوم بتكوين قوائم السماح لـ IRC أو سياسة المجموعة أو تقييد الإشارات
|
||||
summary: إعداد Plugin IRC، وضوابط الوصول، واستكشاف الأخطاء وإصلاحها
|
||||
title: IRC
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T07:30:34Z"
|
||||
model: gpt-5.4
|
||||
generated_at: "2026-05-04T02:21:58Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 76f316c0f026d0387a97dc5dcb6d8967f6e4841d94b95b36e42f6f6284882a69
|
||||
source_hash: 43c3098fe49a5e7405443df73e1bf752a579460dc0b2070c3d07f43b512bb555
|
||||
source_path: channels/irc.md
|
||||
workflow: 15
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
استخدم IRC عندما تريد OpenClaw في القنوات التقليدية (`#room`) والرسائل الخاصة.
|
||||
يأتي IRC على شكل Plugin مضمّن، لكن يتم تكوينه في الإعداد الرئيسي تحت `channels.irc`.
|
||||
استخدم IRC عندما تريد OpenClaw في القنوات الكلاسيكية (`#room`) والرسائل المباشرة.
|
||||
يأتي IRC كـ Plugin مضمّن، لكنه يُضبط في الإعداد الرئيسي ضمن `channels.irc`.
|
||||
|
||||
## البدء السريع
|
||||
|
||||
@ -36,7 +36,7 @@ x-i18n:
|
||||
}
|
||||
```
|
||||
|
||||
يُفضَّل استخدام خادم IRC خاص لتنسيق البوت. وإذا كنت تستخدم عمدًا شبكة IRC عامة، فمن الخيارات الشائعة Libera.Chat وOFTC وSnoonet. تجنّب القنوات العامة المتوقعة لحركة المرور الخلفية الخاصة بالبوت أو السرب.
|
||||
فضّل خادم IRC خاصًا لتنسيق البوتات. إذا استخدمت شبكة IRC عامة عمدًا، فمن الخيارات الشائعة Libera.Chat وOFTC وSnoonet. تجنب القنوات العامة المتوقعة لحركة قناة الاتصال الخلفية للبوت أو السرب.
|
||||
|
||||
3. ابدأ/أعد تشغيل Gateway:
|
||||
|
||||
@ -46,38 +46,39 @@ openclaw gateway run
|
||||
|
||||
## الإعدادات الأمنية الافتراضية
|
||||
|
||||
- يستخدم IRC مقابس TCP/TLS خامًا خارج توجيه الوكيل الأمامي المُدار من مشغّل OpenClaw. في عمليات النشر التي تتطلب مرور كل حركة الخروج عبر ذلك الوكيل الأمامي، اضبط `channels.irc.enabled=false` ما لم تتم الموافقة صراحةً على خروج IRC المباشر.
|
||||
- القيمة الافتراضية لـ `channels.irc.dmPolicy` هي `"pairing"`.
|
||||
- القيمة الافتراضية لـ `channels.irc.groupPolicy` هي `"allowlist"`.
|
||||
- عند استخدام `groupPolicy="allowlist"`، اضبط `channels.irc.groups` لتعريف القنوات المسموح بها.
|
||||
- استخدم TLS (`channels.irc.tls=true`) ما لم تكن تقبل عمدًا بالنقل النصي غير المشفر.
|
||||
- مع `groupPolicy="allowlist"`، اضبط `channels.irc.groups` لتعريف القنوات المسموح بها.
|
||||
- استخدم TLS (`channels.irc.tls=true`) ما لم تكن تقبل عمدًا النقل بنص صريح.
|
||||
|
||||
## التحكم في الوصول
|
||||
|
||||
هناك “بوابتان” منفصلتان لقنوات IRC:
|
||||
هناك «بوابتان» منفصلتان لقنوات IRC:
|
||||
|
||||
1. **الوصول إلى القناة** (`groupPolicy` + `groups`): ما إذا كان البوت يقبل الرسائل من القناة أصلًا.
|
||||
2. **وصول المُرسِل** (`groupAllowFrom` / `groups["#channel"].allowFrom` الخاصة بكل قناة): من المسموح له بتفعيل البوت داخل تلك القناة.
|
||||
1. **وصول القناة** (`groupPolicy` + `groups`): ما إذا كان البوت يقبل الرسائل من قناة أصلًا.
|
||||
2. **وصول المرسل** (`groupAllowFrom` / لكل قناة `groups["#channel"].allowFrom`): من يُسمح له بتشغيل البوت داخل تلك القناة.
|
||||
|
||||
مفاتيح الإعداد:
|
||||
|
||||
- قائمة السماح للرسائل الخاصة (وصول مرسِل الرسائل الخاصة): `channels.irc.allowFrom`
|
||||
- قائمة السماح لمرسلي المجموعات (وصول مرسِل القناة): `channels.irc.groupAllowFrom`
|
||||
- عناصر التحكم الخاصة بكل قناة (القناة + المرسِل + قواعد الإشارة): `channels.irc.groups["#channel"]`
|
||||
- تسمح `channels.irc.groupPolicy="open"` بالقنوات غير المكوّنة (**لكنها تظل مقيّدة بالإشارة افتراضيًا**)
|
||||
- قائمة السماح للرسائل المباشرة (وصول مرسل الرسائل المباشرة): `channels.irc.allowFrom`
|
||||
- قائمة السماح لمرسلي المجموعة (وصول مرسل القناة): `channels.irc.groupAllowFrom`
|
||||
- عناصر التحكم لكل قناة (القناة + المرسل + قواعد الإشارة): `channels.irc.groups["#channel"]`
|
||||
- يسمح `channels.irc.groupPolicy="open"` بالقنوات غير المضبوطة (**مع بقاءها مقيّدة بالإشارة افتراضيًا**)
|
||||
|
||||
يجب أن تستخدم إدخالات قائمة السماح هويات مرسلين ثابتة (`nick!user@host`).
|
||||
المطابقة باستخدام الاسم المختصر فقط قابلة للتغيير، ولا يتم تفعيلها إلا عندما تكون `channels.irc.dangerouslyAllowNameMatching: true`.
|
||||
ينبغي أن تستخدم إدخالات قائمة السماح هويات مرسلين ثابتة (`nick!user@host`).
|
||||
مطابقة الاسم المستعار فقط قابلة للتغير ولا تُفعّل إلا عند ضبط `channels.irc.dangerouslyAllowNameMatching: true`.
|
||||
|
||||
### مشكلة شائعة: `allowFrom` مخصّصة للرسائل الخاصة، وليست للقنوات
|
||||
### خطأ شائع: `allowFrom` مخصص للرسائل المباشرة، لا للقنوات
|
||||
|
||||
إذا رأيت سجلات مثل:
|
||||
|
||||
- `irc: drop group sender alice!ident@host (policy=allowlist)`
|
||||
|
||||
...فهذا يعني أن المرسِل غير مسموح له في رسائل **المجموعة/القناة**. أصلح ذلك بإحدى الطريقتين:
|
||||
…فهذا يعني أن المرسل لم يكن مسموحًا له في رسائل **المجموعة/القناة**. أصلح ذلك بأحد الخيارين:
|
||||
|
||||
- ضبط `channels.irc.groupAllowFrom` (عام لكل القنوات)، أو
|
||||
- ضبط قوائم سماح المرسلين لكل قناة على حدة: `channels.irc.groups["#channel"].allowFrom`
|
||||
- ضبط قوائم سماح المرسلين لكل قناة: `channels.irc.groups["#channel"].allowFrom`
|
||||
|
||||
مثال (السماح لأي شخص في `#tuirc-dev` بالتحدث إلى البوت):
|
||||
|
||||
@ -94,13 +95,13 @@ openclaw gateway run
|
||||
}
|
||||
```
|
||||
|
||||
## تفعيل الردود (الإشارات)
|
||||
## تشغيل الرد (الإشارات)
|
||||
|
||||
حتى إذا كانت القناة مسموحًا بها (عبر `groupPolicy` + `groups`) وكان المرسِل مسموحًا به، فإن OpenClaw يستخدم افتراضيًا **تقييد الإشارات** في سياقات المجموعات.
|
||||
حتى إذا كانت القناة مسموحًا بها (عبر `groupPolicy` + `groups`) وكان المرسل مسموحًا به، فإن OpenClaw يضبط افتراضيًا **التقييد بالإشارة** في سياقات المجموعات.
|
||||
|
||||
هذا يعني أنك قد ترى سجلات مثل `drop channel … (missing-mention)` ما لم تتضمن الرسالة نمط إشارة يطابق البوت.
|
||||
وهذا يعني أنك قد ترى سجلات مثل `drop channel … (missing-mention)` ما لم تتضمن الرسالة نمط إشارة يطابق البوت.
|
||||
|
||||
لجعل البوت يرد في قناة IRC **من دون الحاجة إلى إشارة**، عطّل تقييد الإشارات لتلك القناة:
|
||||
لجعل البوت يرد في قناة IRC **من دون الحاجة إلى إشارة**، عطّل التقييد بالإشارة لتلك القناة:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -118,7 +119,7 @@ openclaw gateway run
|
||||
}
|
||||
```
|
||||
|
||||
أو للسماح **لكل** قنوات IRC (من دون قائمة سماح لكل قناة) مع الرد أيضًا من دون إشارات:
|
||||
أو للسماح **بكل** قنوات IRC (من دون قائمة سماح لكل قناة) مع الاستمرار في الرد من دون إشارات:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -133,12 +134,12 @@ openclaw gateway run
|
||||
}
|
||||
```
|
||||
|
||||
## ملاحظة أمنية (مستحسنة للقنوات العامة)
|
||||
## ملاحظة أمنية (موصى بها للقنوات العامة)
|
||||
|
||||
إذا سمحت باستخدام `allowFrom: ["*"]` في قناة عامة، يمكن لأي شخص توجيه مطالبات إلى البوت.
|
||||
ولتقليل المخاطر، قيّد الأدوات لتلك القناة.
|
||||
إذا سمحت بـ `allowFrom: ["*"]` في قناة عامة، فيمكن لأي شخص مطالبة البوت.
|
||||
لتقليل المخاطر، قيّد الأدوات لتلك القناة.
|
||||
|
||||
### الأدوات نفسها للجميع في القناة
|
||||
### الأدوات نفسها لكل شخص في القناة
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -157,9 +158,9 @@ openclaw gateway run
|
||||
}
|
||||
```
|
||||
|
||||
### أدوات مختلفة لكل مرسِل (المالك يحصل على صلاحيات أكبر)
|
||||
### أدوات مختلفة لكل مرسل (يحصل المالك على صلاحيات أكبر)
|
||||
|
||||
استخدم `toolsBySender` لتطبيق سياسة أكثر صرامة على `"*"` وسياسة أقل صرامة على اسمك:
|
||||
استخدم `toolsBySender` لتطبيق سياسة أكثر صرامة على `"*"` وسياسة أخف على اسمك المستعار:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -185,16 +186,16 @@ openclaw gateway run
|
||||
|
||||
ملاحظات:
|
||||
|
||||
- يجب أن تستخدم مفاتيح `toolsBySender` البادئة `id:` لقيم هوية مرسل IRC:
|
||||
- ينبغي أن تستخدم مفاتيح `toolsBySender` البادئة `id:` لقيم هوية مرسل IRC:
|
||||
`id:eigen` أو `id:eigen!~eigen@174.127.248.171` لمطابقة أقوى.
|
||||
- لا تزال المفاتيح القديمة غير المسبوقة ببادئة مقبولة وتُطابَق على أنها `id:` فقط.
|
||||
- تفوز أول سياسة مرسل مطابقة؛ وتمثل `"*"` بديل wildcard.
|
||||
- لا تزال المفاتيح القديمة غير المسبوقة مقبولة وتُطابق كـ `id:` فقط.
|
||||
- أول سياسة مرسل مطابقة هي التي تُطبّق؛ `"*"` هي بديل البدل.
|
||||
|
||||
لمزيد من المعلومات حول الوصول إلى المجموعات مقابل تقييد الإشارات (وكيفية تفاعلهما)، راجع: [/channels/groups](/ar/channels/groups).
|
||||
لمزيد من المعلومات حول وصول المجموعات مقارنةً بالتقييد بالإشارة (وكيفية تفاعلهما)، راجع: [/channels/groups](/ar/channels/groups).
|
||||
|
||||
## NickServ
|
||||
|
||||
للتعريف باستخدام NickServ بعد الاتصال:
|
||||
للتعريف لدى NickServ بعد الاتصال:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -225,7 +226,7 @@ openclaw gateway run
|
||||
}
|
||||
```
|
||||
|
||||
عطّل `register` بعد تسجيل الاسم لتجنّب محاولات REGISTER المتكررة.
|
||||
عطّل `register` بعد تسجيل الاسم المستعار لتجنب محاولات REGISTER المتكررة.
|
||||
|
||||
## متغيرات البيئة
|
||||
|
||||
@ -242,18 +243,18 @@ openclaw gateway run
|
||||
- `IRC_NICKSERV_PASSWORD`
|
||||
- `IRC_NICKSERV_REGISTER_EMAIL`
|
||||
|
||||
لا يمكن ضبط `IRC_HOST` من ملف `.env` الخاص بمساحة العمل؛ راجع [ملفات `.env` الخاصة بمساحة العمل](/ar/gateway/security).
|
||||
لا يمكن ضبط `IRC_HOST` من ملف `.env` لمساحة العمل؛ راجع [ملفات `.env` لمساحة العمل](/ar/gateway/security).
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- إذا كان البوت يتصل لكنه لا يرد أبدًا في القنوات، فتحقق من `channels.irc.groups` **وكذلك** مما إذا كان تقييد الإشارات يسقط الرسائل (`missing-mention`). إذا كنت تريد أن يرد من دون تنبيهات، فاضبط `requireMention:false` للقناة.
|
||||
- إذا اتصل البوت لكنه لا يرد أبدًا في القنوات، فتحقق من `channels.irc.groups` **وكذلك** مما إذا كان التقييد بالإشارة يُسقط الرسائل (`missing-mention`). إذا أردته أن يرد من دون إشارات تنبيه، فاضبط `requireMention:false` للقناة.
|
||||
- إذا فشل تسجيل الدخول، فتحقق من توفر الاسم المستعار وكلمة مرور الخادم.
|
||||
- إذا فشل TLS على شبكة مخصصة، فتحقق من إعدادات المضيف/المنفذ والشهادة.
|
||||
- إذا فشل TLS على شبكة مخصصة، فتحقق من المضيف/المنفذ وإعداد الشهادة.
|
||||
|
||||
## ذو صلة
|
||||
|
||||
- [نظرة عامة على القنوات](/ar/channels) — جميع القنوات المدعومة
|
||||
- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل الخاصة وتدفق الاقتران
|
||||
- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وتقييد الإشارات
|
||||
- [نظرة عامة على القنوات](/ar/channels) — كل القنوات المدعومة
|
||||
- [الإقران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الإقران
|
||||
- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعات والتقييد بالإشارة
|
||||
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل
|
||||
- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية
|
||||
|
||||
@ -1,43 +1,43 @@
|
||||
---
|
||||
read_when:
|
||||
- إعداد التحكم في الوصول إلى الرسائل المباشرة
|
||||
- إقران عقدة iOS/Android جديدة
|
||||
- إقران Node جديد على iOS/Android
|
||||
- مراجعة الوضع الأمني لـ OpenClaw
|
||||
summary: 'نظرة عامة على الاقتران: وافق على من يمكنه مراسلتك مباشرة + العقد التي يمكنها الانضمام'
|
||||
summary: 'نظرة عامة على الاقتران: وافق على من يمكنه مراسلتك مباشرة + العُقد التي يمكنها الانضمام'
|
||||
title: الاقتران
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T07:18:44Z"
|
||||
generated_at: "2026-05-04T02:22:04Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: bb68d87c0e1dfe7c9a6a6d9415f4c63625755fb43a2e22a1d1374ff0a63e49c4
|
||||
source_hash: 4fb27840f7c9ef55e7270cc29f813e6db90b240aa2180f30952eb9485f0f8874
|
||||
source_path: channels/pairing.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
«الإقران» هو خطوة الموافقة الصريحة على الوصول في OpenClaw.
|
||||
"الإقران" هو خطوة الموافقة الصريحة على الوصول في OpenClaw.
|
||||
يُستخدم في موضعين:
|
||||
|
||||
1. **إقران الرسائل الخاصة** (من يُسمح له بالتحدث إلى البوت)
|
||||
2. **إقران Node** (ما الأجهزة/العُقد التي يُسمح لها بالانضمام إلى شبكة Gateway)
|
||||
1. **إقران الرسائل المباشرة** (من يُسمح له بالتحدث إلى البوت)
|
||||
2. **إقران Node** (أي الأجهزة/العُقد يُسمح لها بالانضمام إلى شبكة Gateway)
|
||||
|
||||
سياق الأمان: [الأمان](/ar/gateway/security)
|
||||
|
||||
## 1) إقران الرسائل الخاصة (وصول الدردشة الواردة)
|
||||
## 1) إقران الرسائل المباشرة (الوصول إلى الدردشة الواردة)
|
||||
|
||||
عند تكوين قناة بسياسة رسائل خاصة `pairing`، يحصل المرسلون غير المعروفين على رمز قصير ولا تتم **معالجة** رسالتهم حتى توافق عليها.
|
||||
عند تكوين قناة بسياسة رسائل مباشرة `pairing`، يحصل المرسلون غير المعروفين على رمز قصير و**لا تتم معالجة** رسالتهم حتى توافق عليها.
|
||||
|
||||
سياسات الرسائل الخاصة الافتراضية موثقة في: [الأمان](/ar/gateway/security)
|
||||
سياسات الرسائل المباشرة الافتراضية موثقة في: [الأمان](/ar/gateway/security)
|
||||
|
||||
`dmPolicy: "open"` تكون عامة فقط عندما تتضمن قائمة السماح الفعلية للرسائل الخاصة `"*"`.
|
||||
يتطلب الإعداد والتحقق وجود حرف البدل هذا لتكوينات الفتح العام. إذا كانت الحالة الموجودة
|
||||
تحتوي على `open` مع إدخالات `allowFrom` محددة، فسيظل وقت التشغيل يقبل
|
||||
هؤلاء المرسلين فقط، ولا توسّع موافقات مخزن الإقران وصول `open`.
|
||||
`dmPolicy: "open"` تكون عامة فقط عندما تتضمن قائمة السماح الفعلية للرسائل المباشرة `"*"`.
|
||||
يتطلب الإعداد والتحقق هذا الرمز الشامل لتكوينات الفتح العام. إذا كانت الحالة الحالية
|
||||
تحتوي على `open` مع إدخالات `allowFrom` محددة، فسيظل وقت التشغيل يسمح
|
||||
لهؤلاء المرسلين فقط، ولا توسّع موافقات مخزن الإقران وصول `open`.
|
||||
|
||||
رموز الإقران:
|
||||
|
||||
- 8 أحرف، كبيرة، بلا أحرف ملتبسة (`0O1I`).
|
||||
- **تنتهي صلاحيتها بعد ساعة واحدة**. لا يرسل البوت رسالة الإقران إلا عند إنشاء طلب جديد (تقريبًا مرة واحدة في الساعة لكل مرسل).
|
||||
- تُحد طلبات إقران الرسائل الخاصة المعلقة إلى **3 لكل قناة** افتراضيًا؛ يتم تجاهل الطلبات الإضافية حتى تنتهي صلاحية أحدها أو تتم الموافقة عليه.
|
||||
- 8 أحرف، أحرف كبيرة، من دون أحرف ملتبسة (`0O1I`).
|
||||
- **تنتهي صلاحيتها بعد ساعة واحدة**. يرسل البوت رسالة الإقران فقط عند إنشاء طلب جديد (تقريبًا مرة واحدة في الساعة لكل مرسل).
|
||||
- طلبات إقران الرسائل المباشرة المعلقة محدودة افتراضيًا بـ **3 لكل قناة**؛ يتم تجاهل الطلبات الإضافية حتى تنتهي صلاحية أحدها أو تتم الموافقة عليه.
|
||||
|
||||
### الموافقة على مرسل
|
||||
|
||||
@ -46,20 +46,21 @@ openclaw pairing list telegram
|
||||
openclaw pairing approve telegram <CODE>
|
||||
```
|
||||
|
||||
إذا لم يكن مالك الأوامر مكوّنًا بعد، فإن الموافقة على رمز إقران الرسائل الخاصة تهيئ أيضًا
|
||||
`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:<name>` من قوائم السماح للقنوات:
|
||||
تستخدم المجموعات الثابتة `type: "message.senders"` وتتم الإشارة إليها باستخدام
|
||||
`accessGroup:<name>` من قوائم السماح الخاصة بالقنوات:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -82,63 +83,63 @@ openclaw pairing approve telegram <CODE>
|
||||
|
||||
مجموعات الوصول موثقة بالتفصيل هنا: [مجموعات الوصول](/ar/channels/access-groups)
|
||||
|
||||
### مكان وجود الحالة
|
||||
### مكان تخزين الحالة
|
||||
|
||||
مخزنة ضمن `~/.openclaw/credentials/`:
|
||||
|
||||
- الطلبات المعلقة: `<channel>-pairing.json`
|
||||
- مخزن قائمة السماح الموافق عليها:
|
||||
- مخزن قائمة السماح المعتمدة:
|
||||
- الحساب الافتراضي: `<channel>-allowFrom.json`
|
||||
- الحساب غير الافتراضي: `<channel>-<accountId>-allowFrom.json`
|
||||
|
||||
سلوك تحديد نطاق الحساب:
|
||||
سلوك نطاق الحساب:
|
||||
|
||||
- تقرأ الحسابات غير الافتراضية ملف قائمة السماح المحدد النطاق الخاص بها وتكتب إليه فقط.
|
||||
- يستخدم الحساب الافتراضي ملف قائمة السماح غير المحدد النطاق على مستوى القناة.
|
||||
- الحسابات غير الافتراضية تقرأ/تكتب ملف قائمة السماح المحدد النطاق الخاص بها فقط.
|
||||
- يستخدم الحساب الافتراضي ملف قائمة السماح غير محدد النطاق الخاص بالقناة.
|
||||
|
||||
عامل هذه الملفات على أنها حساسة (فهي تتحكم في الوصول إلى مساعدك).
|
||||
تعامل معها كبيانات حساسة (فهي تتحكم بالوصول إلى مساعدك).
|
||||
|
||||
<Note>
|
||||
مخزن قائمة السماح بالإقران مخصص لوصول الرسائل الخاصة. تخويل المجموعات منفصل.
|
||||
لا تؤدي الموافقة على رمز إقران الرسائل الخاصة تلقائيًا إلى السماح لذلك المرسل بتشغيل أوامر المجموعات
|
||||
أو التحكم في البوت داخل المجموعات. تمهيد المالك الأول هو حالة تكوين منفصلة
|
||||
في `commands.ownerAllowFrom`، ولا يزال تسليم دردشة المجموعات يتبع
|
||||
قوائم السماح للمجموعات الخاصة بالقناة (على سبيل المثال `groupAllowFrom` أو `groups` أو التجاوزات لكل مجموعة
|
||||
مخزن قائمة السماح الخاصة بالإقران مخصص لوصول الرسائل المباشرة. تفويض المجموعات منفصل.
|
||||
لا تسمح الموافقة على رمز إقران الرسائل المباشرة تلقائيًا لذلك المرسل بتشغيل أوامر المجموعة
|
||||
أو التحكم في البوت داخل المجموعات. التأسيس الأول للمالك هو حالة تكوين منفصلة
|
||||
في `commands.ownerAllowFrom`، ولا يزال تسليم دردشة المجموعة يتبع
|
||||
قوائم السماح للمجموعات في القناة (مثل `groupAllowFrom` أو `groups` أو التجاوزات لكل مجموعة
|
||||
أو لكل موضوع بحسب القناة).
|
||||
</Note>
|
||||
|
||||
## 2) إقران جهاز Node (iOS/Android/macOS/العُقد بلا واجهة)
|
||||
## 2) إقران أجهزة Node (iOS/Android/macOS/العُقد بلا واجهة)
|
||||
|
||||
تتصل Nodes بـ Gateway بصفتها **أجهزة** مع `role: node`. ينشئ Gateway
|
||||
تتصل العُقد بـ Gateway كـ **أجهزة** مع `role: node`. ينشئ Gateway
|
||||
طلب إقران جهاز يجب الموافقة عليه.
|
||||
|
||||
### الإقران عبر Telegram (موصى به لـ iOS)
|
||||
|
||||
إذا كنت تستخدم Plugin `device-pair`، يمكنك إجراء إقران الجهاز لأول مرة بالكامل من Telegram:
|
||||
|
||||
1. في Telegram، راسل البوت: `/pair`
|
||||
2. يرد البوت برسالتين: رسالة تعليمات ورسالة **رمز إعداد** منفصلة (يسهل نسخها/لصقها في Telegram).
|
||||
1. في Telegram، أرسل إلى البوت: `/pair`
|
||||
2. يرد البوت برسالتين: رسالة تعليمات ورسالة **رمز إعداد** منفصلة (سهلة النسخ/اللصق في Telegram).
|
||||
3. على هاتفك، افتح تطبيق OpenClaw على iOS ← الإعدادات ← Gateway.
|
||||
4. الصق رمز الإعداد واتصل.
|
||||
5. مرة أخرى في Telegram: `/pair pending` (راجع معرّفات الطلبات والدور والنطاقات)، ثم وافق.
|
||||
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`
|
||||
- فحوص النطاق في التمهيد مسبوقة بالدور، وليست مجموعة نطاقات مسطحة واحدة:
|
||||
إدخالات نطاق المشغل لا تلبي إلا طلبات المشغل، ويجب على الأدوار غير المشغلة
|
||||
أن تظل تطلب النطاقات تحت بادئة دورها الخاصة
|
||||
- يظل تدوير/إبطال الرموز لاحقًا محدودًا بكل من عقد الدور الموافق عليه للجهاز
|
||||
ونطاقات المشغل لجلسة المستدعي
|
||||
- فحوصات نطاق التأسيس مسبوقة بالدور، وليست مجموعة نطاقات مسطحة واحدة:
|
||||
إدخالات نطاق المشغّل لا تفي إلا بطلبات المشغّل، ويجب على الأدوار غير المشغّلة
|
||||
أن تظل تطلب النطاقات ضمن بادئة دورها الخاصة
|
||||
- تظل عمليات تدوير/إلغاء الرموز اللاحقة محدودة بكل من عقد الدور الموافق عليه للجهاز
|
||||
ونطاقات المشغّل لجلسة المستدعي
|
||||
|
||||
عامل رمز الإعداد ككلمة مرور أثناء صلاحيته.
|
||||
تعامل مع رمز الإعداد ككلمة مرور أثناء صلاحيته.
|
||||
|
||||
### الموافقة على جهاز Node
|
||||
|
||||
@ -148,17 +149,25 @@ openclaw devices approve <requestId>
|
||||
openclaw devices reject <requestId>
|
||||
```
|
||||
|
||||
عند رفض موافقة صريحة لأن جلسة الجهاز المقترن التي توافق
|
||||
فُتحت بنطاق مخصص للإقران فقط، يعيد CLI محاولة الطلب نفسه باستخدام
|
||||
`operator.admin`. يتيح ذلك لجهاز مقترن قائم قادر على الإدارة استرداد إقران جديد
|
||||
لـ Control UI/المتصفح من دون تعديل `devices/paired.json` يدويًا. لا يزال
|
||||
Gateway يتحقق من الاتصال المعاد؛ الرموز التي لا يمكنها المصادقة
|
||||
باستخدام `operator.admin` تظل محظورة.
|
||||
|
||||
إذا أعاد الجهاز نفسه المحاولة بتفاصيل مصادقة مختلفة (على سبيل المثال دور/نطاقات/مفتاح عام مختلف)،
|
||||
فسيتم استبدال الطلب المعلق السابق وإنشاء `requestId` جديد.
|
||||
يتم استبدال الطلب المعلق السابق ويتم إنشاء
|
||||
`requestId` جديد.
|
||||
|
||||
<Note>
|
||||
لا يحصل الجهاز المقترن مسبقًا على وصول أوسع بصمت. إذا أعاد الاتصال طالبًا نطاقات أكثر أو دورًا أوسع، يحتفظ OpenClaw بالموافقة الحالية كما هي وينشئ طلب ترقية معلقًا جديدًا. استخدم `openclaw devices list` لمقارنة الوصول الموافق عليه حاليًا مع الوصول المطلوب حديثًا قبل الموافقة.
|
||||
لا يحصل الجهاز المقترن بالفعل على وصول أوسع بصمت. إذا أعاد الاتصال طالبًا نطاقات أكثر أو دورًا أوسع، يبقي OpenClaw الموافقة الحالية كما هي وينشئ طلب ترقية معلقًا جديدًا. استخدم `openclaw devices list` لمقارنة الوصول الموافق عليه حاليًا مع الوصول المطلوب حديثًا قبل الموافقة.
|
||||
</Note>
|
||||
|
||||
### موافقة تلقائية اختيارية لـ Node حسب CIDR موثوق
|
||||
### الموافقة التلقائية الاختيارية لعُقد CIDR موثوقة
|
||||
|
||||
يبقى إقران الأجهزة يدويًا افتراضيًا. لشبكات Node المحكومة بإحكام،
|
||||
يمكنك الاشتراك في الموافقة التلقائية على Node لأول مرة باستخدام CIDR صريحة أو عناوين IP دقيقة:
|
||||
يبقى إقران الأجهزة يدويًا افتراضيًا. بالنسبة إلى شبكات العُقد المضبوطة بإحكام،
|
||||
يمكنك الاشتراك في الموافقة التلقائية لأول مرة على Node باستخدام CIDR صريحة أو عناوين IP مطابقة:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -172,9 +181,9 @@ openclaw devices reject <requestId>
|
||||
}
|
||||
```
|
||||
|
||||
ينطبق هذا فقط على طلبات إقران `role: node` الجديدة من دون
|
||||
نطاقات مطلوبة. لا يزال عملاء المشغل والمتصفح وواجهة التحكم وWebChat يتطلبون موافقة يدوية.
|
||||
ولا تزال تغييرات الدور والنطاق والبيانات الوصفية والمفتاح العام تتطلب موافقة يدوية.
|
||||
ينطبق هذا فقط على طلبات إقران `role: node` الجديدة من دون نطاقات مطلوبة.
|
||||
لا يزال عملاء المشغّل والمتصفح وControl UI وWebChat يتطلبون موافقة يدوية.
|
||||
كما لا تزال تغييرات الدور والنطاق والبيانات الوصفية والمفتاح العام تتطلب موافقة يدوية.
|
||||
|
||||
### تخزين حالة إقران Node
|
||||
|
||||
@ -185,16 +194,16 @@ openclaw devices reject <requestId>
|
||||
|
||||
### ملاحظات
|
||||
|
||||
- واجهة API القديمة `node.pair.*` (CLI: `openclaw nodes pending|approve|reject|remove|rename`) هي
|
||||
مخزن إقران منفصل مملوك لـ Gateway. لا تزال Nodes عبر WS تتطلب إقران الأجهزة.
|
||||
- سجل الإقران هو مصدر الحقيقة الدائم للأدوار الموافق عليها. تبقى
|
||||
رموز الأجهزة النشطة محدودة بمجموعة الأدوار الموافق عليها؛ ولا ينشئ إدخال رمز شارد
|
||||
- واجهة API القديمة `node.pair.*` (CLI: `openclaw nodes pending|approve|reject|remove|rename`) هي
|
||||
مخزن إقران منفصل مملوك لـ Gateway. لا تزال عُقد WS تتطلب إقران الأجهزة.
|
||||
- سجل الإقران هو مصدر الحقيقة الدائم للأدوار الموافق عليها. تظل
|
||||
رموز الأجهزة النشطة محدودة بمجموعة الأدوار الموافق عليها تلك؛ ولا ينشئ إدخال رمز عارض
|
||||
خارج الأدوار الموافق عليها وصولًا جديدًا.
|
||||
|
||||
## مستندات ذات صلة
|
||||
|
||||
- نموذج الأمان + حقن المطالبات: [الأمان](/ar/gateway/security)
|
||||
- التحديث بأمان (تشغيل الطبيب): [التحديث](/ar/install/updating)
|
||||
- التحديث بأمان (تشغيل doctor): [التحديث](/ar/install/updating)
|
||||
- تكوينات القنوات:
|
||||
- Telegram: [Telegram](/ar/channels/telegram)
|
||||
- WhatsApp: [WhatsApp](/ar/channels/whatsapp)
|
||||
|
||||
@ -2,24 +2,24 @@
|
||||
read_when:
|
||||
- تريد ربط OpenClaw بـ QQ
|
||||
- تحتاج إلى إعداد بيانات اعتماد QQ Bot
|
||||
- تريد دعم QQ Bot للدردشات الجماعية أو الخاصة
|
||||
summary: إعداد بوت QQ وتهيئته واستخدامه
|
||||
title: روبوت QQ
|
||||
- تريد دعم روبوت QQ لدردشة المجموعات أو الدردشة الخاصة
|
||||
summary: إعداد QQ Bot وتهيئته واستخدامه
|
||||
title: بوت QQ
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T21:27:34Z"
|
||||
generated_at: "2026-05-04T02:22:04Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 471c24110bf0ab8896d22f5bb5932ac4e03ff5169560c99ba6b9d1ca4025d9a8
|
||||
source_hash: e17fa0da2f6939ed28cac5f13b3e37e6c63b87a10250ff213f7a86685a6141d6
|
||||
source_path: channels/qqbot.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
يربط QQ Bot بـ OpenClaw عبر QQ Bot API الرسمي (WebSocket gateway). يدعم الـ
|
||||
Plugin المحادثات الخاصة C2C، ورسائل @ في المجموعات، ورسائل قنوات guild مع
|
||||
QQ Bot يتصل بـ OpenClaw عبر واجهة QQ Bot API الرسمية (Gateway WebSocket). يدعم
|
||||
Plugin الدردشة الخاصة C2C، و@messages في المجموعات، ورسائل قنوات النقابات مع
|
||||
وسائط غنية (صور، صوت، فيديو، ملفات).
|
||||
|
||||
الحالة: Plugin قابل للتنزيل. الرسائل المباشرة، ومحادثات المجموعات، وقنوات guild،
|
||||
والوسائط مدعومة. التفاعلات وthreads غير مدعومة.
|
||||
الحالة: Plugin قابل للتنزيل. الرسائل المباشرة، ودردشات المجموعات، وقنوات النقابات،
|
||||
والوسائط مدعومة. التفاعلات وسلاسل النقاش غير مدعومة.
|
||||
|
||||
## التثبيت
|
||||
|
||||
@ -36,8 +36,8 @@ openclaw plugins install @openclaw/qqbot
|
||||
2. انقر على **Create Bot** لإنشاء بوت QQ جديد.
|
||||
3. ابحث عن **AppID** و**AppSecret** في صفحة إعدادات البوت وانسخهما.
|
||||
|
||||
> لا يُخزّن AppSecret كنص عادي — إذا غادرت الصفحة دون حفظه،
|
||||
> فسيتعين عليك إنشاء واحد جديد.
|
||||
> لا يُخزَّن AppSecret بنص صريح — إذا غادرت الصفحة دون حفظه،
|
||||
> فسيتعين عليك إعادة إنشاء واحد جديد.
|
||||
|
||||
4. أضف القناة:
|
||||
|
||||
@ -45,18 +45,18 @@ openclaw plugins install @openclaw/qqbot
|
||||
openclaw channels add --channel qqbot --token "AppID:AppSecret"
|
||||
```
|
||||
|
||||
5. أعد تشغيل الـ Gateway.
|
||||
5. أعد تشغيل Gateway.
|
||||
|
||||
مسارات الإعداد التفاعلية:
|
||||
مسارات الإعداد التفاعلي:
|
||||
|
||||
```bash
|
||||
openclaw channels add
|
||||
openclaw configure --section channels
|
||||
```
|
||||
|
||||
## التهيئة
|
||||
## التكوين
|
||||
|
||||
الحد الأدنى من التهيئة:
|
||||
أدنى تكوين:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -89,7 +89,7 @@ AppSecret مدعوم بملف:
|
||||
}
|
||||
```
|
||||
|
||||
AppSecret عبر SecretRef من البيئة:
|
||||
AppSecret عبر Env SecretRef:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -106,10 +106,10 @@ AppSecret عبر SecretRef من البيئة:
|
||||
ملاحظات:
|
||||
|
||||
- ينطبق الرجوع إلى البيئة على حساب QQ Bot الافتراضي فقط.
|
||||
- يوفّر `openclaw channels add --channel qqbot --token-file ...`
|
||||
AppSecret فقط؛ يجب أن يكون AppID معيّناً مسبقاً في التهيئة أو `QQBOT_APP_ID`.
|
||||
- يقبل `clientSecret` أيضاً إدخال SecretRef، وليس سلسلة نصية عادية فقط.
|
||||
- سلاسل علامات `secretref:/...` القديمة ليست قيماً صالحة لـ `clientSecret`؛
|
||||
- يوفر `openclaw channels add --channel qqbot --token-file ...`
|
||||
AppSecret فقط؛ يجب أن يكون AppID مضبوطًا مسبقًا في التكوين أو `QQBOT_APP_ID`.
|
||||
- يقبل `clientSecret` أيضًا إدخال SecretRef، وليس سلسلة نصية صريحة فقط.
|
||||
- سلاسل العلامات القديمة `secretref:/...` ليست قيم `clientSecret` صالحة؛
|
||||
استخدم كائنات SecretRef مهيكلة مثل المثال أعلاه.
|
||||
|
||||
### إعداد حسابات متعددة
|
||||
@ -135,19 +135,19 @@ AppSecret عبر SecretRef من البيئة:
|
||||
}
|
||||
```
|
||||
|
||||
يطلق كل حساب اتصال WebSocket خاصاً به ويحافظ على ذاكرة تخزين مؤقت مستقلة
|
||||
يطلق كل حساب اتصال WebSocket خاصًا به ويحافظ على ذاكرة تخزين مؤقت مستقلة
|
||||
للرمز المميز (معزولة حسب `appId`).
|
||||
|
||||
أضف بوتاً ثانياً عبر CLI:
|
||||
أضف بوتًا ثانيًا عبر CLI:
|
||||
|
||||
```bash
|
||||
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"
|
||||
```
|
||||
|
||||
### محادثات المجموعات
|
||||
### دردشات المجموعات
|
||||
|
||||
يستخدم دعم محادثات مجموعات QQ Bot معرّفات QQ group OpenIDs، وليس أسماء العرض. أضف البوت
|
||||
إلى مجموعة، ثم اذكره أو هيّئ المجموعة للعمل دون ذكر.
|
||||
يستخدم دعم دردشة المجموعات في QQ Bot معرّفات OpenID لمجموعات QQ، وليس أسماء العرض. أضف البوت
|
||||
إلى مجموعة، ثم اذكره أو اضبط المجموعة للتشغيل دون ذكر.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -174,30 +174,30 @@ openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-o
|
||||
}
|
||||
```
|
||||
|
||||
يضبط `groups["*"]` الإعدادات الافتراضية لكل مجموعة، ويتجاوز إدخال
|
||||
`groups.GROUP_OPENID` المحدد تلك الإعدادات الافتراضية لمجموعة واحدة. تتضمن
|
||||
إعدادات المجموعة:
|
||||
يضبط `groups["*"]` القيم الافتراضية لكل مجموعة، ويتجاوز إدخال
|
||||
`groups.GROUP_OPENID` محدد هذه القيم الافتراضية لمجموعة واحدة. تشمل إعدادات
|
||||
المجموعة:
|
||||
|
||||
- `requireMention`: يتطلب @mention قبل أن يرد البوت. الافتراضي: `true`.
|
||||
- `ignoreOtherMentions`: تجاهل الرسائل التي تذكر شخصاً آخر لكن لا تذكر البوت.
|
||||
- `historyLimit`: الاحتفاظ برسائل المجموعة الحديثة غير المحتوية على ذكر كسياق للدور التالي الذي يتضمن ذكراً. اضبطه على `0` للتعطيل.
|
||||
- `ignoreOtherMentions`: يتجاهل الرسائل التي تذكر شخصًا آخر وليس البوت.
|
||||
- `historyLimit`: يحتفظ برسائل المجموعة الحديثة غير المتضمنة لذكر كسياق للدور المذكور التالي. اضبط `0` للتعطيل.
|
||||
- `toolPolicy`: `full` أو `restricted` أو `none` للأدوات ضمن نطاق المجموعة.
|
||||
- `name`: تسمية ودية تُستخدم في السجلات وسياق المجموعة.
|
||||
- `prompt`: موجه سلوك خاص بكل مجموعة يُلحق بسياق الوكيل.
|
||||
- `name`: تسمية سهلة القراءة تُستخدم في السجلات وسياق المجموعة.
|
||||
- `prompt`: موجّه سلوك لكل مجموعة يُلحَق بسياق الوكيل.
|
||||
|
||||
أوضاع التنشيط هي `mention` و`always`. يتم ربط `requireMention: true` بـ
|
||||
`mention`؛ ويتم ربط `requireMention: false` بـ `always`. يتفوق تجاوز التنشيط
|
||||
على مستوى الجلسة، عند وجوده، على التهيئة.
|
||||
أوضاع التفعيل هي `mention` و`always`. يقابل `requireMention: true`
|
||||
`mention`؛ ويقابل `requireMention: false` `always`. يتقدم تجاوز التفعيل
|
||||
على مستوى الجلسة، عند وجوده، على التكوين.
|
||||
|
||||
قائمة الانتظار الواردة تكون لكل نظير. تحصل نظراء المجموعات على حد أكبر لقائمة الانتظار، وتحافظ على رسائل البشر
|
||||
قبل المحادثات الصادرة من البوت عند الامتلاء، وتدمج دفعات رسائل المجموعة العادية
|
||||
في دور واحد منسوب. تظل أوامر الشرطة المائلة تُنفذ واحداً تلو الآخر.
|
||||
قائمة الانتظار الواردة تكون لكل نظير. تحصل نظراء المجموعات على حد قائمة انتظار أكبر، وتُبقي رسائل البشر
|
||||
قبل أحاديث البوت عند الامتلاء، وتدمج دفعات رسائل المجموعة العادية
|
||||
في دور واحد منسوب. تستمر أوامر Slash في العمل واحدًا تلو الآخر.
|
||||
|
||||
### الصوت (STT / TTS)
|
||||
|
||||
يدعم STT وTTS تهيئة بمستويين مع رجوع حسب الأولوية:
|
||||
يدعم STT وTTS تكوينًا من مستويين مع رجوع حسب الأولوية:
|
||||
|
||||
| الإعداد | خاص بالـ Plugin | رجوع Framework |
|
||||
| الإعداد | خاص بـ Plugin | رجوع إطار العمل |
|
||||
| ------- | -------------------------------------------------------- | ----------------------------- |
|
||||
| STT | `channels.qqbot.stt` | `tools.media.audio.models[0]` |
|
||||
| TTS | `channels.qqbot.tts`, `channels.qqbot.accounts.<id>.tts` | `messages.tts` |
|
||||
@ -216,7 +216,7 @@ openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-o
|
||||
voice: "your-voice",
|
||||
},
|
||||
accounts: {
|
||||
qq-main: {
|
||||
"qq-main": {
|
||||
tts: {
|
||||
providers: {
|
||||
openai: { voice: "shimmer" },
|
||||
@ -231,84 +231,84 @@ openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-o
|
||||
|
||||
اضبط `enabled: false` على أي منهما للتعطيل.
|
||||
تستخدم تجاوزات TTS على مستوى الحساب الشكل نفسه مثل `messages.tts` وتُدمج بعمق
|
||||
فوق تهيئة TTS للقناة/العالمية.
|
||||
فوق تكوين TTS للقناة/العام.
|
||||
|
||||
تُعرض مرفقات صوت QQ الواردة للوكلاء كبيانات وصفية لوسائط صوتية مع
|
||||
إبقاء ملفات الصوت الخام خارج `MediaPaths` العامة. تؤدي ردود النص العادي
|
||||
`[[audio_as_voice]]` إلى توليف TTS وإرسال رسالة صوت QQ أصلية عند تهيئة TTS.
|
||||
تُعرَض مرفقات الصوت الواردة من QQ للوكلاء كبيانات تعريف وسائط صوتية مع
|
||||
إبقاء ملفات الصوت الخام خارج `MediaPaths` العامة. تؤدي الردود النصية الصريحة
|
||||
`[[audio_as_voice]]` إلى إنشاء TTS وإرسال رسالة صوت QQ أصلية عند تكوين TTS.
|
||||
|
||||
يمكن أيضاً ضبط سلوك رفع/تحويل ترميز الصوت الصادر باستخدام
|
||||
يمكن أيضًا ضبط سلوك رفع/تحويل ترميز الصوت الصادر باستخدام
|
||||
`channels.qqbot.audioFormatPolicy`:
|
||||
|
||||
- `sttDirectFormats`
|
||||
- `uploadDirectFormats`
|
||||
- `transcodeEnabled`
|
||||
|
||||
## التنسيقات المستهدفة
|
||||
## تنسيقات الهدف
|
||||
|
||||
| التنسيق | الوصف |
|
||||
| -------------------------- | ------------------ |
|
||||
| `qqbot:c2c:OPENID` | محادثة خاصة (C2C) |
|
||||
| `qqbot:group:GROUP_OPENID` | محادثة مجموعة |
|
||||
| `qqbot:channel:CHANNEL_ID` | قناة guild |
|
||||
| ------------------------- | ------------------ |
|
||||
| `qqbot:c2c:OPENID` | دردشة خاصة (C2C) |
|
||||
| `qqbot:group:GROUP_OPENID` | دردشة مجموعة |
|
||||
| `qqbot:channel:CHANNEL_ID` | قناة نقابة |
|
||||
|
||||
> لكل بوت مجموعته الخاصة من OpenIDs للمستخدمين. لا يمكن استخدام OpenID مستلم بواسطة Bot A **لإرسال**
|
||||
> الرسائل عبر Bot B.
|
||||
> لكل بوت مجموعته الخاصة من معرّفات OpenID للمستخدمين. لا يمكن استخدام OpenID
|
||||
> مستلم بواسطة البوت A **لإرسال** رسائل عبر البوت B.
|
||||
|
||||
## أوامر الشرطة المائلة
|
||||
## أوامر Slash
|
||||
|
||||
الأوامر المضمنة التي يتم اعتراضها قبل قائمة انتظار الذكاء الاصطناعي:
|
||||
الأوامر المدمجة التي تُعترض قبل قائمة انتظار الذكاء الاصطناعي:
|
||||
|
||||
| الأمر | الوصف |
|
||||
| -------------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| `/bot-ping` | اختبار زمن الاستجابة |
|
||||
| `/bot-version` | عرض إصدار OpenClaw framework |
|
||||
| `/bot-help` | سرد جميع الأوامر |
|
||||
| `/bot-me` | عرض معرّف مستخدم QQ الخاص بالمرسل (openid) لإعداد `allowFrom`/`groupAllowFrom` |
|
||||
| `/bot-upgrade` | عرض رابط دليل ترقية QQBot |
|
||||
| `/bot-logs` | تصدير سجلات gateway الحديثة كملف |
|
||||
| الأمر | الوصف |
|
||||
| -------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| `/bot-ping` | اختبار زمن الاستجابة |
|
||||
| `/bot-version` | عرض إصدار إطار عمل OpenClaw |
|
||||
| `/bot-help` | سرد كل الأوامر |
|
||||
| `/bot-me` | عرض معرّف مستخدم QQ الخاص بالمرسل (openid) لإعداد `allowFrom`/`groupAllowFrom` |
|
||||
| `/bot-upgrade` | عرض رابط دليل ترقية QQBot |
|
||||
| `/bot-logs` | تصدير سجلات Gateway الحديثة كملف |
|
||||
| `/bot-approve` | الموافقة على إجراء QQ Bot معلّق (على سبيل المثال، تأكيد رفع C2C أو مجموعة) عبر التدفق الأصلي. |
|
||||
|
||||
ألحق `?` بأي أمر للحصول على مساعدة الاستخدام (على سبيل المثال `/bot-upgrade ?`).
|
||||
|
||||
أوامر الإدارة (`/bot-me`, `/bot-upgrade`, `/bot-logs`, `/bot-clear-storage`, `/bot-streaming`, `/bot-approve`) مخصصة للرسائل المباشرة فقط وتتطلب وجود openid الخاص بالمرسل في قائمة `allowFrom` صريحة لا تحتوي على wildcard. يسمح wildcard `allowFrom: ["*"]` بالمحادثة لكنه لا يمنح وصولاً إلى أوامر الإدارة. تطابق رسائل المجموعات `groupAllowFrom` أولاً ثم ترجع إلى `allowFrom`. يؤدي تشغيل أمر إدارة في مجموعة إلى إرجاع تلميح بدلاً من إسقاطه بصمت.
|
||||
أوامر الإدارة (`/bot-me`, `/bot-upgrade`, `/bot-logs`, `/bot-clear-storage`, `/bot-streaming`, `/bot-approve`) مخصصة للرسائل المباشرة فقط وتتطلب أن يكون openid الخاص بالمرسل في قائمة `allowFrom` صريحة غير شاملة. تسمح صيغة شاملة `allowFrom: ["*"]` بالدردشة لكنها لا تمنح صلاحية الوصول إلى أوامر الإدارة. تُطابق رسائل المجموعات `groupAllowFrom` أولًا ثم تعود إلى `allowFrom`. يؤدي تشغيل أمر إدارة في مجموعة إلى إرجاع تلميح بدل إسقاطه بصمت.
|
||||
|
||||
## بنية المحرك
|
||||
|
||||
يأتي QQ Bot كمحرك مكتفٍ ذاتياً داخل الـ Plugin:
|
||||
يأتي QQ Bot كمحرك مستقل داخل Plugin:
|
||||
|
||||
- يمتلك كل حساب مجموعة موارد معزولة (اتصال WebSocket، عميل API، ذاكرة تخزين مؤقت للرمز المميز، جذر تخزين الوسائط) مرتبطة بـ `appId`. لا تشترك الحسابات أبداً في الحالة الواردة/الصادرة.
|
||||
- يوسم المسجل متعدد الحسابات أسطر السجل بالحساب المالك حتى تبقى التشخيصات قابلة للفصل عند تشغيل عدة بوتات ضمن gateway واحد.
|
||||
- تشترك مسارات الوارد والصادر وجسر gateway في جذر حمولة وسائط واحد ضمن `~/.openclaw/media`، بحيث تهبط عمليات الرفع والتنزيل وذاكرات التخزين المؤقت لتحويل الترميز ضمن دليل محمي واحد بدلاً من شجرة لكل نظام فرعي.
|
||||
- يمر تسليم الوسائط الغنية عبر مسار `sendMedia` واحد لأهداف C2C والمجموعات. تستخدم الملفات المحلية والمخازن المؤقتة التي تتجاوز حد الملفات الكبيرة نقاط نهاية الرفع المجزأ الخاصة بـ QQ، بينما تستخدم الحمولات الأصغر واجهة media API ذات الطلب الواحد.
|
||||
- يمكن نسخ بيانات الاعتماد احتياطياً واستعادتها كجزء من لقطات بيانات اعتماد OpenClaw القياسية؛ يعيد المحرك إرفاق مجموعة موارد كل حساب عند الاستعادة دون طلب اقتران جديد برمز QR.
|
||||
- يمتلك كل حساب مكدس موارد معزولًا (اتصال WebSocket، عميل API، ذاكرة تخزين مؤقت للرمز المميز، جذر تخزين الوسائط) مرتبطًا بـ `appId`. لا تشترك الحسابات أبدًا في الحالة الواردة/الصادرة.
|
||||
- يوسم المسجل متعدد الحسابات أسطر السجل بالحساب المالك حتى تبقى التشخيصات قابلة للفصل عند تشغيل عدة بوتات ضمن Gateway واحد.
|
||||
- تشترك مسارات الوارد والصادر وجسر Gateway في جذر حمولة وسائط واحد ضمن `~/.openclaw/media`، بحيث تستقر عمليات الرفع والتنزيل وذاكرات تحويل الترميز المؤقتة ضمن دليل محمي واحد بدل شجرة لكل نظام فرعي.
|
||||
- يمر تسليم الوسائط الغنية عبر مسار `sendMedia` واحد لأهداف C2C والمجموعات. تستخدم الملفات المحلية والمخازن المؤقتة الأكبر من حد الملفات الكبيرة نقاط نهاية الرفع المجزأ في QQ، بينما تستخدم الحمولات الأصغر واجهة API الوسائط ذات العملية الواحدة.
|
||||
- يمكن نسخ بيانات الاعتماد احتياطيًا واستعادتها كجزء من لقطات بيانات اعتماد OpenClaw القياسية؛ يعيد المحرك إرفاق مكدس موارد كل حساب عند الاستعادة دون الحاجة إلى اقتران جديد برمز QR.
|
||||
|
||||
## الإعداد عبر رمز QR
|
||||
|
||||
كبديل عن لصق `AppID:AppSecret` يدوياً، يدعم المحرك تدفق إعداد عبر رمز QR لربط QQ Bot بـ OpenClaw:
|
||||
كبديل للصق `AppID:AppSecret` يدويًا، يدعم المحرك تدفق إعداد عبر رمز QR لربط QQ Bot بـ OpenClaw:
|
||||
|
||||
1. شغّل مسار إعداد QQ Bot (على سبيل المثال `openclaw channels add --channel qqbot`) واختر تدفق رمز QR عند المطالبة.
|
||||
2. امسح رمز QR الذي تم إنشاؤه باستخدام تطبيق الهاتف المرتبط بـ QQ Bot المستهدف.
|
||||
3. وافق على الاقتران على الهاتف. يحفظ OpenClaw بيانات الاعتماد المرجعة في `credentials/` ضمن نطاق الحساب الصحيح.
|
||||
2. امسح رمز QR المُنشأ باستخدام تطبيق الهاتف المرتبط بـ QQ Bot الهدف.
|
||||
3. وافق على الاقتران على الهاتف. يحفظ OpenClaw بيانات الاعتماد المُعادة في `credentials/` ضمن نطاق الحساب الصحيح.
|
||||
|
||||
تظهر مطالبات الموافقة التي ينشئها البوت نفسه (على سبيل المثال، تدفقات "السماح بهذا الإجراء؟" التي يكشفها QQ Bot API) كمطالبات OpenClaw أصلية يمكنك قبولها باستخدام `/bot-approve` بدلاً من الرد عبر عميل QQ الخام.
|
||||
تظهر مطالبات الموافقة التي ينشئها البوت نفسه (على سبيل المثال، تدفقات "السماح بهذا الإجراء؟" التي تعرضها QQ Bot API) كمطالبات OpenClaw أصلية يمكنك قبولها باستخدام `/bot-approve` بدل الرد عبر عميل QQ الخام.
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
- **يرد البوت "gone to Mars":** بيانات الاعتماد غير مهيأة أو Gateway غير مشغّل.
|
||||
- **لا توجد رسائل واردة:** تحقق من صحة `appId` و`clientSecret`، ومن أن
|
||||
- **يرد البوت "gone to Mars":** بيانات الاعتماد غير مكوّنة أو Gateway غير مشغّل.
|
||||
- **لا توجد رسائل واردة:** تحقق من صحة `appId` و`clientSecret`، وأن
|
||||
البوت مفعّل على QQ Open Platform.
|
||||
- **ردود ذاتية متكررة:** يسجل OpenClaw فهارس مراجع QQ الصادرة باعتبارها
|
||||
صادرة من البوت ويتجاهل الأحداث الواردة التي يطابق `msgIdx` الحالي الخاص بها
|
||||
حساب البوت نفسه. يمنع ذلك حلقات صدى المنصة مع الاستمرار في السماح للمستخدمين
|
||||
- **ردود ذاتية متكررة:** يسجل OpenClaw فهارس مراجع الصادر في QQ على أنها
|
||||
من تأليف البوت ويتجاهل الأحداث الواردة التي يطابق `msgIdx` الحالي فيها
|
||||
حساب البوت نفسه. يمنع هذا حلقات صدى المنصة مع السماح للمستخدمين
|
||||
باقتباس رسائل البوت السابقة أو الرد عليها.
|
||||
- **الإعداد باستخدام `--token-file` لا يزال يظهر غير مهيأ:** يضبط `--token-file`
|
||||
AppSecret فقط. ما زلت بحاجة إلى `appId` في التهيئة أو `QQBOT_APP_ID`.
|
||||
- **الإعداد باستخدام `--token-file` لا يزال يظهر غير مكوّن:** يضبط `--token-file`
|
||||
AppSecret فقط. ما زلت بحاجة إلى `appId` في التكوين أو `QQBOT_APP_ID`.
|
||||
- **الرسائل الاستباقية لا تصل:** قد يعترض QQ الرسائل التي يبدأها البوت إذا
|
||||
لم يتفاعل المستخدم مؤخراً.
|
||||
- **الصوت لا يُنسخ نصياً:** تأكد من تهيئة STT وأن المزوّد قابل للوصول.
|
||||
لم يتفاعل المستخدم مؤخرًا.
|
||||
- **الصوت لا يُنسخ:** تأكد من تكوين STT وأن المزود قابل للوصول.
|
||||
|
||||
## ذات صلة
|
||||
## ذو صلة
|
||||
|
||||
- [الاقتران](/ar/channels/pairing)
|
||||
- [المجموعات](/ar/channels/groups)
|
||||
|
||||
@ -4,27 +4,27 @@ read_when:
|
||||
summary: حالة دعم Tlon/Urbit وإمكاناته وتكوينه
|
||||
title: Tlon
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T22:16:32Z"
|
||||
generated_at: "2026-05-04T02:22:51Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 30915170786fc1ee8b84fb8be2ea42280262923064cfa9ca7107036096a13add
|
||||
source_hash: 1718044541b431ff2437508e7e6659c14206f4aa84ab8b207e0d791dea2a48c5
|
||||
source_path: channels/tlon.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Tlon هو تطبيق مراسلة لامركزي مبني على Urbit. يتصل OpenClaw بسفينة Urbit الخاصة بك ويمكنه
|
||||
الرد على الرسائل المباشرة ورسائل المحادثات الجماعية. تتطلب ردود المجموعات إشارة @ افتراضيًا، ويمكن
|
||||
Tlon هو مراسل لامركزي مبني على Urbit. يتصل OpenClaw بسفينة Urbit الخاصة بك ويمكنه
|
||||
الرد على الرسائل المباشرة ورسائل الدردشة الجماعية. تتطلب ردود المجموعات إشارة @ افتراضيًا ويمكن
|
||||
تقييدها أكثر عبر قوائم السماح.
|
||||
|
||||
الحالة: Plugin مضمن. الرسائل المباشرة، وإشارات المجموعات، وردود السلاسل، وتنسيق النص المنسق، وعمليات
|
||||
رفع الصور مدعومة. التفاعلات والاستطلاعات غير مدعومة حتى الآن.
|
||||
الحالة: Plugin مضمّن. الرسائل المباشرة، وإشارات المجموعات، وردود السلاسل، وتنسيق النص الغني، و
|
||||
رفع الصور مدعومة. التفاعلات والاستطلاعات غير مدعومة بعد.
|
||||
|
||||
## Plugin مضمن
|
||||
## Plugin مضمّن
|
||||
|
||||
يأتي Tlon كـ Plugin مضمن في إصدارات OpenClaw الحالية، لذا لا تحتاج الإصدارات المعبأة
|
||||
العادية إلى تثبيت منفصل.
|
||||
يأتي Tlon بصفته Plugin مضمّنًا في إصدارات OpenClaw الحالية، لذلك لا تحتاج البُنى المعبأة العادية
|
||||
إلى تثبيت منفصل.
|
||||
|
||||
إذا كنت تستخدم إصدارًا أقدم أو تثبيتًا مخصصًا يستثني Tlon، فثبّت حزمة npm
|
||||
إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا يستبعد Tlon، فثبّت حزمة npm
|
||||
حالية:
|
||||
|
||||
التثبيت عبر CLI (سجل npm):
|
||||
@ -33,10 +33,10 @@ Tlon هو تطبيق مراسلة لامركزي مبني على Urbit. يتصل
|
||||
openclaw plugins install @openclaw/tlon
|
||||
```
|
||||
|
||||
استخدم الحزمة المجردة لمتابعة وسم الإصدار الرسمي الحالي. ثبّت إصدارًا دقيقًا
|
||||
استخدم الحزمة المجردة لمتابعة وسم الإصدار الرسمي الحالي. ثبّت إصدارًا محددًا بدقة
|
||||
فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج.
|
||||
|
||||
نسخة محلية (عند التشغيل من مستودع git):
|
||||
نسخة محلية من المستودع (عند التشغيل من مستودع git):
|
||||
|
||||
```bash
|
||||
openclaw plugins install ./path/to/local/tlon-plugin
|
||||
@ -46,15 +46,15 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
|
||||
## الإعداد
|
||||
|
||||
1. تأكد من توفر Plugin Tlon.
|
||||
- إصدارات OpenClaw المعبأة الحالية تضمنه بالفعل.
|
||||
1. تأكد من أن Tlon Plugin متاح.
|
||||
- إصدارات OpenClaw المعبأة الحالية تتضمنه بالفعل.
|
||||
- يمكن للتثبيتات الأقدم/المخصصة إضافته يدويًا باستخدام الأوامر أعلاه.
|
||||
2. اجمع عنوان URL الخاص بسفينتك ورمز تسجيل الدخول.
|
||||
3. اضبط `channels.tlon`.
|
||||
4. أعد تشغيل Gateway.
|
||||
5. أرسل رسالة مباشرة إلى البوت أو أشر إليه في قناة جماعية.
|
||||
5. أرسل رسالة مباشرة إلى البوت أو اذكره في قناة جماعية.
|
||||
|
||||
الحد الأدنى من الإعدادات (حساب واحد):
|
||||
إعداد بسيط (حساب واحد):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -72,9 +72,9 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
|
||||
## السفن الخاصة/شبكة LAN
|
||||
|
||||
افتراضيًا، يحظر OpenClaw أسماء المضيفين ونطاقات IP الخاصة/الداخلية للحماية من SSRF.
|
||||
إذا كانت سفينتك تعمل على شبكة خاصة (localhost أو عنوان IP على LAN أو اسم مضيف داخلي)،
|
||||
فيجب عليك الاشتراك صراحةً:
|
||||
افتراضيًا، يحظر OpenClaw أسماء المضيفين ونطاقات عناوين IP الخاصة/الداخلية للحماية من SSRF.
|
||||
إذا كانت سفينتك تعمل على شبكة خاصة (localhost أو عنوان LAN IP أو اسم مضيف داخلي)،
|
||||
فيجب أن توافق على ذلك صراحةً:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -93,8 +93,8 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
- `http://192.168.x.x:8080`
|
||||
- `http://my-ship.local:8080`
|
||||
|
||||
⚠️ فعّل هذا فقط إذا كنت تثق بشبكتك المحلية. يعطل هذا الإعداد وسائل الحماية من SSRF
|
||||
للطلبات إلى عنوان URL الخاص بسفينتك.
|
||||
⚠️ فعّل هذا فقط إذا كنت تثق بشبكتك المحلية. يعطّل هذا الإعداد حمايات SSRF
|
||||
للطلبات المرسلة إلى عنوان URL الخاص بسفينتك.
|
||||
|
||||
## القنوات الجماعية
|
||||
|
||||
@ -124,7 +124,7 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
|
||||
## التحكم في الوصول
|
||||
|
||||
قائمة السماح للرسائل المباشرة (فارغة = لا يُسمح بأي رسائل مباشرة، استخدم `ownerShip` لتدفق الموافقة):
|
||||
قائمة سماح الرسائل المباشرة (فارغة = لا يُسمح بأي رسائل مباشرة، استخدم `ownerShip` لتدفق الموافقة):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -159,9 +159,9 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
}
|
||||
```
|
||||
|
||||
## المالك ونظام الموافقة
|
||||
## نظام المالك والموافقة
|
||||
|
||||
عيّن سفينة مالك لتلقي طلبات الموافقة عندما يحاول مستخدمون غير مصرح لهم التفاعل:
|
||||
عيّن سفينة مالك لتلقي طلبات الموافقة عندما يحاول مستخدمون غير مصرّح لهم التفاعل:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -173,15 +173,15 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
}
|
||||
```
|
||||
|
||||
سفينة المالك **مصرح لها تلقائيًا في كل مكان** — تُقبل دعوات الرسائل المباشرة تلقائيًا، وتكون
|
||||
رسائل القنوات مسموحًا بها دائمًا. لا تحتاج إلى إضافة المالك إلى `dmAllowlist` أو
|
||||
سفينة المالك **مصرّح لها تلقائيًا في كل مكان** — تُقبَل دعوات الرسائل المباشرة تلقائيًا و
|
||||
تُسمح رسائل القنوات دائمًا. لا تحتاج إلى إضافة المالك إلى `dmAllowlist` أو
|
||||
`defaultAuthorizedShips`.
|
||||
|
||||
عند تعيينها، يتلقى المالك إشعارات عبر الرسائل المباشرة بشأن:
|
||||
عند تعيينه، يتلقى المالك إشعارات عبر الرسائل المباشرة بشأن:
|
||||
|
||||
- طلبات الرسائل المباشرة من سفن غير موجودة في قائمة السماح
|
||||
- الإشارات في القنوات بدون تفويض
|
||||
- طلبات دعوة المجموعات
|
||||
- الإشارات في القنوات من دون تفويض
|
||||
- طلبات دعوات المجموعات
|
||||
|
||||
## إعدادات القبول التلقائي
|
||||
|
||||
@ -197,51 +197,55 @@ openclaw plugins install ./path/to/local/tlon-plugin
|
||||
}
|
||||
```
|
||||
|
||||
قبول دعوات المجموعات تلقائيًا:
|
||||
قبول دعوات المجموعات تلقائيًا من السفن الموثوقة:
|
||||
|
||||
```json5
|
||||
{
|
||||
channels: {
|
||||
tlon: {
|
||||
autoAcceptGroupInvites: true,
|
||||
groupInviteAllowlist: ["~zod"],
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
## أهداف التسليم (CLI/Cron)
|
||||
يفشل `autoAcceptGroupInvites` بشكل مغلق عندما تكون `groupInviteAllowlist` فارغة. عيّن
|
||||
قائمة السماح إلى السفن التي ينبغي قبول دعوات مجموعاتها تلقائيًا.
|
||||
|
||||
استخدم هذه مع `openclaw message send` أو تسليم Cron:
|
||||
## أهداف التسليم (CLI/cron)
|
||||
|
||||
استخدم هذه مع `openclaw message send` أو تسليم cron:
|
||||
|
||||
- رسالة مباشرة: `~sampel-palnet` أو `dm/~sampel-palnet`
|
||||
- مجموعة: `chat/~host-ship/channel` أو `group:~host-ship/channel`
|
||||
|
||||
## Skill مضمنة
|
||||
## Skill مضمّنة
|
||||
|
||||
يتضمن Plugin Tlon مهارة مضمنة ([`@tloncorp/tlon-skill`](https://github.com/tloncorp/tlon-skill))
|
||||
يتضمن Tlon Plugin Skill مضمّنة ([`@tloncorp/tlon-skill`](https://github.com/tloncorp/tlon-skill))
|
||||
توفر وصول CLI إلى عمليات Tlon:
|
||||
|
||||
- **جهات الاتصال**: جلب/تحديث الملفات الشخصية، سرد جهات الاتصال
|
||||
- **القنوات**: السرد، الإنشاء، نشر الرسائل، جلب السجل
|
||||
- **المجموعات**: السرد، الإنشاء، إدارة الأعضاء
|
||||
- **الرسائل المباشرة**: إرسال الرسائل، التفاعل مع الرسائل
|
||||
- **التفاعلات**: إضافة/إزالة تفاعلات الرموز التعبيرية إلى المنشورات والرسائل المباشرة
|
||||
- **الإعدادات**: إدارة أذونات Plugin عبر أوامر الشرطة المائلة
|
||||
- **التفاعلات**: إضافة/إزالة تفاعلات emoji على المنشورات والرسائل المباشرة
|
||||
- **الإعدادات**: إدارة أذونات Plugin عبر أوامر slash
|
||||
|
||||
تكون Skill متاحة تلقائيًا عند تثبيت Plugin.
|
||||
|
||||
## القدرات
|
||||
|
||||
| الميزة | الحالة |
|
||||
| الميزة | الحالة |
|
||||
| --------------- | --------------------------------------- |
|
||||
| الرسائل المباشرة | ✅ مدعومة |
|
||||
| المجموعات/القنوات | ✅ مدعومة (محكومة بالإشارة افتراضيًا) |
|
||||
| الرسائل المباشرة | ✅ مدعومة |
|
||||
| المجموعات/القنوات | ✅ مدعومة (مقيّدة بالإشارة افتراضيًا) |
|
||||
| السلاسل | ✅ مدعومة (ردود تلقائية داخل السلسلة) |
|
||||
| النص المنسق | ✅ تحويل Markdown إلى تنسيق Tlon |
|
||||
| الصور | ✅ تُرفع إلى تخزين Tlon |
|
||||
| التفاعلات | ✅ عبر [Skill المضمنة](#bundled-skill) |
|
||||
| الاستطلاعات | ❌ غير مدعومة حتى الآن |
|
||||
| الأوامر الأصلية | ✅ مدعومة (للمالك فقط افتراضيًا) |
|
||||
| النص الغني | ✅ يتم تحويل Markdown إلى تنسيق Tlon |
|
||||
| الصور | ✅ يتم رفعها إلى تخزين Tlon |
|
||||
| التفاعلات | ✅ عبر [Skill المضمّنة](#bundled-skill) |
|
||||
| الاستطلاعات | ❌ غير مدعومة بعد |
|
||||
| الأوامر الأصلية | ✅ مدعومة (للمالك فقط افتراضيًا) |
|
||||
|
||||
## استكشاف الأخطاء وإصلاحها
|
||||
|
||||
@ -254,31 +258,32 @@ openclaw logs --follow
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
الأعطال الشائعة:
|
||||
الإخفاقات الشائعة:
|
||||
|
||||
- **تجاهل الرسائل المباشرة**: المرسل غير موجود في `dmAllowlist` ولم يتم ضبط `ownerShip` لتدفق الموافقة.
|
||||
- **تجاهل رسائل المجموعات**: لم تُكتشف القناة أو المرسل غير مصرح له.
|
||||
- **يتم تجاهل الرسائل المباشرة**: المرسل غير موجود في `dmAllowlist` ولا يوجد `ownerShip` مضبوط لتدفق الموافقة.
|
||||
- **يتم تجاهل رسائل المجموعات**: القناة غير مكتشفة أو المرسل غير مصرّح له.
|
||||
- **أخطاء الاتصال**: تحقق من إمكانية الوصول إلى عنوان URL الخاص بالسفينة؛ فعّل `allowPrivateNetwork` للسفن المحلية.
|
||||
- **أخطاء المصادقة**: تحقق من أن رمز تسجيل الدخول حالي (تتغير الرموز دوريًا).
|
||||
- **أخطاء المصادقة**: تحقق من أن رمز تسجيل الدخول حديث (تتغير الرموز دوريًا).
|
||||
|
||||
## مرجع الإعدادات
|
||||
## مرجع الإعداد
|
||||
|
||||
الإعدادات الكاملة: [الإعدادات](/ar/gateway/configuration)
|
||||
الإعداد الكامل: [الإعداد](/ar/gateway/configuration)
|
||||
|
||||
خيارات المزوّد:
|
||||
|
||||
- `channels.tlon.enabled`: تفعيل/تعطيل بدء تشغيل القناة.
|
||||
- `channels.tlon.ship`: اسم سفينة Urbit الخاصة بالبوت (مثل `~sampel-palnet`).
|
||||
- `channels.tlon.url`: عنوان URL الخاص بالسفينة (مثل `https://sampel-palnet.tlon.network`).
|
||||
- `channels.tlon.url`: عنوان URL للسفينة (مثل `https://sampel-palnet.tlon.network`).
|
||||
- `channels.tlon.code`: رمز تسجيل الدخول إلى السفينة.
|
||||
- `channels.tlon.allowPrivateNetwork`: السماح بعناوين URL الخاصة بـ localhost/LAN (تجاوز SSRF).
|
||||
- `channels.tlon.ownerShip`: سفينة المالك لنظام الموافقة (مصرح لها دائمًا).
|
||||
- `channels.tlon.ownerShip`: سفينة المالك لنظام الموافقة (مصرّح لها دائمًا).
|
||||
- `channels.tlon.dmAllowlist`: السفن المسموح لها بإرسال رسائل مباشرة (فارغة = لا شيء).
|
||||
- `channels.tlon.autoAcceptDmInvites`: قبول الرسائل المباشرة تلقائيًا من السفن الموجودة في قائمة السماح.
|
||||
- `channels.tlon.autoAcceptGroupInvites`: قبول كل دعوات المجموعات تلقائيًا.
|
||||
- `channels.tlon.autoAcceptGroupInvites`: قبول دعوات المجموعات تلقائيًا من السفن الموجودة في قائمة السماح.
|
||||
- `channels.tlon.groupInviteAllowlist`: السفن التي يمكن قبول دعوات مجموعاتها تلقائيًا.
|
||||
- `channels.tlon.autoDiscoverChannels`: اكتشاف القنوات الجماعية تلقائيًا (الافتراضي: true).
|
||||
- `channels.tlon.groupChannels`: مجموعات القنوات المثبتة يدويًا.
|
||||
- `channels.tlon.defaultAuthorizedShips`: السفن المصرح لها لكل القنوات.
|
||||
- `channels.tlon.groupChannels`: أعشاش القنوات المثبتة يدويًا.
|
||||
- `channels.tlon.defaultAuthorizedShips`: السفن المصرّح لها لكل القنوات.
|
||||
- `channels.tlon.authorization.channelRules`: قواعد المصادقة لكل قناة.
|
||||
- `channels.tlon.showModelSignature`: إلحاق اسم النموذج بالرسائل.
|
||||
|
||||
@ -286,13 +291,13 @@ openclaw doctor
|
||||
|
||||
- تتطلب ردود المجموعات إشارة (مثل `~your-bot-ship`) للرد.
|
||||
- ردود السلاسل: إذا كانت الرسالة الواردة ضمن سلسلة، يرد OpenClaw داخل السلسلة.
|
||||
- النص المنسق: يُحوَّل تنسيق Markdown (غامق، مائل، كود، عناوين، قوائم) إلى تنسيق Tlon الأصلي.
|
||||
- النص الغني: يتم تحويل تنسيق Markdown (غامق، مائل، كود، رؤوس، قوائم) إلى تنسيق Tlon الأصلي.
|
||||
- الصور: تُرفع عناوين URL إلى تخزين Tlon وتُضمّن ككتل صور.
|
||||
|
||||
## ذو صلة
|
||||
## ذات صلة
|
||||
|
||||
- [نظرة عامة على القنوات](/ar/channels) — كل القنوات المدعومة
|
||||
- [الإقران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الإقران
|
||||
- [المجموعات](/ar/channels/groups) — سلوك المحادثات الجماعية وحوكمة الإشارات
|
||||
- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران
|
||||
- [المجموعات](/ar/channels/groups) — سلوك الدردشة الجماعية وتقييدها بالإشارة
|
||||
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل
|
||||
- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية
|
||||
|
||||
@ -1,21 +1,21 @@
|
||||
---
|
||||
read_when:
|
||||
- تشير وسيلة نقل القناة إلى أنها متصلة، لكن الردود تفشل
|
||||
- تحتاج إلى فحوصات خاصة بالقناة قبل التعمق في وثائق المزوّدين
|
||||
summary: استكشاف أخطاء سريع على مستوى القناة مع مؤشرات الفشل وإصلاحاتها لكل قناة
|
||||
title: استكشاف مشكلات القنوات وإصلاحها
|
||||
- يفيد نقل القناة بأنه متصل، لكن الردود تفشل
|
||||
- تحتاج إلى فحوصات خاصة بالقناة قبل وثائق المزوّد المتعمقة
|
||||
summary: استكشاف أخطاء سريع على مستوى القناة مع بصمات الفشل والإصلاحات لكل قناة
|
||||
title: استكشاف أخطاء القناة وإصلاحها
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T07:44:51Z"
|
||||
generated_at: "2026-05-04T02:23:15Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 6024f2ae0a058b2296758c237c912a5cd8ea6bbafea33cc201690cc081efcbee
|
||||
source_hash: a3a0737156ae83897c44d18505e0355a5d8e5700106b984496d94874c270deb2
|
||||
source_path: channels/troubleshooting.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
استخدم هذه الصفحة عندما تتصل قناة لكن يكون السلوك غير صحيح.
|
||||
|
||||
## سلّم الأوامر
|
||||
## تسلسل الأوامر
|
||||
|
||||
شغّل هذه بالترتيب أولاً:
|
||||
|
||||
@ -32,117 +32,118 @@ openclaw channels status --probe
|
||||
- `Runtime: running`
|
||||
- `Connectivity probe: ok`
|
||||
- `Capability: read-only`، أو `write-capable`، أو `admin-capable`
|
||||
- يعرض فحص القناة أن النقل متصل، وحيثما كان مدعوماً، `works` أو `audit ok`
|
||||
- يعرض فحص القناة أن النقل متصل، وحيثما يكون ذلك مدعوماً، `works` أو `audit ok`
|
||||
|
||||
## WhatsApp
|
||||
|
||||
### توقيعات فشل WhatsApp
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| متصل لكن لا توجد ردود DM | `openclaw pairing list whatsapp` | وافق على المرسل أو بدّل سياسة/قائمة السماح لـ DM. |
|
||||
| يتم تجاهل رسائل المجموعة | تحقق من `requireMention` + أنماط الإشارة في الإعداد | اذكر الروبوت أو خفف سياسة الإشارة لتلك المجموعة. |
|
||||
| تنتهي مهلة تسجيل الدخول عبر QR مع 408 | تحقق من متغيرات بيئة Gateway `HTTPS_PROXY` / `HTTP_PROXY` | عيّن وكيلاً قابلاً للوصول؛ استخدم `NO_PROXY` للتجاوزات فقط. |
|
||||
| حلقات قطع اتصال/إعادة تسجيل دخول عشوائية | `openclaw channels status --probe` + السجلات | تُعلَّم عمليات إعادة الاتصال الأخيرة حتى عند الاتصال حالياً؛ راقب السجلات، أعد تشغيل Gateway، ثم أعد الربط إذا استمر التذبذب. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| متصل لكن لا توجد ردود في الرسائل المباشرة | `openclaw pairing list whatsapp` | وافق على المرسل أو بدّل سياسة الرسائل المباشرة/قائمة السماح. |
|
||||
| يتم تجاهل رسائل المجموعة | تحقق من `requireMention` وأنماط الإشارة في الإعدادات | أشِر إلى البوت أو خفف سياسة الإشارة لتلك المجموعة. |
|
||||
| تنتهي مهلة تسجيل الدخول عبر QR بالرمز 408 | تحقق من متغيرات بيئة Gateway `HTTPS_PROXY` / `HTTP_PROXY` | عيّن وكيلاً يمكن الوصول إليه؛ استخدم `NO_PROXY` للتجاوزات فقط. |
|
||||
| حلقات قطع اتصال/إعادة تسجيل دخول عشوائية | `openclaw channels status --probe` + السجلات | تُعلَّم عمليات إعادة الاتصال الحديثة حتى عند الاتصال حالياً؛ راقب السجلات، وأعد تشغيل Gateway، ثم أعد الربط إذا استمر التذبذب. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء WhatsApp](/ar/channels/whatsapp#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء WhatsApp وإصلاحها](/ar/channels/whatsapp#troubleshooting)
|
||||
|
||||
## Telegram
|
||||
|
||||
### توقيعات فشل Telegram
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `/start` لكن لا يوجد تدفق رد قابل للاستخدام | `openclaw pairing list telegram` | وافق على الاقتران أو غيّر سياسة DM. |
|
||||
| الروبوت متصل لكن المجموعة تبقى صامتة | تحقق من متطلب الإشارة ووضع خصوصية الروبوت | عطّل وضع الخصوصية لإتاحة الظهور في المجموعة أو اذكر الروبوت. |
|
||||
| فشل الإرسال مع أخطاء شبكة | افحص السجلات بحثاً عن فشل استدعاءات Telegram API | أصلح توجيه DNS/IPv6/الوكيل إلى `api.telegram.org`. |
|
||||
| يبلّغ بدء التشغيل أن `getMe returned 401` | تحقق من مصدر الرمز المميز المكوَّن | انسخ رمز BotFather المميز مجدداً أو أعد توليده وحدّث `botToken` أو `tokenFile` أو `TELEGRAM_BOT_TOKEN` للحساب الافتراضي. |
|
||||
| يتوقف الاستقصاء أو يعيد الاتصال ببطء | `openclaw logs --follow` لتشخيصات الاستقصاء | رقِّ؛ إذا كانت عمليات إعادة التشغيل نتائج إيجابية كاذبة، فاضبط `pollingStallThresholdMs`. ما زالت التوقفات المستمرة تشير إلى الوكيل/DNS/IPv6. |
|
||||
| يتم رفض `setMyCommands` عند بدء التشغيل | افحص السجلات بحثاً عن `BOT_COMMANDS_TOO_MUCH` | قلّل أوامر Telegram الخاصة بـ Plugin/المهارات/المخصصة أو عطّل القوائم الأصلية. |
|
||||
| بعد الترقية، قائمة السماح تمنعك | `openclaw security audit` وقوائم السماح في الإعداد | شغّل `openclaw doctor --fix` أو استبدل `@username` بمعرّفات مرسلين رقمية. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `/start` لكن لا يوجد مسار رد قابل للاستخدام | `openclaw pairing list telegram` | وافق على الاقتران أو غيّر سياسة الرسائل المباشرة. |
|
||||
| البوت متصل لكن المجموعة تبقى صامتة | تحقق من متطلب الإشارة ووضع خصوصية البوت | عطّل وضع الخصوصية لإظهار المجموعة أو أشِر إلى البوت. |
|
||||
| فشل الإرسال مع أخطاء شبكة | افحص السجلات بحثاً عن فشل استدعاءات Telegram API | أصلح توجيه DNS/IPv6/الوكيل إلى `api.telegram.org`. |
|
||||
| تقارير بدء التشغيل `getMe returned 401` | تحقق من مصدر الرمز المهيأ | أعد نسخ رمز BotFather أو أعد توليده وحدّث `botToken` أو `tokenFile` أو `TELEGRAM_BOT_TOKEN` للحساب الافتراضي. |
|
||||
| يتوقف الاستطلاع أو يعيد الاتصال ببطء | `openclaw logs --follow` لتشخيصات الاستطلاع | رقِّ؛ إذا كانت عمليات إعادة التشغيل نتائج إيجابية كاذبة، فاضبط `pollingStallThresholdMs`. لا تزال التوقفات المستمرة تشير إلى الوكيل/DNS/IPv6. |
|
||||
| تم رفض `setMyCommands` عند بدء التشغيل | افحص السجلات بحثاً عن `BOT_COMMANDS_TOO_MUCH` | قلّل أوامر Telegram الخاصة بالـ Plugin/Skill/المخصصة أو عطّل القوائم الأصلية. |
|
||||
| بعد الترقية، تمنعك قائمة السماح | `openclaw security audit` وقوائم السماح في الإعدادات | شغّل `openclaw doctor --fix` أو استبدل `@username` بمعرفات مرسل رقمية. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Telegram](/ar/channels/telegram#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Telegram وإصلاحها](/ar/channels/telegram#troubleshooting)
|
||||
|
||||
## Discord
|
||||
|
||||
### توقيعات فشل Discord
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | ---------------------------------- | ------------------------------------------------------------- |
|
||||
| الروبوت متصل لكن لا توجد ردود في الخادم | `openclaw channels status --probe` | اسمح للخادم/القناة وتحقق من نية محتوى الرسائل. |
|
||||
| يتم تجاهل رسائل المجموعة | تحقق من السجلات بحثاً عن إسقاطات بوابة الإشارات | اذكر الروبوت أو عيّن `requireMention: false` للخادم/القناة. |
|
||||
| ردود DM مفقودة | `openclaw pairing list discord` | وافق على اقتران DM أو اضبط سياسة DM. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ----------------------------------------- | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| البوت متصل لكن لا توجد ردود في الخادم | `openclaw channels status --probe` | اسمح بالخادم/القناة وتحقق من نية محتوى الرسائل. |
|
||||
| يتم تجاهل رسائل المجموعة | تحقق من السجلات بحثاً عن إسقاطات بوابة الإشارة | أشِر إلى البوت أو عيّن `requireMention: false` للخادم/القناة. |
|
||||
| استخدام للكتابة/الرموز لكن لا توجد رسالة Discord | يعرض سجل الجلسة نص المساعد مع `didSendViaMessagingTool: false` | أجاب النموذج بشكل خاص بدلاً من استدعاء أداة الرسائل. استخدم نموذجاً موثوقاً في استدعاء الأدوات، أو عيّن `messages.groupChat.visibleReplies: "automatic"` للنشر التلقائي. |
|
||||
| ردود الرسائل المباشرة مفقودة | `openclaw pairing list discord` | وافق على اقتران الرسائل المباشرة أو عدّل سياسة الرسائل المباشرة. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Discord](/ar/channels/discord#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Discord وإصلاحها](/ar/channels/discord#troubleshooting)
|
||||
|
||||
## Slack
|
||||
|
||||
### توقيعات فشل Slack
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| -------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| وضع Socket متصل لكن لا توجد استجابات | `openclaw channels status --probe` | تحقق من رمز التطبيق + رمز الروبوت والنطاقات المطلوبة؛ راقب `botTokenStatus` / `appTokenStatus = configured_unavailable` في الإعدادات المدعومة بـ SecretRef. |
|
||||
| DMs محظورة | `openclaw pairing list slack` | وافق على الاقتران أو خفف سياسة DM. |
|
||||
| يتم تجاهل رسالة القناة | تحقق من `groupPolicy` وقائمة السماح للقنوات | اسمح للقناة أو بدّل السياسة إلى `open`. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| -------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| وضع Socket متصل لكن لا توجد استجابات | `openclaw channels status --probe` | تحقق من رمز التطبيق + رمز البوت والنطاقات المطلوبة؛ راقب `botTokenStatus` / `appTokenStatus = configured_unavailable` في الإعدادات المدعومة بـ SecretRef. |
|
||||
| الرسائل المباشرة محظورة | `openclaw pairing list slack` | وافق على الاقتران أو خفف سياسة الرسائل المباشرة. |
|
||||
| يتم تجاهل رسالة القناة | تحقق من `groupPolicy` وقائمة سماح القناة | اسمح بالقناة أو بدّل السياسة إلى `open`. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Slack](/ar/channels/slack#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Slack وإصلاحها](/ar/channels/slack#troubleshooting)
|
||||
|
||||
## iMessage و BlueBubbles
|
||||
|
||||
### توقيعات فشل iMessage و BlueBubbles
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| -------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------- |
|
||||
| لا توجد أحداث واردة | تحقق من قابلية الوصول إلى Webhook/الخادم وأذونات التطبيق | أصلح عنوان URL الخاص بـ Webhook أو حالة خادم BlueBubbles. |
|
||||
| يمكن الإرسال لكن لا يوجد استقبال على macOS | تحقق من أذونات خصوصية macOS لأتمتة Messages | امنح أذونات TCC مجدداً وأعد تشغيل عملية القناة. |
|
||||
| مرسل DM محظور | `openclaw pairing list imessage` أو `openclaw pairing list bluebubbles` | وافق على الاقتران أو حدّث قائمة السماح. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| -------------------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------- |
|
||||
| لا توجد أحداث واردة | تحقق من إمكانية الوصول إلى Webhook/الخادم وأذونات التطبيق | أصلح عنوان URL الخاص بـ Webhook أو حالة خادم BlueBubbles. |
|
||||
| يمكن الإرسال لكن لا يوجد استقبال على macOS | تحقق من أذونات خصوصية macOS لأتمتة Messages | أعد منح أذونات TCC وأعد تشغيل عملية القناة. |
|
||||
| مرسل الرسائل المباشرة محظور | `openclaw pairing list imessage` أو `openclaw pairing list bluebubbles` | وافق على الاقتران أو حدّث قائمة السماح. |
|
||||
|
||||
استكشاف الأخطاء الكامل:
|
||||
|
||||
- [استكشاف أخطاء iMessage](/ar/channels/imessage#troubleshooting)
|
||||
- [استكشاف أخطاء BlueBubbles](/ar/channels/bluebubbles#troubleshooting)
|
||||
- [استكشاف أخطاء iMessage وإصلاحها](/ar/channels/imessage#troubleshooting)
|
||||
- [استكشاف أخطاء BlueBubbles وإصلاحها](/ar/channels/bluebubbles#troubleshooting)
|
||||
|
||||
## Signal
|
||||
|
||||
### توقيعات فشل Signal
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | ------------------------------------------ | ---------------------------------------------------------- |
|
||||
| البرنامج الخفي قابل للوصول لكن الروبوت صامت | `openclaw channels status --probe` | تحقق من عنوان URL/حساب البرنامج الخفي `signal-cli` ووضع الاستقبال. |
|
||||
| DM محظور | `openclaw pairing list signal` | وافق على المرسل أو اضبط سياسة DM. |
|
||||
| ردود المجموعة لا تُشغَّل | تحقق من قائمة سماح المجموعة وأنماط الإشارة | أضف المرسل/المجموعة أو خفف البوابة. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | ------------------------------------------ | ------------------------------------------------------------ |
|
||||
| يمكن الوصول إلى البرنامج الخفي لكن البوت صامت | `openclaw channels status --probe` | تحقق من عنوان URL/الحساب الخاص ببرنامج `signal-cli` الخفي ووضع الاستقبال. |
|
||||
| الرسائل المباشرة محظورة | `openclaw pairing list signal` | وافق على المرسل أو عدّل سياسة الرسائل المباشرة. |
|
||||
| ردود المجموعة لا تُشغَّل | تحقق من قائمة سماح المجموعة وأنماط الإشارة | أضف المرسل/المجموعة أو خفف البوابة. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Signal](/ar/channels/signal#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء Signal وإصلاحها](/ar/channels/signal#troubleshooting)
|
||||
|
||||
## QQ Bot
|
||||
|
||||
### توقيعات فشل QQ Bot
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | ------------------------------------------ | ------------------------------------------------------------------- |
|
||||
| يرد الروبوت "gone to Mars" | تحقق من `appId` و `clientSecret` في الإعداد | عيّن بيانات الاعتماد أو أعد تشغيل Gateway. |
|
||||
| لا توجد رسائل واردة | `openclaw channels status --probe` | تحقق من بيانات الاعتماد على QQ Open Platform. |
|
||||
| لا يتم نسخ الصوت نصياً | تحقق من إعداد موفر STT | كوّن `channels.qqbot.stt` أو `tools.media.audio`. |
|
||||
| الرسائل الاستباقية لا تصل | تحقق من متطلبات تفاعل منصة QQ | قد يحظر QQ الرسائل التي يبدأها الروبوت دون تفاعل حديث. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ------------------------------- | ------------------------------------------- | ------------------------------------------------------------------- |
|
||||
| يرد البوت "ذهب إلى المريخ" | تحقق من `appId` و `clientSecret` في الإعدادات | عيّن بيانات الاعتماد أو أعد تشغيل Gateway. |
|
||||
| لا توجد رسائل واردة | `openclaw channels status --probe` | تحقق من بيانات الاعتماد على QQ Open Platform. |
|
||||
| لا يتم نسخ الصوت | تحقق من إعدادات مزود STT | هيّئ `channels.qqbot.stt` أو `tools.media.audio`. |
|
||||
| الرسائل الاستباقية لا تصل | تحقق من متطلبات تفاعل منصة QQ | قد يحظر QQ الرسائل التي يبدأها البوت دون تفاعل حديث. |
|
||||
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء QQ Bot](/ar/channels/qqbot#troubleshooting)
|
||||
استكشاف الأخطاء الكامل: [استكشاف أخطاء QQ Bot وإصلاحها](/ar/channels/qqbot#troubleshooting)
|
||||
|
||||
## Matrix
|
||||
|
||||
### توقيعات فشل Matrix
|
||||
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ----------------------------------- | -------------------------------------- | --------------------------------------------------------------------------- |
|
||||
| تم تسجيل الدخول لكن رسائل الغرفة تُتجاهل | `openclaw channels status --probe` | تحقق من `groupPolicy`، وقائمة سماح الغرف، وبوابة الإشارات. |
|
||||
| DMs لا تُعالَج | `openclaw pairing list matrix` | وافق على المرسل أو اضبط سياسة DM. |
|
||||
| تفشل الغرف المشفرة | `openclaw matrix verify status` | أعد التحقق من الجهاز، ثم تحقق من `openclaw matrix verify backup status`. |
|
||||
| استعادة النسخ الاحتياطي معلقة/معطلة | `openclaw matrix verify backup status` | شغّل `openclaw matrix verify backup restore` أو أعد التشغيل باستخدام مفتاح استرداد. |
|
||||
| يبدو التوقيع المتبادل/التمهيد غير صحيح | `openclaw matrix verify bootstrap` | أصلح التخزين السري، والتوقيع المتبادل، وحالة النسخ الاحتياطي دفعة واحدة. |
|
||||
| العَرَض | أسرع فحص | الإصلاح |
|
||||
| ----------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------- |
|
||||
| مسجّل الدخول لكنه يتجاهل رسائل الغرفة | `openclaw channels status --probe` | تحقق من `groupPolicy`، وقائمة سماح الغرف، وبوابة الإشارة. |
|
||||
| لا تتم معالجة الرسائل المباشرة | `openclaw pairing list matrix` | وافق على المرسل أو عدّل سياسة الرسائل المباشرة. |
|
||||
| تفشل الغرف المشفرة | `openclaw matrix verify status` | أعد التحقق من الجهاز، ثم تحقق من `openclaw matrix verify backup status`. |
|
||||
| استعادة النسخة الاحتياطية معلقة/معطلة | `openclaw matrix verify backup status` | شغّل `openclaw matrix verify backup restore` أو أعد التشغيل باستخدام مفتاح استرداد. |
|
||||
| يبدو التوقيع المتقاطع/التمهيد غير صحيح | `openclaw matrix verify bootstrap` | أصلح تخزين الأسرار، والتوقيع المتقاطع، وحالة النسخ الاحتياطي في تمريرة واحدة. |
|
||||
|
||||
الإعداد والتهيئة بالكامل: [Matrix](/ar/channels/matrix)
|
||||
الإعداد والتكوين الكاملان: [Matrix](/ar/channels/matrix)
|
||||
|
||||
## ذو صلة
|
||||
|
||||
- [الاقتران](/ar/channels/pairing)
|
||||
- [توجيه القنوات](/ar/channels/channel-routing)
|
||||
- [استكشاف أخطاء Gateway](/ar/gateway/troubleshooting)
|
||||
- [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting)
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
---
|
||||
read_when:
|
||||
- تواجه مشكلات في الاتصال/المصادقة وتريد إصلاحات موجّهة
|
||||
- لقد أجريت تحديثًا وتريد إجراء فحص سريع للتأكد
|
||||
summary: مرجع CLI لـ `openclaw doctor` (فحوصات الحالة الصحية + الإصلاحات الموجَّهة)
|
||||
title: الفحص التشخيصي
|
||||
- لقد أجريت التحديث وتريد فحصًا سريعًا
|
||||
summary: مرجع CLI لـ `openclaw doctor` (فحوصات الصحة + الإصلاحات الموجّهة)
|
||||
title: التشخيص
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T21:28:55Z"
|
||||
generated_at: "2026-05-04T02:23:18Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: d4baab5b0cd4d046d12ae5bd14ccf05224115856d45e630a57e77a2be15e5db0
|
||||
source_hash: cd7fb09d373c313e4be45ad9e3b19ceb187a5787ef3e70fcd2b1f1f01b50c905
|
||||
source_path: cli/doctor.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw doctor`
|
||||
|
||||
فحوصات السلامة + إصلاحات سريعة لـ Gateway والقنوات.
|
||||
فحوصات الصحة + إصلاحات سريعة لـ Gateway والقنوات.
|
||||
|
||||
ذو صلة:
|
||||
ذات صلة:
|
||||
|
||||
- استكشاف الأخطاء وإصلاحها: [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting)
|
||||
- تدقيق الأمان: [الأمان](/ar/gateway/security)
|
||||
@ -36,43 +36,43 @@ openclaw doctor --generate-gateway-token
|
||||
|
||||
- `--no-workspace-suggestions`: تعطيل اقتراحات ذاكرة/بحث مساحة العمل
|
||||
- `--yes`: قبول القيم الافتراضية دون مطالبة
|
||||
- `--repair`: تطبيق إصلاحات غير خدمية موصى بها دون مطالبة؛ ما زالت عمليات تثبيت خدمة Gateway وإعادة كتابتها تتطلب تأكيدًا تفاعليًا أو أوامر Gateway صريحة
|
||||
- `--repair`: تطبيق إصلاحات غير خدمية موصى بها دون مطالبة؛ لا تزال عمليات تثبيت خدمة Gateway وإعادة كتابتها تتطلب تأكيدًا تفاعليًا أو أوامر Gateway صريحة
|
||||
- `--fix`: اسم بديل لـ `--repair`
|
||||
- `--force`: تطبيق إصلاحات أكثر حزمًا، بما في ذلك استبدال إعدادات الخدمة المخصصة عند الحاجة
|
||||
- `--force`: تطبيق إصلاحات صارمة، بما في ذلك استبدال إعدادات الخدمة المخصصة عند الحاجة
|
||||
- `--non-interactive`: التشغيل دون مطالبات؛ للترحيلات الآمنة والإصلاحات غير الخدمية فقط
|
||||
- `--generate-gateway-token`: توليد رمز Gateway وإعداده
|
||||
- `--generate-gateway-token`: إنشاء رمز Gateway وإعداده
|
||||
- `--deep`: فحص خدمات النظام بحثًا عن تثبيتات Gateway إضافية
|
||||
|
||||
ملاحظات:
|
||||
|
||||
- لا تعمل المطالبات التفاعلية (مثل إصلاحات keychain/OAuth) إلا عندما يكون stdin عبارة عن TTY ولا يكون `--non-interactive` مضبوطًا. ستتجاوز عمليات التشغيل بلا واجهة (cron، Telegram، دون طرفية) المطالبات.
|
||||
- الأداء: تتجاوز عمليات تشغيل `doctor` غير التفاعلية تحميل Plugin المسبق حتى تبقى فحوصات السلامة بلا واجهة سريعة. لا تزال الجلسات التفاعلية تحمّل Plugins بالكامل عندما يحتاج الفحص إلى مساهمتها.
|
||||
- يكتب `--fix` (اسم بديل لـ `--repair`) نسخة احتياطية إلى `~/.openclaw/openclaw.json.bak` ويسقط مفاتيح الإعدادات غير المعروفة، مع سرد كل إزالة.
|
||||
- يبلّغ `doctor --fix --non-interactive` عن تعريفات خدمة Gateway المفقودة أو القديمة، لكنه لا يثبتها أو يعيد كتابتها خارج وضع إصلاح التحديث. شغّل `openclaw gateway install` لخدمة مفقودة، أو `openclaw gateway install --force` عندما تريد عمدًا استبدال المشغّل.
|
||||
- تكتشف فحوصات سلامة الحالة الآن ملفات النصوص المتروكة في دليل الجلسات. تتطلب أرشفتها بصيغة `.deleted.<timestamp>` تأكيدًا تفاعليًا؛ أما `--fix` و`--yes` وعمليات التشغيل بلا واجهة فتتركها في مكانها.
|
||||
- يفحص Doctor أيضًا `~/.openclaw/cron/jobs.json` (أو `cron.store`) بحثًا عن أشكال مهام cron القديمة، ويمكنه إعادة كتابتها في مكانها قبل أن يضطر المجدول إلى تسويتها تلقائيًا وقت التشغيل.
|
||||
- على Linux، يحذر Doctor عندما لا يزال crontab الخاص بالمستخدم يشغّل `~/.openclaw/bin/ensure-whatsapp.sh` القديم؛ لم يعد هذا السكربت مُصانًا ويمكنه تسجيل انقطاعات WhatsApp Gateway خاطئة عندما يفتقد cron بيئة systemd user-bus.
|
||||
- ينظف Doctor حالة تجهيز تبعيات Plugin القديمة التي أنشأتها إصدارات OpenClaw الأقدم. كما يصلح Plugins القابلة للتنزيل والمفقودة من الإعدادات عندما يستطيع السجل حلها، وتثبت تمريرة Doctor في 2026.5.2 تلقائيًا Plugins القابلة للتنزيل التي تستخدمها إعدادات أقدم بالفعل قبل وسم الإعدادات بأنها مُمَسّة لذلك الإصدار.
|
||||
- يصلح Doctor إعدادات Plugin القديمة بإزالة معرّفات Plugin المفقودة من `plugins.allow`/`plugins.entries`، إضافة إلى إعدادات القناة المعلقة المطابقة، وأهداف Heartbeat، وتجاوزات نموذج القناة عندما يكون اكتشاف Plugin سليمًا.
|
||||
- يعزل Doctor إعدادات Plugin غير الصالحة بتعطيل إدخال `plugins.entries.<id>` المتأثر وإزالة حمولة `config` غير الصالحة. يتجاوز بدء تشغيل Gateway ذلك Plugin السيئ فقط، حتى تتمكن Plugins والقنوات الأخرى من الاستمرار في العمل.
|
||||
- اضبط `OPENCLAW_SERVICE_REPAIR_POLICY=external` عندما يكون مشرف آخر مالكًا لدورة حياة Gateway. يظل Doctor يبلّغ عن سلامة Gateway/الخدمة ويطبق الإصلاحات غير الخدمية، لكنه يتجاوز تثبيت/بدء/إعادة تشغيل/تمهيد الخدمة وتنظيف الخدمة القديمة.
|
||||
- على Linux، يتجاهل Doctor وحدات systemd الإضافية غير النشطة الشبيهة بـ Gateway، ولا يعيد كتابة بيانات الأمر/نقطة الدخول الوصفية لخدمة Gateway عاملة تحت systemd أثناء الإصلاح. أوقف الخدمة أولًا أو استخدم `openclaw gateway install --force` عندما تريد عمدًا استبدال المشغّل النشط.
|
||||
- يرحّل Doctor تلقائيًا إعداد Talk المسطح القديم (`talk.voiceId` و`talk.modelId` وما شابههما) إلى `talk.provider` + `talk.providers.<provider>`.
|
||||
- لم تعد عمليات `doctor --fix` المتكررة تبلّغ/تطبق تسوية Talk عندما يكون الفرق الوحيد هو ترتيب مفاتيح الكائن.
|
||||
- لا تعمل المطالبات التفاعلية (مثل إصلاحات keychain/OAuth) إلا عندما يكون stdin عبارة عن TTY ولم يتم تعيين `--non-interactive`. ستتخطى عمليات التشغيل بلا واجهة (cron، Telegram، بلا طرفية) المطالبات.
|
||||
- الأداء: تتخطى عمليات تشغيل `doctor` غير التفاعلية التحميل الاستباقي لـ Plugin حتى تبقى فحوصات الصحة بلا واجهة سريعة. لا تزال الجلسات التفاعلية تحمّل Plugins بالكامل عندما يحتاج الفحص إلى مساهمتها.
|
||||
- يكتب `--fix` (اسم بديل لـ `--repair`) نسخة احتياطية إلى `~/.openclaw/openclaw.json.bak` ويحذف مفاتيح الإعدادات غير المعروفة، مع سرد كل إزالة.
|
||||
- يبلغ `doctor --fix --non-interactive` عن تعريفات خدمة Gateway المفقودة أو القديمة، لكنه لا يثبتها أو يعيد كتابتها خارج وضع إصلاح التحديث. شغّل `openclaw gateway install` للخدمة المفقودة، أو `openclaw gateway install --force` عندما تريد عمدًا استبدال المشغّل.
|
||||
- تكتشف فحوصات سلامة الحالة الآن ملفات نصوص محادثة يتيمة في دليل الجلسات. تتطلب أرشفتها باسم `.deleted.<timestamp>` تأكيدًا تفاعليًا؛ أما `--fix` و`--yes` وعمليات التشغيل بلا واجهة فتتركها في مكانها.
|
||||
- يفحص Doctor أيضًا `~/.openclaw/cron/jobs.json` (أو `cron.store`) بحثًا عن أشكال مهام Cron القديمة، ويمكنه إعادة كتابتها في مكانها قبل أن يضطر المجدول إلى تطبيعها تلقائيًا وقت التشغيل.
|
||||
- على Linux، يحذر Doctor عندما لا يزال crontab الخاص بالمستخدم يشغّل `~/.openclaw/bin/ensure-whatsapp.sh` القديم؛ لم يعد هذا السكربت مُصانًا ويمكنه تسجيل انقطاعات WhatsApp Gateway زائفة عندما يفتقر Cron إلى بيئة systemd user-bus.
|
||||
- ينظف Doctor حالة تجهيز تبعيات Plugin القديمة التي أنشأتها إصدارات OpenClaw الأقدم. كما يصلح Plugins القابلة للتنزيل والمكوّنة المفقودة عندما يستطيع السجل حلّها، وتثبت تمريرة Doctor في 2026.5.2 تلقائيًا Plugins القابلة للتنزيل التي تستخدمها إعدادات أقدم بالفعل قبل وضع علامة على الإعدادات بأنها مُعدّلة لذلك الإصدار. إذا فشل التنزيل، يبلغ Doctor عن خطأ التثبيت ويحافظ على إدخال Plugin المكوّن لمحاولة الإصلاح التالية.
|
||||
- يصلح Doctor إعدادات Plugin القديمة بإزالة معرفات Plugins المفقودة من `plugins.allow`/`plugins.entries`، إضافة إلى إعدادات القنوات المعلقة المطابقة، وأهداف Heartbeat، وتجاوزات نماذج القنوات عندما يكون اكتشاف Plugin سليمًا.
|
||||
- يعزل Doctor إعدادات Plugin غير الصالحة بتعطيل إدخال `plugins.entries.<id>` المتأثر وإزالة حمولة `config` غير الصالحة الخاصة به. يتخطى بدء تشغيل Gateway بالفعل ذلك Plugin السيئ فقط حتى تتمكن Plugins والقنوات الأخرى من متابعة العمل.
|
||||
- عيّن `OPENCLAW_SERVICE_REPAIR_POLICY=external` عندما يكون مشرف آخر مسؤولًا عن دورة حياة Gateway. يظل Doctor يبلغ عن صحة Gateway/الخدمة ويطبّق الإصلاحات غير الخدمية، لكنه يتخطى تثبيت/بدء/إعادة تشغيل/تمهيد الخدمة وتنظيف الخدمات القديمة.
|
||||
- على Linux، يتجاهل Doctor وحدات systemd الإضافية غير النشطة الشبيهة بـ Gateway ولا يعيد كتابة بيانات تعريف الأمر/نقطة الدخول لخدمة Gateway systemd قيد التشغيل أثناء الإصلاح. أوقف الخدمة أولًا أو استخدم `openclaw gateway install --force` عندما تريد عمدًا استبدال المشغّل النشط.
|
||||
- يرحّل Doctor تلقائيًا إعدادات Talk المسطحة القديمة (`talk.voiceId` و`talk.modelId` وما شابهها) إلى `talk.provider` + `talk.providers.<provider>`.
|
||||
- لم تعد عمليات تشغيل `doctor --fix` المتكررة تبلغ عن/تطبق تطبيع Talk عندما يكون الاختلاف الوحيد هو ترتيب مفاتيح الكائن.
|
||||
- يتضمن Doctor فحص جاهزية بحث الذاكرة ويمكنه التوصية بـ `openclaw configure --section model` عندما تكون بيانات اعتماد التضمين مفقودة.
|
||||
- يحذر Doctor عندما لا يكون مالك أوامر مضبوطًا. مالك الأوامر هو حساب المشغل البشري المسموح له بتشغيل أوامر المالك فقط والموافقة على الإجراءات الخطرة. لا يتيح اقتران الرسائل المباشرة إلا لشخص ما التحدث إلى الروبوت؛ إذا وافقت على مرسل قبل وجود تمهيد المالك الأول، فاضبط `commands.ownerAllowFrom` صراحة.
|
||||
- يحذر Doctor عندما تكون وكلاء وضع Codex مضبوطة وتوجد أصول Codex CLI شخصية في موطن Codex الخاص بالمشغل. تستخدم عمليات إطلاق خادم تطبيق Codex المحلي مواطن معزولة لكل وكيل، لذا استخدم `openclaw migrate codex --dry-run` لجرد الأصول التي ينبغي ترقيتها عمدًا.
|
||||
- يحذر Doctor عندما لا يكون هناك مالك أوامر مكوّن. مالك الأوامر هو حساب المشغل البشري المسموح له بتشغيل أوامر المالك فقط والموافقة على الإجراءات الخطرة. يتيح إقران الرسائل المباشرة فقط لشخص ما التحدث إلى البوت؛ إذا وافقت على مرسل قبل وجود تمهيد المالك الأول، فعيّن `commands.ownerAllowFrom` صراحةً.
|
||||
- يحذر Doctor عندما تكون وكلاء وضع Codex مكوّنة وتوجد أصول Codex CLI شخصية في موطن Codex الخاص بالمشغل. تستخدم عمليات إطلاق خادم تطبيق Codex المحلي مواطن معزولة لكل وكيل، لذا استخدم `openclaw migrate codex --dry-run` لجرد الأصول التي ينبغي ترقيتها عمدًا.
|
||||
- يحذر Doctor عندما تكون Skills المسموح بها للوكيل الافتراضي غير متاحة في بيئة التشغيل الحالية لأن المتطلبات الخاصة بالملفات التنفيذية أو متغيرات البيئة أو الإعدادات أو نظام التشغيل مفقودة. يمكن لـ `doctor --fix` تعطيل تلك Skills غير المتاحة باستخدام `skills.entries.<skill>.enabled=false`؛ ثبّت/اضبط المتطلب المفقود بدلًا من ذلك عندما تريد إبقاء Skill نشطة.
|
||||
- إذا كان وضع صندوق الرمل مفعّلًا لكن Docker غير متاح، يبلّغ Doctor عن تحذير عالي الدلالة مع معالجة (`install Docker` أو `openclaw config set agents.defaults.sandbox.mode off`).
|
||||
- إذا كانت ملفات سجل صندوق الرمل القديمة (`~/.openclaw/sandbox/containers.json` أو `~/.openclaw/sandbox/browsers.json`) موجودة، يبلّغ Doctor عنها؛ ويرحّل `openclaw doctor --fix` الإدخالات الصالحة إلى أدلة سجل مجزأة ويعزل الملفات القديمة غير الصالحة.
|
||||
- إذا كانت `gateway.auth.token`/`gateway.auth.password` مُدارة عبر SecretRef وغير متاحة في مسار الأمر الحالي، يبلّغ Doctor عن تحذير للقراءة فقط ولا يكتب بيانات اعتماد احتياطية بنص صريح.
|
||||
- إذا فشل فحص SecretRef للقناة في مسار إصلاح، يواصل Doctor العمل ويبلّغ عن تحذير بدلًا من الخروج مبكرًا.
|
||||
- بعد ترحيلات دليل الحالة، يحذر Doctor عندما تعتمد حسابات Telegram أو Discord الافتراضية المفعلة على احتياطي متغيرات البيئة ويكون `TELEGRAM_BOT_TOKEN` أو `DISCORD_BOT_TOKEN` غير متاح لعملية Doctor.
|
||||
- يتطلب الحل التلقائي لاسم مستخدم Telegram في `allowFrom` (`doctor --fix`) رمز Telegram قابلًا للحل في مسار الأمر الحالي. إذا كان فحص الرمز غير متاح، يبلّغ Doctor عن تحذير ويتجاوز الحل التلقائي لتلك التمريرة.
|
||||
- إذا كان وضع sandbox مفعّلًا لكن Docker غير متاح، يبلغ Doctor عن تحذير واضح عالي الدلالة مع طريقة معالجة (`install Docker` أو `openclaw config set agents.defaults.sandbox.mode off`).
|
||||
- إذا كانت ملفات سجل sandbox القديمة (`~/.openclaw/sandbox/containers.json` أو `~/.openclaw/sandbox/browsers.json`) موجودة، يبلغ Doctor عنها؛ ويرحّل `openclaw doctor --fix` الإدخالات الصالحة إلى أدلة سجلات مجزأة ويعزل الملفات القديمة غير الصالحة.
|
||||
- إذا كانت `gateway.auth.token`/`gateway.auth.password` مُدارة بواسطة SecretRef وغير متاحة في مسار الأمر الحالي، يبلغ Doctor عن تحذير للقراءة فقط ولا يكتب بيانات اعتماد احتياطية بنص صريح.
|
||||
- إذا فشل فحص SecretRef للقناة في مسار إصلاح، يتابع Doctor ويبلغ عن تحذير بدلًا من الخروج مبكرًا.
|
||||
- بعد ترحيلات دليل الحالة، يحذر Doctor عندما تعتمد حسابات Telegram أو Discord الافتراضية المفعّلة على بديل متغيرات البيئة ويكون `TELEGRAM_BOT_TOKEN` أو `DISCORD_BOT_TOKEN` غير متاح لعملية Doctor.
|
||||
- يتطلب الحل التلقائي لاسم مستخدم Telegram `allowFrom` (`doctor --fix`) رمز Telegram قابلًا للحل في مسار الأمر الحالي. إذا كان فحص الرمز غير متاح، يبلغ Doctor عن تحذير ويتخطى الحل التلقائي لتلك التمريرة.
|
||||
|
||||
## macOS: تجاوزات بيئة `launchctl`
|
||||
|
||||
إذا كنت قد شغلت سابقًا `launchctl setenv OPENCLAW_GATEWAY_TOKEN ...` (أو `...PASSWORD`)، فإن تلك القيمة تتجاوز ملف إعداداتك ويمكن أن تسبب أخطاء “غير مصرّح” مستمرة.
|
||||
إذا سبق لك تشغيل `launchctl setenv OPENCLAW_GATEWAY_TOKEN ...` (أو `...PASSWORD`)، فإن تلك القيمة تتجاوز ملف إعداداتك ويمكن أن تسبب أخطاء “unauthorized” مستمرة.
|
||||
|
||||
```bash
|
||||
launchctl getenv OPENCLAW_GATEWAY_TOKEN
|
||||
@ -82,7 +82,7 @@ launchctl unsetenv OPENCLAW_GATEWAY_TOKEN
|
||||
launchctl unsetenv OPENCLAW_GATEWAY_PASSWORD
|
||||
```
|
||||
|
||||
## ذو صلة
|
||||
## ذات صلة
|
||||
|
||||
- [مرجع CLI](/ar/cli)
|
||||
- [Doctor الخاص بـ Gateway](/ar/gateway/doctor)
|
||||
- [Gateway doctor](/ar/gateway/doctor)
|
||||
|
||||
@ -1,65 +1,65 @@
|
||||
---
|
||||
read_when:
|
||||
- تغيير وقت تشغيل الوكيل، أو تمهيد مساحة العمل، أو سلوك الجلسة
|
||||
summary: بيئة تشغيل الوكيل، وعقد مساحة العمل، وتمهيد الجلسة
|
||||
- تغيير وقت تشغيل الوكيل أو تهيئة مساحة العمل أو سلوك الجلسة
|
||||
summary: وقت تشغيل الوكيل، وعقد مساحة العمل، وتمهيد الجلسة
|
||||
title: بيئة تشغيل الوكيل
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T07:51:06Z"
|
||||
generated_at: "2026-05-04T02:23:10Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f4d65ee96cece296251d7d3a0512f12d2dfa900db0e5ffc0f37dcddae7ea55ad
|
||||
source_hash: 89bbbd05a9bf2054d3a1f24aeed005a05b61152a047b593addfb46817baae05a
|
||||
source_path: concepts/agent.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
يشغّل OpenClaw **وقت تشغيل وكيل مضمّنًا واحدًا** — عملية وكيل واحدة لكل
|
||||
Gateway، مع مساحة عمله الخاصة وملفات التمهيد ومخزن الجلسات الخاص به. تغطي هذه الصفحة
|
||||
عقد وقت التشغيل هذا: ما الذي يجب أن تحتويه مساحة العمل، وأي الملفات تُحقن،
|
||||
وكيف تُمهّد الجلسات بالاستناد إليها.
|
||||
OpenClaw يشغّل **بيئة تشغيل وكيل مضمنة واحدة** — عملية وكيل واحدة لكل
|
||||
Gateway، مع مساحة العمل الخاصة بها وملفات التمهيد ومخزن الجلسات. تغطي هذه الصفحة
|
||||
عقد بيئة التشغيل هذا: ما الذي يجب أن تحتويه مساحة العمل، وأي الملفات تُحقن،
|
||||
وكيف تمهّد الجلسات بالاستناد إليها.
|
||||
|
||||
## مساحة العمل (مطلوبة)
|
||||
|
||||
يستخدم OpenClaw دليل مساحة عمل وكيل واحدًا (`agents.defaults.workspace`) بوصفه دليل العمل **الوحيد** للوكيل (`cwd`) للأدوات والسياق.
|
||||
يستخدم OpenClaw دليل مساحة عمل وكيل واحدًا (`agents.defaults.workspace`) بوصفه دليل العمل **الوحيد** (`cwd`) للوكيل من أجل الأدوات والسياق.
|
||||
|
||||
موصى به: استخدم `openclaw setup` لإنشاء `~/.openclaw/openclaw.json` إذا كان مفقودًا وتهيئة ملفات مساحة العمل.
|
||||
|
||||
تخطيط مساحة العمل الكامل + دليل النسخ الاحتياطي: [مساحة عمل الوكيل](/ar/concepts/agent-workspace)
|
||||
|
||||
إذا كان `agents.defaults.sandbox` مفعّلًا، يمكن للجلسات غير الرئيسية تجاوز ذلك باستخدام
|
||||
مساحات عمل لكل جلسة ضمن `agents.defaults.sandbox.workspaceRoot` (راجع
|
||||
[إعدادات Gateway](/ar/gateway/configuration)).
|
||||
إذا كان `agents.defaults.sandbox` مفعّلًا، يمكن للجلسات غير الرئيسية تجاوز ذلك
|
||||
بمساحات عمل لكل جلسة ضمن `agents.defaults.sandbox.workspaceRoot` (راجع
|
||||
[تكوين Gateway](/ar/gateway/configuration)).
|
||||
|
||||
## ملفات التمهيد (تُحقن)
|
||||
## ملفات التمهيد (محقونة)
|
||||
|
||||
داخل `agents.defaults.workspace`، يتوقع OpenClaw هذه الملفات القابلة للتعديل من المستخدم:
|
||||
داخل `agents.defaults.workspace`، يتوقع OpenClaw هذه الملفات القابلة للتحرير من المستخدم:
|
||||
|
||||
- `AGENTS.md` — تعليمات التشغيل + “الذاكرة”
|
||||
- `SOUL.md` — الشخصية والحدود والنبرة
|
||||
- `TOOLS.md` — ملاحظات الأدوات التي يحتفظ بها المستخدم (مثل `imsg` و`sag` والاصطلاحات)
|
||||
- `BOOTSTRAP.md` — طقس تشغيل أولي لمرة واحدة (يُحذف بعد الإكمال)
|
||||
- `IDENTITY.md` — اسم الوكيل/طابعه/رمزه التعبيري
|
||||
- `AGENTS.md` — تعليمات التشغيل + "الذاكرة"
|
||||
- `SOUL.md` — الشخصية، والحدود، والنبرة
|
||||
- `TOOLS.md` — ملاحظات أدوات يصونها المستخدم (مثل `imsg`، و`sag`، والاصطلاحات)
|
||||
- `BOOTSTRAP.md` — إجراء تشغيل أولي لمرة واحدة (يُحذف بعد الاكتمال)
|
||||
- `IDENTITY.md` — اسم الوكيل/الطابع/الرمز التعبيري
|
||||
- `USER.md` — ملف المستخدم + طريقة المخاطبة المفضلة
|
||||
|
||||
في أول دورة لجلسة جديدة، يحقن OpenClaw محتويات هذه الملفات مباشرة في سياق الوكيل.
|
||||
في أول دور من جلسة جديدة، يحقن OpenClaw محتويات هذه الملفات في Project Context لموجّه النظام.
|
||||
|
||||
تُتخطى الملفات الفارغة. تُقصّ الملفات الكبيرة وتُختصر مع علامة بحيث تبقى المطالبات خفيفة (اقرأ الملف للحصول على المحتوى الكامل).
|
||||
يتم تخطي الملفات الفارغة. تُقصّر الملفات الكبيرة وتُبتر مع علامة كي تبقى الموجّهات خفيفة (اقرأ الملف للاطلاع على المحتوى الكامل).
|
||||
|
||||
إذا كان ملف مفقودًا، يحقن OpenClaw سطر علامة “ملف مفقود” واحدًا (وسيُنشئ `openclaw setup` قالبًا افتراضيًا آمنًا).
|
||||
إذا كان ملف مفقودًا، يحقن OpenClaw سطر علامة "ملف مفقود" واحدًا (وسينشئ `openclaw setup` قالبًا افتراضيًا آمنًا).
|
||||
|
||||
يُنشأ `BOOTSTRAP.md` فقط من أجل **مساحة عمل جديدة تمامًا** (لا توجد ملفات تمهيد أخرى). إذا حذفته بعد إكمال الطقس، فيجب ألا يُعاد إنشاؤه عند عمليات إعادة التشغيل اللاحقة.
|
||||
لا يُنشأ `BOOTSTRAP.md` إلا من أجل **مساحة عمل جديدة تمامًا** (لا توجد ملفات تمهيد أخرى). أثناء انتظاره، يُبقيه OpenClaw في Project Context ويضيف إرشادات تمهيد في موجّه النظام للإجراء الأولي بدلًا من نسخه إلى رسالة المستخدم. إذا حذفته بعد إكمال الإجراء، فلا ينبغي أن يُعاد إنشاؤه عند عمليات إعادة التشغيل اللاحقة.
|
||||
|
||||
لتعطيل إنشاء ملفات التمهيد بالكامل (لمساحات العمل المجهزة مسبقًا)، عيّن:
|
||||
لتعطيل إنشاء ملفات التمهيد بالكامل (لمساحات العمل المجهزة مسبقًا)، اضبط:
|
||||
|
||||
```json5
|
||||
{ agents: { defaults: { skipBootstrap: true } } }
|
||||
```
|
||||
|
||||
## الأدوات المدمجة
|
||||
## الأدوات المضمنة
|
||||
|
||||
الأدوات الأساسية (read/exec/edit/write وأدوات النظام ذات الصلة) متاحة دائمًا،
|
||||
الأدوات الأساسية (القراءة/التنفيذ/التحرير/الكتابة وأدوات النظام ذات الصلة) متاحة دائمًا،
|
||||
وفقًا لسياسة الأدوات. `apply_patch` اختياري ومحكوم بواسطة
|
||||
`tools.exec.applyPatch`. لا يتحكم `TOOLS.md` في الأدوات الموجودة؛ بل هو
|
||||
إرشاد لكيف تريد _أنت_ استخدامها.
|
||||
إرشاد لكيفية رغبتك _أنت_ في استخدامها.
|
||||
|
||||
## Skills
|
||||
|
||||
@ -72,17 +72,17 @@ Gateway، مع مساحة عمله الخاصة وملفات التمهيد وم
|
||||
- المضمّنة (المشحونة مع التثبيت)
|
||||
- مجلدات Skills إضافية: `skills.load.extraDirs`
|
||||
|
||||
يمكن حجب Skills بواسطة الإعداد/البيئة (راجع `skills` في [إعدادات Gateway](/ar/gateway/configuration)).
|
||||
يمكن تقييد Skills بواسطة التكوين/البيئة (راجع `skills` في [تكوين Gateway](/ar/gateway/configuration)).
|
||||
|
||||
## حدود وقت التشغيل
|
||||
## حدود بيئة التشغيل
|
||||
|
||||
يُبنى وقت تشغيل الوكيل المضمّن على نواة وكيل Pi (النماذج والأدوات
|
||||
ومسار المطالبة). إدارة الجلسات والاكتشاف وتوصيل الأدوات وتسليم القنوات
|
||||
بيئة تشغيل الوكيل المضمنة مبنية على نواة وكيل Pi (النماذج، والأدوات، ومسار
|
||||
الموجّهات). إدارة الجلسات، والاكتشاف، وربط الأدوات، وتسليم القنوات
|
||||
هي طبقات يملكها OpenClaw فوق تلك النواة.
|
||||
|
||||
## الجلسات
|
||||
|
||||
تُخزّن نسخ الجلسات بصيغة JSONL في:
|
||||
تُخزّن نصوص الجلسات بصيغة JSONL في:
|
||||
|
||||
- `~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl`
|
||||
|
||||
@ -92,50 +92,54 @@ Gateway، مع مساحة عمله الخاصة وملفات التمهيد وم
|
||||
## التوجيه أثناء البث
|
||||
|
||||
عندما يكون وضع الطابور `steer`، تُحقن الرسائل الواردة في التشغيل الحالي.
|
||||
يُسلّم التوجيه المصطف **بعد انتهاء دورة المساعد الحالية من
|
||||
تنفيذ استدعاءات أدواتها**، وقبل استدعاء LLM التالي. يفرّغ Pi كل رسائل
|
||||
التوجيه المعلّقة معًا لـ `steer`؛ أما `queue` القديم فيفرّغ رسالة واحدة لكل
|
||||
حد نموذج. لم يعد التوجيه يتخطى استدعاءات الأدوات المتبقية من رسالة
|
||||
يُسلّم التوجيه في الطابور **بعد أن ينتهي دور المساعد الحالي من
|
||||
تنفيذ استدعاءات أدواته**، وقبل استدعاء LLM التالي. يفرّغ Pi كل رسائل
|
||||
التوجيه المعلّقة معًا من أجل `steer`؛ أما `queue` القديم فيفرّغ رسالة واحدة لكل
|
||||
حدّ نموذج. لم يعد التوجيه يتخطى استدعاءات الأدوات المتبقية من رسالة
|
||||
المساعد الحالية.
|
||||
|
||||
عندما يكون وضع الطابور `followup` أو `collect`، تُحتجز الرسائل الواردة حتى
|
||||
تنتهي الدورة الحالية، ثم تبدأ دورة وكيل جديدة مع الحمولات المصطفة. راجع
|
||||
[الطابور](/ar/concepts/queue) و[طابور التوجيه](/ar/concepts/queue-steering) لمعرفة وضع
|
||||
وسلوك الحدود.
|
||||
عندما يكون وضع الطابور `followup` أو `collect`، تُحتفظ بالرسائل الواردة حتى
|
||||
ينتهي الدور الحالي، ثم يبدأ دور وكيل جديد مع الحمولات الموضوعة في الطابور. راجع
|
||||
[الطابور](/ar/concepts/queue) و[طابور التوجيه](/ar/concepts/queue-steering) لسلوك الأوضاع
|
||||
والحدود.
|
||||
|
||||
يرسل بث الكتل كتل المساعد المكتملة بمجرد انتهائها؛ وهو
|
||||
**معطّل افتراضيًا** (`agents.defaults.blockStreamingDefault: "off"`).
|
||||
اضبط الحد عبر `agents.defaults.blockStreamingBreak` (`text_end` مقابل `message_end`؛ الافتراضي text_end).
|
||||
تحكّم في تقطيع الكتل اللين باستخدام `agents.defaults.blockStreamingChunk` (القيمة الافتراضية
|
||||
يرسل بث الكتل كتل المساعد المكتملة فور انتهائها؛ وهو
|
||||
**متوقف افتراضيًا** (`agents.defaults.blockStreamingDefault: "off"`).
|
||||
اضبط الحد عبر `agents.defaults.blockStreamingBreak` (`text_end` مقابل `message_end`؛ القيمة الافتراضية text_end).
|
||||
تحكم في تجزئة الكتل اللينة باستخدام `agents.defaults.blockStreamingChunk` (القيمة الافتراضية
|
||||
800–1200 حرف؛ يفضّل فواصل الفقرات، ثم الأسطر الجديدة؛ والجمل أخيرًا).
|
||||
ادمج المقاطع المبثوثة باستخدام `agents.defaults.blockStreamingCoalesce` لتقليل
|
||||
الإزعاج الناتج عن الأسطر المفردة (دمج قائم على الخمول قبل الإرسال). تتطلب القنوات غير Telegram
|
||||
تعيين `*.blockStreaming: true` صراحةً لتمكين ردود الكتل.
|
||||
تُصدر ملخصات الأدوات المطوّلة عند بدء الأداة (بلا تأخير تجميعي)؛ ويبث Control UI
|
||||
الرسائل أحادية السطر المتكررة (دمج قائم على الخمول قبل الإرسال). تتطلب القنوات غير Telegram
|
||||
إعداد `*.blockStreaming: true` صراحةً لتفعيل ردود الكتل.
|
||||
تُصدر ملخصات الأدوات المطوّلة عند بدء الأداة (بدون debounce)؛ وتبث Control UI
|
||||
مخرجات الأدوات عبر أحداث الوكيل عند توفرها.
|
||||
تفاصيل أكثر: [البث + التقطيع](/ar/concepts/streaming).
|
||||
مزيد من التفاصيل: [البث + التجزئة](/ar/concepts/streaming).
|
||||
|
||||
## مراجع النماذج
|
||||
|
||||
تُحلّل مراجع النماذج في الإعدادات (مثل `agents.defaults.model` و`agents.defaults.models`) بالتقسيم عند أول `/`.
|
||||
تُحلّل مراجع النماذج في التكوين (مثل `agents.defaults.model` و`agents.defaults.models`) بالتقسيم عند أول `/`.
|
||||
|
||||
- استخدم `provider/model` عند إعداد النماذج.
|
||||
- إذا كان معرّف النموذج نفسه يحتوي على `/` (بنمط OpenRouter)، فأضف بادئة المزوّد (مثال: `openrouter/moonshotai/kimi-k2`).
|
||||
- إذا حذفت المزوّد، يحاول OpenClaw استخدام اسم مستعار أولًا، ثم مطابقة مزوّد مهيأ فريدة لمعرّف النموذج الدقيق ذلك، وبعدها فقط يعود إلى مزوّد الإعداد الافتراضي. إذا لم يعد ذلك المزوّد يوفّر النموذج الافتراضي المهيأ، يعود OpenClaw إلى أول مزوّد/نموذج مهيأ بدلًا من إظهار افتراضي قديم لمزوّد تمت إزالته.
|
||||
- استخدم `provider/model` عند تكوين النماذج.
|
||||
- إذا كان معرّف النموذج نفسه يحتوي على `/` (بأسلوب OpenRouter)، فأدرج بادئة المزوّد (مثال: `openrouter/moonshotai/kimi-k2`).
|
||||
- إذا حذفت المزوّد، يجرّب OpenClaw اسمًا مستعارًا أولًا، ثم مطابقة مزوّد مكوّن فريدة
|
||||
لمعرّف النموذج الدقيق ذاك، وبعدها فقط يرجع
|
||||
إلى المزوّد الافتراضي المكوّن. إذا لم يعد ذلك المزوّد يعرض
|
||||
النموذج الافتراضي المكوّن، يرجع OpenClaw إلى أول
|
||||
مزوّد/نموذج مكوّن بدلًا من إظهار افتراضي قديم لمزوّد مُزال.
|
||||
|
||||
## الإعدادات (الحد الأدنى)
|
||||
## التكوين (الحد الأدنى)
|
||||
|
||||
كحد أدنى، عيّن:
|
||||
كحد أدنى، اضبط:
|
||||
|
||||
- `agents.defaults.workspace`
|
||||
- `channels.whatsapp.allowFrom` (موصى به بشدة)
|
||||
|
||||
---
|
||||
|
||||
_التالي: [محادثات المجموعات](/ar/channels/group-messages)_ 🦞
|
||||
_التالي: [الدردشات الجماعية](/ar/channels/group-messages)_ 🦞
|
||||
|
||||
## ذات صلة
|
||||
|
||||
- [مساحة عمل الوكيل](/ar/concepts/agent-workspace)
|
||||
- [توجيه متعدد الوكلاء](/ar/concepts/multi-agent)
|
||||
- [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)
|
||||
- [إدارة الجلسات](/ar/concepts/session)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user