Slack Automation
Overview
Interact with Slack workspaces for channel management, message reading, and content analysis. All operations are read-only unless creating channels.
Quick Decision Tree
What do you need? │ ├── Search for channels by name │ └── references/search.md │ └── Script: scripts/slack_search.py search │ ├── Read messages from a channel │ └── references/fetch-news.md │ └── Script: scripts/fetch_slack_news.py │ ├── Create a new channel │ └── references/create-channel.md │ └── Script: scripts/create_slack_channel.py │ └── Categorize/analyze messages └── references/categorize.md └── Script: scripts/categorize_slack_messages.py
Environment Setup
Required in .env
SLACK_BOT_TOKEN=xoxb-your-bot-token
Required Bot Scopes
Scope Purpose
channels:read
List public channels
channels:history
Read public channel messages
groups:read
List private channels
groups:history
Read private channel messages
channels:manage
Create channels
Common Usage
Search Channels
python scripts/slack_search.py search "internal" --limit 10
Read Channel Messages
python scripts/slack_search.py read "internal-client" --days 7
Create Channel
python scripts/create_slack_channel.py "project-alpha" --private
Channel Naming Pattern
For client channels: internal-{client-name}
- e.g., internal-microsoft , internal-acme-corp
Cost
Free - Slack API has no per-request cost. Rate limited to ~50 requests/minute.
Security Notes
Credential Handling
-
Store SLACK_BOT_TOKEN in .env file (never commit to git)
-
Bot tokens start with xoxb-
-
never expose in logs or output
-
Rotate tokens via Slack App settings if compromised
-
Use environment variables, not hardcoded values
Data Privacy
-
Messages may contain sensitive internal communications
-
Avoid storing message content in persistent logs
-
Use message links/IDs for references instead of copying content
-
Consider data retention policies for exported messages
-
User profiles include PII (names, emails, profile photos)
Access Scopes
-
Request minimum required scopes for your use case:
-
channels:read
-
List public channels (read-only)
-
channels:history
-
Read public channel messages (read-only)
-
groups:read
-
List private channels bot is in (read-only)
-
groups:history
-
Read private channel messages (read-only)
-
channels:manage
-
Create channels (write access)
-
Bot can only access channels it has been invited to
-
Review scopes at: Slack App Settings > OAuth & Permissions
Compliance Considerations
-
Audit Logging: Slack Enterprise Grid provides audit logs for compliance
-
Message Retention: Follow your organization's data retention policies
-
GDPR: Message content may contain EU user PII
-
eDiscovery: Exported messages may be subject to legal holds
-
Internal Communications: Treat Slack data as confidential
-
Channel Privacy: Private channel access requires explicit invitation
Troubleshooting
Common Issues
Issue: Channel not found
Symptoms: "channel_not_found" error when reading or posting Cause: Invalid channel ID, bot not in channel, or private channel Solution:
-
Verify channel ID is correct (use slack_search.py search )
-
Invite the bot to the channel (/invite @botname )
-
Check if channel is private - bot needs explicit invitation
-
Ensure channel hasn't been archived or deleted
Issue: Missing permissions / scope errors
Symptoms: "missing_scope" or "not_allowed_token_type" error Cause: Bot token missing required OAuth scopes Solution:
-
Go to Slack App Settings > OAuth & Permissions
-
Add required scopes: channels:read , channels:history , etc.
-
Reinstall the app to workspace after adding scopes
-
Verify using the correct bot token (starts with xoxb- )
Issue: Token expired or invalid
Symptoms: "invalid_auth" or "token_revoked" error Cause: OAuth token expired, revoked, or incorrectly configured Solution:
-
Reauthorize the bot in Slack App settings
-
Regenerate the bot token if revoked
-
Check .env for correct SLACK_BOT_TOKEN value
-
Verify no whitespace or special characters in token
Issue: Rate limited
Symptoms: "ratelimited" error or 429 status code Cause: Too many API requests in short period Solution:
-
Add delays between requests (1-2 seconds)
-
Reduce batch size for bulk operations
-
Implement exponential backoff on retries
-
Slack allows ~50 requests/minute for most endpoints
Issue: Private channel access denied
Symptoms: Can't read private channel despite having scopes Cause: Bot not added to the private channel Solution:
-
Have a channel member invite the bot: /invite @botname
-
Ensure groups:read and groups:history scopes are added
-
Verify bot has been reinstalled after adding scopes
Resources
-
references/search.md - Channel search and message reading
-
references/fetch-news.md - Fetch news from channels
-
references/create-channel.md - Create new channels
-
references/categorize.md - AI message categorization
Integration Patterns
Slack to Newsletter
Skills: slack-automation → content-generation Use case: Summarize internal news for weekly newsletter Flow:
-
Fetch messages from news/announcements channels
-
Categorize and filter relevant content
-
Generate formatted newsletter section via content-generation
Slack and Meeting Context
Skills: slack-automation → transcript-search Use case: Find related meetings when researching Slack discussions Flow:
-
Search Slack for client name or topic
-
Extract date ranges and participant names
-
Search transcript-search for related meeting recordings
Slack Reports to Drive
Skills: slack-automation → google-workspace Use case: Archive categorized Slack summaries to Google Drive Flow:
-
Fetch and categorize messages from internal channels
-
Generate formatted report document
-
Upload to Google Drive via google-workspace