1. Register a Microsoft Entra app
In the Azure portal, search for App registrations:
- Name: anything you like (users never see it; the 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.

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 theMicrosoftAppIdof the Azure Bot). - Directory (tenant) ID - your tenant.

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 during pairing or in the dashboard when registering the identity.4. Create the Azure Bot resource
Search the portal for Bot and open Bot Services:
- Bot handle / subscription / resource group: your choice.
- Data residency: Global is typical.
- Pricing tier: the free F0 tier is fine (Standard channels like Teams are free).
- Type of App: Single Tenant, matching the app registration.



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.

6. Enable calling and set the webhook
Still in the Teams channel, open the Calling tab:- Check Enable calling.
- Set Webhook (for calling) to the calling webhook URL from your StandIn dashboard (shown on your identity after you register it).
- Apply.

7. Set the messaging endpoint (optional, for chat)
Voice works without this step. If you also want Teams chat, go to Settings → Configuration and set Messaging endpoint to the URL from your StandIn dashboard.
Chat only works after you also set your Agent chat URL in the StandIn dashboard - the
https:// URL where your agent serves Bot Framework chat messages, e.g.
https://<your-public-host>/api/messages (paste the bare host and StandIn appends /api/messages
for you). Until then, chat messages get a “chat endpoint not configured” reply.8. Grant Graph permissions
Back on the app registration (the same Entra app asbotId): API permissions → Add a
permission → Microsoft Graph → Application permissions, add the list below, then select
Grant admin consent for your tenant (requires an admin).

| Permission | Purpose |
|---|---|
Calls.JoinGroupCall.All | answer / join Teams calls and meetings |
Calls.JoinGroupCallAsGuest.All | join meetings as a guest participant |
Calls.AccessMedia.All | access real-time Teams call audio/video media |
Calls.Initiate.All | outbound 1:1 “call me back” (skip if unused) |
Calls.InitiateGroupCall.All | outbound group “call me back” (skip if unused) |
Chat.Read.All | resolve chat / thread ids and read message context |
ChatMessage.Read.Chat | read messages in chats the bot is installed in |
Sites.ReadWrite.All | upload files / minutes to SharePoint (OneDrive) for chat attachments (optional) |

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 Teams channel enabled
- Calling enabled and the webhook pointed at StandIn
- (Optional) Messaging endpoint set for chat
- Graph permissions admin-consented