Slack
Slack as a customer channel for B2B support: connect your Slack workspace, choose the Slack Connect channels you share with customers, and every new message there opens a conversation in a Kommio inbox that follows its thread. Agents answer from Kommio and the reply lands in the thread. This is not a notification integration for your agents.
Last updated
Slack in Kommio is a channel customers write on, like email or Telegram, built for businesses that support their customers in Slack Connect channels. A Slack inbox listens to the channels you choose; every new top-level message in one of them opens a conversation, its thread follows that conversation, and an agent's reply is posted into the thread by the Kommio app under the agent's name. Agents, bots, chatbot flows and the AI agent answer like on any other channel. It is not a way to notify your own team in Slack.
Set it up
Connect your workspace
Settings › Marketplace › Slack › Install in this workspace, or Settings › Inboxes › New inbox › Slack. Name the inbox and press Add to Slack: Slack asks you to allow the Kommio app in your workspace and brings you back to Kommio, which creates the inbox. The return address is signed for your browser session and workspace and expires after ten minutes. The app's token is stored encrypted and never returned by the API; the workspace and app facts shown on the inbox (team, bot user) always come from Slack.
Choose the channels
The picker lists the channels the app can see, with the Slack Connect ones marked as shared. A public channel the app is not in is joined for you; a private or Slack Connect channel needs the app invited first: type
/invite @Kommioin the channel, then press Refresh. Each chosen channel is checked with Slack (it exists, is not archived, the app is a member), and a channel another Slack inbox of your workspace already listens to cannot be chosen twice.Decide who counts as a customer
Turn on Only people from other workspaces and members of your own workspace (your team, in a Slack Connect channel) are ignored: only your customers open conversations and add to them. Leave it off for an internal support channel where your own colleagues are the customers.
Try it
Choose the agents who answer, then post a message in one of the channels: it arrives as a conversation, and your reply appears in the thread.
If the app is removed from the workspace, or new permissions are added to it, press Reconnect to Slack on the inbox's page: Add to Slack runs again and the inbox keeps its channels and conversations (the workspace must be the same). An inbox can also be created through the API with a pasted Bot User OAuth Token (it starts with xoxb-, from the app's OAuth & Permissions page after installing it from Slack's own settings); the same checks apply.
How messages arrive
Slack delivers every event of your workspace to Kommio's one Slack address. Each delivery must carry Slack's signature for Kommio's app, checked in constant time, and a timestamp within five minutes; anything else is refused and stores nothing. Kommio answers Slack at once and stores the event in the background, so a retry of a delivery already received is not stored again and no message is ever stored twice.
- Threads are conversations. A top-level message opens a conversation that follows its thread; every reply in the thread joins it, whoever writes, and a reply in a thread Kommio has not seen (its first message predates the inbox) opens that thread's conversation. A new top-level message from the same person is a new conversation; a reply in a resolved conversation's thread reopens it. Replies also sent to the channel count as replies.
- Edits and deletions follow. An edited message replaces the stored text and shows "edited"; Slack's own changes (a link unfurled, a preview added) are not edits. A deleted message says it was deleted and its files are dropped.
- Files up to 25 MB are fetched from Slack after the message is stored. A file hidden by the customer's plan or too large is noted in the conversation; a Google Drive or other external file becomes a link in the text.
- Reactions to a message Kommio has become an activity line in its conversation.
- Ignored: the app's own posts (echoes of agents' replies), other bots' and workflows' posts, channels the inbox does not listen to, direct messages, and housekeeping such as joins, topic changes and pins; with "only people from other workspaces", members of your own workspace.
Slack's markup is converted: a user mention becomes @name, a channel mention #general, @here stays, links become "label (url)", and escaped characters are unescaped.
Contacts
A Slack user is a contact with a Slack identity (workspace and user), named from their Slack profile, with the attributes slack_title and slack_timezone and their Slack picture. When Slack shares their email address and says it is confirmed, it counts as a verified identity Slack vouches for: a Slack user Kommio has not seen joins the contact that already has that email (the same person across email, chat and Slack), and an email nobody owns is added to their contact; an email owned by another contact is left alone, and an agent can merge the two. Conversations carry slack_channel (#name) and slack_link, the thread in Slack.
Replies
| Kind | Customer to Kommio | Kommio to customer |
|---|---|---|
| Text | Yes | Yes, in the thread, under the agent's name with the app's icon; up to 40,000 characters (Slack recommends under 4,000) |
| Formatting | Converted to plain text | Bold, italic, strikethrough, code, quotes, bullet lists and links as Slack shows them |
| Files | Yes, up to 25 MB | Yes, uploaded into the thread |
| Chatbot flow choices | The customer types the number or text of a choice | Numbered text |
| Private notes | Never sent to Slack | |
| Delivery | Sent, or failed with Slack's reason |
When Slack asks Kommio to slow down, a short pause is waited out in place and a longer one hands the reply back to the queue, still queued, to go out when Slack said. A failure after part of a reply went out (the text, then a file) is final, so a retry never posts the text twice. A refusal retrying cannot fix (the app is not in the channel, the channel was archived or deleted, the token was revoked, a permission is missing) fails the message with Slack's reason. If your organisation forbids customised names in shared channels, Slack refuses the agent's name and Kommio posts under the app's name.
Health
Every five minutes Kommio checks the token with Slack and that the app is still in each chosen channel. A revoked token or a removed app asks for a reconnect; a channel the app was removed from, or that was archived, puts the inbox in error naming it, on the inbox and on its installation under Settings › Marketplace › Installed. Pausing the installation pauses the inbox: its events are not stored, and Slack does not keep them for later.
API
# start Add to Slack: send the browser to the authorize_url in the answer
curl -X POST "$KOMMIO_URL/integrations/slack/start" -H "Authorization: Bearer $KOMMIO_KEY" -H "Content-Type: application/json" \
-d '{"name": "Customer Slack"}'
# the channels the inbox's app can see, with member, selected and shared
curl "$KOMMIO_URL/inboxes/42/slack/channels" -H "Authorization: Bearer $KOMMIO_KEY"
# listen to two of them, customers from other workspaces only
curl -X PUT "$KOMMIO_URL/inboxes/42" -H "Authorization: Bearer $KOMMIO_KEY" -H "Content-Type: application/json" \
-d '{"name": "Customer Slack", "config": {"channels": [{"id": "C04QZ7K2M1A"}, {"id": "C05B3N8R4XY"}], "only_external": true}}'GET /integrations/slack/setup says whether the Slack app is set up and returns the manifest and the addresses to register; POST /integrations/slack/start with inbox_id reconnects that inbox. A channel the app is not in is listed with member: false and refused until it is invited.
Every claim on these pages is covered by a test in the repository, and the API reference is generated from the same contract every server serves at /api/openapi. Corrections to [email protected].