About Slack
The Slack integration connects a single Slack workspace to your Serval team. It powers Serval’s Slack help desk surfaces (tickets from channel messages and DMs, an @mention bot, an App Home tab, an AI assistant thread surface, a “Create a Ticket” message shortcut, and a slash command), delivers approval requests by direct message, and keeps your workspace’s users and user groups synced into Serval. A separate Slack Admin integration (Enterprise Grid org-admin, user tokens) is documented on its own page and is not covered here. Authentication: Slack-app OAuth v2 install with bot scopes - either Serval’s managed Slack app (one click, recommended) or your own white-label Slack app created from a Serval-generated manifest. Data sync: Scheduled background syncs ingest workspace users and user groups on Serval’s standard sync schedule; a manual sync from the UI forces a full re-sync. Workflow calls to Slack run on demand through Serval’s proxy, and rate-limited responses are retried automatically with exponential backoff.What the Slack integration enables
| Capability | Description |
|---|---|
| Help desk in Slack | Create tickets from channel messages and DMs, respond via an @mention bot, browse the App Home tab, use Slack’s AI assistant thread surface, run the “Create a Ticket” message shortcut, or use a slash command named after your app. |
| Approval requests via DM | Serval opens a direct message with each approver to deliver approval requests (requires the im:write bot scope). |
| Channel management workflows | Create, rename, list, and search Slack channels - including public, private, private-plus-invite, and interest-group channel creation. |
| User management workflows | Manage Slack user access and workspace membership: add or remove users from channels, invite, deactivate, or remove users (the invite, deactivate, and remove workflows run against the separate Slack Admin integration), and look up users and user groups. Workflows that change membership default to requiring the workflow installer’s approval; read-only lookups run without approval. |
| Enterprise Grid admin workflows | Manage Slack using the Admin API for Enterprise Grid organizations - these run against the separate Slack Admin integration, documented on its own page. |
| User and user-group sync | Scheduled ingestion of workspace users and user groups. Group sync is a catalog-only resource sync, for reference and tagging - mentioning a synced group from Serval renders as a proper group mention in Slack. Group membership is managed in Slack, not Serval. |
| Full Slack Web API in workflows | A typed API request action covers the Slack Web API. Slack is method-based rather than REST - you supply the method name (for example chat.postMessage or users.lookupByEmail) - with cursor-based pagination supported. Organization-admin methods are the one exception: they go through the separate Slack Admin integration. |
Get your credentials
There are two ways to connect, and only one of them needs any setup on Slack’s side.- Serval's Slack app (recommended)
- Your own Slack app (white-label)
incoming-webhook scope, Slack will ask you to pick a channel during authorization. This is expected - the chosen channel is saved with the integration, and channel behavior is configured in Serval after connecting.Connect in Serval
- Serval's Slack app (recommended)
- Your own Slack app (white-label)
Choose the recommended option
Configure Slack as your help desk
After connecting, you land on the Slack app configuration page in Serval. To use Serval in a channel, first add it to the channel in Slack, then set that channel’s mode in Serval.Add Serval to a Slack channel
Set the channel mode in Serval
Channel configuration modes
Each Slack channel connected to Serval operates in one of these modes:| Mode | Behavior |
|---|---|
| Disabled (default) | Serval does nothing in this channel — it neither creates tickets nor responds to messages. Use this to add Serval to a channel before turning any features on. |
| Help desk (Always respond) | Full help desk: creates tickets from channel messages, posts ticket-detail cards in the channel, and the help agent attempts resolution using AI Skills and org-wide workflows. Escalates to a human when needed. |
| Help desk (When relevant) | Same ticket creation and in-channel activity as Help desk (Always respond), but the help agent replies only when it finds relevant context (knowledge, guidance, matching workflows). If it cannot help, it stays silent in the channel and hands off to a human instead of posting a “no context” reply. |
| Silent | Monitors the channel and creates tickets from messages, but does not post ticket-detail cards or agent replies in the channel. New tickets without an @Serval mention are routed to human triage without in-channel noise. Mentioning @Serval in a message or thread turns the agent on for that ticket. |
| On demand | Ignores ambient channel messages. Creates tickets and responds only when @Serval is mentioned in a message or thread. |
| Team only | For internal Serval-team channels. Full help-desk behavior plus access to team-only workflows. Use only in channels restricted to your Serval team members. |
| Redirect to DM | New conversations are moved to a direct message with the requester before the help agent runs. A single notice is posted in the channel thread; ticket details and agent replies happen in the DM. |
| Team inbox | A dedicated channel where support agents triage all tickets for the team (see Configure Team Inbox channels). Egress-only: routes existing tickets into the channel for triage; does not create new tickets from messages posted directly in the inbox. |
| Team inbox on Escalation | Same as Team inbox, but only escalated tickets are routed to the channel. Egress-only. |
Configure Team Inbox channels
A Team Inbox is a private channel where support agents triage every escalated ticket for your team within Slack. Tickets from DMs, help desk channels, and the web all appear as threads in one place, so agents can respond and collaborate without switching to the Serval web interface.Create a private Slack channel
it-inbox or finance-support-inbox) and invite only the support agents and managers who will handle tickets - not end users.Add Serval to the channel
Resource sync
Serval supports resource sync for Slack user groups (Slack subteams - the@-mentionable groups in your workspace). This is a separate capability from the help desk and from workflows: it does not sync channels or DMs, only user groups.
@handle so the help desk agent and workflows can reference it - for example, when a reply needs to mention a Slack user group, Serval renders it as a proper group mention in Slack.
Verifying the connection
After connecting, Serval runs five health checks:- Test Slack Connection - verifies the integration is connected and the OAuth token is valid. Success: “Successfully authenticated with Slack workspace [workspace name]”. Failure: “Unable to authenticate with Slack. Please verify the app is still installed and its OAuth token has not been revoked.”
- List Slack Users - checks Serval can read users from the workspace. Success: “Successfully listed Slack users (sample size: [number])”. Failure: “Unable to list Slack users. Please verify the app has the users:read scope and has not been removed from the workspace.”
- List Slack Channels - checks Serval can read public and private channels. Success: “Successfully listed Slack channels (sample size: [number])”. Failure: “Unable to list Slack channels. Please verify the app has the channels:read and groups:read scopes and has not been removed from the workspace.”
- List Slack Scopes - reports the OAuth scopes actually granted to the token. Success: “Successfully read Slack token scopes ([number] granted)”. Failure: “Unable to read Slack token scopes. Please verify the app is still installed and its OAuth token has not been revoked.”
- Send Approval Requests via Slack - checks the token has the
im:writescope needed to open DMs for approval requests. Success: “Slack app has the im:write scope required to send approval requests.” Failure: “Slack approval requests cannot be sent because the app is missing the im:write scope.” If the check itself can’t reach Slack, you’ll instead see: “Unable to verify Slack approval request permissions. Please verify the app is still installed and its OAuth token has not been revoked.”
Gotchas and troubleshooting
Slack blocked the install with a scope error
Slack blocked the install with a scope error
Install blocked in workspaces that restrict Slack Connect
Install blocked in workspaces that restrict Slack Connect
conversations.connect scopes for shared channels. If your workspace restricts shared-channel invitations, deselect those scopes in the Bot Scopes picker before installing. Note that a non-default selection replaces the canonical scope list wholesale (extra scopes you add are layered on top)."Invalid state" error after authorizing in Slack
"Invalid state" error after authorizing in Slack
Slack asked me to pick a channel during authorization
Slack asked me to pick a channel during authorization
Can't add a second Slack integration for the same workspace
Can't add a second Slack integration for the same workspace
Managed option missing, or "Slack OAuth is not configured in this environment"
Managed option missing, or "Slack OAuth is not configured in this environment"
Enterprise Grid: install is workspace-scoped, and admin actions don't work
Enterprise Grid: install is workspace-scoped, and admin actions don't work
A reused or hand-edited manifest produces a broken app
A reused or hand-edited manifest produces a broken app
Which bot scopes does Serval request by default?
Which bot scopes does Serval request by default?
Need help? Contact support@serval.com for assistance with your Slack integration.

