المجموعات
يتعامل OpenClaw مع الدردشات الجماعية بشكل متسق عبر الأسطح المختلفة: Discord وiMessage وMatrix وMicrosoft Teams وSignal وSlack وTelegram وWhatsApp وZalo.مقدمة للمبتدئين (دقيقتان)
يعمل OpenClaw من خلال حسابات المراسلة الخاصة بك. لا يوجد مستخدم بوت منفصل على WhatsApp. إذا كنت أنت في مجموعة، يمكن لـ OpenClaw رؤية تلك المجموعة والرد فيها. السلوك الافتراضي:- المجموعات مقيّدة (
groupPolicy: "allowlist"). - تتطلب الردود إشارة، إلا إذا عطّلت تقييد الإشارات صراحةً.
خلاصة سريعةالتدفق السريع (ما الذي يحدث لرسالة مجموعة):
- يتم التحكم في الوصول عبر الرسائل المباشرة بواسطة
*.allowFrom.- يتم التحكم في الوصول إلى المجموعات بواسطة
*.groupPolicy+ قوائم السماح (*.groups,*.groupAllowFrom).- يتم التحكم في تشغيل الردود بواسطة تقييد الإشارات (
requireMention,/activation).
رؤية السياق وقوائم السماح
هناك عنصران مختلفان يتحكمان في أمان المجموعات:- تفويض التشغيل: من يمكنه تشغيل الوكيل (
groupPolicy,groups,groupAllowFrom, وقوائم السماح الخاصة بالقناة). - رؤية السياق: ما السياق التكميلي الذي يُحقن في النموذج (نص الرد، والاقتباسات، وسجل السلسلة، وبيانات إعادة التوجيه).
- تطبق بعض القنوات بالفعل تصفية قائمة على المرسل للسياق التكميلي في مسارات محددة (مثل تهيئة سلاسل Slack وعمليات بحث الرد/السلسلة في Matrix).
- ما تزال قنوات أخرى تمرر سياق الاقتباس/الرد/إعادة التوجيه كما تم استلامه.
contextVisibility: "all"(الافتراضي) يبقي السلوك الحالي كما تم استلامه.contextVisibility: "allowlist"يرشّح السياق التكميلي إلى المرسلين المسموح لهم.contextVisibility: "allowlist_quote"هوallowlistمع استثناء صريح واحد للاقتباس/الرد.
| الهدف | ما الذي يجب ضبطه |
|---|---|
| السماح بكل المجموعات لكن الرد فقط عند @mentions | groups: { "*": { requireMention: true } } |
| تعطيل كل ردود المجموعات | groupPolicy: "disabled" |
| مجموعات محددة فقط | groups: { "<group-id>": { ... } } (من دون مفتاح "*") |
| أنت وحدك من يمكنه التشغيل في المجموعات | groupPolicy: "allowlist", groupAllowFrom: ["+1555..."] |
مفاتيح الجلسات
- تستخدم جلسات المجموعات مفاتيح جلسات بصيغة
agent:<agentId>:<channel>:group:<id>(أما الغرف/القنوات فتستخدمagent:<agentId>:<channel>:channel:<id>). - تضيف موضوعات منتدى Telegram اللاحقة
:topic:<threadId>إلى معرّف المجموعة بحيث يكون لكل موضوع جلسته الخاصة. - تستخدم الدردشات المباشرة الجلسة الرئيسية (أو جلسة لكل مرسل إذا تم تكوين ذلك).
- يتم تخطي heartbeat لجلسات المجموعات.
النمط: الرسائل المباشرة الشخصية + المجموعات العامة (وكيل واحد)
نعم — هذا يعمل جيدًا إذا كانت الحركة “الشخصية” لديك هي الرسائل المباشرة وكانت الحركة “العامة” لديك هي المجموعات. السبب: في وضع الوكيل الواحد، تصل الرسائل المباشرة عادةً إلى مفتاح الجلسة الرئيسية (agent:main:main)، بينما تستخدم المجموعات دائمًا مفاتيح جلسات غير رئيسية (agent:main:<channel>:group:<id>). إذا فعّلت العزل باستخدام mode: "non-main"، فستعمل جلسات المجموعات تلك داخل Docker بينما تبقى جلسة الرسائل المباشرة الرئيسية على المضيف.
وهذا يمنحك “عقل” وكيل واحدًا (مساحة عمل + ذاكرة مشتركتان)، ولكن وضعيتين مختلفتين للتنفيذ:
- الرسائل المباشرة: أدوات كاملة (على المضيف)
- المجموعات: صندوق عزل + أدوات مراسلة مقيّدة (Docker)
إذا كنت تحتاج إلى مساحات عمل/شخصيات منفصلة تمامًا (“الشخصي” و”العام” يجب ألا يختلطا أبدًا)، فاستخدم وكيلًا ثانيًا + ربطًا. راجع Multi-Agent Routing.مثال (الرسائل المباشرة على المضيف، والمجموعات داخل صندوق عزل + أدوات مراسلة فقط):
workspaceAccess: "none" وقم بتركيب المسارات المسموح بها فقط داخل صندوق العزل:
- مفاتيح الإعداد والقيم الافتراضية: Gateway configuration
- تصحيح سبب حظر أداة: Sandbox vs Tool Policy vs Elevated
- تفاصيل bind mounts: Sandboxing
تسميات العرض
- تستخدم تسميات واجهة المستخدم
displayNameعندما تكون متاحة، وتُنسَّق بالشكل<channel>:<token>. #roomمحجوزة للغرف/القنوات؛ وتستخدم الدردشات الجماعيةg-<slug>(أحرف صغيرة، والمسافات تتحول إلى-، مع الاحتفاظ بـ#@+._-).
سياسة المجموعات
تحكّم في كيفية التعامل مع رسائل المجموعات/الغرف لكل قناة:| السياسة | السلوك |
|---|---|
"open" | تتجاوز المجموعات قوائم السماح؛ وما يزال تقييد الإشارات مطبقًا. |
"disabled" | حظر كل رسائل المجموعات بالكامل. |
"allowlist" | السماح فقط للمجموعات/الغرف التي تطابق قائمة السماح المكوّنة. |
groupPolicyمنفصلة عن تقييد الإشارات (الذي يتطلب @mentions).- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: استخدم
groupAllowFrom(والبديل:allowFromالصريح). - تنطبق موافقات إقران الرسائل المباشرة (مدخلات المخزن
*-allowFrom) على الوصول عبر الرسائل المباشرة فقط؛ أما تفويض مرسلي المجموعات فيبقى صريحًا عبر قوائم سماح المجموعات. - Discord: تستخدم قائمة السماح
channels.discord.guilds.<id>.channels. - Slack: تستخدم قائمة السماح
channels.slack.channels. - 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.
groupPolicy(open/disabled/allowlist)- قوائم سماح المجموعات (
*.groups,*.groupAllowFrom, قائمة السماح الخاصة بالقناة) - تقييد الإشارات (
requireMention,/activation)
تقييد الإشارات (الافتراضي)
تتطلب رسائل المجموعات إشارة ما لم يتم تجاوز ذلك لكل مجموعة على حدة. تعيش القيم الافتراضية لكل نظام فرعي تحت*.groups."*".
يُحتسب الرد على رسالة البوت كإشارة ضمنية (عندما تدعم القناة بيانات الرد الوصفية). ينطبق هذا على Telegram وWhatsApp وSlack وDiscord وMicrosoft Teams.
mentionPatternsهي أنماط regex آمنة وغير حساسة لحالة الأحرف؛ ويتم تجاهل الأنماط غير الصالحة وأشكال التكرار المتداخل غير الآمنة.- الأسطح التي توفّر إشارات صريحة ما تزال تمر؛ والأنماط هي بديل احتياطي.
- تجاوز لكل وكيل:
agents.list[].groupChat.mentionPatterns(مفيد عندما تشترك عدة وكلاء في مجموعة واحدة). - لا يُفرض تقييد الإشارات إلا عندما يكون اكتشاف الإشارات ممكنًا (إشارات أصلية أو تكوين
mentionPatterns). - تعيش القيم الافتراضية لـ Discord في
channels.discord.guilds."*"(وقابلة للتجاوز لكل خادم/قناة). - يُغلَّف سياق سجل المجموعات بشكل موحّد عبر القنوات وهو معلّق فقط (الرسائل التي تم تخطيها بسبب تقييد الإشارات)؛ استخدم
messages.groupChat.historyLimitللقيمة الافتراضية العامة وchannels.<channel>.historyLimit(أوchannels.<channel>.accounts.*.historyLimit) للتجاوزات. اضبط القيمة إلى0للتعطيل.
قيود أدوات المجموعات/القنوات (اختياري)
تدعم بعض إعدادات القنوات تقييد الأدوات المتاحة داخل مجموعة/غرفة/قناة محددة.tools: السماح/المنع للأدوات على مستوى المجموعة كلها.toolsBySender: تجاوزات لكل مرسل داخل المجموعة. استخدم بادئات مفاتيح صريحة:id:<senderId>,e164:<phone>,username:<handle>,name:<displayName>, والرمز الشامل"*". ما تزال المفاتيح القديمة غير المسبوقة مقبولة وتُطابَق على أنهاid:فقط.
- مطابقة
toolsBySenderللمجموعة/القناة toolsللمجموعة/القناة- مطابقة
toolsBySenderالافتراضية ("*") toolsالافتراضية ("*")
- تُطبَّق قيود أدوات المجموعات/القنوات بالإضافة إلى سياسة الأدوات العامة/الخاصة بالوكيل (وما يزال المنع له الأولوية).
- تستخدم بعض القنوات تداخلًا مختلفًا للغرف/القنوات (مثل Discord
guilds.*.channels.*وSlackchannels.*وMicrosoft Teamsteams.*.channels.*).
قوائم سماح المجموعات
عند تكوينchannels.whatsapp.groups أو channels.telegram.groups أو channels.imessage.groups، تعمل المفاتيح كقائمة سماح للمجموعات. استخدم "*" للسماح بكل المجموعات مع الاستمرار في ضبط سلوك الإشارات الافتراضي.
التباس شائع: موافقة إقران الرسائل المباشرة ليست هي نفسها تفويض المجموعات.
بالنسبة إلى القنوات التي تدعم إقران الرسائل المباشرة، يفتح مخزن الإقران الرسائل المباشرة فقط. أما أوامر المجموعات فما تزال تتطلب تفويضًا صريحًا لمرسل المجموعة من قوائم السماح في الإعداد، مثل groupAllowFrom أو البديل الموثق في الإعداد لتلك القناة.
النوايا الشائعة (نسخ/لصق):
- تعطيل كل ردود المجموعات
- السماح فقط بمجموعات محددة (WhatsApp)
- السماح بكل المجموعات لكن مع طلب الإشارة (بشكل صريح)
- المالك فقط يمكنه التشغيل في المجموعات (WhatsApp)
التفعيل (للمالك فقط)
يمكن لمالكي المجموعات تبديل التفعيل لكل مجموعة:/activation mention/activation always
channels.whatsapp.allowFrom (أو E.164 الخاص بالبوت نفسه عند عدم ضبطه). أرسل الأمر كرسالة مستقلة. وتتجاهل الأسطح الأخرى حاليًا /activation.
حقول السياق
تضبط الحمولات الواردة من المجموعات ما يلي:ChatType=groupGroupSubject(إذا كان معروفًا)GroupMembers(إذا كانوا معروفين)WasMentioned(نتيجة تقييد الإشارات)- تتضمن موضوعات منتدى Telegram أيضًا
MessageThreadIdوIsForum.
- يمكن لـ BlueBubbles اختياريًا إثراء مشاركي مجموعات macOS غير المسمّين من قاعدة بيانات جهات الاتصال المحلية قبل تعبئة
GroupMembers. وهذا معطّل افتراضيًا ولا يعمل إلا بعد اجتياز تقييد المجموعات العادي.
\n الحرفية.
تفاصيل iMessage
- يُفضَّل استخدام
chat_id:<id>عند التوجيه أو الإدراج في قائمة السماح. - عرض الدردشات:
imsg chats --limit 20. - تعود الردود الجماعية دائمًا إلى
chat_idنفسه.