الانتقال إلى المحتوى الرئيسي

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 يتعامل مع محادثات المجموعات باتساق عبر الواجهات: Discord، iMessage، Matrix، Microsoft Teams، Signal، Slack، Telegram، WhatsApp، Zalo.

مقدمة للمبتدئين (دقيقتان)

OpenClaw “يعيش” على حسابات المراسلة الخاصة بك. لا يوجد مستخدم بوت WhatsApp منفصل. إذا كنت أنت في مجموعة، فيمكن لـ OpenClaw رؤية تلك المجموعة والرد فيها. السلوك الافتراضي:
  • المجموعات مقيّدة (groupPolicy: "allowlist").
  • تتطلب الردود إشارة ما لم تعطّل بوابة الإشارات صراحة.
  • الردود النهائية العادية في المجموعات/القنوات تكون خاصة افتراضيًا. يستخدم إخراج الغرفة المرئي أداة message.
الترجمة: يمكن للمرسلين المدرجين في قائمة السماح تشغيل OpenClaw عبر الإشارة إليه.
ملخص سريع
  • الوصول إلى الرسائل المباشرة تتحكم به *.allowFrom.
  • الوصول إلى المجموعات تتحكم به *.groupPolicy + قوائم السماح (*.groups, *.groupAllowFrom).
  • تشغيل الردود تتحكم به بوابة الإشارات (requireMention, /activation).
تدفق سريع (ما يحدث لرسالة مجموعة):
groupPolicy? disabled -> drop
groupPolicy? allowlist -> group allowed? no -> drop
requireMention? yes -> mentioned? no -> store for context only
otherwise -> reply

الردود المرئية

بالنسبة لغرف المجموعات/القنوات، يضبط 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: {
    groupChat: {
      visibleReplies: "automatic",
    },
  },
}
يعيد Gateway تحميل إعدادات messages بشكل ساخن بعد حفظ الملف. أعد التشغيل فقط عندما تكون مراقبة الملفات أو إعادة تحميل الإعدادات معطلة في النشر. لاشتراط مرور الإخراج المرئي عبر أداة الرسائل لكل محادثة مصدر:
{
  messages: {
    visibleReplies: "message_tool",
  },
}
تتجاوز أوامر الشرطة المائلة الأصلية (Discord وTelegram والواجهات الأخرى التي تدعم الأوامر الأصلية) visibleReplies: "message_tool" وترد دائمًا بشكل مرئي حتى تحصل واجهة أوامر القناة الأصلية على الاستجابة التي تتوقعها. ينطبق هذا على أدوار الأوامر الأصلية المتحقق منها فقط؛ لا تزال أوامر /... المكتوبة كنص وأدوار الدردشة العادية تتبع الإعداد الافتراضي المكوّن للمجموعة.

رؤية السياق وقوائم السماح

يتضمن أمان المجموعات عنصرين مختلفين للتحكم:
  • تفويض التشغيل: من يمكنه تشغيل الوكيل (groupPolicy, groups, groupAllowFrom, قوائم السماح الخاصة بالقناة).
  • رؤية السياق: ما السياق التكميلي الذي يُحقن في النموذج (نص الرد، الاقتباسات، سجل السلاسل، بيانات التعريف المعاد توجيهها).
افتراضيًا، يعطي OpenClaw الأولوية لسلوك الدردشة العادي ويبقي السياق غالبًا كما تم استلامه. يعني هذا أن قوائم السماح تحدد أساسًا من يمكنه تشغيل الإجراءات، وليست حدًا عامًا للتنقيح لكل مقتطف مقتبس أو تاريخي.
  • تطبق بعض القنوات بالفعل تصفية حسب المرسل للسياق التكميلي في مسارات محددة (مثل تهيئة سلاسل Slack، وعمليات البحث عن الرد/السلسلة في Matrix).
  • لا تزال قنوات أخرى تمرر سياق الاقتباس/الرد/إعادة التوجيه كما تم استلامه.
  • contextVisibility: "all" (افتراضي) يبقي السلوك الحالي كما تم استلامه.
  • contextVisibility: "allowlist" يرشح السياق التكميلي إلى المرسلين المدرجين في قائمة السماح.
  • contextVisibility: "allowlist_quote" هو allowlist مع استثناء صريح واحد للاقتباس/الرد.
إلى أن يُنفذ نموذج التقوية هذا باتساق عبر القنوات، توقع اختلافات حسب الواجهة.
تدفق رسائل المجموعة إذا كنت تريد…
الهدفما يجب ضبطه
السماح بكل المجموعات لكن الرد فقط عند @mentionsgroups: { "*": { 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 هو الخلفية الافتراضية إذا لم تختر واحدة. يمنحك هذا “عقل” وكيل واحدًا (مساحة عمل + ذاكرة مشتركتان)، لكن وضعين للتنفيذ:
  • الرسائل المباشرة: أدوات كاملة (المضيف)
  • المجموعات: عزل + أدوات مقيّدة
إذا كنت تحتاج إلى مساحات عمل/شخصيات منفصلة حقًا (يجب ألا يختلط “الشخصي” و”العام” أبدًا)، فاستخدم وكيلًا ثانيًا + ربطًا. راجع توجيه متعدد الوكلاء.
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // groups/channels are non-main -> sandboxed
        scope: "session", // strongest isolation (one container per group/channel)
        workspaceAccess: "none",
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        // If allow is non-empty, everything else is blocked (deny still wins).
        allow: ["group:messaging", "group:sessions"],
        deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
      },
    },
  },
}
ذات صلة:

تسميات العرض

  • تستخدم تسميات UI displayName عند توفره، منسقة على هيئة <channel>:<token>.
  • #room محجوز للغرف/القنوات؛ تستخدم محادثات المجموعات g-<slug> (أحرف صغيرة، المسافات -> -، مع إبقاء #@+._-).

سياسة المجموعات

تحكم في كيفية التعامل مع رسائل المجموعات/الغرف لكل قناة:
{
  channels: {
    whatsapp: {
      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
      groupAllowFrom: ["+15551234567"],
    },
    telegram: {
      groupPolicy: "disabled",
      groupAllowFrom: ["123456789"], // numeric Telegram user id (wizard can resolve @username)
    },
    signal: {
      groupPolicy: "disabled",
      groupAllowFrom: ["+15551234567"],
    },
    imessage: {
      groupPolicy: "disabled",
      groupAllowFrom: ["chat_id:123"],
    },
    msteams: {
      groupPolicy: "disabled",
      groupAllowFrom: ["user@org.com"],
    },
    discord: {
      groupPolicy: "allowlist",
      guilds: {
        GUILD_ID: { channels: { help: { allow: true } } },
      },
    },
    slack: {
      groupPolicy: "allowlist",
      channels: { "#general": { allow: true } },
    },
    matrix: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["@owner:example.org"],
      groups: {
        "!roomId:example.org": { enabled: true },
        "#alias:example.org": { enabled: true },
      },
    },
  },
}
السياسةالسلوك
"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.
النموذج الذهني السريع (ترتيب التقييم لرسائل المجموعة):
1

groupPolicy

groupPolicy (open/disabled/allowlist).
2

قوائم سماح المجموعات

قوائم سماح المجموعات (*.groups، *.groupAllowFrom، قائمة السماح الخاصة بالقناة).
3

بوابة الإشارات

بوابة الإشارات (requireMention، /activation).

بوابة الإشارات (افتراضي)

تتطلب رسائل المجموعة إشارة ما لم يتم تجاوز ذلك لكل مجموعة. توجد الإعدادات الافتراضية لكل نظام فرعي تحت *.groups."*". يُعد الرد على رسالة بوت إشارة ضمنية عندما تدعم القناة بيانات الرد الوصفية. كما يمكن أن يُعد اقتباس رسالة بوت إشارة ضمنية في القنوات التي تعرض بيانات الاقتباس الوصفية. تشمل الحالات المدمجة الحالية Telegram وWhatsApp وSlack وDiscord وMicrosoft Teams وZaloUser.
{
  channels: {
    whatsapp: {
      groups: {
        "*": { requireMention: true },
        "123@g.us": { requireMention: false },
      },
    },
    telegram: {
      groups: {
        "*": { requireMention: true },
        "123456789": { requireMention: false },
      },
    },
    imessage: {
      groups: {
        "*": { requireMention: true },
        "123": { requireMention: false },
      },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
          historyLimit: 50,
        },
      },
    ],
  },
}
  • 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: فقط.
ترتيب الحل (الأكثر تحديدا يفوز):
1

Group toolsBySender

تطابق toolsBySender للمجموعة/القناة.
2

أدوات المجموعة

tools للمجموعة/القناة.
3

Default toolsBySender

تطابق toolsBySender الافتراضي ("*").
4

الأدوات الافتراضية

tools الافتراضي ("*").
مثال (Telegram):
{
  channels: {
    telegram: {
      groups: {
        "*": { tools: { deny: ["exec"] } },
        "-1001234567890": {
          tools: { deny: ["exec", "read", "write"] },
          toolsBySender: {
            "id:123456789": { alsoAllow: ["exec"] },
          },
        },
      },
    },
  },
}
تُطبّق قيود أدوات المجموعة/القناة بالإضافة إلى سياسة الأدوات العامة/الخاصة بالوكيل (لا يزال الرفض يفوز). تستخدم بعض القنوات تداخلا مختلفا للغرف/القنوات (مثل Discord guilds.*.channels.*، وSlack channels.*، وMicrosoft Teams teams.*.channels.*).

قوائم سماح المجموعات

عند إعداد channels.whatsapp.groups أو channels.telegram.groups أو channels.imessage.groups، تعمل المفاتيح كقائمة سماح للمجموعات. استخدم "*" للسماح بكل المجموعات مع الاستمرار في ضبط سلوك الإشارة الافتراضي.
التباس شائع: موافقة إقران الرسائل المباشرة ليست هي نفسها تفويض المجموعة. بالنسبة إلى القنوات التي تدعم إقران الرسائل المباشرة، يفتح مخزن الإقران الرسائل المباشرة فقط. لا تزال أوامر المجموعة تتطلب تفويضا صريحا لمرسل المجموعة من قوائم السماح في الإعدادات مثل groupAllowFrom أو احتياطي الإعدادات الموثق لتلك القناة.
النوايا الشائعة (نسخ/لصق):
{
  channels: { whatsapp: { groupPolicy: "disabled" } },
}

التفعيل (للمالك فقط)

يمكن لمالكي المجموعات تبديل التفعيل لكل مجموعة:
  • /activation mention
  • /activation always
يتم تحديد المالك بواسطة channels.whatsapp.allowFrom (أو رقم E.164 الذاتي للبوت عند عدم ضبطه). أرسل الأمر كرسالة مستقلة. تتجاهل الأسطح الأخرى حاليا /activation.

حقول السياق

تعيّن حمولات المجموعة الواردة:
  • ChatType=group
  • GroupSubject (إذا كان معروفا)
  • GroupMembers (إذا كان معروفا)
  • WasMentioned (نتيجة بوابة الإشارات)
  • تتضمن مواضيع منتديات Telegram أيضا MessageThreadId وIsForum.
يتضمن موجه نظام الوكيل مقدمة مجموعة في أول دور من جلسة مجموعة جديدة. يذكّر النموذج بالرد مثل إنسان، وتجنب جداول Markdown، وتقليل الأسطر الفارغة واتباع تباعد الدردشة الطبيعي، وتجنب كتابة تسلسلات \n الحرفية. تُعرض أسماء المجموعات وتسميات المشاركين القادمة من القناة كبيانات وصفية غير موثوقة داخل أسوار، لا كتعليمات نظام مضمنة.

تفاصيل iMessage

  • فضّل chat_id:<id> عند التوجيه أو الإدراج في قائمة السماح.
  • سرد الدردشات: imsg chats --limit 20.
  • تعود ردود المجموعة دائما إلى chat_id نفسه.

موجهات نظام WhatsApp

راجع WhatsApp للاطلاع على قواعد موجه نظام WhatsApp القانونية، بما في ذلك حل الموجهات للمجموعات والمباشر، وسلوك حرف البدل، ودلالات تجاوز الحساب.

تفاصيل WhatsApp

راجع رسائل المجموعة للاطلاع على سلوك WhatsApp فقط (إدخال السجل، وتفاصيل التعامل مع الإشارات).

ذات صلة