Slack
Overview
Section titled “Overview”The Slack provider integrates your digital worker with Slack workspaces. It supports:
- Direct messages (DMs)
- Channel messages
- App mentions
- Interactive components (buttons, menus)
- Block Kit rich messaging
- Slash commands
- Thread replies
Prerequisites
Section titled “Prerequisites”- A Slack workspace
- Admin access to create a Slack app
-
Create a Slack App
Go to api.slack.com/apps and click “Create New App”:
- Choose “From scratch”
- Enter an app name (e.g., “My Support Bot”)
- Select your workspace
-
Configure Bot Token Scopes
Go to OAuth & Permissions → Scopes → Bot Token Scopes:
Required scopes:
chat:write- Send messagesim:history- Read DM historyim:write- Open DMsusers:read- Read user info
Optional scopes:
channels:history- Read channel messageschannels:read- List channelsfiles:read- Read filesfiles:write- Upload files
-
Enable Event Subscriptions
Go to Event Subscriptions:
- Enable Events
- Set Request URL:
https://your-domain.com/webhook/slack/{tenant}/{team}
Subscribe to bot events:
message.im- DM messagesmessage.channels- Channel messagesapp_mention- @mentions
-
Enable Interactivity
Go to Interactivity & Shortcuts:
- Enable Interactivity
- Set Request URL:
https://your-domain.com/webhook/slack/{tenant}/{team}/interactive
-
Install App to Workspace
Go to Install App → Install to Workspace
Copy the Bot User OAuth Token (starts with
xoxb-) -
Get App Credentials
From Basic Information:
- App ID
- Configuration Token (for manifest updates)
-
Configure Provider
answers.json {"messaging-slack": {"enabled": true,"public_base_url": "https://your-domain.ngrok-free.app","api_base_url": "https://slack.com/api","bot_token": "xoxb-xxx-xxx-xxx","slack_app_id": "A07XXXXXX","slack_configuration_token": "xoxe.xoxp-xxx"}} -
Run Setup
Terminal window gtc setup --answers answers.json ./my-bundle
Configuration Options
Section titled “Configuration Options”| Option | Required | Description |
|---|---|---|
enabled | Yes | Enable/disable the provider |
public_base_url | Yes | Public URL for webhooks |
bot_token | Yes | Bot User OAuth Token (xoxb-...) |
slack_app_id | Yes | App ID from Basic Information |
slack_configuration_token | No | For automatic manifest updates |
api_base_url | No | Slack API URL (default: https://slack.com/api) |
Features
Section titled “Features”Text Messages
Section titled “Text Messages”- id: reply type: reply config: message: "Hello! How can I help you?"Markdown Formatting
Section titled “Markdown Formatting”Slack uses mrkdwn format:
- id: formatted type: reply config: message: | *Bold* _Italic_ `code` >Blockquote • Bullet pointBlock Kit Messages
Section titled “Block Kit Messages”Use Slack’s Block Kit for rich layouts:
- id: rich_message type: reply config: blocks: - type: section text: type: mrkdwn text: "*Welcome!*\nHow can I assist you today?" - type: divider - type: actions elements: - type: button text: type: plain_text text: "Get Help" action_id: "help_clicked" value: "help" - type: button text: type: plain_text text: "View Status" action_id: "status_clicked" value: "status"Interactive Buttons
Section titled “Interactive Buttons”- id: ask_action type: reply config: message: "What would you like to do?" blocks: - type: actions elements: - type: button text: type: plain_text text: "Create Ticket" style: primary action_id: "create_ticket" - type: button text: type: plain_text text: "Cancel" style: danger action_id: "cancel"Select Menus
Section titled “Select Menus”- id: select_option type: reply config: blocks: - type: section text: type: mrkdwn text: "Select a category:" accessory: type: static_select action_id: "category_select" options: - text: type: plain_text text: "Technical Support" value: "technical" - text: type: plain_text text: "Billing" value: "billing" - text: type: plain_text text: "General" value: "general"Thread Replies
Section titled “Thread Replies”Reply in a thread:
- id: thread_reply type: reply config: message: "This replies in the thread" thread_ts: "{{original_message.thread_ts}}"File Uploads
Section titled “File Uploads”- id: upload_file type: reply config: files: - url: "https://example.com/report.pdf" filename: "report.pdf" title: "Monthly Report"Ephemeral Messages
Section titled “Ephemeral Messages”Messages only visible to one user:
- id: ephemeral type: reply config: message: "Only you can see this" ephemeral: true user: "{{user_id}}"Handling Interactions
Section titled “Handling Interactions”Button Clicks
Section titled “Button Clicks”name: handle_interactionversion: "1.0"
nodes: - id: route_action type: branch config: conditions: - expression: "action_id == 'help_clicked'" next: show_help - expression: "action_id == 'create_ticket'" next: create_ticket default: unknown_action
- id: show_help type: reply config: message: "Here's how I can help..."
triggers: - type: block_action target: route_actionSelect Menu Changes
Section titled “Select Menu Changes”- id: handle_select type: branch config: conditions: - expression: "selected_value == 'technical'" next: technical_flow - expression: "selected_value == 'billing'" next: billing_flowSlash Commands
Section titled “Slash Commands”- Go to Slash Commands in your app settings
- Create a command (e.g.,
/support) - Set Request URL to your webhook
Handle in your flow:
name: slash_commandversion: "1.0"
nodes: - id: handle_command type: reply config: message: "Support bot at your service!" response_type: in_channel # or "ephemeral"
triggers: - type: slash_command command: "/support" target: handle_commandChannel Configuration
Section titled “Channel Configuration”Single Channel
Section titled “Single Channel”tenants: demo: teams: support: channels: slack: provider: messaging-slack config: channel_id: "C1234567890"Multiple Channels
Section titled “Multiple Channels”tenants: demo: teams: support: channels: slack-general: provider: messaging-slack config: channel_id: "C1234567890" slack-vip: provider: messaging-slack config: channel_id: "C0987654321"Troubleshooting
Section titled “Troubleshooting”App Not Receiving Messages
Section titled “App Not Receiving Messages”-
Verify Event Subscriptions:
- Check Request URL is correct
- Ensure events are enabled
- Verify bot is subscribed to correct events
-
Check Bot Permissions:
- Reinstall app after adding scopes
- Verify bot is in the channel
-
Test Webhook:
Terminal window curl https://your-domain.com/webhook/slack/demo/default
“not_authed” Error
Section titled ““not_authed” Error”Your bot token is invalid or expired. Get a fresh token from OAuth & Permissions.
”channel_not_found” Error
Section titled “”channel_not_found” Error”- Verify channel ID is correct
- Ensure bot is added to the channel
- Check channel is not archived
Rate Limiting
Section titled “Rate Limiting”Slack rate limits vary by method. Handle gracefully:
- id: reply type: reply config: message: "Response" retry_on_rate_limit: true max_retries: 3Security
Section titled “Security”Greentic automatically validates:
- Request timestamp
- Signature using signing secret
- Token verification
Next Steps
Section titled “Next Steps”- Block Kit Builder - Design rich messages
- Teams Provider - Add Teams integration
- Flows Guide - Build complex workflows