Chat Channels
You can chat with Fontana agents directly from Slack and Microsoft Teams. Conversations run on the same governed agent runtime as Flow chat: every external thread is a real Fontana thread, so handoff, sub-agents, tools, and audit coverage behave exactly as they do in the app. You configure installations and identity linking in AI → Chat Channels (/ai/channels), or from the Agents catalog Settings list (/agents?view=channels). Identity-link codes still open /ai/channels?link=.
Setup is a separate guide for each product:
- Slack explains the manifest, the bot token (
xoxb-…), and the app-level token (xapp-…). - How to integrate Fontana Agents with MS Teams explains the Microsoft tenant form, including the creator client secret, and how each agent’s bot is created and installed.
How it works
Section titled “How it works”- Same agent runtime. Messages from Slack and Teams enter Fontana through the same user-message inject pipeline as Flow chat (
queuewhile a turn is already running, then resume when idle). Channel threads appear in your Flow AI history alongside in-app conversations. - Who answers. A new Slack conversation starts with your default chat agent. An existing Slack thread keeps the agent already on that thread. A Teams conversation is answered by the agent that owns that bot. Handoff and sub-agents work from there as usual.
- Slack threads. Direct messages from linked people always reach the agent. In a channel, the agent replies when you mention it, except in channels listed as free response on the Slack connection. After the agent is in a thread, later messages can continue without another mention, or the connection can require a tag each time. Mentioning the agent inside an existing Slack thread copies that thread into one Fontana conversation. A mention on a channel message that is not already in a thread starts from that message. Later messages in the Slack thread are added from the last point already copied, and the reply is posted back in that thread. Several linked people can share the conversation. Each person’s question runs with their permissions and spending cap. Messages from people who have not linked an account are included in the transcript. The agent replies to linked people. An @mention from someone who has not linked still receives the link invite.
- Teams threads. Mentioning the agent inside an existing Teams thread copies that thread into one Fontana conversation. A mention on a channel message that is not already in a thread starts from that message. Later messages continue from the last point already copied. Several linked people can share the conversation. Each person’s question runs with their permissions and spending cap. Messages from people who have not linked an account stay in the transcript. The agent replies to linked people. The app can read history only in the team or chat where you installed it.
- Slack. On the Slack connection you set the channel whitelist, the free-response channels, how threads continue, whether Fontana users, bots, or both may invoke the agent, and how much of a turn Slack shows. Communication detail is messages only, tool names, or tool names with arguments and results. Tool calls in one turn share a single Slack message that updates as each tool finishes. On an agent’s Slack ability the channel whitelist, free-response channels, thread replies, and who may invoke the agent start as Using inherited value and can be replaced for that agent. You also choose which Slack connection it posts through. When you leave that blank, Fontana uses the connection that agent owns, or the connection owned by your default chat agent. When the Slack ability is off, or the channel is not on the whitelist in effect, Slack receives a short explanation and the agent does not start. The Teams ability uses the same four settings. An empty channel whitelist allows no channel. A direct message is allowed when that person’s id is on the whitelist.
- Reliable delivery. Assistant replies are persisted first, then delivered to the external thread by the tenant bridge service. If an external thread was deleted, the message is marked undeliverable instead of failing silently.
- Rich channel cards. Slack uses Block Kit and Teams uses Adaptive Cards for formatted assistant answers, tool summaries (including KG search, task lists, and file reads), and human-approval cards. Slack keeps every tool call from one turn in one message and edits that message as the next tool finishes. Teams posts one tool summary per tool. Slack interactive approvals use
hitl_slackBlocks(Block Kit in the thread);hitl_askHumancompletes in Flow only. Teams keeps a Flow deep link for approvals. Tool summaries and Knowledge Graph Search cards post as fenced headers with a result count (for example📙 Knowledge Graph Search (1)), then indented hit lines. A live status line (for example Thinking… or Analysing Data…) updates while the agent turn runs, then is removed when the turn returns to idle. Model reasoning stays in Flow only. A Mermaid diagram in an assistant reply is posted to Slack as an image in that position. Text before the diagram and text after it arrive as separate messages, so the diagram stays between them. Teams shows the diagram source in the message.
Identity linking
Section titled “Identity linking”Each platform user must link their Slack or Teams identity to their Fontana account before chatting:
- An unlinked user messages the bot and receives a Flow deep link containing a one-time link code.
- The user opens the link, signs in to Flow, and claims the code on AI → Chat Channels.
- From then on, their channel messages run with their own Fontana identity, permissions, and spending caps.
A direct message, or an @mention, from someone who has not linked an account receives linking instructions. Other messages in a channel stay in Slack until a linked person continues the thread. You can review and unlink your own identities on the same page at any time.
Approvals in Slack
Section titled “Approvals in Slack”When an agent turn requires human approval (Human in the Loop), agents call hitl_slackBlocks with Block Kit (and optional modals). On Slack-bound threads the card posts in the current thread; from Flow chat pass installationId and channel to target a Slack channel. The result is the same { action, values } envelope as Flow hitl_askHuman. MCP post_message with blocks is display-only. Use hitl_slackBlocks when button clicks must resume the turn. Microsoft Teams and in-app-only approval use the Flow deep link or hitl_askHuman. Cancel is { action: "cancel", values: null } and is not the same as Stop on a tool in Flow.
Operator configuration
Section titled “Operator configuration”Managing installations requires the agents:write permission. Follow Slack or Microsoft Teams. Fontana stores the secrets in Vault.
You can enable or disable an installation at any time; disabled installations stop ingress and delivery immediately.
Enabled means Fontana may run that installation. Connected means the last start succeeded: Slack Socket Mode is up, or the Teams bot credentials loaded. The installations list shows Connected, Starting, Failed, or Disabled. A failed row includes an error tip. When Chat Channels cannot reach the bridge, each row shows Unknown until the service is healthy again.
Related documentation
Section titled “Related documentation”- Slack - manifest, bot token, and app-level token
- How to integrate Fontana Agents with MS Teams - Microsoft tenant, creator client secret, and each agent’s bot
- Agents - default agent selection, handoff, and sub-agents
- Human in the Loop -
hitl_askHumanin Flow;hitl_slackBlockson Slack - Security - Vault-backed secrets and workspace isolation