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.
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.
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.