OpenClaw ambient room events
Always-on rooms the agent listens to quietly, the two settings that make it work, the two prerequisites that silently break it, and the per-channel examples
Some rooms should be watched, not answered. OpenClaw’s ambient room events let unmentioned group or channel chatter be processed as quiet context: the agent can update memory and session state, but the room stays silent unless the agent explicitly calls the message tool. For always-on rooms the docs combine two settings, unmentioned inbound as room events and visible replies through the message tool, so the agent listens, decides when a reply is useful, and never needs the old silent-token pattern. Here is the setup, the two prerequisites, what changes, the channel examples, the reply modes, history, and troubleshooting.
Setup and prerequisites
- Supported today: Discord guild channels, Slack channels, private channels and multi-person DMs, and Telegram groups or supergroups; other group channels keep their existing behaviour unless their page says otherwise. The recommended global setting is room-event inbound, message-tool visible replies and a history limit of fifty, then the room is made always-on by disabling mention gating, while it must still pass its group policy, room allowlist and sender allowlist.
- Two settings silently disable ambient events even when the inbound mode is set: mention gating must be off for the room, because a mention requirement drops unmentioned messages before routing so they never become events and the agent then has no room backlog at all, which is the first thing to check when it says it cannot see recent history.
- The agent needs the message tool, since room events use strict visible delivery and posting requires the message send action; the tool ships in the messaging profile but not in the minimal or coding profiles, so an agent on the coding profile listens and can never speak until the tool is granted explicitly with an also-allow entry, checked with the agents list and a probe turn rather than assumed.
- After saving, the Gateway hot-applies message settings, and only a reload mode of off needs a manual restart.
The agent listens, decides when a reply is useful, and never needs the old prompt pattern of answering NO_REPLY.
What changes
With room-event inbound, unmentioned allowed group or channel messages become quiet room events while mentioned messages, text control commands and native commands, abort or stop requests and direct messages all stay user requests. Room events use strict visible delivery, so final assistant text is private and the agent must call the message send action to post; typing indicators and lifecycle status reactions stay suppressed for room events, with one explicit exception, an ack reaction scope of all, which sends the configured reaction, so any narrower scope or off keeps the room completely silent. Visible replies default to automatic for normal group requests, and the message-tool mode is still recommended for ambient rooms, especially with tool-reliable current models: the agent decides when to speak, and if the model returns final text without calling the tool, OpenClaw keeps it private and logs suppressed-delivery metadata. Room events stay strict even when other group requests use automatic replies.
Examples and history
- Discord: the allowlist policy with a guild entry that disables the mention requirement and lists your user id, or a per-channel entry under the guild when only one channel should be ambient, where listing the channel is what allows it. Slack: channel allowlists are id-first, so the key is a channel id rather than a hash name, listed under the channels map with the mention requirement off; the app also needs the history scope for that room type, public, private or multi-person DM.
- Telegram: the bot must be able to see normal group messages, so with the mention requirement off either disable BotFather privacy mode or use a setup that delivers full group traffic; group ids are usually negative numbers found in the log stream, through an id helper bot or the Bot API updates. When several agents share a room but only one should treat unmentioned chatter as ambient, an agent-level inbound setting overrides the global one for that agent.
- The history limit sets the global group history default, fifty when unset, overridable per channel and sometimes per account, with zero disabling group history for a channel; supported channels keep recent ambient messages as context, and Telegram keeps an always-on rolling per-group window where user-request turns get entries after the bot’s last reply while room-event turns receive the full window so the model can see its own recent posts.
OpenClaw group chats is the model ambient rooms extend, and OpenClaw on Discord the channel whose guild channels support them.
Troubleshooting
A room that shows typing or token usage but no visible message: confirm the room passes the channel and sender allowlists, confirm the mention requirement is off at the level you expect, check whether the global or agent inbound setting is room events, inspect the logs for suppressed final payloads or a false sent-via-messaging-tool flag, and for normal group requests restore automatic replies if you want finals posted, while ambient rooms need a model that reliably calls tools. Telegram rooms that never trigger point at privacy mode; Slack rooms at a name used instead of an id or a missing history scope. OpenClaw on Slack and OpenClaw on Telegram are the other two channels with the same support.
On Diali
On Diali ambient rooms are available on Discord, Slack and Telegram, the three connected channels that support them; switching a room to ambient means the assistant reads everything the room says, so choose the rooms deliberately. Hosted OpenClaw on Diali is the assistant and Diali security describes what stays inside its boundary.
- Room events in, message tool out, silence otherwise.
- Mention gating off, message tool granted, or nothing happens.
- Ids for Slack, privacy mode off for Telegram.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
