Actions and gates
Slack actions are controlled bychannels.slack.actions.*.
Available action groups in current Slack tooling:
Current Slack message actions include
send, conversation-open, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info, and emoji-list. download-file accepts Slack file IDs shown in inbound file placeholders and returns image previews for images or local file metadata for other file types.
Interactive message actions retain their caller authority through target and permission lookups and recheck it before each Slack request. If that authority closes, remaining requests stop while an already accepted mutation keeps its result.
In a Slack conversation, delegated member-info reads only the current requester
on the same account; omitting userId selects that requester. emoji-list uses
the trusted current workspace. Both metadata actions work without a channel target
with the bundled plugin and verified official npm or ClawHub installations. Existing
action gates and Enterprise workspace requirements still apply.
Use emoji-list to discover workspace custom emoji and aliases:
limit defaults to and cannot exceed 100:
identifier directly as the react emoji; surrounding colons are optional. channels.slack.actions.emojiList controls discovery separately from the reactions gate, and the app needs the emoji:read scope.
Live policy changes
DM access, allowlists, group policy, mention rules, and existing channel policy fields apply to new messages, commands, and system events without reconnecting Slack. Root settings and account overrides keep their normal precedence. Each admitted turn keeps one resolved policy snapshot; a change does not rewrite a reply already in progress. Workspace name resolution runs once per new snapshot and never appends identities from an older policy. Presence targets learned under an older config snapshot retire before another background wake; fresh admitted activity creates new targets. Transport credentials, account enablement, adding or removing accounts or channel entries, name-matching mode, presence settings, and native command/approval registration still restart the Slack monitor. The Gateway remains running.Access control and routing
- DM policy
- Channel policy
- Mentions and channel users
channels.slack.dmPolicy controls DM access. channels.slack.allowFrom is the canonical DM allowlist.pairing(default)allowlistopen(requireschannels.slack.allowFromto include"*")disabled
dm.enabled(default true)channels.slack.allowFromdm.allowFrom(legacy)dm.groupEnabled(group DMs default false)dm.groupChannels(optional MPIM allowlist)
dm.groupEnabled and dm.groupChannels only filter group DMs Slack already delivers to the app. They cannot make the app see a group DM it never joined. Convert the group DM to a private channel and invite the app, or have the app open a new MPDM with conversations.open. See Group DMs (MPDMs) and bots.- Omitted account
dmPolicyandgroupPolicyinherit the channel root. Explicit account policies win; with neither scope set, defaults remainpairingandallowlistrespectively. userTokenReadOnlyalso inherits the channel setting when omitted; its default remainstrue.channels.slack.accounts.default.allowFromapplies only to thedefaultaccount.- Named accounts inherit
channels.slack.allowFromwhen their ownallowFromis unset. - Named accounts do not inherit
channels.slack.accounts.default.allowFrom.
channels.slack.dm.policy and channels.slack.dm.allowFrom still read for compatibility. openclaw doctor --fix migrates them to dmPolicy and allowFrom when it can do so without changing access.Pairing in DMs uses openclaw pairing approve slack <code>.Group DMs (MPDMs) and bots
Slack group DMs, also called multi-person direct messages or MPDMs, are not channels an app can join by being mentioned. Typing@YourBot in an existing group DM does not add the app or make the conversation visible to it.
- If the app was included when the group DM was created, Slack delivers
message.mpimevents and OpenClaw can respond when DM policy allows it. - If the app is mentioned in an existing group DM where it is not a member, the bot token cannot see the conversation at all. Slack Web API calls such as
conversations.info,conversations.members, andconversations.historyfail with method- and context-dependent access or not-found errors, the MPDM does not appear inconversations.list?types=mpim, and no event is delivered to OpenClaw. - OpenClaw wakes in MPDMs through delivered
message.mpimevents.app_mentionevents do not add the app to DM or MPDM contexts. dm.groupEnabledanddm.groupChannelsonly filter MPDMs Slack already delivers to the app. They cannot grant membership or visibility into a group DM the app was never part of. There is no OpenClaw config setting that makes the app see a group DM it never joined.
- Convert the group DM to a private channel, then ask a current member to invite the app with
/invite @YourBot. An API-based invite must callconversations.invitewith a token whose actor is already a member and allowed to invite the app. - Ask the app to use the message tool’s
conversation-openaction with the human recipients inuserIds. It callsconversations.openusing the configured write identity; bot accounts needmpim:write. Slack includes the calling account automatically.
im:write); multiple recipients open or reuse a group DM with that exact audience. The result contains channelId and a routable target. Send the message with action: "send" and that exact target.
Use accountId to select a configured Slack account and teamId for an explicit workspace. The current workspace is inherited only for the same originating account; detached Enterprise operations require teamId. Opening is controlled by the messages action gate. It does not change DM/read policy, grant history access, or send a message by itself.