Configuration
رویدادهای محیطی اتاق
رویدادهای محیطی اتاق به OpenClaw اجازه میدهند گفتوگوهای گروه یا کانال را که در آنها اشارهای نشده است، بهعنوان زمینهای بیصدا پردازش کند. عامل میتواند حافظه و وضعیت نشست را بهروزرسانی کند، اما اتاق ساکت میماند، مگر اینکه عامل صراحتاً ابزار message را فراخوانی کند.
برای گفتوگوهای گروهی همیشهفعال، messages.groupChat.unmentionedInbound: "room_event" را با messages.groupChat.visibleReplies: "message_tool" ترکیب کنید. عامل گوش میدهد، تصمیم میگیرد چه زمانی پاسخ مفید است و دیگر به الگوی قدیمی پرامپت برای پاسخدادن با NO_REPLY نیازی ندارد.
مواردی که اکنون پشتیبانی میشوند: کانالهای انجمن Discord، کانالها و کانالهای خصوصی Slack، پیامهای مستقیم چندنفره Slack و گروهها یا ابرگروههای Telegram. سایر کانالهای گروهی رفتار گروهی فعلی خود را حفظ میکنند، مگر اینکه صفحه کانال آنها اعلام کند از رویدادهای محیطی اتاق پشتیبانی میکنند.
راهاندازی پیشنهادی
رفتار سراسری گفتوگوی گروهی را تنظیم کنید:
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, },}سپس با غیرفعالکردن الزام اشاره برای آن اتاق، آن را همیشهفعال کنید. اتاق همچنان باید groupPolicy عادی خود، فهرست مجاز اتاق و فهرست مجاز فرستنده را با موفقیت پشت سر بگذارد.
پس از ذخیره پیکربندی، Gateway تنظیمات messages را بدون راهاندازی مجدد اعمال میکند. فقط زمانی راهاندازی مجدد کنید که پایش فایل یا بارگذاری مجدد پیکربندی غیرفعال باشد (gateway.reload.mode: "off").
چه چیزهایی تغییر میکنند
با messages.groupChat.unmentionedInbound: "room_event":
- پیامهای مجاز گروه یا کانال که در آنها اشارهای نشده است، به رویدادهای بیصدای اتاق تبدیل میشوند
- پیامهای دارای اشاره همچنان درخواست کاربر باقی میمانند
- فرمانهای کنترلی متنی و فرمانهای بومی همچنان درخواست کاربر باقی میمانند
- درخواستهای لغو یا توقف همچنان درخواست کاربر باقی میمانند
- پیامهای مستقیم همچنان درخواست کاربر باقی میمانند
رویدادهای اتاق از تحویل نمایان سختگیرانه استفاده میکنند. متن نهایی دستیار خصوصی است. عامل باید برای ارسال در اتاق، message(action=send) را فراخوانی کند.
نمایش در حال تایپ و واکنشهای وضعیت چرخه حیات برای رویدادهای اتاق همچنان سرکوب میشوند. تنها استثنای صریح برای اعلام دریافت، messages.ackReactionScope: "all" است که واکنش تأیید پیکربندیشده را ارسال میکند؛ وقتی اتاق باید کاملاً ساکت بماند، از دامنهای محدودتر یا "off" استفاده کنید.
نمونه Discord
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { discord: { groupPolicy: "allowlist", guilds: { "<DISCORD_SERVER_ID>": { requireMention: false, users: ["<YOUR_DISCORD_USER_ID>"], }, }, }, },}وقتی فقط یک کانال باید محیطی باشد، از پیکربندی مختص کانال Discord استفاده کنید. در groupPolicy: "allowlist"، فهرستکردن کانال همان چیزی است که آن را مجاز میکند (enabled: false یک ورودی را غیرفعال میکند):
{ channels: { discord: { groupPolicy: "allowlist", guilds: { "<DISCORD_SERVER_ID>": { channels: { "<DISCORD_CHANNEL_ID_OR_NAME>": { requireMention: false, }, }, }, }, }, },}نمونه Slack
فهرستهای مجاز کانال Slack در درجه نخست بر اساس شناسه هستند. از شناسههای کانال مانند C12345678 استفاده کنید، نه #channel-name. فهرستکردن کانال در channels.slack.channels همان چیزی است که آن را مجاز میکند (enabled: false یک ورودی را غیرفعال میکند):
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { slack: { groupPolicy: "allowlist", channels: { "<SLACK_CHANNEL_ID>": { requireMention: false, }, }, }, },}نمونه Telegram
برای گروههای Telegram، ربات باید بتواند پیامهای عادی گروه را ببیند. اگر requireMention: false، حالت حریم خصوصی BotFather را غیرفعال کنید یا از راهاندازی دیگری برای Telegram استفاده کنید که تمام ترافیک گروه را به ربات تحویل میدهد.
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { telegram: { groups: { "<TELEGRAM_GROUP_CHAT_ID>": { groupPolicy: "open", requireMention: false, }, }, }, },}شناسههای گروه Telegram معمولاً اعداد منفی مانند -1001234567890 هستند. chat.id را از openclaw logs --follow بخوانید، یک پیام گروه را به ربات کمکی شناسه ارسال کنید یا getUpdates مربوط به Bot API را بررسی کنید.
سیاست مختص عامل
وقتی چند عامل اتاق یکسانی را به اشتراک میگذارند اما فقط یکی از آنها باید گفتوگوهای بدون اشاره را بهعنوان زمینه محیطی در نظر بگیرد، از بازنویسی عامل استفاده کنید:
{ messages: { groupChat: { visibleReplies: "message_tool", }, }, agents: { list: [ { id: "main", groupChat: { unmentionedInbound: "room_event", mentionPatterns: ["@openclaw", "openclaw"], }, }, ], },}مقدار مختص عامل agents.entries.*.groupChat.unmentionedInbound، مقدار messages.groupChat.unmentionedInbound را برای آن عامل بازنویسی میکند.
حالتهای پاسخ نمایان
messages.groupChat.visibleReplies برای درخواستهای عادی کاربر در گروه یا کانال، بهطور پیشفرض "automatic" است. وقتی متن نهایی دستیار باید بدون فراخوانی صریح ابزار پیام بهصورت نمایان ارسال شود، این مقدار پیشفرض را حفظ کنید.
برای اتاقهای محیطی همیشهفعال، messages.groupChat.visibleReplies: "message_tool" همچنان توصیه میشود، بهویژه همراه با مدلهای نسل جدید و قابلاعتماد در استفاده از ابزار، مانند GPT-5.6 Sol. این حالت به عامل اجازه میدهد با فراخوانی ابزار پیام تصمیم بگیرد چه زمانی صحبت کند. اگر مدل بدون فراخوانی ابزار، متن نهایی برگرداند، OpenClaw آن متن نهایی را خصوصی نگه میدارد و فراداده تحویل سرکوبشده را ثبت میکند.
رویدادهای اتاق حتی زمانی که سایر درخواستهای گروه از پاسخهای خودکار استفاده میکنند، سختگیرانه باقی میمانند. رویدادهای محیطی اتاق که در آنها اشارهای نشده است، برای خروجی نمایان همیشه به message(action=send) نیاز دارند.
تاریخچه
messages.groupChat.historyLimit مقدار پیشفرض سراسری تاریخچه گروه را تعیین میکند (در صورت تنظیمنشدن، 50؛ باید عدد صحیح مثبت باشد). کانالها میتوانند آن را با channels.<channel>.historyLimit بازنویسی کنند و برخی کانالها از محدودیت تاریخچه مختص حساب نیز پشتیبانی میکنند. برای غیرفعالکردن زمینه تاریخچه گروه در یک کانال، historyLimit: 0 سطح کانال را تنظیم کنید.
کانالهای پشتیبانیکننده رویداد اتاق، پیامهای محیطی اخیر اتاق را بهعنوان زمینه نگه میدارند. Telegram یک پنجره چرخان و همیشهفعال برای هر گروه نگه میدارد که با historyLimit محدود میشود؛ نوبتهای درخواست کاربر، ورودیهای پس از آخرین پاسخ ثبتشده ربات را انتخاب میکنند، درحالیکه نوبتهای رویداد اتاق، کل پنجره اخیر را دریافت میکنند تا مدل بتواند ارسالهای اخیر خود را ببیند. کلید حالت بازنشستهشده Telegram یعنی includeGroupHistoryContext توسط openclaw doctor --fix حذف میشود.
عیبیابی
اگر اتاق وضعیت در حال تایپ یا مصرف توکن را نشان میدهد اما هیچ پیام نمایانی وجود ندارد:
- تأیید کنید اتاق توسط فهرست مجاز کانال و فهرست مجاز فرستنده مجاز شده است.
- تأیید کنید
requireMention: falseدر سطح مورد انتظار اتاق تنظیم شده است. - بررسی کنید آیا
messages.groupChat.unmentionedInboundیا بازنویسی عامل برابر با"room_event"است. - گزارشها را برای فراداده محموله نهایی سرکوبشده یا
didSendViaMessagingTool: falseبررسی کنید. - برای درخواستهای عادی گروه، اگر میخواهید پاسخهای نهایی بهطور خودکار ارسال شوند،
messages.groupChat.visibleReplies: "automatic"را حفظ یا بازیابی کنید. برای اتاقهای محیطی که ازmessage_toolاستفاده میکنند، از مدل یا زماناجرایی استفاده کنید که ابزارها را بهطور قابلاعتماد فراخوانی میکند.
اگر اتاقهای محیطی Telegram اصلاً فعال نمیشوند، حالت حریم خصوصی BotFather را بررسی کنید و مطمئن شوید Gateway پیامهای عادی گروه را دریافت میکند.
اگر اتاقهای محیطی Slack فعال نمیشوند، بررسی کنید کلید کانال همان شناسه کانال Slack باشد و برنامه برای آن نوع اتاق، دامنه دسترسی تاریخچه را داشته باشد: channels:history (عمومی)، groups:history (خصوصی) یا mpim:history (پیامهای مستقیم چندنفره).