Slack Team Assistant

Data & APIs

Send messages, manage channels, handle files, and coordinate team communication in Slack via the Slack API. Use this skill when users want to send messages, search conversations, manage channels, create reminders, or automate Slack workflows from chat.

Install

openclaw skills install clawlink-slack

Slack

Slack

Manage Slack workspaces — send messages, manage channels, search conversations, handle files, create reminders, and automate team communication via the Slack API.

This skill uses ClawLink for hosted connection flows and credentials so you do not need to configure Slack API access yourself.

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 Web API  │
│   (User Chat)   │     │   (OAuth)    │     │                  │
└─────────────────┘     └──────────────┘     └──────────────────┘
         │                       │                       │
         │  1. Install Plugin    │                       │
         │  2. Pair Device       │                       │
         │  3. Connect Slack     │                       │
         │                       │  4. Secure Token      │
         │                       │  5. Proxy Requests    │
         │                       │                       │
         ▼                       ▼                       ▼
   ┌──────────┐           ┌──────────┐           ┌──────────┐
   │  SKILL   │           │ Dashboard│           │  Slack   │
   │  File    │           │ Auth     │           │ Workspace│
   └──────────┘           └──────────┘           └──────────┘

Install

Install the verified ClawLink plugin from ClawHub. After the user confirms, complete the full setup so ClawLink tools are visible in the next OpenClaw chat.

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

Then tell the user: "OpenClaw has been restarted. Send /new as a standalone message to start a fresh chat, then ask for Slack again."

Quick Start

# List all channels
clawlink_call_tool --tool "slack_list_all_channels" --params '{}'

# Send a message
clawlink_call_tool --tool "slack_send_message" --params '{"channel": "C0123456789", "text": "Hello from OpenClaw!"}'

# Find a user
clawlink_call_tool --tool "slack_find_user_by_email_address" --params '{"email": "colleague@company.com"}'

Authentication

All Slack tool calls are authenticated automatically by ClawLink using the user's connected Slack workspace OAuth token.

No API token is required in chat. ClawLink stores the OAuth token securely and injects it into every Slack Web API request on the user's behalf.

Getting Connected

  1. Install the ClawLink plugin (see Install above).
  2. Pair the plugin with clawlink_begin_pairing if it is not configured yet.
  3. Open https://claw-link.dev/dashboard?add=slack and connect Slack.
  4. Call clawlink_list_integrations to verify the connection is active.

Connection Management

List Connections

clawlink_list_integrations

Response: Returns all connected integrations. Look for slack in the list.

Verify Connection

clawlink_list_tools --integration slack

Response: Returns the live tool catalog for Slack.

Reconnect

If Slack tools are missing or the connection shows an error:

  1. Direct the user to https://claw-link.dev/dashboard?add=slack
  2. After they confirm, call clawlink_list_integrations to verify
  3. Then call clawlink_list_tools --integration slack

Security & Permissions

  • Access is scoped to the Slack workspace connected during OAuth setup and the permissions granted.
  • All write operations require explicit user confirmation. Before executing any message send, channel create, or delete call, confirm the target resource and intended effect with the user.
  • Destructive actions (delete channel, delete file, delete message) are marked as high-impact and must be confirmed.
  • Message sends to external channels or DMs should be confirmed before posting.

Tool Reference

Messages

ToolDescriptionMode
slack_send_messageSend a text message to a channel, DM, or MPDMWrite
slack_send_thread_replyReply to a specific message threadWrite
slack_schedule_messageSchedule a message for future deliveryWrite
slack_delete_scheduled_messageDelete a pending scheduled messageWrite
slack_list_scheduled_messagesList pending scheduled messages in a channelRead
slack_deletes_a_message_from_a_chatDelete a message from a channel or DMWrite
slack_update_messageUpdate an existing message's textWrite

Channels

ToolDescriptionMode
slack_list_all_channelsList all channels in the workspaceRead
slack_find_channelsSearch channels by name, topic, or purposeRead
slack_create_channelCreate a new public or private channelWrite
slack_archive_conversationArchive a channel (makes it read-only)Write
slack_rename_channelRename an existing channelWrite
slack_set_channel_topicSet the topic/description of a channelWrite
slack_set_channel_purposeSet the purpose of a channelWrite
slack_invite_users_to_a_slack_channelInvite users to a channelWrite
slack_join_an_existing_conversationJoin a channel you have access toWrite
slack_leave_conversationLeave a channelWrite
slack_close_dmClose a DM or MPDM conversationWrite

Conversations & History

ToolDescriptionMode
slack_fetch_conversation_historyGet messages from a channel (main timeline, not threads)Read
slack_fetch_message_thread_from_a_conversationGet all replies in a specific threadRead
slack_list_conversationsList conversations accessible to a userRead

Users

ToolDescriptionMode
slack_list_all_usersList all users in the workspaceRead
slack_find_usersSearch users by name, email, or criteriaRead
slack_find_user_by_email_addressLook up a user by their email addressRead
slack_get_user_presenceGet a user's current presence (active/away)Read
slack_get_user_dnd_statusGet a user's Do Not Disturb statusRead

Files

ToolDescriptionMode
slack_list_files_with_filters_in_slackList files shared in the workspaceRead
slack_upload_file_to_channelUpload a file to a channelWrite
slack_delete_filePermanently delete a fileWrite
slack_download_slack_fileDownload file content and get a public URLRead

Reactions

ToolDescriptionMode
slack_add_reaction_to_an_itemAdd an emoji reaction to a messageWrite
slack_remove_reaction_from_itemRemove a reaction from a messageWrite
slack_fetch_item_reactionsGet all reactions on a messageRead

Reminders

ToolDescriptionMode
slack_create_a_reminderCreate a reminder at a specific timeWrite
slack_list_remindersList all your remindersRead
slack_get_reminderGet details of a specific reminderRead
slack_complete_reminderMark a reminder as completeWrite
slack_delete_reminderDelete a reminderWrite

Pins & Stars

ToolDescriptionMode
slack_pin_itemPin a message to a channelWrite
slack_list_pinned_itemsList all pinned items in a channelRead
slack_remove_pinUnpin an item from a channelWrite
slack_add_starStar a channel, file, or messageWrite
slack_list_starred_itemsList your starred itemsRead
slack_remove_starRemove a star from an itemWrite

Canvases

ToolDescriptionMode
slack_create_canvasCreate a new Slack Canvas documentWrite
slack_edit_canvasEdit content in a CanvasWrite
slack_delete_canvasDelete a Canvas permanentlyWrite
slack_lookup_canvas_sectionsGet section IDs for targeted editingRead

Team & Admin

ToolDescriptionMode
slack_fetch_team_infoGet workspace metadata and settingsRead
slack_invite_user_to_workspaceInvite a new user to the workspaceWrite
slack_create_user_groupCreate a user group (subteam)Write
slack_list_user_groupsList all user groupsRead
slack_disable_user_groupDisable a user groupWrite
slack_enable_user_groupRe-enable a disabled user groupWrite
slack_list_enterprise_teamsList all teams in an Enterprise Grid orgRead
slack_read_audit_logsRead Enterprise Grid audit logsRead

Emoji

ToolDescriptionMode
slack_add_emojiAdd a custom emoji to the workspaceWrite
slack_list_custom_emojisList all custom emojiRead
slack_remove_emojiRemove a custom emoji (Enterprise Grid)Write

Calls

ToolDescriptionMode
slack_get_call_infoGet details about a Slack callRead
slack_end_callEnd an ongoing callWrite
slack_add_call_participantsAdd participants to a callWrite
slack_remove_call_participantsRemove participants from a callWrite

Code Examples

Send a message to a channel

clawlink_call_tool --tool "slack_send_message" \
  --params '{
    "channel": "C0123456789",
    "text": "Deployment complete! Version 2.1.0 is live."
  }'

Reply to a thread

clawlink_call_tool --tool "slack_send_thread_reply" \
  --params '{
    "channel": "C0123456789",
    "thread_ts": "1234567890.123456",
    "text": "I will take care of this by end of day."
  }'

Create a channel

clawlink_call_tool --tool "slack_create_channel" \
  --params '{
    "name": "project-alpha",
    "is_private": false
  }'

Schedule a reminder

clawlink_call_tool --tool "slack_create_a_reminder" \
  --params '{
    "text": "Weekly team sync",
    "time": "tomorrow at 10am"
  }'

Find a user and send them a DM

clawlink_call_tool --tool "slack_find_user_by_email_address" \
  --params '{
    "email": "alex@company.com"
  }'

Upload a file to a channel

clawlink_call_tool --tool "slack_upload_file_to_channel" \
  --params '{
    "channel": "C0123456789",
    "content": "File content here",
    "filename": "report.csv",
    "title": "Q1 Report"
  }'

Discovery Workflow

  1. Call clawlink_list_integrations to confirm Slack is connected.
  2. Call clawlink_list_tools --integration slack to see the live catalog.
  3. Treat the returned list as the source of truth. Do not guess or assume what tools exist.
  4. If the user describes a capability but the exact tool is unclear, call clawlink_search_tools with a short query and integration slack.
  5. If no Slack tools appear, direct the user to https://claw-link.dev/dashboard?add=slack.

Execution Workflow

┌─────────────────────────────────────────────────────────────┐
│  READ OPERATIONS (Safe)                                     │
│  list → get → search → find → call                         │
│                                                             │
│  Example: Find channel → Get history → Show messages       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│  WRITE OPERATIONS (Require Confirmation)                    │
│  describe → preview → confirm → call                        │
│                                                             │
│  Example: Preview message → User approves → Send message    │
└─────────────────────────────────────────────────────────────┘
  1. For unfamiliar tools, ambiguous requests, or any write action, call clawlink_describe_tool first.
  2. Use the returned guidance, schema, whenToUse, askBefore, safeDefaults, examples, and followups to shape the call.
  3. Prefer read, list, search, and get operations before writes when that reduces ambiguity.
  4. For writes or anything marked as requiring confirmation, call clawlink_preview_tool first.
  5. Execute with clawlink_call_tool. Pass confirmation only after the preview matches the user's intent.
  6. If the tool call fails, report the real error. Do not invent results or restate the failure as a missing capability unless the live catalog supports that conclusion.

Notes

  • slack_fetch_conversation_history returns messages from the main channel timeline only — threaded replies require slack_fetch_message_thread_from_a_conversation.
  • Channel IDs (C*/G*) are required for most Slack tools — use slack_find_channels to resolve display names to IDs.
  • Message scheduling accepts natural language times (e.g., "in 15 minutes", "every Thursday at 2pm") or Unix timestamps.
  • DMs and MPDMs use channel IDs starting with D or G respectively.
  • File uploads are limited by Slack's constraints; large files may need to be uploaded to a file host first.
  • Rate limits apply to many endpoints (~1-2 requests/second for list operations); honor Retry-After headers.

Error Handling

Status / ErrorMeaning
Tool not foundThe tool name does not exist in the current catalog. Verify with clawlink_list_tools --integration slack.
Missing connectionSlack is not connected. Direct the user to https://claw-link.dev/dashboard?add=slack.
channel_not_foundThe channel ID does not exist or the bot is not a member.
user_not_foundThe user email or ID does not match any workspace member.
not_authedThe OAuth token is invalid or has been revoked. Reconnect Slack.
missing_scopeThe token lacks the required scope for this operation.
message_not_foundThe message timestamp does not match any message in the channel.
cant_update_messageOnly the message author or workspace admin can edit a message.
is_archivedThe target channel has been archived.
send_as_appThe message requires a bot token. The user may need to use a different connection method.
Write rejectedUser did not confirm a write action. Always confirm before executing writes.

Troubleshooting: Tools Not Visible

  1. Check that the ClawLink plugin is installed:
    openclaw plugins list
    
  2. If the plugin is installed but tools are missing, tell the user to send /new as a standalone message to reload the catalog.
  3. If a fresh chat does not help, run:
    openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
    openclaw gateway restart
    
  4. After restart, tell the user to send /new again and retry.

Troubleshooting: Invalid Tool Call

  1. Ensure the integration slug is exactly slack.
  2. Use clawlink_describe_tool to verify parameter names and types before calling.
  3. For write operations, always call clawlink_preview_tool first.
  4. Resolve channel names to IDs using slack_find_channels before calling tools that require a channel ID.

Troubleshooting: Empty Results

  1. slack_fetch_conversation_history returns empty — the tool only fetches the main timeline, not threaded replies. Use slack_fetch_message_thread_from_a_conversation with the parent message's thread_ts.
  2. slack_find_channels returns empty — the channel may be private or the bot may not be a member. Use the channel ID directly if known.
  3. slack_list_all_users returns incomplete results — this may reflect guest account visibility settings, not a real absence.

Resources


Powered by ClawLink — an integration hub for OpenClaw

ClawLink Logo