Slack Integration — Troubleshooting
Test message fails
The connection-test message is always a direct message (chat.postMessage to a DM channel opened via conversations.open), sent to the Slack account matching your own FlowState login email — it is never posted to a regular channel, so channel membership (/invite @FlowState) is not a factor in this specific failure. (Channel membership does matter for the deal alerts described in Notifications — see “Deal alerts not appearing in the channel” below.)
Via the FlowState UI (“Send test message” button) or the test_slack MCP tool — both resolve the same way: your own signed-in FlowState email address, never a caller-supplied one. If it fails:
Could not find Slack user for <email>: ...— no Slack account in the connected workspace has that exact email address. Your FlowState login email and your Slack email must match. Ask a Slack Workspace Owner to check the address, or update your FlowState account email to match.Could not open DM: ...— the bot’sim:writescope wasn’t granted, or the resolved user has DMs restricted. Reconnect and confirm the scope shows on Slack’s consent screen (see “Permission errors” below).- A connection/network error — retry; if it persists, check Slack’s status page.
Permission errors (missing_scope)
Symptom: Slack returns a missing_scope error when FlowState tries to send the test message or list channels.
Cause: The Slack app you created (in the bring-your-own-app wizard — see Getting started) is missing one of the six required bot scopes: chat:write, channels:read, groups:read, im:write, users:read, users:read.email.
Resolution:
- In
api.slack.com/apps, open your app → OAuth & Permissions → Scopes → Bot Token Scopes, and confirm all six are present. Add any that are missing. - If you already installed the app, reinstall it to your workspace so the new scope grant takes effect.
- In FlowState, go to Settings → Integrations → Slack → Disconnect, then Connect with Slack again to pick up the updated grant.
If your workspace restricts which scopes third-party (including your own custom) apps may request, ask your Slack Workspace Owner or App Manager to allow the six scopes above.
Deal alerts not appearing in the channel
Symptom: The integration shows Connected and the test message works, but overdue-deal alerts or the weekly digest never show up in the channel you expected.
Check, in order:
- Routing is set.
Settings → Integrations → Slackmust have a rule fordeals.outdatedand/ordeals.weekly_digestpointing at a channel ID (see Notifications). No rule for a category means no delivery for it — silently, with no error anywhere. - The bot is in the channel. Unlike the test message (always a DM), deal alerts post to a real channel, which requires the bot to be a member of it:
/invite @FlowStatein that channel. - There’s actually something to alert on. The overdue-deal alert only fires for deals past their close date that are still open; the weekly digest only sends on Mondays, and only for owners with stalled or inconsistent deals that week. Each is also deduplicated (7 days for overdue alerts, once per owner per week for the digest), so a deal you were already alerted on recently won’t alert again immediately.
Bot token revoked or app uninstalled
Symptom: The test message that used to work now fails, or list_slack_channels / the notification-routing endpoint starts erroring.
FlowState does not detect this proactively and never sets a special status for it. The integration keeps reading Connected — there is no token_revoked state; connected and disconnected are the only two values FlowState ever writes for this integration. You only find out when a Slack API call fails.
Resolution:
- Go to Settings → Integrations → Slack → Disconnect (cleans up the stale token record).
- Click Connect with Slack and complete the OAuth flow again. Your saved app credentials (Client ID/Secret) are unaffected by disconnect, so you go straight to authorization.
- Confirm Send test message now succeeds.
Any notification routing rules you had stored are not preserved across a reconnect (see Disconnecting) — re-enter them, or the overdue-deal and weekly-digest alerts stay off even though the integration shows Connected again.
Notifications stopped after Slack workspace migration
If your team migrated to a different Slack workspace, the bot token from the old workspace is invalid in the new one — a token is always workspace-specific. Disconnect, then reconnect (you may need to re-create your Slack app in the new workspace if you didn’t already have one there) to get a token valid for the new workspace.
This affects everything the bot does in the old workspace: the test message, and the overdue-deal and weekly-digest alerts (see Notifications) both stop delivering, silently, until you reconnect against the new workspace and re-invite the bot into your alert channel(s) there.