Skip to content

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/config/channels).

  • Same agent runtime. Messages from Slack and Teams enter Fontana through the same user-message inject pipeline as Flow chat (queue while a turn is already running, then resume when idle). Channel threads appear in your Flow AI history alongside in-app conversations.
  • Default agent per installation. The first message on a new external thread starts a Fontana thread with that installation’s default agent. Handoff and sub-agents work from there as usual.
  • 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 deep links. 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.

Each platform user must link their Slack or Teams identity to their Fontana account before chatting:

  1. An unlinked user messages the bot and receives a Flow deep link containing a one-time link code.
  2. The user opens the link, signs in to Flow, and claims the code on AI → Chat Channels.
  3. From then on, their channel messages run with their own Fontana identity, permissions, and spending caps.

Ingress fails closed: until an identity is linked, the bot only replies with linking instructions. You can review and unlink your own identities on the same page at any time.

When an agent turn requires human approval (Human in the Loop), the bot posts a deep link into Flow. You complete the approval in the Flow UI, and the agent continues; the reply is then delivered back to the external thread. Approval decisions are never taken inline in Slack or Teams.

Managing installations requires the agents:write permission. On /ai/config/channels, choose Add Slack connection or Add Teams connection, then paste the bot credentials from the platform console. Fontana validates them, stores them in Vault for you, and starts the bridge.

Slack (Socket Mode):

  • On AI → Chat Channels, open Add Slack connection and use Create app from this manifest (or copy the YAML). Slack app manifests are documented at docs.slack.dev/app-manifests; create apps at api.slack.com/apps.
  • Install the app to your workspace, then paste the Bot User OAuth Token (xoxb-…) and an App-Level Token (xapp-… with connections:write)
  • Fontana discovers the Slack workspace id from the bot token (you do not enter a team id)

Microsoft Teams:

  • Microsoft App ID and client secret from Azure Portal → App registrations
  • Directory (tenant) ID from Microsoft Entra ID → Overview
  • After create, set the Azure Bot messaging endpoint to https://<tenant-origin>/_chat-channels/api/teams/<installationId>/messages (the installation id is shown in the list)

You can enable or disable an installation at any time; disabled installations stop ingress and delivery immediately.

Slack scopes: Socket Mode Connected only means the websocket is up. For DMs you still need bot scopes and events from the Fontana Slack app manifest (im:history, im:read, im:write, message.im, and related channel mention scopes). Agent Slack tools also need channels:read, groups:read, and users:read. After changing scopes, reinstall the app and paste the new tokens into Flow.

Test hello: On a Slack installation row, Test hello opens a DM (your linked Slack user, or a Slack member id you enter) and posts a short outbound probe so you can verify chat:write / im:write without waiting on a full agent turn.

Agent Slack tools (MCP): Each tenant deploy seeds an MCP connection slug slack-channels pointing at the chat-channels bridge (/mcp). Assign mcp_slack-channels.* (or individual tools) on an agent in Tools. Tools take an installationId so the bridge loads the correct Vault bot token (xoxb). Invite the bot to any channel it should read or post in. Message search is not available with bot tokens.

Enabled vs Connected: Enabled means the bridge is allowed to run that installation. Connected means the bridge successfully started the adapter (Slack Socket Mode handshake, or Teams credentials loaded). The installations list on AI → Chat Channels polls the bridge and shows Connected, Starting, Failed, or Disabled. Failed badges include an operator-safe error tip. If the bridge cannot be reached, the page shows a warning and per-row status as Unknown until the service is healthy again.

For Teams, Connected means the adapter is ready to accept Bot Framework traffic. Teams does not keep a persistent outbound socket the way Slack Socket Mode does.

  • Agents - default agent selection, handoff, and sub-agents
  • Human in the Loop - approval gating that channel threads deep-link into
  • Security - Vault-backed secrets and workspace isolation