OpenClaw Slack events and operations
Which Slack events become system events, join introductions, untrusted channel metadata, the 30-second read deadline, interaction events from block actions, shortcuts and modals, and optional presence polling with its caps and cooldown
A Slack workspace emits far more than messages, and OpenClaw turns a chosen subset of that stream into system events the agent can reason about: an edit, a reaction, a member joining, a button pressed, a person coming back online. Here is the list of what is observed, the operational rules around it, the interaction events with their redactions, and the presence polling that Slack cannot push but OpenClaw can ask for.
What becomes a system event
- Message edits and deletes, reaction adds and removes, member joins and leaves, channel created and renamed, and pin adds and removes are all mapped into system events, while thread broadcasts, the replies also sent to the channel, are processed as normal user messages.
- When the bot itself joins an allowed channel it posts one introduction grounded in the channel name, purpose or topic and the available recent messages, enabled by default, never in DMs, and disabled with the join-intro key or per account; a channel-ID-changed event can migrate channel config keys when config writes are enabled.
- Channel topic and purpose metadata is treated as untrusted context that can be injected into routing context, Agent View app-context entities are validated in Slack's relevance order and exposed only as structured untrusted context with an omitted context clearing the turn, and thread-starter and initial thread-history seeding are filtered by the configured sender allowlists where they apply.
- Dedicated Web API reads used for probes, scope discovery, conversation classification and delivery reconciliation get a 30-second deadline per request attempt, with transient failures still retried so the whole operation can take longer, while the shared Bolt and mutation-capable clients receive no such default because Slack may commit a mutation before a late response reaches OpenClaw.
Slack does not send presence changes through the Events API or Socket Mode.
Interactions
Block actions, shortcuts and modal interactions emit structured interaction system events with rich payload fields: block actions carry the selected values, labels, picker values and workflow metadata, global shortcuts carry the callback and actor metadata and route to the actor's direct session, message shortcuts carry the callback, actor, channel, thread and selected-message context, and modal submission and closed events carry the routed channel metadata and the form inputs. You define global or message shortcuts in the Slack app configuration with any non-empty callback ID; OpenClaw acknowledges matching shortcut payloads, applies the same DM and channel sender policy as every other Slack interaction, and queues the sanitised event for the routed agent session, with trigger IDs and response URLs redacted from the agent's context.
Presence polling
- Because Slack sends no presence changes, OpenClaw can poll the get-presence method for human participants whose messages passed the normal access and routing checks: the mode is off by default with no timer or API calls, auto monitors DMs, group DMs and threads active in the last 24 hours with at most eight observed human participants and excludes top-level channel sessions, and on monitors the same conversations without the participant cap and includes top-level channels, with a per-channel override to force or suppress one channel.
- OpenClaw polls at most 45 unique workspace-user pairs per minute per Slack account, seeds the first result without waking the agent, wakes only on an observed away-to-active transition, applies a durable eight-hour cooldown per account, workspace and user even when the person is in several threads, routes the event only to that person's most recently active eligible conversation, and tells the agent to consult memory, wiki and known timezone context before deciding whether to send one short greeting, which it may skip.
- The event includes the observed away and active timestamps and the away duration, which is the elapsed time between the first sampled away state in the current monitor run and the later sampled active state rather than exact time away, and records what Slack reported rather than whether the person was at the keyboard, since Slack can mark someone away automatically or manually and the method does not distinguish; the prompt key replaces the default greeting guidance after the facts, applies at the account with a per-channel override, is included verbatim up to 20,000 characters, and an empty string leaves workspace instructions to decide; the bot token needs the users read scope, and Enterprise Grid installs create a workspace-scoped polling client only after an authorised event identifies the workspace, with state, cooldowns and targets partitioned per workspace.
OpenClaw on Slack is the channel post these events belong to, and OpenClaw Slack threads and sessions where a routed interaction event lands.
Presence as a question, not a push
Polling presence for a bounded set of recent participants is what lets an agent notice that someone is back without watching the whole workspace, and the cooldown and the may-stay-silent instruction keep it from becoming a greeting bot. OpenClaw presence covers the cross-channel presence model, and OpenClaw ambient room events what the quieter room events look like when nobody is mentioned.
On Diali
Slack is one of the channels Diali connects from the dashboard, with the runtime config generated and replaced at each release, so the events and polling rules here describe what a hosted agent observes in your workspace rather than settings you maintain. Slack on Diali is the channel on Diali and Diali security the boundary every connected channel shares.
- Edits, reactions, membership, pins and channels become system events.
- Interaction events keep the values and drop the trigger IDs.
- Presence is polled, capped at 45 pairs a minute, and cooled for eight hours.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
