OpenClaw يتعامل مع محادثات المجموعات باتساق عبر الواجهات: Discord، iMessage، Matrix، Microsoft Teams، Signal، Slack، Telegram، WhatsApp، Zalo.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
مقدمة للمبتدئين (دقيقتان)
OpenClaw “يعيش” على حسابات المراسلة الخاصة بك. لا يوجد مستخدم بوت WhatsApp منفصل. إذا كنت أنت في مجموعة، فيمكن لـ OpenClaw رؤية تلك المجموعة والرد فيها. السلوك الافتراضي:- المجموعات مقيّدة (
groupPolicy: "allowlist"). - تتطلب الردود إشارة ما لم تعطّل بوابة الإشارات صراحة.
- الردود النهائية العادية في المجموعات/القنوات تكون خاصة افتراضيًا. يستخدم إخراج الغرفة المرئي أداة
message.
ملخص سريع
- الوصول إلى الرسائل المباشرة تتحكم به
*.allowFrom. - الوصول إلى المجموعات تتحكم به
*.groupPolicy+ قوائم السماح (*.groups,*.groupAllowFrom). - تشغيل الردود تتحكم به بوابة الإشارات (
requireMention,/activation).
الردود المرئية
بالنسبة لغرف المجموعات/القنوات، يضبط OpenClaw افتراضيًاmessages.groupChat.visibleReplies: "message_tool".
يكتب openclaw doctor --fix هذا الإعداد الافتراضي في إعدادات القنوات المكوّنة التي لا تتضمنه.
يعني ذلك أن الوكيل لا يزال يعالج الدور ويمكنه تحديث حالة الذاكرة/الجلسة، لكن إجابته النهائية العادية لا تُنشر تلقائيًا مرة أخرى في الغرفة. للتحدث بشكل مرئي، يستخدم الوكيل message(action=send).
يعتمد هذا الإعداد الافتراضي على نموذج/وقت تشغيل يستدعي الأدوات بشكل موثوق. إذا أظهرت السجلات
نص المساعد لكن didSendViaMessagingTool: false، فهذا يعني أن النموذج أجاب
بشكل خاص بدلًا من استدعاء أداة الرسائل. هذا ليس فشل إرسال في
Discord/Slack/Telegram. استخدم نموذجًا موثوقًا في استدعاء الأدوات
لجلسات المجموعات/القنوات، أو اضبط
messages.groupChat.visibleReplies: "automatic" لاستعادة الردود النهائية المرئية
القديمة.
إذا كانت أداة الرسائل غير متاحة ضمن سياسة الأدوات النشطة، يعود OpenClaw
إلى الردود المرئية التلقائية بدلًا من كتم الاستجابة بصمت.
يحذر openclaw doctor من عدم التطابق هذا.
بالنسبة للمحادثات المباشرة وأي دور مصدر آخر، استخدم messages.visibleReplies: "message_tool" لتطبيق سلوك الردود المرئية بالأداة فقط نفسه على مستوى عام. يمكن للحزم أيضًا اختيار هذا كإعداد افتراضي عند عدم ضبطه؛ تفعل حزمة Codex ذلك للمحادثات المباشرة في وضع Codex. يبقى messages.groupChat.visibleReplies التجاوز الأكثر تحديدًا لغرف المجموعات/القنوات.
يستبدل هذا النمط القديم الذي كان يجبر النموذج على الإجابة بـ NO_REPLY لمعظم أدوار وضع المراقبة. في وضع الأداة فقط، يعني عدم فعل شيء مرئي ببساطة عدم استدعاء أداة الرسائل.
لا تزال مؤشرات الكتابة تُرسل أثناء عمل الوكيل في وضع الأداة فقط. تتم ترقية وضع الكتابة الافتراضي للمجموعات من “message” إلى “instant” لهذه الأدوار لأنه قد لا يوجد أبدًا نص رسالة مساعد عادي قبل أن يقرر الوكيل ما إذا كان سيستدعي أداة الرسائل. لا يزال إعداد وضع الكتابة الصريح له الأولوية.
لاستعادة الردود النهائية التلقائية القديمة لغرف المجموعات/القنوات:
messages بشكل ساخن بعد حفظ الملف. أعد التشغيل فقط
عندما تكون مراقبة الملفات أو إعادة تحميل الإعدادات معطلة في النشر.
لاشتراط مرور الإخراج المرئي عبر أداة الرسائل لكل محادثة مصدر:
visibleReplies: "message_tool" وترد دائمًا بشكل مرئي حتى تحصل واجهة أوامر القناة الأصلية على الاستجابة التي تتوقعها. ينطبق هذا على أدوار الأوامر الأصلية المتحقق منها فقط؛ لا تزال أوامر /... المكتوبة كنص وأدوار الدردشة العادية تتبع الإعداد الافتراضي المكوّن للمجموعة.
رؤية السياق وقوائم السماح
يتضمن أمان المجموعات عنصرين مختلفين للتحكم:- تفويض التشغيل: من يمكنه تشغيل الوكيل (
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..."] |
| إعادة استخدام مجموعة مرسلين موثوقين عبر القنوات | groupAllowFrom: ["accessGroup:operators"] |
مفاتيح الجلسات
- تستخدم جلسات المجموعات مفاتيح جلسات
agent:<agentId>:<channel>:group:<id>(تستخدم الغرف/القنواتagent:<agentId>:<channel>:channel:<id>). - تضيف مواضيع منتدى Telegram
:topic:<threadId>إلى معرّف المجموعة بحيث يكون لكل موضوع جلسته الخاصة. - تستخدم المحادثات المباشرة الجلسة الرئيسية (أو حسب المرسل إذا كان مكوّنًا).
- يتم تخطي Heartbeats لجلسات المجموعات.
النمط: رسائل مباشرة شخصية + مجموعات عامة (وكيل واحد)
نعم — يعمل هذا جيدًا إذا كان مرورك “الشخصي” هو رسائل مباشرة وكان مرورك “العام” هو مجموعات. السبب: في وضع الوكيل الواحد، تصل الرسائل المباشرة عادةً إلى مفتاح الجلسة الرئيسية (agent:main:main)، بينما تستخدم المجموعات دائمًا مفاتيح جلسات غير رئيسية (agent:main:<channel>:group:<id>). إذا فعّلت العزل بـ mode: "non-main"، تعمل جلسات المجموعات تلك في خلفية العزل المكوّنة بينما تبقى جلسة الرسائل المباشرة الرئيسية على المضيف. Docker هو الخلفية الافتراضية إذا لم تختر واحدة.
يمنحك هذا “عقل” وكيل واحدًا (مساحة عمل + ذاكرة مشتركتان)، لكن وضعين للتنفيذ:
- الرسائل المباشرة: أدوات كاملة (المضيف)
- المجموعات: عزل + أدوات مقيّدة
إذا كنت تحتاج إلى مساحات عمل/شخصيات منفصلة حقًا (يجب ألا يختلط “الشخصي” و”العام” أبدًا)، فاستخدم وكيلًا ثانيًا + ربطًا. راجع توجيه متعدد الوكلاء.
- الرسائل المباشرة على المضيف، والمجموعات معزولة
- المجموعات ترى مجلدًا مدرجًا في قائمة السماح فقط
- مفاتيح الإعدادات والافتراضيات: إعدادات Gateway
- تصحيح سبب حظر أداة: العزل مقابل سياسة الأدوات مقابل الصلاحيات المرتفعة
- تفاصيل الربط: العزل
تسميات العرض
- تستخدم تسميات UI
displayNameعند توفره، منسقة على هيئة<channel>:<token>. #roomمحجوز للغرف/القنوات؛ تستخدم محادثات المجموعاتg-<slug>(أحرف صغيرة، المسافات ->-، مع إبقاء#@+._-).
سياسة المجموعات
تحكم في كيفية التعامل مع رسائل المجموعات/الغرف لكل قناة:| السياسة | السلوك |
|---|---|
"open" | تتجاوز المجموعات قوائم السماح؛ تظل بوابة الإشارات مطبقة. |
"disabled" | حظر كل رسائل المجموعات بالكامل. |
"allowlist" | السماح فقط بالمجموعات/الغرف التي تطابق قائمة السماح المكوّنة. |
ملاحظات لكل قناة
ملاحظات لكل قناة
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لكل غرفة. - تتحكم رسائل المجموعات المباشرة بشكل منفصل (
channels.discord.dm.*،channels.slack.dm.*). - يمكن لقائمة سماح Telegram مطابقة معرّفات المستخدمين (
"123456789"،"telegram:123456789"،"tg:123456789") أو أسماء المستخدمين ("@alice"أو"alice")، والبادئات غير حساسة لحالة الأحرف. - الافتراضي هو
groupPolicy: "allowlist"؛ إذا كانت قائمة سماح المجموعات فارغة، فسيتم حظر رسائل المجموعة. - أمان وقت التشغيل: عندما تكون كتلة المزوّد مفقودة تماما (
channels.<provider>غير موجودة)، تعود سياسة المجموعة إلى وضع مغلق عند الفشل (عادةallowlist) بدلا من وراثةchannels.defaults.groupPolicy.
قوائم سماح المجموعات
قوائم سماح المجموعات (
*.groups، *.groupAllowFrom، قائمة السماح الخاصة بالقناة).بوابة الإشارات (افتراضي)
تتطلب رسائل المجموعة إشارة ما لم يتم تجاوز ذلك لكل مجموعة. توجد الإعدادات الافتراضية لكل نظام فرعي تحت*.groups."*".
يُعد الرد على رسالة بوت إشارة ضمنية عندما تدعم القناة بيانات الرد الوصفية. كما يمكن أن يُعد اقتباس رسالة بوت إشارة ضمنية في القنوات التي تعرض بيانات الاقتباس الوصفية. تشمل الحالات المدمجة الحالية Telegram وWhatsApp وSlack وDiscord وMicrosoft Teams وZaloUser.
ملاحظات بوابة الإشارات
ملاحظات بوابة الإشارات
mentionPatternsهي أنماط تعبيرات منتظمة آمنة وغير حساسة لحالة الأحرف؛ يتم تجاهل الأنماط غير الصالحة وأشكال التكرار المتداخل غير الآمنة.- الأسطح التي توفر إشارات صريحة لا تزال تمر؛ الأنماط هي احتياطي.
- تجاوز لكل وكيل:
agents.list[].groupChat.mentionPatterns(مفيد عندما يشارك عدة وكلاء مجموعة واحدة). - لا يتم فرض بوابة الإشارات إلا عندما يكون اكتشاف الإشارات ممكنا (الإشارات الأصلية أو إعداد
mentionPatterns). - لا يؤدي السماح لمجموعة أو مرسل إلى تعطيل بوابة الإشارات؛ اضبط
requireMentionلتلك المجموعة علىfalseعندما يجب أن تؤدي كل الرسائل إلى التشغيل. - يحمل سياق موجه دردشة المجموعة تعليمة الرد الصامت المحلولة في كل دور؛ يجب ألا تكرر ملفات مساحة العمل آليات
NO_REPLY. - تتعامل المجموعات التي تسمح بالردود الصامتة مع أدوار النموذج النظيفة الفارغة أو التي تحتوي على استدلال فقط على أنها صامتة، بما يعادل
NO_REPLY. تفعل الدردشات المباشرة الشيء نفسه فقط عندما تكون الردود الصامتة المباشرة مسموحة صراحة؛ وإلا تظل الردود الفارغة أدوارا فاشلة للوكيل. - توجد إعدادات Discord الافتراضية في
channels.discord.guilds."*"(قابلة للتجاوز لكل خادم/قناة). - يتم تغليف سياق سجل المجموعة بشكل موحد عبر القنوات. تحتفظ المجموعات الخاضعة لبوابة الإشارات بالرسائل المتخطاة المعلقة؛ وقد تحتفظ المجموعات الدائمة التشغيل أيضا برسائل الغرفة المعالجة حديثا عندما تدعم القناة ذلك. استخدم
messages.groupChat.historyLimitللإعداد الافتراضي العام وchannels.<channel>.historyLimit(أوchannels.<channel>.accounts.*.historyLimit) للتجاوزات. اضبطه على0للتعطيل.
قيود أدوات المجموعة/القناة (اختياري)
تدعم بعض إعدادات القنوات تقييد الأدوات المتاحة داخل مجموعة/غرفة/قناة محددة.tools: السماح بالأدوات أو رفضها للمجموعة بأكملها.toolsBySender: تجاوزات لكل مرسل داخل المجموعة. استخدم بادئات مفاتيح صريحة:channel:<channelId>:<senderId>،id:<senderId>،e164:<phone>،username:<handle>،name:<displayName>، وحرف البدل"*". تستخدم معرّفات القنوات معرّفات قنوات OpenClaw القانونية؛ ويتم تطبيع الأسماء المستعارة مثلteamsإلىmsteams. لا تزال المفاتيح القديمة غير المسبوقة مقبولة وتتم مطابقتها كـid:فقط.
مثال (Telegram):
تُطبّق قيود أدوات المجموعة/القناة بالإضافة إلى سياسة الأدوات العامة/الخاصة بالوكيل (لا يزال الرفض يفوز). تستخدم بعض القنوات تداخلا مختلفا للغرف/القنوات (مثل Discord
guilds.*.channels.*، وSlack channels.*، وMicrosoft Teams teams.*.channels.*).قوائم سماح المجموعات
عند إعدادchannels.whatsapp.groups أو channels.telegram.groups أو channels.imessage.groups، تعمل المفاتيح كقائمة سماح للمجموعات. استخدم "*" للسماح بكل المجموعات مع الاستمرار في ضبط سلوك الإشارة الافتراضي.
النوايا الشائعة (نسخ/لصق):
- تعطيل كل ردود المجموعات
- السماح بمجموعات محددة فقط (WhatsApp)
- السماح بكل المجموعات مع اشتراط الإشارة
- مشغلات للمالك فقط (WhatsApp)
التفعيل (للمالك فقط)
يمكن لمالكي المجموعات تبديل التفعيل لكل مجموعة:/activation mention/activation always
channels.whatsapp.allowFrom (أو رقم E.164 الذاتي للبوت عند عدم ضبطه). أرسل الأمر كرسالة مستقلة. تتجاهل الأسطح الأخرى حاليا /activation.
حقول السياق
تعيّن حمولات المجموعة الواردة:ChatType=groupGroupSubject(إذا كان معروفا)GroupMembers(إذا كان معروفا)WasMentioned(نتيجة بوابة الإشارات)- تتضمن مواضيع منتديات Telegram أيضا
MessageThreadIdوIsForum.
\n الحرفية. تُعرض أسماء المجموعات وتسميات المشاركين القادمة من القناة كبيانات وصفية غير موثوقة داخل أسوار، لا كتعليمات نظام مضمنة.
تفاصيل iMessage
- فضّل
chat_id:<id>عند التوجيه أو الإدراج في قائمة السماح. - سرد الدردشات:
imsg chats --limit 20. - تعود ردود المجموعة دائما إلى
chat_idنفسه.