RMM Labs
Integrations 4 min read 28 September 2026 By Fred

Connect Microsoft Teams to Xcellerate OPS: reply to customers from the ticket

Answer customers on Microsoft Teams straight from the ticket and get their replies back in the ticket conversation. Here is how to set it up.

Connect Microsoft Teams to Xcellerate OPS: reply to customers from the ticket

Connect Microsoft Teams to Xcellerate OPS and your technicians can answer a customer on Teams straight from the ticket. The customer's Teams replies come back into the ticket conversation, so the whole exchange stays in one place. This guide is for workspace admins at MSPs and service businesses that run on Microsoft 365.

TL;DR

  • Two connection methods: Microsoft Graph (direct), where OPS chats from a licensed service account, or Power Automate webhook, where your own flow delivers the messages.
  • Graph needs an app registration in Microsoft Entra ID with three delegated permissions and admin consent.
  • Customer replies land on open tickets as public comments; with Graph, OPS checks for new messages every 5 minutes.

Before you start

  • You are a workspace admin in OPS.
  • For Graph: someone who can register an app and grant admin consent in Microsoft Entra ID, and a service account with a Teams licence (for example support@). OPS uses delegated sign-in, so no password is stored and MFA can stay on.
  • For the webhook method: a Power Automate flow with a public https URL.

Open Settings → Customer channels → Microsoft Teams.

Microsoft Teams settings page in Xcellerate OPS The Microsoft Teams page before anything is connected: the switch to enable the channel, the connection method choice and the setup steps box.

Method A: Microsoft Graph (direct)

1. Register the app in Entra ID

In Microsoft Entra ID, go to App registrations → New registration. Give it a clear name, such as "Xcellerate OPS Teams", and choose Single tenant.

2. Copy the IDs into OPS

Copy the Application (client) ID into Application (client) ID and the Directory (tenant) ID into Directory (tenant) ID.

3. Create a client secret

Under Certificates & secrets, create a new client secret. Copy its value (not the secret ID) into Client secret.

4. Add the redirect URI

Under Authentication, add the Web platform and register the redirect URI shown in OPS (it has a copy button). It follows this pattern: https://<your-workspace-host>/settings/teams/oauth/callback

5. Grant the permissions

Under API permissions → Microsoft Graph → Delegated, add Chat.ReadWrite, User.Read.All and offline_access. Then click Grant admin consent.

6. Connect the service account

Click Save, then Connect with Microsoft, and sign in once as the licensed service account. OPS confirms with "Microsoft Teams connected." and the page shows Connected as {account}.

7. Test and enable

Click Test connection, switch on Enable Teams channel and save. Optionally, OPS can register unknown senders automatically, and a backchannel chat lets technicians discuss a ticket (on by default).

Method B: Power Automate webhook

  1. In Power Automate, build an Instant flow with the trigger "When an HTTP request is received" that posts to Teams. Paste its HTTP POST URL into Outbound webhook URL.
  2. Click Save once. OPS then generates a tokenised URL in Inbound URL (wire your Teams flow to this). Point your flow's reply step at it and have it POST JSON with ticketNumber, message, senderName and, optionally, senderEmail.
  3. Click Test connection, switch on Enable Teams channel and save.

What happens after you connect

  • A Teams button appears in the ticket composer for contacts OPS can reach.
  • With Graph, the first Teams reply on a ticket opens a new group chat for that ticket between the service account and the contact, with the ticket reference and title as its topic. OPS finds the contact by email address and puts the technician's name in front of each message.
  • Every 5 minutes, OPS pulls new customer messages into open tickets. They appear as public comments.
  • With the webhook, replies go out as an Adaptive Card with ticket number, title, technician and text. Messages your flow posts back become a public comment on the matching ticket. Spam rules apply.

Good to know

  • Graph reaches contacts that OPS can find by email address in the connected Microsoft directory. Contacts outside that directory may not be reachable on Teams.
  • Sync covers open tickets only: up to 200 chats per workspace per run, and the last 30 messages per chat.
  • Webhook messages are plain text, and the webhook URL must be a public https address.
  • One Teams connection per workspace.
  • Reconnect when the client secret expires or the service account is disabled.

Troubleshooting

  • "Save the Directory ID, Application ID and client secret first." Save the three Graph fields before you click Connect with Microsoft.
  • "Graph token refresh failed — reconnect the service account on Settings → Teams." The secret has probably expired or the account was disabled. Create a new secret if needed and connect again.
  • "No Teams user found for ." The contact's email address is not in the connected directory.
  • "Webhook URL is not allowed: it must be a public https address." Use the public HTTP POST URL of your flow. If your flow gets "Invalid token." or "Ticket not found.", check the Inbound URL and the ticket number.

Get started

Get started for free and connect Teams in your new workspace. See also how the omnichannel service desk brings email, Teams and WhatsApp into one inbox, and how multilingual support works across channels.

Frequently asked questions

Which Microsoft Graph permissions does the Teams integration need?
The delegated permissions Chat.ReadWrite, User.Read.All and offline_access, with admin consent granted in Microsoft Entra ID.
How quickly does a customer's Teams reply reach the ticket?
With Microsoft Graph, OPS pulls new messages for open tickets every 5 minutes. They appear as public comments.
Can I have more than one Teams connection per workspace?
No, there is one Teams connection per workspace.
Sources: Verified against the Xcellerate OPS source code by the product team on 2026-09-28. Feature pages: https://rmmlabs.io/en/products/ops/features/multilingual; https://rmmlabs.io/en/products/ops/features/service-desk. Screenshots: real captures of the Xcellerate OPS demo workspace, Sep 2026.

Ready to solve time registration compliance?

Xcellerate OPS covers Belgian 2027 time registration requirements out of the box — no extra module needed.

Related articles