Configuration
گروهها
OpenClaw قوانین گروه یکسانی را در همه کانالهای دارای قابلیت گروه، از جمله Discord، iMessage، Matrix، Microsoft Teams، QQBot، Signal، Slack، Telegram، WhatsApp و Zalo اعمال میکند.
برای اتاقهای همیشهفعالی که باید زمینهای بیسروصدا فراهم کنند، مگر اینکه عامل صراحتاً پیامی قابلمشاهده ارسال کند، به رویدادهای محیطی اتاق مراجعه کنید.
مقدمه مبتدی (۲ دقیقه)
OpenClaw روی حسابهای پیامرسان خودتان «زندگی میکند». کاربر ربات WhatsApp جداگانهای وجود ندارد: اگر شما در گروهی باشید، OpenClaw میتواند آن گروه را ببیند و در آنجا پاسخ دهد.
رفتار پیشفرض:
- گروهها محدود هستند (
groupPolicy: "allowlist")؛ فرستندگان گروه تا زمانی که در فهرست مجاز قرار نگیرند، مسدود میشوند. - پاسخها به اشاره نیاز دارند، مگر اینکه دروازهبانی اشاره را برای گروهی غیرفعال کنید.
- متن پاسخ نهایی بهطور خودکار در اتاق ارسال میشود (
visibleReplies: "automatic").
بهعبارت دیگر: فرستندگان مجاز میتوانند با اشاره به OpenClaw آن را فعال کنند.
روند سریع (آنچه برای یک پیام گروهی رخ میدهد):
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 را بهکار ببرید. وضعیت مفصل برای هر نشست جداگانه است و در گفتوگوهای مستقیم، گروهها، کانالها و موضوعات انجمن به یک شکل کار میکند.
برای ثبت گفتوگوی بدون اشاره گروه همیشهفعال بهعنوان زمینه بیصدای اتاق بهجای درخواست کاربر، از رویدادهای محیطی اتاق استفاده کنید:
{ messages: { groupChat: { unmentionedInbound: "room_event", }, },}پیشفرض unmentionedInbound: "user_request" است. پیامهای دارای اشاره، فرمانها، درخواستهای توقف و پیامهای مستقیم همچنان درخواست کاربر باقی میمانند.
برای الزام عبور خروجی قابلمشاهده از ابزار پیام در درخواستهای گروه/کانال:
{ messages: { groupChat: { visibleReplies: "message_tool", }, },}برای الزام آن در همه گفتوگوهای منبع:
{ 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)، هنگام ساخت زمینه ورودی این سیاست را اعمال میکنند؛ ترکیبهای سیاست ناشناخته بهصورت بسته شکست میخورند و زمینه را حذف میکنند.
این حالتها فقط زمینه تکمیلی فراهمشده توسط کانال را فیلتر میکنند. سیاست ابزار و موجودی ابزار مختص مالک همچنان بر اساس درخواستکننده مبدأ نوبت جاری انتخاب میشوند، نه همه فرستندگانی که در اعلان حضور دارند. به کنترلهای محدود به درخواستکننده و زمینه اعلان مراجعه کنید.
اگر میخواهید...
| هدف | تنظیم موردنیاز |
|---|---|
| اجازه به همه گروهها، اما پاسخ فقط هنگام @اشاره | 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>را به شناسه گروه اضافه میکنند تا هر موضوع نشست مخصوص خود را داشته باشد. - گفتوگوهای مستقیم از نشست اصلی استفاده میکنند (یا اگر
session.dmScopeپیکربندی شده باشد، نشستهای جداگانه برای هر فرستنده). - Heartbeatها در نشست Heartbeat پیکربندیشده اجرا میشوند (پیشفرض: نشست اصلی عامل)؛ نشستهای گروه Heartbeatهای خودشان را اجرا نمیکنند.
الگو: پیامهای مستقیم شخصی + گروههای عمومی (یک عامل)
بله — اگر ترافیک «شخصی» شما پیامهای مستقیم و ترافیک «عمومی» شما گروهها باشد، این روش بهخوبی کار میکند.
دلیل: در حالت تکعاملی، پیامهای مستقیم معمولاً وارد کلید نشست اصلی (agent:main:main) میشوند، درحالیکه گروهها همیشه از کلیدهای نشست غیراصلی (agent:main:<channel>:group:<id>) استفاده میکنند. اگر جداسازی را با mode: "non-main" فعال کنید، آن نشستهای گروه در بکاند جداسازی پیکربندیشده اجرا میشوند، درحالیکه نشست اصلی پیام مستقیم شما روی میزبان باقی میماند. اگر بکاندی انتخاب نکنید، Docker بکاند پیشفرض است.
این تنظیم یک «مغز» عامل (فضای کاری + حافظه مشترک)، اما دو وضعیت اجرایی به شما میدهد:
- پیامهای مستقیم: ابزارهای کامل (میزبان)
- گروهها: محیط ایزوله + ابزارهای محدود
پیامهای مستقیم روی میزبان، گروهها در محیط ایزوله
{ 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"], }, }, },}گروهها فقط یک پوشه مجاز را میبینند
بهجای «عدم دسترسی به میزبان»، میخواهید «گروهها فقط پوشه X را ببینند»؟ workspaceAccess: "none" را نگه دارید و فقط مسیرهای مجاز را در محیط ایزوله سوار کنید:
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", docker: { binds: [ // hostPath:containerPath:mode "/home/user/FriendsShared:/data:ro", ], }, }, }, },}مرتبط:
- کلیدهای پیکربندی و پیشفرضها: پیکربندی Gateway
- اشکالزدایی علت مسدودشدن ابزار: محیط ایزوله در برابر سیاست ابزار در برابر دسترسی ارتقایافته
- جزئیات سوارکردن اتصالها: جداسازی
برچسبهای نمایشی
- برچسبهای رابط کاربری در صورت وجود از
displayNameاستفاده میکنند که بهشکل<channel>:<token>قالببندی میشود. #roomبرای اتاقها/کانالها رزرو شده است؛ گفتوگوهای گروهی ازg-<slug>استفاده میکنند (حروف کوچک، فاصلهها ->-، حفظ#@+._-). شناسههای مبهم و بسیار طولانی به توکنی پایدار کوتاه میشوند تا شناسههای کامل مسیر در رابط کاربری افشا نشوند.
سیاست گروه
نحوه مدیریت پیامهای گروه/اتاق را برای هر کانال کنترل کنید:
{ 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" |
فقط گروهها/اتاقهایی را مجاز میکند که با فهرست مجاز پیکربندیشده مطابقت دارند. |
نکات هر کانال
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 این راهکار جایگزین را برای هر حساب یکبار ثبت میکند.
مدل ذهنی سریع (ترتیب ارزیابی پیامهای گروهی):
groupPolicy
groupPolicy (open/disabled/allowlist).
فهرستهای مجاز گروه
فهرستهای مجاز گروه (*.groups، *.groupAllowFrom، فهرست مجاز مختص کانال).
الزام اشاره
الزام اشاره (requireMention، /activation).
الزام اشاره (پیشفرض)
پیامهای گروهی به اشاره نیاز دارند، مگر آنکه برای هر گروه بازنویسی شده باشد. مقادیر پیشفرض هر زیرسامانه در *.groups."*" قرار دارند.
واقعیتهای اشاره ضمنی پشتیبانیشده مختص هر کانال هستند:
| واقعیت | تولیدکنندگان داخلی فعلی |
|---|---|
| پاسخ به ربات | Discord، Microsoft Teams، QQBot، Slack، Telegram |
| نقلقول از ربات | WhatsApp، Zalo شخصی |
| پیوستن ربات به رشته | Mattermost، Slack، Tlon |
وقتی کانال هر واقعیت را تولید میکند، آن واقعیت بهطور پیشفرض فعال است. پرچم متناظر implicitMentions را روی false تنظیم کنید تا آن واقعیت دیگر الزام اشاره را دور نزند؛ اشارههای صریح بومی تحتتأثیر قرار نمیگیرند. این پرچم روی کانالهایی که آن واقعیت را تولید نمیکنند اثری ندارد.
{ 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 فعال کنید:
{ messages: { groupChat: { mentionPatterns: ["\\bopenclaw\\b", "\\bops bot\\b"], }, }, channels: { slack: { mentionPatterns: { mode: "deny", allowIn: ["C0123OPS"], }, }, },}وقتی الگوهای عبارت منظم اشاره باید بهطور گسترده اعمال شوند، از mode: "allow" پیشفرض استفاده کنید (یا mode را حذف کنید) و سپس آنها را در اتاقهای شلوغ با denyIn خاموش کنید:
{ 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 مانند 123@g.us. |
پیکربندیهای کانال در سطح حساب، در کانالهایی که از چند حساب پشتیبانی میکنند، میتوانند همین سیاست را زیر channels.<channel>.accounts.<accountId>.mentionPatterns تنظیم کنند. سیاست حساب برای آن حساب بر سیاست سطح بالای کانال اولویت دارد.
نکات الزام اشاره
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"را تنظیم کنید. برای نمونههای راهاندازی، رویدادهای محیطی اتاق را ببینید. - رویدادهای اتاق بهعنوان درخواستهای جعلی کاربر ذخیره نمیشوند و متن خصوصی دستیار از رویدادهای اتاقِ بدون ابزار پیام، بهعنوان تاریخچه گفتوگو بازپخش نمیشود.
- مقادیر پیشفرض Discord در
channels.discord.guilds."*"قرار دارند (قابل بازنویسی برای هر انجمن/کانال). - زمینه تاریخچه گروه در همه کانالها بهشکل یکسان پوشانده میشود. گروههای دارای الزام اشاره، پیامهای ردشده در انتظار را نگه میدارند؛ گروههای همیشهفعال نیز ممکن است پیامهای پردازششده اخیر اتاق را، در صورت پشتیبانی کانال، حفظ کنند. برای پیشفرض سراسری از
messages.groupChat.historyLimitو برای بازنویسیها ازchannels.<channel>.historyLimit(یاchannels.<channel>.accounts.*.historyLimit) استفاده کنید. برای غیرفعالکردن،0را تنظیم کنید.
محدودیتهای ابزار گروه/کانال (اختیاری)
برخی پیکربندیهای کانال از محدودکردن ابزارهای در دسترس درون یک گروه/اتاق/کانال مشخص پشتیبانی میکنند.
tools: مجاز/ردکردن ابزارها برای کل گروه (allow، alsoAllow، deny؛ رد اولویت دارد).toolsBySender: بازنویسیهای هر فرستنده درون گروه. از پیشوندهای صریح کلید استفاده کنید:channel:<channelId>:<senderId>، id:<senderId>، e164:<phone>، username:<handle>، name:<displayName>و نویسه عام"*". شناسههای کانال از شناسههای متعارف کانال OpenClaw استفاده میکنند؛ نامهای مستعاری مانندteamsبهmsteamsنرمالسازی میشوند. کلیدهای قدیمی بدون پیشوند همچنان پذیرفته میشوند، فقط بهعنوانid:مطابقت داده میشوند و هشدار منسوخشدن ثبت میکنند.
ترتیب تفکیک (مشخصترین مورد اولویت دارد):
toolsBySender گروه
تطابق toolsBySender گروه/کانال.
ابزارهای گروه
tools گروه/کانال.
toolsBySender پیشفرض
تطابق toolsBySender پیشفرض ("*").
ابزارهای پیشفرض
tools پیشفرض ("*").
نمونه (Telegram):
{ channels: { telegram: { groups: { "*": { tools: { deny: ["exec"] } }, "-1001234567890": { tools: { deny: ["exec", "read", "write"] }, toolsBySender: { "id:123456789": { alsoAllow: ["exec"] }, }, }, }, }, },}فهرستهای مجاز گروهها
وقتی channels.whatsapp.groups، channels.telegram.groups یا channels.imessage.groups پیکربندی شود، کلیدها بهعنوان فهرست مجاز گروهها عمل میکنند. برای مجاز کردن همه گروهها و درعینحال تنظیم رفتار پیشفرض اشاره، از "*" استفاده کنید.
کاربردهای رایج (کپی/جایگذاری):
غیرفعال کردن همه پاسخهای گروهی
{ channels: { whatsapp: { groupPolicy: "disabled" } },}مجاز کردن فقط گروههای مشخص (WhatsApp)
{ channels: { whatsapp: { groups: { "123@g.us": { requireMention: true }, "456@g.us": { requireMention: false }, }, }, },}مجاز کردن همه گروهها با الزام اشاره
{ channels: { whatsapp: { groups: { "*": { requireMention: true } }, }, },}فعالسازهای مختص مالک (WhatsApp)
{ channels: { whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], groups: { "*": { requireMention: true } }, }, },}فعالسازی (فقط مالک)
مالکان گروه میتوانند فعالسازی هر گروه را با یک پیام مستقل تغییر دهند:
/activation mention/activation always
/activation یک فرمان اصلیِ محدود به مالک است و فقط در گفتوگوهای گروهی اعمال میشود. مالک یعنی فرستنده با commands.ownerAllowFrom مطابقت داشته باشد؛ فهرستهای allowFrom کانال فقط دسترسی عادی به کانال و فرمانها را کنترل میکنند. حالت ذخیرهشده در کانالهایی که آن را بررسی میکنند (Google Chat، QQBot، Telegram، WhatsApp)، requireMention آن گروه را نادیده میگیرد و مقدمه اعلان سیستمی گروه در همهجا حالت فعال را بازتاب میدهد.
فیلدهای زمینه
محمولههای ورودی گروه این موارد را تنظیم میکنند:
ChatType=groupGroupSubject(اگر مشخص باشد)GroupMembers(اگر مشخص باشد)WasMentioned(نتیجه محدودسازی بر اساس اشاره)- موضوعات انجمن Telegram همچنین شامل
MessageThreadIdوIsForumهستند.
اعلان سیستمی عامل در نخستین نوبت یک نشست گروهی جدید (و پس از تغییر /activation) شامل مقدمهای برای گروه است. این مقدمه به مدل یادآوری میکند که مانند یک انسان پاسخ دهد، خطوط خالی را به حداقل برساند، فاصلهگذاری معمول گفتوگو را رعایت کند و از تایپ دنبالههای تحتاللفظی \n خودداری کند. کانالهایی که حالت جدول اعلامشده آنها جدولهای بومی یا خام را حفظ نمیکند، استفاده از جدولهای Markdown را نیز توصیه نمیکنند. نام گروهها و برچسبهای شرکتکنندگان که از کانال دریافت میشوند، بهصورت فراداده نامطمئنِ حصارگذاریشده نمایش داده میشوند، نه دستورالعملهای سیستمی درونخطی.
جزئیات iMessage
- برای مسیریابی یا افزودن به فهرست مجاز،
chat_id:<id>را ترجیح دهید. - فهرست گفتوگوها:
imsg chats --limit 20. - پاسخهای گروهی همیشه به همان
chat_idبازمیگردند.
اعلانهای سیستمی WhatsApp
برای قواعد مرجع اعلان سیستمی WhatsApp، از جمله تفکیک اعلان گروهی و مستقیم، رفتار نویسه عام و معنای لغو تنظیمات در سطح حساب، به WhatsApp مراجعه کنید.
جزئیات WhatsApp
برای رفتار مختص WhatsApp (تزریق تاریخچه و جزئیات مدیریت اشاره)، به پیامهای گروهی مراجعه کنید.