Configuration

رویدادهای محیطی اتاق

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

برای گفت‌وگوهای گروهی همیشه‌فعال، messages.groupChat.unmentionedInbound: "room_event" را با messages.groupChat.visibleReplies: "message_tool" ترکیب کنید. عامل گوش می‌دهد، تصمیم می‌گیرد چه زمانی پاسخ مفید است و دیگر هرگز به الگوی قدیمی پرامپت برای پاسخ‌دادن با NO_REPLY نیاز ندارد.

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

راه‌اندازی پیشنهادی

رفتار سراسری گفت‌وگوی گروهی را تنظیم کنید:

json5
{  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

json5
{  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 یک ورودی را غیرفعال می‌کند):

json5
{  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 یک ورودی را غیرفعال می‌کند):

json5
{  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 استفاده کنید که تمام ترافیک گروه را به ربات تحویل می‌دهد.

json5
{  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 را بررسی کنید.

سیاست ویژه عامل

وقتی چند عامل اتاق یکسانی را به اشتراک می‌گذارند اما فقط یکی باید گفت‌وگوهای بدون اشاره را به‌عنوان زمینه محیطی در نظر بگیرد، از بازنویسی عامل استفاده کنید:

json5
{  messages: {    groupChat: {      visibleReplies: "message_tool",    },  },  agents: {    list: [      {        id: "main",        groupChat: {          unmentionedInbound: "room_event",          mentionPatterns: ["@openclaw", "openclaw"],        },      },    ],  },}

مقدار ویژه عامل در agents.list[].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 مقدار پیش‌فرض سراسری تاریخچه گروه را تعیین می‌کند (در صورت تنظیم‌نبودن ۵۰ است؛ باید یک عدد صحیح مثبت باشد). کانال‌ها می‌توانند آن را با channels.<channel>.historyLimit بازنویسی کنند و برخی کانال‌ها از محدودیت تاریخچه به‌ازای هر حساب نیز پشتیبانی می‌کنند. برای غیرفعال‌کردن زمینه تاریخچه گروه در یک کانال، مقدار historyLimit: 0 را در سطح آن کانال تنظیم کنید.

کانال‌های پشتیبان رویداد اتاق، پیام‌های محیطی اخیر اتاق را به‌عنوان زمینه نگه می‌دارند. Telegram برای هر گروه یک پنجره چرخشی همیشه‌فعال با محدودیت historyLimit نگه می‌دارد؛ نوبت‌های درخواست کاربر، ورودی‌های پس از آخرین پاسخ ثبت‌شده ربات را انتخاب می‌کنند، درحالی‌که نوبت‌های رویداد اتاق کل پنجره اخیر را دریافت می‌کنند تا مدل بتواند ارسال‌های اخیر خودش را ببیند. کلید حالت بازنشسته‌شده Telegram یعنی includeGroupHistoryContext توسط openclaw doctor --fix حذف می‌شود.

عیب‌یابی

اگر اتاق وضعیت تایپ یا مصرف توکن را نشان می‌دهد اما هیچ پیام قابل‌مشاهده‌ای وجود ندارد:

  1. تأیید کنید اتاق در فهرست مجاز کانال و فهرست مجاز فرستنده مجاز است.
  2. تأیید کنید requireMention: false در سطح مورد انتظار اتاق تنظیم شده است.
  3. بررسی کنید آیا messages.groupChat.unmentionedInbound یا بازنویسی عامل روی "room_event" تنظیم شده است.
  4. گزارش‌ها را برای فراداده محموله نهایی سرکوب‌شده یا didSendViaMessagingTool: false بررسی کنید.
  5. برای درخواست‌های عادی گروه، اگر می‌خواهید پاسخ‌های نهایی به‌طور خودکار ارسال شوند، messages.groupChat.visibleReplies: "automatic" را حفظ یا بازیابی کنید. برای اتاق‌های محیطی که از message_tool استفاده می‌کنند، از مدل یا محیط اجرایی‌ای استفاده کنید که ابزارها را به‌طور قابل‌اعتماد فراخوانی می‌کند.

اگر اتاق‌های محیطی Telegram اصلاً فعال نمی‌شوند، حالت حریم خصوصی BotFather را بررسی کنید و مطمئن شوید Gateway پیام‌های عادی گروه را دریافت می‌کند.

اگر اتاق‌های محیطی Slack فعال نمی‌شوند، تأیید کنید کلید کانال همان شناسه کانال Slack است و برنامه برای آن نوع اتاق دامنه دسترسی تاریخچه را دارد: channels:history (عمومی)، groups:history (خصوصی) یا mpim:history (پیام‌های مستقیم چندنفره).

مرتبط

Was this useful?
On this page

On this page