المجموعات
يتعامل 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)
إذا كنت تحتاج إلى مساحات عمل/شخصيات منفصلة تمامًا (يجب ألا يختلط “الشخصي” و”العام” أبدًا)، فاستخدم وكيلاً ثانيًا + bindings. راجع التوجيه متعدد الوكلاء.مثال (الرسائل الخاصة على المضيف، والمجموعات داخل العزل + أدوات مراسلة فقط):
workspaceAccess: "none" وقم بتحميل المسارات الموجودة في قائمة السماح فقط داخل sandbox:
- مفاتيح الإعدادات والقيم الافتراضية: إعدادات Gateway
- تصحيح سبب حظر أداة: Sandbox مقابل Tool Policy مقابل Elevated
- تفاصيل bind mounts: العزل
تسميات العرض
- تستخدم تسميات واجهة المستخدم
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 وZaloUser.
mentionPatternsهي أنماط regex آمنة وغير حساسة لحالة الأحرف؛ ويتم تجاهل الأنماط غير الصالحة وأشكال التكرار المتداخل غير الآمنة.- الأسطح التي توفر إشارات صريحة تظل تمر؛ والأنماط هي بديل احتياطي.
- تجاوز لكل وكيل:
agents.list[].groupChat.mentionPatterns(مفيد عندما تشترك عدة وكلاء في مجموعة). - لا يتم فرض تقييد الإشارات إلا عندما يكون اكتشاف الإشارات ممكنًا (إشارات أصلية أو تم ضبط
mentionPatterns). - توجد القيم الافتراضية لـ Discord ضمن
channels.discord.guilds."*"(وقابلة للتجاوز لكل guild/channel). - يتم تغليف سياق سجل المجموعات بشكل موحد عبر القنوات وهو معلّق فقط (الرسائل التي تم تخطيها بسبب تقييد الإشارات)؛ استخدم
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 من قاعدة بيانات Contacts المحلية قبل تعبئة
GroupMembers. يكون هذا معطلًا افتراضيًا ولا يعمل إلا بعد تجاوز التقييد العادي للمجموعات.
\n الحرفية.
تفاصيل iMessage
- فضّل
chat_id:<id>عند التوجيه أو إضافة العناصر إلى قائمة السماح. - عرض الدردشات:
imsg chats --limit 20. - تعود الردود في المجموعات دائمًا إلى نفس
chat_id.