Slack Integration — Overview
Connecting Slack does two things: it lets you send yourself a one-off test message, and it lets FlowState post two kinds of deal alerts — overdue-deal alerts and a weekly digest — from the daily pipeline run into channels you choose. No other FlowState notification (APN sync events, billing, account, or platform events) is delivered to Slack; those remain email-only. See Notifications for exactly what each of the two Slack alerts contains and how routing works.
What the integration does
Connect your Slack workspace
FlowState uses a bring-your-own-app model: you create a Slack app in your own workspace (from a manifest FlowState provides, or manually) and give FlowState the resulting Client ID and Client Secret. FlowState then completes an OAuth install using those credentials. See Getting started for the full flow.
Send a test message
Once connected, the Send test message button DMs the FlowState bot’s fixed test text (“FlowState is connected to this Slack workspace.”) to the Slack account matching your own FlowState login email. This confirms the bot token works and that a Slack account exists for your email — it is a connectivity check, not a preview of a real deal alert.
Notification routing
Settings → Integrations → Slack and the set_slack_notification_routing MCP tool let you store a list of {event_category, channel_id} rules. Two categories are live today — deals.outdated (overdue-deal alerts) and deals.weekly_digest (the Monday digest) — and route real deliveries from the daily pipeline run to the channel you choose. Any other category is accepted and saved but has no producer yet, so it has no effect until FlowState adds one. See Notifications for the full detail, including what data each message contains.
Permissions required in Slack
FlowState’s Slack app requires the following OAuth scopes:
| Scope | Currently used for |
|---|---|
chat:write | Posting the test-connection direct message, and posting the overdue-deal alert and weekly-digest messages (see Notifications) to whichever channel you’ve routed them to. |
channels:read | Listing public channels via the list_slack_channels MCP tool or GET .../integrations/slack/channels REST endpoint, so you can pick a channel ID when setting up routing. Not yet surfaced in the FlowState UI — reachable only via MCP or a direct API call today. |
groups:read | Same as above, for private channels the bot has been added to. |
im:write | Opening the direct-message conversation used to send the test message. |
users:read | Requested up front for the app’s OAuth grant, for future use. |
users:read.email | Resolving the test message’s target Slack user from your FlowState login email (users.lookupByEmail). |
The FlowState bot must be invited into a channel (/invite @FlowState, see Getting started) before it can post deal alerts there — chat:write alone doesn’t add it to channels it isn’t already a member of.
FlowState never reads message history, reactions, file content, or any data from channels other than what is explicitly posted by the FlowState bot.
What the integration does not do
- FlowState does not deliver APN sync events, billing, account, or platform notifications to Slack. Only the two deal alerts described in Notifications — overdue-deal alerts and the weekly digest — are delivered to Slack; everything else remains email-only regardless of what routing rules are stored for other categories.
- FlowState does not read Slack messages.
- FlowState does not respond to Slack slash commands.
- FlowState does not access Slack workspaces other than the one your tenant has authorized.