Slackbot

Automation

Slack bot API integration with managed OAuth for Slack workspace automation. Send messages, manage channels, handle files, manage user groups, schedule messages, search content, manage reactions, pins, reminders, calls, and canvases. Use this skill when users want to automate Slack messaging, search workspace content, manage channels and members, send scheduled messages, or interact with Slack canvases and files.

Install

openclaw skills install slackbot

Slackbot

Slackbot

Slack is a team communication platform with channels, direct messages, file sharing, and workflow automation. This integration uses managed OAuth through ClawLink to provide comprehensive Slack workspace automation -- from messaging and channel management to file handling, reactions, reminders, and canvases.

Setup in 3 Steps

Step 1: InstallStep 2: Pair AccountStep 3: Connect Slack
InstallPairApp-specific connection GIF coming soon
Run the install command in OpenClawSign in and approve the deviceOpen the dashboard and connect Slack

How It Works

┌─────────────────┐     ┌──────────────┐     ┌──────────────────┐
│   OpenClaw      │────▶│   ClawLink   │────▶│   Slack API      │
│   (User Chat)   │     │   (OAuth)    │     │                  │
└─────────────────┘     └──────────────┘     └──────────────────┘

Install

openclaw plugins install clawhub:clawlink-plugin
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart

Quick Start

Send a message to a channel:

clawlink_execute_tool --integration slackbot --tool slackbot_send_message --args '{"channel": "C01234567", "markdown_text": "Deployment complete. All systems operational."}'

Search for messages in the workspace:

clawlink_execute_tool --integration slackbot --tool slackbot_search_messages --args '{"query": "quarterly report"}'

List all channels in the workspace:

clawlink_execute_tool --integration slackbot --tool slackbot_list_all_channels

Authentication

Slack uses OAuth 2.0 managed by ClawLink. No API keys are needed. Authorize your Slack workspace through the ClawLink dashboard. The connection is stored securely and refreshed automatically.

Connect at: https://claw-link.dev/dashboard?add=slackbot

Connection Management

List connections:

clawlink_list_integrations

Verify connection:

clawlink_execute_tool --integration slackbot --tool slackbot_fetch_team_info

Reconnect: If a connection expires, visit the dashboard URL above and reconnect Slack.

Security & Permissions

  • Read operations (listing channels, messages, users, files, searching) are safe and require no confirmation.
  • Write operations (sending messages, creating channels, scheduling, managing reactions) modify data and require confirmation.
  • Destructive operations (deleting messages, files, canvases, scheduled messages) are high-impact and irreversible.

Tool Reference

Messaging (Chat)

ToolDescriptionMode
slackbot_send_messagePost a message to a channel, DM, or private groupWrite
slackbot_updates_a_messageUpdate an existing message by timestampWrite
slackbot_deletes_a_message_from_a_chatDelete a message by channel and timestampWrite (Destructive)
slackbot_send_ephemeral_messageSend a message visible only to one user in a channelWrite
slackbot_send_me_messageSend a /me message displayed as a third-person actionWrite
slackbot_schedule_messageSchedule a message for future delivery (up to 120 days)Write
slackbot_delete_scheduled_messageDelete a pending scheduled messageWrite (Destructive)
slackbot_customize_url_unfurlCustomize URL preview content in a messageWrite

Channel (Conversation) Management

ToolDescriptionMode
slackbot_list_all_channelsList conversations available to the userRead
slackbot_find_channelsFind channels by name, topic, purpose, or descriptionRead
slackbot_retrieve_conversation_informationRetrieve metadata for a conversation by IDRead
slackbot_retrieve_conversation_members_listRetrieve paginated member IDs for a channelRead
slackbot_fetch_conversation_historyFetch chronological messages from a channelRead
slackbot_fetch_message_thread_from_a_conversationRetrieve replies to a specific parent messageRead
slackbot_create_channelCreate a public or private channelWrite
slackbot_join_an_existing_conversationJoin an existing conversation by IDWrite
slackbot_leave_conversationLeave a conversation by channel IDWrite
slackbot_invite_users_to_a_channelInvite users to a channel by their Slack user IDsWrite
slackbot_remove_user_from_conversationRemove a user from a conversationWrite (Destructive)
slackbot_archive_conversationArchive a conversation (makes it read-only)Write
slackbot_unarchive_channelReverse conversation archivalWrite
slackbot_rename_conversationRename a Slack channelWrite
slackbot_set_conversation_purposeSet the purpose text for a conversationWrite
slackbot_set_the_topic_of_a_conversationSet or update the topic for a conversationWrite
slackbot_set_read_cursor_in_a_conversationMark a message as the most recently readWrite
slackbot_close_conversationClose a DM or MPDM from the sidebarWrite
slackbot_open_dmOpen or resume a DM with one or more usersWrite

User Operations

ToolDescriptionMode
slackbot_list_all_usersList all users with profile details in the workspaceRead
slackbot_find_usersFind users by email, name, or display nameRead
slackbot_find_user_by_email_addressFind a user by their registered emailRead
slackbot_retrieve_detailed_user_informationRetrieve comprehensive info for a user IDRead
slackbot_retrieve_user_profile_informationRetrieve profile information for a userRead
slackbot_get_user_presenceRetrieve a user's real-time presence statusRead
slackbot_set_user_presenceManually set a user's presence (active/away)Write

File Operations

ToolDescriptionMode
slackbot_list_files_with_filters_in_slackList files with filtering by user, channel, or typeRead
slackbot_retrieve_detailed_information_about_a_fileRetrieve file metadata and commentsRead
slackbot_download_fileDownload file content and get a public URLRead
slackbot_upload_or_create_a_file_in_slackUpload files, images, or documents to channelsWrite
slackbot_delete_filePermanently delete a file by IDWrite (Destructive)
slackbot_delete_file_commentDelete a comment from a fileWrite (Destructive)
slackbot_enable_public_sharing_of_a_fileGenerate a public URL for a fileWrite
slackbot_revoke_file_public_sharingRevoke a file's public URLWrite (Destructive)

Remote File Operations

ToolDescriptionMode
slackbot_list_remote_filesList remote files added to SlackRead
slackbot_get_remote_fileRetrieve information about a remote fileRead
slackbot_add_remote_fileAdd a reference to an external file (Google Drive, etc.)Write
slackbot_share_remote_fileShare a remote file into channelsWrite
slackbot_update_remote_fileUpdate metadata for an existing remote fileWrite
slackbot_remove_remote_fileRemove a Slack reference to an external fileWrite (Destructive)

Reaction Operations

ToolDescriptionMode
slackbot_fetch_item_reactionsFetch reactions for a message, file, or file commentRead
slackbot_list_user_reactionsList all reactions added by a specific userRead
slackbot_add_reaction_to_an_itemAdd an emoji reaction to a messageWrite
slackbot_remove_reaction_from_itemRemove an emoji reaction from an itemWrite (Destructive)

Pin Operations

ToolDescriptionMode
slackbot_list_pinned_itemsList all pinned messages and files in a channelRead
slackbot_pin_itemPin a message to a channelWrite
slackbot_unpin_itemUnpin a message from a channelWrite (Destructive)

Reminder Operations

ToolDescriptionMode
slackbot_list_remindersList all reminders for the authenticated userRead
slackbot_get_reminderRetrieve details of a specific reminderRead
slackbot_create_a_reminderCreate a new reminder (supports natural language time)Write
slackbot_delete_reminderDelete an existing reminderWrite (Destructive)

Call Operations

ToolDescriptionMode
slackbot_get_call_infoRetrieve a point-in-time snapshot of a callRead
slackbot_start_callRegister a new call in SlackWrite
slackbot_end_callEnd an ongoing Slack callWrite (Destructive)
slackbot_update_call_infoUpdate call title, join URL, or desktop app URLWrite
slackbot_add_call_participantsRegister participants added to a callWrite
slackbot_remove_call_participantsRegister participants removed from a callWrite

Canvas Operations

ToolDescriptionMode
slackbot_lookup_canvas_sectionsLook up section IDs in a CanvasRead
slackbot_create_canvasCreate a new Slack Canvas with optional contentWrite
slackbot_edit_canvasEdit a Canvas with granular content operationsWrite
slackbot_delete_canvasDelete a Canvas permanentlyWrite (Destructive)

User Group Operations

ToolDescriptionMode
slackbot_list_user_groupsList all user groups in the workspaceRead
slackbot_list_user_group_membersList all user IDs within a user groupRead
slackbot_create_user_groupCreate a new user group (subteam)Write
slackbot_update_user_groupUpdate user group details (name, description, handle)Write
slackbot_update_user_group_membersReplace all members of a user groupWrite
slackbot_enable_user_groupRe-enable a disabled user groupWrite
slackbot_disable_user_groupDisable (archive) a user groupWrite

Search Operations

ToolDescriptionMode
slackbot_search_messagesSearch messages with query modifiers and date rangesRead
slackbot_search_allUnified search across messages and filesRead

Team & Emoji Operations

ToolDescriptionMode
slackbot_fetch_team_infoFetch metadata about the current Slack teamRead
slackbot_get_team_profileRetrieve profile field definitions for the teamRead
slackbot_list_custom_emojisList all custom emojis for the workspaceRead
slackbot_get_bot_userRetrieve information about a specific bot userRead
slackbot_list_conversationsList conversations accessible to a userRead

DND (Do Not Disturb) Operations

ToolDescriptionMode
slackbot_get_user_dnd_statusRetrieve a user's DND statusRead
slackbot_retrieve_current_user_dnd_statusRetrieve the current user's DND statusRead

Code Examples

Send a message to a channel:

{
  "tool": "slackbot_send_message",
  "args": {
    "channel": "C01234567",
    "markdown_text": "Build completed successfully. See details at https://ci.example.com/123"
  }
}

Schedule a message for later:

{
  "tool": "slackbot_schedule_message",
  "args": {
    "channel": "C01234567",
    "post_at": 1750000000,
    "text": "Standup starts in 10 minutes!"
  }
}

Search messages with filters:

{
  "tool": "slackbot_search_messages",
  "args": {
    "query": "from:@john in:#engineering after:2026-05-01"
  }
}

Create a channel and invite users:

{
  "tool": "slackbot_create_channel",
  "args": {
    "name": "project-phoenix",
    "is_private": false
  }
}

Add a reaction to a message:

{
  "tool": "slackbot_add_reaction_to_an_item",
  "args": {
    "channel": "C01234567",
    "timestamp": "1234567890.123456",
    "name": "thumbsup"
  }
}

Discovery Workflow

  1. Call clawlink_list_integrations to confirm slackbot is connected.
  2. Call clawlink_list_tools --integration slackbot to see the live catalog.
  3. Use slackbot_list_all_channels to discover channels (returns channel IDs needed for other tools).
  4. Use slackbot_find_users to locate specific users.

Execution Workflow

Read Flow:
  list_all_channels → retrieve_conversation_information → fetch_conversation_history
  find_channels → get channel ID → fetch_conversation_history → fetch_message_thread

Write Flow:
  find_channels → get channel ID → send_message (confirm)
  find_users → open_dm → send_message (confirm)

Search Flow:
  search_messages / search_all → retrieve results → act on specific messages

Notes

  • Always use resolved channel IDs (not display names) for operations. Names may be non-unique.
  • fetch_conversation_history only returns main channel timeline messages. For threaded replies, use fetch_message_thread_from_a_conversation with the parent message's thread_ts.
  • Sending messages is not idempotent -- duplicate calls create duplicate messages.
  • Rate limiting applies at approximately 1 request per second for message posting. Honor Retry-After headers on 429 responses.
  • Threaded replies require the parent message's ts value, not the thread's ID.
  • When opening a DM, use open_dm first to get the DM channel ID, then use that ID with send_message.

Error Handling

Status / ErrorMeaning
channel_not_foundInvalid channel ID; use find_channels to resolve names to IDs
not_in_channelBot is not a member of the target channel
channel_is_archivedChannel is archived; unarchive it first
users_not_foundEmail not registered, user inactive, or privacy settings hide it
429 Too Many RequestsRate limited; wait for Retry-After seconds before retrying

Troubleshooting

Tools Not Visible

Run clawlink_list_tools --integration slackbot to verify the integration is active. If empty, reconnect at https://claw-link.dev/dashboard?add=slackbot.

Channel Not Found

Use slackbot_find_channels with exact_match=false to locate channels. Channel names are converted to lowercase. Private channels require the bot to be a member.

Message Not Sent

Verify the bot is a member of the target channel. Use find_channels to confirm the channel ID is correct. Check that markdown_text or blocks content is provided.

Thread Replies Not Found

Use fetch_message_thread_from_a_conversation with the parent message's thread_ts, not the channel's ts. The parent message's thread_ts is found in fetch_conversation_history results.

Resources


Powered by ClawLink -- an integration hub for OpenClaw

ClawLink Logo