Skip to main content
Part 1 of the Microsoft Teams setup. At the end of this page you will have a bot identity (client ID + tenant ID + client secret) wired to StandIn’s endpoints, with the Graph permissions consented. All screenshots are from the Azure portal; the values shown are placeholders.

1. Register a Microsoft Entra app

In the Azure portal, search for App registrations:
Azure portal search bar with App registrations typed in and the App registrations service shown in the results

The portal search finds App registrations under Services.

Select New registration:
  • Name: anything you like (users never see it; the Microsoft Teams app name comes from the manifest).
  • Supported account types: Single tenant only is the right choice for a bot that serves your own organization.
  • Redirect URI: leave empty.
Register an application form in the Azure portal with a name filled in and Single tenant only selected

App registrations > New registration: name it and keep Single tenant only.

Official reference: Register an application with the Microsoft identity platform.

2. Record the IDs

On the app’s Overview page, copy two values - you will need them repeatedly:
  • Application (client) ID - this is your botId (and the MicrosoftAppId of the Azure Bot).
  • Directory (tenant) ID - your tenant.
Entra app registration overview page highlighting the client ID and tenant ID fields

The Overview page shows the Application (client) ID and Directory (tenant) ID.

3. Create a client secret

Under Certificates & secrets, select New client secret and copy the secret Value immediately - it is shown only once. StandIn uses this credential (App ID + secret + tenant) to authenticate as your bot; you provide it in the StandIn dashboard when you register the identity.
Treat the client secret like a password: store it in a secret manager, never commit it, and set a reminder before its expiry date - calls stop when it lapses.

4. Create the Azure Bot resource

Search the portal for Bot and open Bot Services:
Azure portal search bar with Bot typed in and the Bot Services service shown in the results

The portal search: Bot Services is where Azure Bot resources live.

Create an Azure Bot and fill in the basics:
  • Bot handle / subscription / resource group: your choice.
  • Data residency: Global is typical.
  • Pricing tier: the free F0 tier is fine (Standard channels like Microsoft Teams are free).
  • Type of App: Single Tenant, matching the app registration.
Create an Azure Bot basics form in the Azure portal

Create an Azure Bot: pick a handle, subscription, and pricing tier.

Under Microsoft App ID, choose Use existing app registration and paste the App ID (client ID) and App tenant ID from step 2, then Review + create.
Create an Azure Bot form showing Use existing app registration selected with App ID and tenant ID fields

Creation type: Use existing app registration, with the client ID and tenant ID from step 2.

Once deployment finishes, the resource’s Overview shows the essentials - pricing tier, location, and (after step 7) the messaging endpoint:
Azure Bot resource overview page showing resource group, subscription, pricing tier, and messaging endpoint

The Azure Bot Overview page after creation.

Official reference: Create an Azure Bot resource.

5. Enable the Microsoft Teams channel

Open the new Azure Bot resource, go to Settings → Channels, and select Microsoft Teams. Accept the terms and apply; the channel appears under connected channels as Healthy.
Azure Bot Channels page showing the Microsoft Teams channel connected with a healthy status

Channels: Microsoft Teams connected and Healthy.

Opening the channel shows three tabs - Messaging, Calling, and Publish. Messaging is on by default (Microsoft Teams Commercial is right for most tenants); the next step configures Calling.
Microsoft Teams channel Messaging tab showing Microsoft Teams Commercial selected

The Microsoft Teams channel opens on the Messaging tab.

6. Enable calling and set the webhook

Still in the Microsoft Teams channel, open the Calling tab:
  1. Check Enable calling.
  2. Set Webhook (for calling) to the calling webhook URL from your StandIn dashboard (shown on your identity after you register it).
  3. Apply.
Microsoft Teams channel Calling tab with Enable calling checked and the webhook field highlighted

Calling tab: Enable calling, webhook from your StandIn dashboard.

Official references: Registering a calling bot (Microsoft Graph communications samples - covers this whole page end to end) and Register a calling bot for Microsoft Teams.

7. Set the messaging endpoint (optional, for chat)

Voice works without this step. If you also want Microsoft Teams chat, go to Settings → Configuration and set Messaging endpoint to the URL from your StandIn dashboard.
Azure Bot Configuration page with the messaging endpoint field highlighted

Configuration: the messaging endpoint powers Microsoft Teams chat.

This messaging endpoint matters only if you serve Microsoft Teams chat yourself. On a bring-your-own-bot identity you also set an Agent chat URL in the StandIn dashboard: the HTTPS URL the portal shows. Until then, chat messages get a “chat endpoint not configured” reply.That endpoint is yours, not the SDK’s. The SDK’s chat lane is dialed out by ChatChannel, needs no URL registered and no port exposed, and is available on the StandIn AI Teammate app. See Expose your agent and Connection modes.
Two different sets of endpoints, and mixing them up breaks the setup. The URLs on this page - the calling webhook in step 6 and the messaging endpoint in step 7 - are StandIn URLs (https://<identity>.standin.komaa.com/api/calling and /api/messages), taken from your dashboard and pasted into Azure. The worker URL you publish (/msteams/calling) goes in the StandIn dashboard, never in the Azure portal.

8. Grant Graph permissions

Back on the app registration (the same Entra app as botId): API permissions → Add a permission → Microsoft Graph → Application permissions, add the list below, then select Grant admin consent for your tenant (requires an admin).
Azure portal API permissions blade with Add a permission opening the Microsoft Graph API panel

API permissions > Add a permission > Microsoft Graph.

This is the canonical list. It applies to every SDK and plugin alike:
PermissionPurpose
Calls.JoinGroupCall.Allanswer / join Microsoft Teams calls and meetings
Calls.JoinGroupCallAsGuest.Alljoin meetings as a guest participant
Calls.AccessMedia.Allaccess real-time Microsoft Teams call audio/video media
Calls.Initiate.Alloutbound 1:1 “call me back” (skip if unused)
Calls.InitiateGroupCall.Alloutbound group “call me back” (skip if unused)
Chat.Read.Allresolve chat / thread ids and read message context
ChatMessage.Read.Chatread messages in chats the bot is installed in
Sites.ReadWrite.Allupload files / minutes to SharePoint (OneDrive) for chat attachments (optional; not needed on Hermes - its minutes file card rides the Bot Framework attachment contract with bot credentials only)
After consent, every row shows a green Granted status:
API permissions page listing the Calls application permissions, each with a green Granted status

Configured permissions with admin consent granted for the calling permissions.

Official references: Registering a calling bot (lists the Calls.* permissions), Grant tenant-wide admin consent, and the cloud communications API overview.

Checkpoint

You should now have:
  • Client ID (botId), tenant ID, and a client secret
  • An Azure Bot with the Microsoft Teams channel enabled
  • Calling enabled and the webhook pointed at StandIn
  • (Optional) Messaging endpoint set for chat
  • Graph permissions admin-consented
Next: Get the Microsoft Teams app package.