About Microsoft Teams
The Microsoft Teams integration connects Serval to your organization’s Teams tenant so the Serval bot can power a help desk directly inside Teams - receiving channel messages, @mentions, thread replies, group chat messages, and DMs - and so workflows can send direct messages, channel threads, and group chat messages. There are two ways to connect:- Serval’s Teams app (the default): setup is two one-time admin actions - a Microsoft administrator grants tenant-wide admin consent to Serval’s managed application, and a Teams administrator uploads a Serval-generated bot app package to your organization’s Teams app catalog. With this option there is nothing for you to register or configure on the Microsoft side - Serval manages its own application.
- Custom Application: the bot runs as your organization’s own Microsoft application instead of Serval’s. You register an application in Microsoft Entra ID, create an Azure Bot that routes Teams messages to Serval, author and install your own Teams app package, and give Serval the application’s credentials.
graph.microsoft.com, smba.trafficmanager.net, and pilot1.botapi.skype.com services.
What the Microsoft Teams integration enables
Get your credentials
- Serval's Teams app (default)
- Custom Application
Line up a Microsoft administrator
Line up a Teams administrator
Plan for auto-install (optional)
Connect in Serval
In Serval, go to Integrations → All integrations → Microsoft Teams and click Connect Microsoft Teams. The connect dialog offers two options: Connect Serval’s Teams app (recommended) - “Grant admin consent for Serval’s managed Teams bot.” - and Custom Application - “Advanced setup using an app registration created by your organization”.- Serval's Teams app (default)
- Custom Application
Start the connection
Accept Microsoft's admin consent prompt
Download the Teams bot app package
Serval-Teams-Bot.zip, generated specifically for your installation.Upload the package in the Teams Admin Center
Add the Serval app in Teams
Connect channels
Verifying the connection
Open the connection’s API Integration tab, find Health Checks, and click Run (4). Expand each result to read its details. The Microsoft Teams integration runs four health checks. Microsoft Teams Connectivity - lists a small sample of your teams through Microsoft Graph to verify the connection’s application permissions work. Finding zero teams still counts as success.- Success: “Connected to Microsoft Teams. Found [number] team(s) including: [team names]” - or, with zero teams: “Connected to Microsoft Teams, but no teams found in the organization. Create a team in Microsoft Teams and try again.”
- Insufficient privileges: “Serval does not have the required permissions to access Microsoft Teams. Please ensure the Team.ReadBasic.All application permission is granted in your Azure AD app registration. After adding the permission, an administrator must click ‘Grant admin consent’.”
- Access denied: “Access denied when connecting to Microsoft Teams. The Team.ReadBasic.All application permission may not be granted. Go to Azure AD → App registrations → API permissions and verify that Team.ReadBasic.All is listed and has admin consent granted.”
- Authentication failure: “Authentication failed when connecting to Microsoft Teams. Admin consent may have been revoked, or the app credentials are invalid. Try reconnecting the Microsoft Teams integration.”
- Not found: “The Microsoft Teams API endpoint was not found. This may indicate that Microsoft Teams is not enabled for your tenant.”
- Microsoft server error: “Microsoft Teams returned a server error. This is likely a temporary issue with Microsoft’s API - please try again later.”
- Consent never granted: “Admin consent has not been granted for the Microsoft Teams integration. Please reconnect the integration - a Microsoft administrator must approve the consent prompt.”
- Anything else: “Unable to connect to Microsoft Teams. Please verify the integration is connected and the admin has approved the required permissions.”
- Success: “Serval bot app is present in the organization’s Teams app catalog (ID: [app ID]).”
- Not found: “The Serval bot app was not found in your organization’s Teams app catalog. An administrator needs to upload the app package (downloadable from this page) in the Teams Admin Center under ‘Manage apps’. Without this, the bot cannot be installed to teams or users.”
- Insufficient privileges: “Serval does not have permission to query the Teams app catalog. Ensure the AppCatalog.Read.All application permission is granted in your Azure AD app registration and that an administrator has clicked ‘Grant admin consent’.”
- Access denied: “Access denied when querying the Teams app catalog. The AppCatalog.Read.All permission may not be granted. Check Azure AD → App registrations → API permissions.”
- Authentication failure: “Authentication failed when querying the Teams app catalog. Admin consent may have been revoked, or the app credentials are invalid. Try reconnecting the Microsoft Teams integration.”
- Anything else: “Unable to query the Teams app catalog. Please verify the integration is connected and the admin has approved the required permissions.”
- Success: “Channel resolution is working. Team “[name]” has internalId and [number] channel(s).” - or, with zero teams: “Connected to Microsoft Teams, but no teams found in the organization. Channel @mention support requires at least one team.”
- Missing internal ID: “Serval can list teams but cannot read team internal IDs. This prevents Serval from resolving which channel the bot was @mentioned in. Please ensure the Team.ReadBasic.All application permission is granted with admin consent in Azure AD → Enterprise Applications → Serval → Permissions.”
- Insufficient privileges: “Serval does not have the required permissions to resolve Teams channels. Please ensure Team.ReadBasic.All and Channel.ReadBasic.All application permissions are granted in your Azure AD app registration with admin consent.”
- Access denied: “Access denied when resolving Teams channels. The required application permissions (Team.ReadBasic.All, Channel.ReadBasic.All) may not be granted. Check Azure AD → App registrations → API permissions.”
- Authentication failure: “Authentication failed when resolving Teams channels. Admin consent may have been revoked, or the app credentials are invalid. Try reconnecting the Microsoft Teams integration.”
- Anything else: “Unable to resolve Teams channels. This is required for channel @mention support. Please verify the integration is connected and the admin has approved the required permissions.”
access_as_user scope is enabled. For a custom application, it also checks the Application ID URI, access token version 2, both authorized Teams clients, and the acct access-token claim. For disabled user sign-in, open Entra → Enterprise applications → your app → Properties and enable user sign-in. Correct the custom registration settings under App registrations → your app using the sign-in setup above, then run the check again. If the result says user assignment is required, also check the tester is assigned under the enterprise application’s Users and groups.
After the checks pass, test messages and ticket creation using the steps below. Channel Resolution tests only one team; check the target team separately if its channels are missing.
Verify the custom app from installation to response
Use a pilot account included in the app’s availability settings.- Find the uploaded app. Open Teams Admin Center → Teams apps → Manage apps and search for your app. If absent, return to the upload step. If present, confirm Unblocked and that Available to includes the tester, then continue to step 2.
- Check the team installation. In Teams, open the intended team’s … → Manage team → Apps. If the app is missing, use Add to team in Admin Center. If it is listed, skip to step 3. If Admin Center reports it is already added but the client disagrees, test Teams web using the same account and tenant, then refresh or restart the desktop client.
- Check the Serval connection. Open Integrations → Microsoft Teams → your connection → API Integration → Health Checks and run all four checks. If one fails, follow its expanded error and rerun it. If they pass, continue to step 4.
- Test a direct message. Enable Direct Messages on the connection’s Help Desk tab where that control is available. Then add the app for your own account in Teams, open its chat, and send a fresh, specific support request. If it replies, continue to step 5. If it doesn’t, follow Custom app: connected in Serval, but the bot never receives messages below.
- Test a channel mention. Open a standard channel in the installed team: a channel accessible to all team members, rather than a private or shared channel. Start a post, type
@and your app’s name, select the bot from the suggestions, and send a support request. If the bot isn’t in the suggestions, return to steps 1–2. - Enable the channel in Serval. On the connection’s Help Desk tab, find the channel under Connected Channels and select the intended channel mode. A newly discovered channel starts disabled. Send a fresh test message after enabling it.
- Verify the result. Check both the bot’s response and the resulting ticket in the intended Serval workspace. Personal chats display replies in the chat; channel replies belong to the channel conversation.
Team.ReadBasic.All and Channel.ReadBasic.All have admin consent on the same Entra application used by this connection. If they do, collect the target team/channel link, the failure time, and the exact error for Serval support.
Gotchas and troubleshooting
Where to view descriptions and update the custom package
Where to view descriptions and update the custom package
Admin consent alone is not enough - the bot app package upload is a separate, mandatory step
Admin consent alone is not enough - the bot app package upload is a separate, mandatory step
Serval-Teams-Bot.zip to the org app catalog (Teams Admin Center → Teams apps → Manage apps), the bot cannot install itself anywhere: the Bot App Catalog Presence health check fails, and every send-message action fails. Direct messages report:We couldn’t find the Serval application in your Microsoft Teams app catalog. Please ask an administrator to upload it in Teams Admin Center before direct messages can be sent.Channel and group chat messages report that the Serval bot app was not found in the Teams app catalog and that an administrator must upload the app package in Teams Admin Center, followed by diagnostic details of each app identity Serval tried. The bot’s chat and channel read/send rights come from resource-specific consent declared in the uploaded package - not from admin consent. (The Custom Application equivalent of this gotcha is the “is not installed” family of errors - see Custom application errors.)
Uploaded the package, but @mentioning Serval in a channel finds nothing
Uploaded the package, but @mentioning Serval in a channel finds nothing
Custom app: connected in Serval, but the bot never receives messages
Custom app: connected in Serval, but the bot never receives messages
- Messaging endpoint. On the Azure Bot → Settings → Configuration, the endpoint must be exactly the one for your deployment (see Point the messaging endpoint at Serval) - re-check for typos.
- Teams channel. On the Azure Bot → Settings → Channels, Microsoft Teams must show a healthy status in the Channels list.
- Tenant-mode match. The Azure Bot’s Type of App must match the Entra app’s Supported account types (both Single Tenant, or both Multi Tenant), and its App ID and App tenant ID must equal the Entra app’s client and tenant IDs. A mismatch makes Teams reject delivery with a 401 before anything reaches Serval.
- App package installed. The
botIdfield inside the manifest’sbotssection must be the same client ID you entered in Serval, and the package must be uploaded and added where you expect the bot to respond.
Custom app: sends fail with an 'is not installed' error
Custom app: sends fail with an 'is not installed' error
Your Teams app (app ID [your app ID]) is not installed in the user’s personal scope. Install your app package in Teams Admin Center (org-wide or via an app setup policy), then retry.
Your Teams app (app ID [your app ID]) is not installed in the target team. Install your app package in Teams Admin Center (org-wide or to the team), then retry.
Your Teams app (app ID [your app ID]) is not installed in the group chat. Install your app package in Teams Admin Center and add it to the chat, then retry.Each message ends with the underlying send error from Microsoft. The fix is always on your side: install the app package in the named scope, then retry the send.
Switching between Serval's Teams app and a custom application
Switching between Serval's Teams app and a custom application
Serval-Teams-Bot.zip download for a custom connection - requesting it answers “No app package exists for a custom app install”). Moving back to Serval’s app, re-run the admin consent flow, then download and upload Serval-Teams-Bot.zip again. Until the matching package is installed, sends fail with the errors above.Serval never reveals its own application’s secret: opening the credentials form on a connection that currently uses Serval’s Teams app shows only the connection’s name and tenant ID, and switching to a custom application always requires entering your own client ID and secret.Channel mapping breaks silently without Team.ReadBasic.All / Channel.ReadBasic.All
Channel mapping breaks silently without Team.ReadBasic.All / Channel.ReadBasic.All
Catalog queries need AppCatalog.Read.All
Catalog queries need AppCatalog.Read.All
Revoked or missing admin consent surfaces as specific AADSTS errors
Revoked or missing admin consent surfaces as specific AADSTS errors
- AADSTS700016: “The Serval application was not found in the directory ‘[organization name]’. This usually means admin consent has not been granted or has been revoked. Please reconnect the Microsoft Teams integration to grant admin consent again.”
- AADSTS65001: “Admin consent has not been granted for the Microsoft Teams integration. Please reconnect the integration - an administrator must approve the consent prompt.”
- unauthorized_client: “The Serval application is not authorized for tenant ‘[organization name]’. This typically means admin consent needs to be granted. Please reconnect the Microsoft Teams integration.”
- AADSTS7000215: “The client secret for the Serval application is invalid. Please contact Serval support.” - that one is a Serval-side issue, not something you can fix.
The app package is environment- and install-specific - don't reuse a ZIP across orgs
The app package is environment- and install-specific - don't reuse a ZIP across orgs
Serval-Teams-Bot.zip is stamped with your specific installation’s identity. If the catalog app doesn’t match the connected integration, direct messages report:We found the Serval application in your Microsoft Teams app catalog, but couldn’t install it with the current Microsoft Teams integration configuration. Please ask an administrator to verify the Microsoft Teams integration is configured for the correct Serval application.Channel messages similarly report that Serval found the app but couldn’t install it in the target team - which can also happen when the team hasn’t granted the required resource-specific permissions or tenant policy blocks app-only installation. Re-download the package from the current integration settings page and re-upload it.
Setup Policies require an Admin Center upload
Setup Policies require an Admin Center upload
Channel messages need a copied Teams link, and private channels are not supported
Channel messages need a copied Teams link, and private channels are not supported
19: works there.)Cross-tenant / external group chats can't be auto-installed
Cross-tenant / external group chats can't be auto-installed
Separate from the Microsoft Graph integration
Separate from the Microsoft Graph integration
Serval's Teams app has no credential fields - and a custom app has no package download
Serval's Teams app has no credential fields - and a custom app has no package download
Message size limits are not pre-validated
Message size limits are not pre-validated
Custom application errors
Errors on a Custom Application connection name your app registration and are fixable on your side. The connect form (and every later credential edit) reports verification failures inline; the same authentication errors can also surface later on sends if consent is revoked or the secret expires.Need help? Contact support@serval.com for assistance with your Microsoft Teams integration.
Configure existing helpdesk channels through the API
The connected-channel API and workflow pattern also supports Microsoft Teams. List the Serval workspace’s channels, optionally filter by the Teams integration’sserviceInstanceId, and use the returned Serval connection id to set the mode.
Teams supports DISABLED, FULL_ASSIST, ASSISTANT, TICKET_ONLY, and ON_DEMAND, each prefixed with CONNECTED_SERVICE_MODE_. Workspace only, workspace inbox, and redirect-to-DM modes are not supported and return a validation error. Disabled channels are included in listing, so setting CONNECTED_SERVICE_MODE_FULL_ASSIST activates an existing channel as Help desk (Always respond). The API does not install the bot or create channel connections.
