Configuration
گروهها
OpenClaw همان قواعد گروه را در همهٔ کانالهای دارای قابلیت گروه، از جمله Discord، iMessage، Matrix، Microsoft Teams، QQBot، Signal، Slack، Telegram، WhatsApp و Zalo اعمال میکند.
برای اتاقهای همیشهفعالی که باید زمینهای کمسروصدا فراهم کنند، مگر اینکه عامل صراحتاً پیامی قابلمشاهده بفرستد، به رویدادهای محیطی اتاق مراجعه کنید.
مقدمه برای مبتدیان (۲ دقیقه)
OpenClaw در حسابهای پیامرسان خودتان «زندگی میکند». کاربر ربات جداگانهای در WhatsApp وجود ندارد: اگر شما در گروهی باشید، OpenClaw میتواند آن گروه را ببیند و در آنجا پاسخ دهد.
رفتار پیشفرض:
- گروهها محدود هستند (
groupPolicy: "allowlist")؛ فرستندگان گروه تا زمانی که به فهرست مجاز افزوده نشوند، مسدود میشوند. - پاسخها مستلزم اشاره هستند، مگر اینکه دروازهبانی اشاره را برای گروهی غیرفعال کنید.
- متن پاسخ نهایی بهطور خودکار در اتاق ارسال میشود (
visibleReplies: "automatic").
بهعبارت دیگر: فرستندگان موجود در فهرست مجاز میتوانند با اشاره به OpenClaw آن را فعال کنند.
روند سریع (آنچه برای یک پیام گروهی رخ میدهد):
groupPolicy? disabled -> dropgroupPolicy? allowlist -> group allowed? no -> droprequireMention? yes -> mentioned? no -> store for context onlymention/reply/command/DM -> user requestalways-on group chatter -> user request, or room event when configuredپاسخهای قابلمشاهده
برای درخواستهای عادی گروه/کانال، مقدار پیشفرض 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", // 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"], }, }, },}گروهها فقط پوشهٔ موجود در فهرست مجاز را میبینند
بهجای «بدون دسترسی به میزبان» میخواهید «گروهها فقط پوشهٔ 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"], // numeric Telegram user id (setup resolves @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از الزام اشاره (که به @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استفاده میکند. از شناسههای اتاق (!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 شخصی.
{ 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 محرکهای جایگزین عبارت منظم هستند. زمانی از آنها استفاده کنید که پلتفرم اشارهٔ بومی به ربات را ارائه نمیکند یا وقتی متن سادهای مانند openclaw: باید اشاره محسوب شود. اشارههای بومی پلتفرم جدا هستند: وقتی Discord، Slack، Telegram، Matrix یا کانال دیگری بتواند ثابت کند که پیام صراحتاً به ربات اشاره کرده است، آن اشارهٔ بومی حتی در جایی که الگوهای عبارت منظم پیکربندیشده رد شدهاند نیز همچنان فعال میشود.
بهطور پیشفرض، الگوهای اشارهٔ پیکربندیشده در هر جایی اعمال میشوند که کانال، اطلاعات ارائهدهنده و مکالمه را به تشخیص اشاره ارسال کند. برای جلوگیری از اینکه الگوهای گسترده عامل را در هر گروه فعال کنند، دامنهٔ آنها را برای هر کانال با 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.list[].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 یک فرمان اصلی محدودشده به مالک است و فقط در گفتوگوهای گروهی اعمال میشود. مالک یعنی فرستنده با allowFrom / commands.ownerAllowFrom کانال مطابقت داشته باشد (وقتی هیچ فهرست مجازی پیکربندی نشده باشد، شناسه خود حساب بهعنوان مالک محسوب میشود). حالت ذخیرهشده در کانالهایی که از آن استفاده میکنند (Google Chat، QQBot، Telegram، WhatsApp)، مقدار requireMention آن گروه را بازنویسی میکند و مقدمه اعلان سیستمی گروه در همهجا حالت فعال را بازتاب میدهد.
فیلدهای زمینه
بارهای ورودی گروه این موارد را تنظیم میکنند:
ChatType=groupGroupSubject(اگر مشخص باشد)GroupMembers(اگر مشخص باشند)WasMentioned(نتیجه شرط اشاره)- موضوعات انجمن Telegram همچنین شامل
MessageThreadIdوIsForumهستند.
اعلان سیستمی عامل در نخستین نوبت یک نشست گروهی جدید (و پس از تغییرات /activation) شامل مقدمهای برای گروه است. این مقدمه به مدل یادآوری میکند مانند یک انسان پاسخ دهد، خطوط خالی را به حداقل برساند و از فاصلهگذاری معمول گفتوگو پیروی کند، و از تایپ دنبالههای تحتاللفظی \n خودداری کند. گروههای غیر Telegram استفاده از جدولهای Markdown را نیز توصیه نمیکنند؛ راهنمای متن غنی Telegram از اعلان کانال Telegram میآید. نامهای گروه و برچسبهای شرکتکنندگان که از کانال دریافت میشوند، بهصورت فراداده نامطمئن محصورشده نمایش داده میشوند، نه بهعنوان دستورالعملهای سیستمی درونخطی.
جزئیات iMessage
- هنگام مسیریابی یا افزودن به فهرست مجاز،
chat_id:<id>را ترجیح دهید. - فهرستکردن گفتوگوها:
imsg chats --limit 20. - پاسخهای گروهی همیشه به همان
chat_idبازمیگردند.
اعلانهای سیستمی WhatsApp
برای قواعد معیار اعلان سیستمی WhatsApp، از جمله تفکیک اعلان گروهی و مستقیم، رفتار نویسه عام و معناشناسی بازنویسی حساب، به WhatsApp مراجعه کنید.
جزئیات WhatsApp
برای رفتار مختص WhatsApp (تزریق تاریخچه و جزئیات مدیریت اشاره)، به پیامهای گروهی مراجعه کنید.