FixControl/Documentation

Admin Guide

Communication channels

Connect Slack, Microsoft Teams, and Office 365 as intake channels.

FixControl supports four chat / messaging channels in addition to Gmail. Each has the same behaviour from your team's point of view — messages land in the Inbox, get classified, and become issues when you convert them — but the OAuth setup is different per provider.

This page covers the four non-Gmail channels. Gmail has its own dedicated guide.

Slack

What you get

  • Inbound messages from connected channels and DMs land in the Inbox.
  • Mentions of the FixControl bot trigger triage immediately.
  • Approve/reject actions for issues and patches arrive as Slack messages with buttons.
  • Outbound replies post back into the same thread.

Setup

  1. Create a Slack app at api.slack.com/apps. Use the From scratch option.
  2. OAuth & Permissions — add bot scopes:

app_mentions:read, channels:history, chat:write, commands, groups:history, im:history, im:read, im:write, mpim:history, users:read, users:read.email.

  1. Event Subscriptions — enable, set the request URL to https://<your-host>/api/webhooks/slack/events. Subscribe to app_mention, message.channels, message.groups, message.im, message.mpim. (message.groups and message.mpim are required for the bot to receive replies in private channels and group DMs — without them it stays silent there.)
  2. App Home — under Show Tabs, enable the Messages Tab and check "Allow users to send Slash commands and messages from the messages tab". Without this, Slack shows "Sending messages to this app has been turned off" and users cannot DM the bot.
  3. Interactivity & Shortcuts — enable, set the request URL to https://<your-host>/api/webhooks/slack/interactivity.
  4. Install to Workspace and copy the bot token + signing secret.
  5. In FixControl: Settings → Integrations → Slack → Connect, paste the credentials, finish.
Slack connect flow with workspace selector and scope confirmation
Slack connect flow with workspace selector and scope confirmation

Multiple workspaces

Add as many workspaces as you need. Each one becomes a separate connection under the Slack integration. Per-workspace channel filtering controls which channels feed the Inbox.

Tickets and customer replies from chat

Beyond intake and approvals, the bot understands a few follow-up commands in natural language. This works in Slack and Microsoft Teams:

  • "Can you create a ticket for this?" — after the bot answers a support question, this is understood as a command. The bot posts a ticket preview in the thread; the issue is created only when someone clicks Create issue. The confirm click stays the human gate — free-form phrasing never creates anything by itself.
  • Several things in one sentence. When a message asks for more than one thing ("create a customer Acme Ltd and info@acme.com and send the answer"), it is understood as one plan: the bot posts a single confirmation card with numbered steps. One click runs exactly those steps, in order, through the same governed paths the individual cards use. Anything it cannot carry out is honestly left out of the plan before the card appears. Nothing ever runs off the typed text itself.
  • "…and send it to the customer" — the same request can ask to forward the answer. The answer is then always staged as a governed customer reply — never sent directly. In Slack a communication approval card appears in the channel; in Teams the bot points you to Approvals in FixControl. Both decide at the same point. Only an approval posts it to the linked support ticket (Freshdesk, Jira Service Management, Odoo, or TOPdesk).
  • No tracker linked? When the issue has no customer ticket, chat stages the answer as a direct customer e-mail through the same approval flow. The recipient comes from the request itself or from the thread, and otherwise from the customer linked to the issue — but only when that customer has exactly one contact address. With several candidates the bot does not guess: it asks which address the answer should go to. Sending an approved message requires a configured mail provider.
  • "Link customer … to this ticket." — this also works on a FixControl issue without a tracker link: the customer and contact are created in customer management (if the customer already exists, the contact is attached to it) and linked to the issue. On a linked Freshdesk ticket the requester on the ticket is updated instead, and on a linked TOPdesk incident the caller is. On Jira Service Management this is not possible — JSM offers no way to change the requester of an existing request, and the bot says so honestly.
  • Something missing? The bot asks one targeted follow-up question ("which e-mail address should the answer go to?") rather than asking you to rephrase.

Microsoft Teams

Microsoft Teams adaptive card for an issue with Approve and Reject buttons
Microsoft Teams adaptive card for an issue with Approve and Reject buttons

What you get

  • Inbound 1:1 messages and channel mentions become Inbox items.
  • Adaptive cards for issue actions render inline in Teams.
  • The same follow-up commands as in Slack — ticket updates, multi-step confirmation cards, and customer sends staged for approval. See Tickets and customer replies from chat under Slack above; the only difference is that in Teams the communication approval card does not appear in the conversation but in Approvals in FixControl.

Setup

  1. Register a bot in Azure Bot Service (or via the Bot Framework portal).
  2. Create an Azure AD app registration with permissions: Bot.ReadWrite, User.Read.All (delegated), Chat.Read (delegated).
  3. Set the messaging endpoint to https://<your-host>/api/webhooks/teams/messages.
  4. Generate a client secret. Note the App ID and Tenant ID (your Microsoft tenant, not your FixControl tenant).
  5. In Teams Admin Center, upload the bot manifest or sideload it for testing.
  6. In FixControl: Settings → Integrations → Microsoft Teams → Connect and paste App ID, App secret, and Microsoft tenant ID.

Cards & actions

Approve/reject patch cards include the patch ID and the action verb. Action submissions from the card flow into the same approval flow the web UI uses.

Office 365 / Exchange

Office 365 is a production-ready inbound channel. Every inbound message lands as a thread in the Inbox with attachments, AI classification, internal notes, and reply-send through Microsoft Graph.

What you get

  • Mail from a connected Office 365 mailbox lands in the Inbox in near-realtime.
  • Attachments are catalogued; bytes are fetched on-demand from the operator UI.
  • Outbound replies go back under the mailbox's identity.
  • Per-recipient routing is supported. Mail to an unknown recipient lands on the per-tenant system mailbox and is surfaced under Settings → Inbox mailboxes for adoption.
Settings — Office 365 subscription health
Settings — Office 365 subscription health

Setup

  1. Register an Azure AD app with delegated permissions: Mail.ReadWrite, Mail.Send, User.Read, offline_access.
  2. Add a redirect URI: https://<your-host>/api/auth/office365/callback.
  3. In FixControl: Settings → Integrations → Office 365 → Connect, sign in as the mailbox owner, approve the scopes.

Reconnect

Microsoft Graph subscriptions are renewed automatically. If Microsoft signals that re-consent is required (consent revoked, scopes withdrawn), the integration moves to reconnect_required and the Settings tile surfaces a Reconnect button. Queued events are not lost — they replay once the connection is restored.

WhatsApp (on the roadmap)

WhatsApp intake is on the roadmap and is not available yet. There is no WhatsApp connector in Settings today; this page previously described a planned setup flow. If WhatsApp intake matters for your evaluation, tell us via /contact so we can prioritise it.

Health & troubleshooting

  • Health dot on the tile — green = receiving traffic in the last 24h, yellow = stale, red = error.
  • Recent deliveries — click into a tile to see the last 50 inbound events with status and latency.
  • Reconnect — every tile has a Reconnect button; for OAuth providers this triggers re-consent. The integration enters reconnect_required automatically when refresh tokens are revoked or expire beyond grace.

If signatures stop validating after a known-good setup, the most common causes are:

  • A reverse proxy stripped or rewrote the request body.
  • The signing secret was rotated at the provider but not in FixControl.
  • Clock drift caused timestamp checks to fail.

FAQ

Can one team use Slack and Teams at the same time? Yes. They're independent. Same goes for combining Slack with Gmail, etc.

Can FixControl auto-respond to a Slack DM? Questions about existing tickets — status, ownership, history — are answered directly. Anything customer-facing, and any reply that acts on a ticket, is drafted and waits for a human to approve it — the same human-in-the-loop rule as email replies.

What about Discord? Not supported. We focus on the chat platforms our customers actually run on (Slack, Teams).

Anything unclear or wrong?Let us know →

FixControl is a trade name of FixControl B.V. i.o.