---
read_when:
    - تغییر رفتار گفت‌وگوی گروهی یا محدودسازی بر اساس اشاره‌کردن
    - محدود کردن mentionPatterns به گفتگوهای گروهی مشخص
sidebarTitle: Groups
summary: رفتار چت گروهی در پلتفرم‌های مختلف (Discord/iMessage/Matrix/Microsoft Teams/QQBot/Signal/Slack/Telegram/WhatsApp/Zalo)
title: گروه‌ها
x-i18n:
    generated_at: "2026-07-27T13:52:02Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 146378f0fc31e129b6504df6778ab8633c048cd4d02af02a5e6da1bfef640d3f
    source_path: channels/groups.md
    workflow: 16
---

OpenClaw قوانین گروه یکسانی را در همه کانال‌های دارای قابلیت گروه، از جمله Discord، iMessage، Matrix، Microsoft Teams، QQBot، Signal، Slack، Telegram، WhatsApp و Zalo اعمال می‌کند.

برای اتاق‌های همیشه‌فعالی که باید زمینه‌ای بی‌سروصدا فراهم کنند، مگر اینکه عامل صراحتاً پیامی قابل‌مشاهده ارسال کند، به [رویدادهای محیطی اتاق](/fa/channels/ambient-room-events) مراجعه کنید.

## مقدمه مبتدی (۲ دقیقه)

OpenClaw روی حساب‌های پیام‌رسان خودتان «زندگی می‌کند». کاربر ربات WhatsApp جداگانه‌ای وجود ندارد: اگر **شما** در گروهی باشید، OpenClaw می‌تواند آن گروه را ببیند و در آنجا پاسخ دهد.

رفتار پیش‌فرض:

- گروه‌ها محدود هستند (`groupPolicy: "allowlist"`)؛ فرستندگان گروه تا زمانی که در فهرست مجاز قرار نگیرند، مسدود می‌شوند.
- پاسخ‌ها به اشاره نیاز دارند، مگر اینکه دروازه‌بانی اشاره را برای گروهی غیرفعال کنید.
- متن پاسخ نهایی به‌طور خودکار در اتاق ارسال می‌شود (`visibleReplies: "automatic"`).

به‌عبارت دیگر: فرستندگان مجاز می‌توانند با اشاره به OpenClaw آن را فعال کنند.

<Note>
**خلاصه**

- **دسترسی پیام مستقیم** با `*.allowFrom` کنترل می‌شود.
- **دسترسی گروه** با `*.groupPolicy` + فهرست‌های مجاز (`*.groups`، `*.groupAllowFrom`) کنترل می‌شود.
- **فعال‌سازی پاسخ** با دروازه‌بانی اشاره (`requireMention`، `/activation`) کنترل می‌شود.

</Note>

روند سریع (آنچه برای یک پیام گروهی رخ می‌دهد):

```text
groupPolicy؟ disabled -> کنار گذاشتن
groupPolicy؟ allowlist -> گروه مجاز است؟ خیر -> کنار گذاشتن
requireMention؟ بله -> اشاره شده؟ خیر -> فقط برای زمینه ذخیره شود
اشاره/پاسخ/فرمان/پیام مستقیم -> درخواست کاربر
گفت‌وگوی همیشه‌فعال گروه -> درخواست کاربر، یا در صورت پیکربندی رویداد اتاق
```

## پاسخ‌های قابل‌مشاهده

برای درخواست‌های عادی گروه/کانال، پیش‌فرض OpenClaw برابر `messages.groupChat.visibleReplies: "automatic"` است: متن نهایی دستیار به‌عنوان پاسخ قابل‌مشاهده در اتاق ارسال می‌شود.

وقتی یک اتاق مشترک باید به عامل اجازه دهد با فراخوانی `message(action=send)` تصمیم بگیرد چه زمانی صحبت کند، از `messages.groupChat.visibleReplies: "message_tool"` استفاده کنید. این حالت با مدل‌هایی که در استفاده از ابزار قابل‌اعتماد هستند (برای مثال GPT-5.6 Sol) بهترین عملکرد را دارد. اگر مدل ابزار را نادیده بگیرد و متن نهایی معناداری برگرداند، OpenClaw به‌جای ارسال آن در اتاق، متن را خصوصی نگه می‌دارد.

برای مدل‌ها یا محیط‌های اجرایی که تحویل صرفاً از طریق ابزار را به‌طور قابل‌اعتماد رعایت نمی‌کنند، از `"automatic"` استفاده کنید: متن‌های نهایی عادی مستقیماً در اتاق ارسال می‌شوند و عامل همچنان می‌تواند برای فایل‌ها، تصاویر یا پیوست‌های دیگری که نمی‌توانند همراه متن نهایی ارسال شوند، `message(action=send)` را فراخوانی کند.

اگر ابزار پیام تحت سیاست ابزار فعال در دسترس نباشد، OpenClaw به‌جای سرکوب بی‌سروصدای پاسخ، به پاسخ‌های قابل‌مشاهده خودکار بازمی‌گردد. `openclaw doctor` درباره این ناسازگاری هشدار می‌دهد.

برای گفت‌وگوهای مستقیم و هر رویداد منبع دیگری، `messages.visibleReplies: "message_tool"` همان رفتار صرفاً ابزاری را به‌صورت سراسری اعمال می‌کند؛ `messages.groupChat.visibleReplies` همچنان بازنویسی اختصاصی‌تر برای اتاق‌های گروه/کانال است. نوبت‌های مستقیم WebChat داخلی به‌طور پیش‌فرض از تحویل خودکار پاسخ نهایی استفاده می‌کنند تا Pi و Codex قرارداد یکسانی برای پاسخ قابل‌مشاهده دریافت کنند.

حالت صرفاً ابزاری جایگزین الگوی قدیمی اجبار مدل به پاسخ‌دادن با `NO_REPLY` در بیشتر نوبت‌های حالت کمین می‌شود. در حالت صرفاً ابزاری، اعلان قراردادی برای `NO_REPLY` تعریف نمی‌کند؛ انجام‌ندادن هیچ کار قابل‌مشاهده‌ای صرفاً به‌معنای فراخوانی‌نکردن ابزار پیام است.

اتصال‌های مکالمه تحت مالکیت Plugin استثنا هستند. پس از اینکه یک Plugin رشته‌ای را متصل و نوبت ورودی را تصاحب کرد، پاسخ برگردانده‌شده Plugin همان پاسخ قابل‌مشاهده اتصال است؛ به `message(action=send)` نیازی ندارد. آن پاسخ خروجی محیط اجرایی Plugin است، نه متن نهایی خصوصی مدل.

نشانگرهای تایپ همچنان برای درخواست‌های مستقیم گروه ارسال می‌شوند. رویدادهای محیطی اتاق همیشه‌فعال، در صورت فعال‌بودن، سخت‌گیر و بی‌صدا باقی می‌مانند، مگر اینکه عامل ابزار پیام را فراخوانی کند.

نشست‌ها به‌طور پیش‌فرض خلاصه‌های مفصل ابزار/پیشرفت را سرکوب می‌کنند. هنگام اشکال‌زدایی، برای نمایش آن‌ها در نشست جاری از `/verbose on` (یا `/verbose full`) استفاده کنید و برای بازگشت به رفتار فقط پاسخ نهایی، `/verbose off` را به‌کار ببرید. وضعیت مفصل برای هر نشست جداگانه است و در گفت‌وگوهای مستقیم، گروه‌ها، کانال‌ها و موضوعات انجمن به یک شکل کار می‌کند.

برای ثبت گفت‌وگوی بدون اشاره گروه همیشه‌فعال به‌عنوان زمینه بی‌صدای اتاق به‌جای درخواست کاربر، از [رویدادهای محیطی اتاق](/fa/channels/ambient-room-events) استفاده کنید:

```json5
{
  messages: {
    groupChat: {
      unmentionedInbound: "room_event",
    },
  },
}
```

پیش‌فرض `unmentionedInbound: "user_request"` است. پیام‌های دارای اشاره، فرمان‌ها، درخواست‌های توقف و پیام‌های مستقیم همچنان درخواست کاربر باقی می‌مانند.

برای الزام عبور خروجی قابل‌مشاهده از ابزار پیام در درخواست‌های گروه/کانال:

```json5
{
  messages: {
    groupChat: {
      visibleReplies: "message_tool",
    },
  },
}
```

برای الزام آن در همه گفت‌وگوهای منبع:

```json5
{
  messages: {
    visibleReplies: "message_tool",
  },
}
```

Gateway پس از ذخیره فایل، تغییرات پیکربندی `messages` را بدون راه‌اندازی مجدد دریافت می‌کند. فقط زمانی راه‌اندازی مجدد کنید که بارگذاری مجدد پیکربندی غیرفعال باشد (`gateway.reload.mode: "off"`).

نوبت‌های فرمان `visibleReplies: "message_tool"` را دور می‌زنند و همیشه به‌صورت قابل‌مشاهده پاسخ می‌دهند: هم فرمان‌های اسلش بومی (Discord، Telegram و سایر سطوح دارای پشتیبانی بومی فرمان) و هم فرمان‌های متنی مجاز `/...` پاسخ خود را در گفت‌وگوی منبع ارسال می‌کنند. نوبت‌های متنی غیرمجاز `/...` در گروه‌ها صرفاً ابزاری باقی می‌مانند؛ نوبت‌های عادی گفت‌وگو از پیش‌فرض پیکربندی‌شده پیروی می‌کنند.

## مشاهده‌پذیری زمینه و فهرست‌های مجاز

دو کنترل متفاوت در ایمنی گروه نقش دارند:

- **مجوز فعال‌سازی**: چه کسی می‌تواند عامل را فعال کند (`groupPolicy`، `groups`، `groupAllowFrom`، فهرست‌های مجاز مختص کانال).
- **مشاهده‌پذیری زمینه**: چه زمینه تکمیلی به مدل تزریق می‌شود (متن پاسخ/نقل‌قول، تاریخچه رشته، فراداده بازارسال‌شده).

به‌طور پیش‌فرض، OpenClaw زمینه را همان‌گونه که دریافت شده نگه می‌دارد: فهرست‌های مجاز تعیین می‌کنند چه کسی می‌تواند اقدام‌ها را فعال کند، نه اینکه مدل چه قطعه‌های نقل‌قول‌شده یا تاریخی را می‌بیند. برای فیلترکردن زمینه تکمیلی نیز `contextVisibility` را تنظیم کنید:

| حالت                | رفتار                                                                         |
| ------------------- | -------------------------------------------------------------------------------- |
| `"all"` (پیش‌فرض)   | زمینه تکمیلی را همان‌گونه که دریافت شده نگه می‌دارد.                                           |
| `"allowlist"`       | فقط زمینه تاریخچه/رشته/نقل‌قول/بازارسال‌شده فرستندگان مجاز را تزریق می‌کند.     |
| `"allowlist_quote"` | `allowlist`، به‌علاوه پیام صراحتاً نقل‌قول‌شده/پاسخ‌داده‌شده از هر فرستنده را نگه می‌دارد. |

آن را برای هر کانال (`channels.<channel>.contextVisibility`)، هر حساب (`channels.<channel>.accounts.<accountId>.contextVisibility`) یا به‌صورت سراسری (`channels.defaults.contextVisibility`) تنظیم کنید. کانال‌هایی که زمینه تکمیلی را واکشی می‌کنند (Discord، Feishu، iMessage، Matrix، Microsoft Teams، Signal، Slack، Telegram، WhatsApp)، هنگام ساخت زمینه ورودی این سیاست را اعمال می‌کنند؛ ترکیب‌های سیاست ناشناخته به‌صورت بسته شکست می‌خورند و زمینه را حذف می‌کنند.

این حالت‌ها فقط زمینه تکمیلی فراهم‌شده توسط کانال را فیلتر می‌کنند. سیاست ابزار و موجودی ابزار مختص مالک همچنان بر اساس درخواست‌کننده مبدأ نوبت جاری انتخاب می‌شوند، نه همه فرستندگانی که در اعلان حضور دارند. به [کنترل‌های محدود به درخواست‌کننده و زمینه اعلان](/fa/gateway/security#requester-scoped-controls-and-prompt-context) مراجعه کنید.

![روند پیام گروهی](/images/groups-flow.svg)

اگر می‌خواهید...

| هدف                                         | تنظیم موردنیاز                                                |
| -------------------------------------------- | ---------------------------------------------------------- |
| اجازه به همه گروه‌ها، اما پاسخ فقط هنگام @اشاره | `groups: { "*": { requireMention: true } }`                |
| غیرفعال‌کردن همه پاسخ‌های گروهی                    | `groupPolicy: "disabled"`                                  |
| فقط گروه‌های مشخص                         | `groups: { "<group-id>": { ... } }` (بدون کلید `"*"`)         |
| فقط شما بتوانید در گروه‌ها فعال‌سازی کنید               | `groupPolicy: "allowlist"`، `groupAllowFrom: ["+1555..."]` |
| استفاده مجدد از یک مجموعه فرستندگان مورداعتماد در کانال‌ها | `groupAllowFrom: ["accessGroup:operators"]`                |

برای فهرست‌های مجاز فرستنده با قابلیت استفاده مجدد، به [گروه‌های دسترسی](/fa/channels/access-groups) مراجعه کنید.

## کلیدهای نشست

- نشست‌های گروه از کلیدهای نشست `agent:<agentId>:<channel>:group:<id>` استفاده می‌کنند (اتاق‌ها/کانال‌ها از `agent:<agentId>:<channel>:channel:<id>` استفاده می‌کنند).
- موضوعات انجمن Telegram مقدار `:topic:<threadId>` را به شناسه گروه اضافه می‌کنند تا هر موضوع نشست مخصوص خود را داشته باشد.
- گفت‌وگوهای مستقیم از نشست اصلی استفاده می‌کنند (یا اگر `session.dmScope` پیکربندی شده باشد، نشست‌های جداگانه برای هر فرستنده).
- Heartbeatها در نشست Heartbeat پیکربندی‌شده اجرا می‌شوند (پیش‌فرض: نشست اصلی عامل)؛ نشست‌های گروه Heartbeatهای خودشان را اجرا نمی‌کنند.

<a id="pattern-personal-dms-public-groups-single-agent"></a>

## الگو: پیام‌های مستقیم شخصی + گروه‌های عمومی (یک عامل)

بله — اگر ترافیک «شخصی» شما **پیام‌های مستقیم** و ترافیک «عمومی» شما **گروه‌ها** باشد، این روش به‌خوبی کار می‌کند.

دلیل: در حالت تک‌عاملی، پیام‌های مستقیم معمولاً وارد کلید نشست **اصلی** (`agent:main:main`) می‌شوند، درحالی‌که گروه‌ها همیشه از کلیدهای نشست **غیراصلی** (`agent:main:<channel>:group:<id>`) استفاده می‌کنند. اگر جداسازی را با `mode: "non-main"` فعال کنید، آن نشست‌های گروه در بک‌اند جداسازی پیکربندی‌شده اجرا می‌شوند، درحالی‌که نشست اصلی پیام مستقیم شما روی میزبان باقی می‌ماند. اگر بک‌اندی انتخاب نکنید، Docker بک‌اند پیش‌فرض است.

این تنظیم یک «مغز» عامل (فضای کاری + حافظه مشترک)، اما دو وضعیت اجرایی به شما می‌دهد:

- **پیام‌های مستقیم**: ابزارهای کامل (میزبان)
- **گروه‌ها**: محیط ایزوله + ابزارهای محدود

<Note>
اگر به فضاهای کاری/شخصیت‌های واقعاً جداگانه نیاز دارید («شخصی» و «عمومی» هرگز نباید ترکیب شوند)، از عامل دوم + اتصال‌ها استفاده کنید. به [مسیریابی چندعاملی](/fa/concepts/multi-agent) مراجعه کنید.
</Note>

<Tabs>
  <Tab title="پیام‌های مستقیم روی میزبان، گروه‌ها در محیط ایزوله">
    ```json5
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main", // گروه‌ها/کانال‌ها غیراصلی هستند -> در محیط ایزوله
            scope: "session", // قوی‌ترین جداسازی (یک کانتینر برای هر گروه/کانال)
            workspaceAccess: "none",
          },
        },
      },
      tools: {
        sandbox: {
          tools: {
            // اگر allow خالی نباشد، همه موارد دیگر مسدود می‌شوند (deny همچنان اولویت دارد).
            allow: ["group:messaging", "group:sessions"],
            deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
          },
        },
      },
    }
    ```
  </Tab>
  <Tab title="گروه‌ها فقط یک پوشه مجاز را می‌بینند">
    به‌جای «عدم دسترسی به میزبان»، می‌خواهید «گروه‌ها فقط پوشه X را ببینند»؟ `workspaceAccess: "none"` را نگه دارید و فقط مسیرهای مجاز را در محیط ایزوله سوار کنید:

    ```json5
    {
      agents: {
        defaults: {
          sandbox: {
            mode: "non-main",
            scope: "session",
            workspaceAccess: "none",
            docker: {
              binds: [
                // hostPath:containerPath:mode
                "/home/user/FriendsShared:/data:ro",
              ],
            },
          },
        },
      },
    }
    ```

  </Tab>
</Tabs>

مرتبط:

- کلیدهای پیکربندی و پیش‌فرض‌ها: [پیکربندی Gateway](/fa/gateway/config-agents#agentsdefaultssandbox)
- اشکال‌زدایی علت مسدودشدن ابزار: [محیط ایزوله در برابر سیاست ابزار در برابر دسترسی ارتقایافته](/fa/gateway/sandbox-vs-tool-policy-vs-elevated)
- جزئیات سوارکردن اتصال‌ها: [جداسازی](/fa/gateway/sandboxing#custom-bind-mounts)

## برچسب‌های نمایشی

- برچسب‌های رابط کاربری در صورت وجود از `displayName` استفاده می‌کنند که به‌شکل `<channel>:<token>` قالب‌بندی می‌شود.
- `#room` برای اتاق‌ها/کانال‌ها رزرو شده است؛ گفت‌وگوهای گروهی از `g-<slug>` استفاده می‌کنند (حروف کوچک، فاصله‌ها -> `-`، حفظ `#@+._-`). شناسه‌های مبهم و بسیار طولانی به توکنی پایدار کوتاه می‌شوند تا شناسه‌های کامل مسیر در رابط کاربری افشا نشوند.

## سیاست گروه

نحوه مدیریت پیام‌های گروه/اتاق را برای هر کانال کنترل کنید:

```json5
{
  channels: {
    whatsapp: {
      groupPolicy: "disabled", // "open" | "disabled" | "allowlist"
      groupAllowFrom: ["+15551234567"],
    },
    telegram: {
      groupPolicy: "disabled",
      groupAllowFrom: ["123456789"], // شناسه عددی کاربر Telegram (راه‌اندازی @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: { enabled: true } } },
      },
    },
    slack: {
      groupPolicy: "allowlist",
      channels: { "#general": { enabled: true } },
    },
    matrix: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["@owner:example.org"],
      groups: {
        "!roomId:example.org": { enabled: true },
        "#alias:example.org": { enabled: true },
      },
    },
  },
}
```

| سیاست        | رفتار                                                     |
| ------------- | ------------------------------------------------------------ |
| `"open"`      | گروه‌ها فهرست‌های مجاز را دور می‌زنند؛ الزام اشاره همچنان اعمال می‌شود.      |
| `"disabled"`  | همه پیام‌های گروهی را به‌طور کامل مسدود می‌کند.                           |
| `"allowlist"` | فقط گروه‌ها/اتاق‌هایی را مجاز می‌کند که با فهرست مجاز پیکربندی‌شده مطابقت دارند. |

<AccordionGroup>
  <Accordion title="نکات هر کانال">
    - `groupPolicy` از الزام اشاره (که به @اشاره‌ها نیاز دارد) جدا است.
    - 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` استفاده می‌کند. از شناسه‌های اتاق (`!room:server`) یا نام‌های مستعار (`#alias:server`) استفاده کنید؛ کلیدهای نام اتاق فقط با `channels.matrix.dangerouslyAllowNameMatching: true` مطابقت می‌کنند و ورودی‌های تفکیک‌نشده هنگام اجرا نادیده گرفته می‌شوند. برای محدودکردن فرستندگان از `channels.matrix.groupAllowFrom` استفاده کنید؛ فهرست‌های مجاز هر اتاق در `users` نیز پشتیبانی می‌شوند.
    - پیام‌های مستقیم گروهی جداگانه کنترل می‌شوند (`channels.discord.dm.*`، ‏`channels.slack.dm.*`: ‏`groupEnabled`، ‏`groupChannels`).
    - Telegram: فهرست‌های مجاز فرستنده فقط شناسه‌های عددی کاربر را می‌پذیرند (`"123456789"`؛ پیشوندهای `telegram:`/`tg:` بدون حساسیت به بزرگی و کوچکی حروف حذف می‌شوند). ورودی‌های `@username` هنگام اجرا مطابقت نمی‌کنند و هشداری ثبت می‌کنند؛ راه‌اندازی، `@username` را به شناسه‌ها تفکیک می‌کند. شناسه‌های منفی گفت‌وگو باید زیر `channels.telegram.groups` قرار گیرند، نه در فهرست‌های مجاز فرستنده.
    - مقدار پیش‌فرض `groupPolicy: "allowlist"` است؛ اگر فهرست مجاز گروه خالی باشد، پیام‌های گروهی مسدود می‌شوند.
    - ایمنی زمان اجرا: وقتی بلوک ارائه‌دهنده کاملاً وجود ندارد (`channels.<provider>` غایب است)، سیاست گروه به‌جای به‌ارث‌بردن `channels.defaults.groupPolicy`، به‌صورت بسته روی `allowlist` قرار می‌گیرد و Gateway این راهکار جایگزین را برای هر حساب یک‌بار ثبت می‌کند.

  </Accordion>
</AccordionGroup>

مدل ذهنی سریع (ترتیب ارزیابی پیام‌های گروهی):

<Steps>
  <Step title="groupPolicy">
    `groupPolicy` (open/disabled/allowlist).
  </Step>
  <Step title="فهرست‌های مجاز گروه">
    فهرست‌های مجاز گروه (`*.groups`، ‏`*.groupAllowFrom`، فهرست مجاز مختص کانال).
  </Step>
  <Step title="الزام اشاره">
    الزام اشاره (`requireMention`، ‏`/activation`).
  </Step>
</Steps>

## الزام اشاره (پیش‌فرض)

پیام‌های گروهی به اشاره نیاز دارند، مگر آنکه برای هر گروه بازنویسی شده باشد. مقادیر پیش‌فرض هر زیرسامانه در `*.groups."*"` قرار دارند.

واقعیت‌های اشاره ضمنی پشتیبانی‌شده مختص هر کانال هستند:

| واقعیت                  | تولیدکنندگان داخلی فعلی                       |
| --------------------- | ------------------------------------------------ |
| پاسخ به ربات      | Discord، Microsoft Teams، QQBot، Slack، Telegram |
| نقل‌قول از ربات      | WhatsApp، Zalo شخصی                          |
| پیوستن ربات به رشته | Mattermost، Slack، Tlon                          |

وقتی کانال هر واقعیت را تولید می‌کند، آن واقعیت به‌طور پیش‌فرض فعال است. پرچم متناظر `implicitMentions` را روی `false` تنظیم کنید تا آن واقعیت دیگر الزام اشاره را دور نزند؛ اشاره‌های صریح بومی تحت‌تأثیر قرار نمی‌گیرند. این پرچم روی کانال‌هایی که آن واقعیت را تولید نمی‌کنند اثری ندارد.

```json5
{
  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: {
    entries: {
      main: {
        groupChat: {
          mentionPatterns: ["@openclaw", "openclaw", "\\+15555550123"],
          historyLimit: 50,
        },
      },
    },
  },
}
```

## محدودکردن دامنه الگوهای اشاره پیکربندی‌شده

‏`mentionPatterns` پیکربندی‌شده، محرک‌های جایگزین عبارت منظم هستند. زمانی از آن‌ها استفاده کنید که
پلتفرم اشاره بومی به ربات را ارائه نمی‌کند، یا می‌خواهید متن ساده‌ای مانند
`openclaw:` به‌عنوان اشاره محسوب شود. اشاره‌های بومی پلتفرم جدا هستند:
وقتی Discord، Slack، Telegram، Matrix، Signal یا کانال دیگری بتواند ثابت کند پیام
به‌صراحت به ربات اشاره کرده است، آن اشاره بومی حتی در صورت ردشدن
الگوهای عبارت منظم پیکربندی‌شده همچنان فعال می‌شود.

به‌طور پیش‌فرض، الگوهای اشاره پیکربندی‌شده در هر جایی اعمال می‌شوند که کانال، واقعیت‌های ارائه‌دهنده و مکالمه را به تشخیص اشاره منتقل کند. برای جلوگیری از اینکه الگوهای گسترده عامل را در همه گروه‌ها فعال کنند، دامنه آن‌ها را برای هر کانال با `channels.<channel>.mentionPatterns` محدود کنید.

وقتی الگوهای عبارت منظم اشاره باید به‌طور پیش‌فرض برای یک کانال خاموش باشند، از `mode: "deny"` استفاده کنید و سپس اتاق‌های مشخص را با `allowIn` فعال کنید:

```json5
{
  messages: {
    groupChat: {
      mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"],
    },
  },
  channels: {
    slack: {
      mentionPatterns: {
        mode: "deny",
        allowIn: ["C0123OPS"],
      },
    },
  },
}
```

وقتی الگوهای عبارت منظم اشاره باید به‌طور گسترده اعمال شوند، از `mode: "allow"` پیش‌فرض استفاده کنید (یا `mode` را حذف کنید) و سپس آن‌ها را در اتاق‌های شلوغ با `denyIn` خاموش کنید:

```json5
{
  messages: {
    groupChat: {
      mentionPatterns: ["\\bopenclaw\\b"],
    },
  },
  channels: {
    telegram: {
      mentionPatterns: {
        denyIn: ["-1001234567890", "-1001234567890:topic:42"],
      },
    },
  },
}
```

تفکیک سیاست:

| فیلد           | اثر                                                                                                                |
| --------------- | --------------------------------------------------------------------------------------------------------------------- |
| `mode: "allow"` | الگوهای عبارت منظم اشاره فعال هستند، مگر اینکه شناسه مکالمه در `denyIn` باشد. این حالت پیش‌فرض است.                    |
| `mode: "deny"`  | الگوهای عبارت منظم اشاره غیرفعال هستند، مگر اینکه شناسه مکالمه در `allowIn` باشد.                                       |
| `allowIn`       | شناسه‌های مکالمه‌ای که الگوهای عبارت منظم اشاره در حالت رد برای آن‌ها فعال هستند.                                               |
| `denyIn`        | شناسه‌های مکالمه‌ای که الگوهای عبارت منظم اشاره برای آن‌ها غیرفعال هستند. اگر هر دو شامل یک شناسه باشند، `denyIn` بر `allowIn` اولویت دارد. |

سیاست عبارت منظم دامنه‌بندی‌شده‌ای که اکنون پشتیبانی می‌شود:

| کانال  | شناسه‌های استفاده‌شده در `allowIn` / `denyIn`                             |
| -------- | ------------------------------------------------------------ |
| Discord  | شناسه‌های کانال Discord.                                         |
| Matrix   | شناسه‌های اتاق Matrix.                                             |
| Slack    | شناسه‌های کانال Slack.                                           |
| Telegram | شناسه‌های گفت‌وگوی گروهی، یا `chatId:topic:threadId` برای موضوعات انجمن. |
| WhatsApp | شناسه‌های مکالمه WhatsApp مانند `123@g.us`.                |

پیکربندی‌های کانال در سطح حساب، در کانال‌هایی که از چند حساب پشتیبانی می‌کنند، می‌توانند همین سیاست را زیر `channels.<channel>.accounts.<accountId>.mentionPatterns` تنظیم کنند. سیاست حساب برای آن حساب بر سیاست سطح بالای کانال اولویت دارد.

<AccordionGroup>
  <Accordion title="نکات الزام اشاره">
    - `mentionPatterns` الگوهای عبارت منظم امن و بدون حساسیت به بزرگی و کوچکی حروف هستند؛ الگوهای نامعتبر و شکل‌های ناامن با تکرار تودرتو نادیده گرفته می‌شوند (همراه با هشدار).
    - اولویت الگو: `agents.entries.*.groupChat.mentionPatterns` (وقتی چند عامل یک گروه را به‌اشتراک می‌گذارند مفید است) بر `messages.groupChat.mentionPatterns` اولویت دارد؛ وقتی هیچ‌کدام تنظیم نشده باشند، الگوها از نام/ایموجی هویت عامل مشتق می‌شوند.
    - الزام اشاره فقط زمانی اعمال می‌شود که تشخیص اشاره ممکن باشد (اشاره‌های بومی یا `mentionPatterns` پیکربندی شده باشند).
    - افزودن یک گروه یا فرستنده به فهرست مجاز، الزام اشاره را غیرفعال نمی‌کند؛ وقتی همه پیام‌ها باید فعال‌کننده باشند، `requireMention` آن گروه را روی `false` تنظیم کنید.
    - زمینه خودکار اعلان گفت‌وگوی گروهی، دستورالعمل پاسخ بی‌صدا را که تفکیک شده است در هر نوبت حمل می‌کند؛ فایل‌های فضای کاری نباید سازوکار `NO_REPLY` را تکرار کنند.
    - گروه‌هایی که پاسخ‌های بی‌صدای خودکار در آن‌ها مجاز است، نوبت‌های تمیزِ خالی یا فقط استدلالی مدل را بی‌صدا تلقی می‌کنند که معادل `NO_REPLY` است. گفت‌وگوهای مستقیم هرگز راهنمای `NO_REPLY` را دریافت نمی‌کنند و پاسخ‌های گروهی که فقط از ابزار پیام استفاده می‌کنند، با فراخوانی‌نکردن `message(action=send)` بی‌صدا می‌مانند.
    - گفت‌وگوی محیطی و همیشه‌فعال گروه به‌طور پیش‌فرض از معنای درخواست کاربر استفاده می‌کند. برای ارسال آن به‌عنوان زمینه بی‌صدا، `messages.groupChat.unmentionedInbound: "room_event"` را تنظیم کنید. برای نمونه‌های راه‌اندازی، [رویدادهای محیطی اتاق](/fa/channels/ambient-room-events) را ببینید.
    - رویدادهای اتاق به‌عنوان درخواست‌های جعلی کاربر ذخیره نمی‌شوند و متن خصوصی دستیار از رویدادهای اتاقِ بدون ابزار پیام، به‌عنوان تاریخچه گفت‌وگو بازپخش نمی‌شود.
    - مقادیر پیش‌فرض Discord در `channels.discord.guilds."*"` قرار دارند (قابل بازنویسی برای هر انجمن/کانال).
    - زمینه تاریخچه گروه در همه کانال‌ها به‌شکل یکسان پوشانده می‌شود. گروه‌های دارای الزام اشاره، پیام‌های ردشده در انتظار را نگه می‌دارند؛ گروه‌های همیشه‌فعال نیز ممکن است پیام‌های پردازش‌شده اخیر اتاق را، در صورت پشتیبانی کانال، حفظ کنند. برای پیش‌فرض سراسری از `messages.groupChat.historyLimit` و برای بازنویسی‌ها از `channels.<channel>.historyLimit` (یا `channels.<channel>.accounts.*.historyLimit`) استفاده کنید. برای غیرفعال‌کردن، `0` را تنظیم کنید.

  </Accordion>
</AccordionGroup>

## محدودیت‌های ابزار گروه/کانال (اختیاری)

برخی پیکربندی‌های کانال از محدودکردن ابزارهای در دسترس **درون یک گروه/اتاق/کانال مشخص** پشتیبانی می‌کنند.

- `tools`: مجاز/ردکردن ابزارها برای کل گروه (`allow`، ‏`alsoAllow`، ‏`deny`؛ رد اولویت دارد).
- `toolsBySender`: بازنویسی‌های هر فرستنده درون گروه. از پیشوندهای صریح کلید استفاده کنید: `channel:<channelId>:<senderId>`، ‏`id:<senderId>`، ‏`e164:<phone>`، ‏`username:<handle>`، ‏`name:<displayName>` و نویسه عام `"*"`. شناسه‌های کانال از شناسه‌های متعارف کانال OpenClaw استفاده می‌کنند؛ نام‌های مستعاری مانند `teams` به `msteams` نرمال‌سازی می‌شوند. کلیدهای قدیمی بدون پیشوند همچنان پذیرفته می‌شوند، فقط به‌عنوان `id:` مطابقت داده می‌شوند و هشدار منسوخ‌شدن ثبت می‌کنند.

ترتیب تفکیک (مشخص‌ترین مورد اولویت دارد):

<Steps>
  <Step title="toolsBySender گروه">
    تطابق `toolsBySender` گروه/کانال.
  </Step>
  <Step title="ابزارهای گروه">
    `tools` گروه/کانال.
  </Step>
  <Step title="toolsBySender پیش‌فرض">
    تطابق `toolsBySender` پیش‌فرض (`"*"`).
  </Step>
  <Step title="ابزارهای پیش‌فرض">
    `tools` پیش‌فرض (`"*"`).
  </Step>
</Steps>

نمونه (Telegram):

```json5
{
  channels: {
    telegram: {
      groups: {
        "*": { tools: { deny: ["exec"] } },
        "-1001234567890": {
          tools: { deny: ["exec", "read", "write"] },
          toolsBySender: {
            "id:123456789": { alsoAllow: ["exec"] },
          },
        },
      },
    },
  },
}
```

<Note>
محدودیت‌های ابزار گروه/کانال علاوه بر خط‌مشی سراسری/عاملِ ابزار اعمال می‌شوند (ممنوعیت همچنان اولویت دارد). برخی کانال‌ها برای اتاق‌ها/کانال‌ها از ساختار تودرتوی متفاوتی استفاده می‌کنند (برای مثال، Discord `guilds.*.channels.*`، Slack `channels.*`، Microsoft Teams `teams.*.channels.*`).
</Note>

## فهرست‌های مجاز گروه‌ها

وقتی `channels.whatsapp.groups`، `channels.telegram.groups` یا `channels.imessage.groups` پیکربندی شود، کلیدها به‌عنوان فهرست مجاز گروه‌ها عمل می‌کنند. برای مجاز کردن همه گروه‌ها و درعین‌حال تنظیم رفتار پیش‌فرض اشاره، از `"*"` استفاده کنید.

<Warning>
اشتباه رایج: تأیید جفت‌سازی پیام خصوصی با مجوزدهی گروه یکسان نیست. برای کانال‌هایی که از جفت‌سازی پیام خصوصی پشتیبانی می‌کنند، مخزن جفت‌سازی فقط پیام‌های خصوصی را فعال می‌کند. فرمان‌های گروهی همچنان به مجوز صریح فرستنده گروه از فهرست‌های مجاز پیکربندی، مانند `groupAllowFrom`، یا پیکربندی جایگزین مستندشده برای آن کانال نیاز دارند.
</Warning>

کاربردهای رایج (کپی/جای‌گذاری):

<Tabs>
  <Tab title="غیرفعال کردن همه پاسخ‌های گروهی">
    ```json5
    {
      channels: { whatsapp: { groupPolicy: "disabled" } },
    }
    ```
  </Tab>
  <Tab title="مجاز کردن فقط گروه‌های مشخص (WhatsApp)">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: {
            "123@g.us": { requireMention: true },
            "456@g.us": { requireMention: false },
          },
        },
      },
    }
    ```
  </Tab>
  <Tab title="مجاز کردن همه گروه‌ها با الزام اشاره">
    ```json5
    {
      channels: {
        whatsapp: {
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
  <Tab title="فعال‌سازهای مختص مالک (WhatsApp)">
    ```json5
    {
      channels: {
        whatsapp: {
          groupPolicy: "allowlist",
          groupAllowFrom: ["+15551234567"],
          groups: { "*": { requireMention: true } },
        },
      },
    }
    ```
  </Tab>
</Tabs>

## فعال‌سازی (فقط مالک)

مالکان گروه می‌توانند فعال‌سازی هر گروه را با یک پیام مستقل تغییر دهند:

- `/activation mention`
- `/activation always`

`/activation` یک فرمان اصلیِ محدود به مالک است و فقط در گفت‌وگوهای گروهی اعمال می‌شود. مالک یعنی فرستنده با `commands.ownerAllowFrom` مطابقت داشته باشد؛ فهرست‌های `allowFrom` کانال فقط دسترسی عادی به کانال و فرمان‌ها را کنترل می‌کنند. حالت ذخیره‌شده در کانال‌هایی که آن را بررسی می‌کنند (Google Chat، QQBot، Telegram، WhatsApp)، `requireMention` آن گروه را نادیده می‌گیرد و مقدمه اعلان سیستمی گروه در همه‌جا حالت فعال را بازتاب می‌دهد.

## فیلدهای زمینه

محموله‌های ورودی گروه این موارد را تنظیم می‌کنند:

- `ChatType=group`
- `GroupSubject` (اگر مشخص باشد)
- `GroupMembers` (اگر مشخص باشد)
- `WasMentioned` (نتیجه محدودسازی بر اساس اشاره)
- موضوعات انجمن Telegram همچنین شامل `MessageThreadId` و `IsForum` هستند.

اعلان سیستمی عامل در نخستین نوبت یک نشست گروهی جدید (و پس از تغییر `/activation`) شامل مقدمه‌ای برای گروه است. این مقدمه به مدل یادآوری می‌کند که مانند یک انسان پاسخ دهد، خطوط خالی را به حداقل برساند، فاصله‌گذاری معمول گفت‌وگو را رعایت کند و از تایپ دنباله‌های تحت‌اللفظی `\n` خودداری کند. کانال‌هایی که حالت جدول اعلام‌شده آن‌ها جدول‌های بومی یا خام را حفظ نمی‌کند، استفاده از جدول‌های Markdown را نیز توصیه نمی‌کنند. نام گروه‌ها و برچسب‌های شرکت‌کنندگان که از کانال دریافت می‌شوند، به‌صورت فراداده نامطمئنِ حصارگذاری‌شده نمایش داده می‌شوند، نه دستورالعمل‌های سیستمی درون‌خطی.

## جزئیات iMessage

- برای مسیریابی یا افزودن به فهرست مجاز، `chat_id:<id>` را ترجیح دهید.
- فهرست گفت‌وگوها: `imsg chats --limit 20`.
- پاسخ‌های گروهی همیشه به همان `chat_id` بازمی‌گردند.

## اعلان‌های سیستمی WhatsApp

برای قواعد مرجع اعلان سیستمی WhatsApp، از جمله تفکیک اعلان گروهی و مستقیم، رفتار نویسه عام و معنای لغو تنظیمات در سطح حساب، به [WhatsApp](/fa/channels/whatsapp#system-prompts) مراجعه کنید.

## جزئیات WhatsApp

برای رفتار مختص WhatsApp (تزریق تاریخچه و جزئیات مدیریت اشاره)، به [پیام‌های گروهی](/fa/channels/group-messages) مراجعه کنید.

## مرتبط

- [گروه‌های پخش](/fa/channels/broadcast-groups)
- [مسیریابی کانال](/fa/channels/channel-routing)
- [پیام‌های گروهی](/fa/channels/group-messages)
- [جفت‌سازی](/fa/channels/pairing)
