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