4.5 KiB
4.5 KiB
summary, read_when
| summary | read_when |
|---|---|
| Slack socket mode setup and Clawdbot config | Setting up Slack or debugging Slack socket mode |
Slack (socket mode)
Setup
- Create a Slack app (From scratch) in https://api.slack.com/apps.
- Socket Mode → toggle on. Then go to Basic Information → App-Level Tokens → Generate Token and Scopes with scope
connections:write. Copy the App Token (xapp-...). - OAuth & Permissions → add bot token scopes (use the manifest below). Click Install to Workspace. Copy the Bot User OAuth Token (
xoxb-...). - Event Subscriptions → enable events and subscribe to:
message.*(includes edits/deletes/thread broadcasts)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- Invite the bot to channels you want it to read.
- Slash Commands → create the
/clawdcommand (or your preferred name). - App Home → enable the Messages Tab so users can DM the bot.
Use the manifest below so scopes and events stay in sync.
Manifest (optional)
Use this Slack app manifest to create the app quickly (adjust the name/command if you want).
{
"display_information": {
"name": "Clawdbot",
"description": "Slack connector for Clawdbot"
},
"features": {
"bot_user": {
"display_name": "Clawdbot",
"always_online": false
},
"app_home": {
"messages_tab_enabled": true,
"messages_tab_read_only_enabled": false
},
"slash_commands": [
{
"command": "/clawd",
"description": "Send a message to Clawdbot",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"channels:history",
"channels:read",
"groups:history",
"im:history",
"mpim:history",
"users:read",
"app_mentions:read",
"reactions:read",
"reactions:write",
"pins:read",
"pins:write",
"emoji:read",
"commands",
"files:read",
"files:write"
]
}
},
"settings": {
"socket_mode_enabled": true,
"event_subscriptions": {
"bot_events": [
"app_mention",
"message.channels",
"message.groups",
"message.im",
"message.mpim",
"reaction_added",
"reaction_removed",
"member_joined_channel",
"member_left_channel",
"channel_rename",
"pin_added",
"pin_removed"
]
}
}
}
Config
Slack uses Socket Mode only (no HTTP webhook server). Provide both tokens:
{
"slack": {
"enabled": true,
"botToken": "xoxb-...",
"appToken": "xapp-...",
"dm": {
"enabled": true,
"allowFrom": ["U123", "U456", "*"],
"groupEnabled": false,
"groupChannels": ["G123"]
},
"channels": {
"C123": { "allow": true, "requireMention": true },
"#general": { "allow": true, "requireMention": false }
},
"reactionNotifications": "own",
"reactionAllowlist": ["U123"],
"actions": {
"reactions": true,
"messages": true,
"pins": true,
"memberInfo": true,
"emojiList": true
},
"slashCommand": {
"enabled": true,
"name": "clawd",
"sessionPrefix": "slack:slash",
"ephemeral": true
},
"textChunkLimit": 4000,
"mediaMaxMb": 20
}
}
Tokens can also be supplied via env vars:
SLACK_BOT_TOKENSLACK_APP_TOKEN
Sessions + routing
- DMs share the
mainsession (like WhatsApp/Telegram). - Channels map to
slack:channel:<channelId>sessions. - Slash commands use
slack:slash:<userId>sessions.
Delivery targets
Use these with cron/CLI sends:
user:<id>for DMschannel:<id>for channels
Tool actions
Slack tool actions can be gated with slack.actions.*:
| Action group | Default | Notes |
|---|---|---|
| reactions | enabled | React + list reactions |
| messages | enabled | Read/send/edit/delete |
| pins | enabled | Pin/unpin/list |
| memberInfo | enabled | Member info |
| emojiList | enabled | Custom emoji list |
Notes
- Mention gating is controlled via
slack.channels(setrequireMentiontotrue);routing.groupChat.mentionPatternsalso count as mentions. - Reaction notifications follow
slack.reactionNotifications(usereactionAllowlistwith modeallowlist). - Attachments are downloaded to the media store when permitted and under the size limit.