@chat-adapter/teams
Microsoft Teams adapter for Chat SDK. Configure with Azure Bot Service.
Installation
Usage
The adapter auto-detects TEAMS_APP_ID, TEAMS_APP_PASSWORD, and TEAMS_APP_TENANT_ID from environment variables:
Azure Bot setup
1. Create Azure Bot resource
- Go to portal.azure.com
- Click Create a resource
- Search for Azure Bot and select it
- Click Create and fill in:
- Bot handle: Unique identifier for your bot
- Subscription: Your Azure subscription
- Resource group: Create new or use existing
- Pricing tier: F0 (free) for testing
- Type of App: Single Tenant (recommended for enterprise)
- Creation type: Create new Microsoft App ID
- Click Review + create then Create
2. Get app credentials
- Go to your Bot resource then Configuration
- Copy Microsoft App ID as
TEAMS_APP_ID - Click Manage Password (next to Microsoft App ID)
- In the App Registration page, go to Certificates & secrets
- Click New client secret, add description, select expiry, click Add
- Copy the Value immediately (shown only once) as
TEAMS_APP_PASSWORD - Go to Overview and copy Directory (tenant) ID as
TEAMS_APP_TENANT_ID
3. Configure messaging endpoint
- In your Azure Bot resource, go to Configuration
- Set Messaging endpoint to
https://your-domain.com/api/webhooks/teams - Click Apply
4. Enable Teams channel
- In your Azure Bot resource, go to Channels
- Click Microsoft Teams
- Accept the terms of service
- Click Apply
5. Create Teams app package
Create a manifest.json file:
Create icon files (32x32 outline.png and 192x192 color.png), then zip all three files together.
6. Upload app to Teams
For testing (sideloading):
- In Teams, click Apps in the sidebar
- Click Manage your apps then Upload an app
- Click Upload a custom app and select your zip file
For organization-wide deployment:
- Go to Teams Admin Center
- Go to Teams apps then Manage apps
- Click Upload new app and select your zip file
- Go to Setup policies to control who can use the app
Configuration
All options are auto-detected from environment variables when not provided.
*appId is required — either via config or TEAMS_APP_ID env var.
**Exactly one authentication method is required: appPassword, certificate, or federated.
Authentication methods
The adapter supports three mutually exclusive authentication methods. When no explicit auth is provided, TEAMS_APP_PASSWORD is auto-detected from environment variables.
Client secret (default)
The simplest option — provide appPassword directly or set TEAMS_APP_PASSWORD:
Certificate
Authenticate with a PEM certificate. Provide either certificateThumbprint or x5c (public certificate for subject-name validation):
Or with subject-name validation:
Federated (workload identity)
For environments with managed identities (e.g. Azure Kubernetes Service, GitHub Actions):
Environment variables
Features
Messaging
Rich content
Conversations
Message history
Limitations
- Adding reactions: Teams Bot Framework doesn't support bots adding reactions. Calling
addReaction()orremoveReaction()throws aNotImplementedError. The bot can still receive reaction events viaonReaction(). - Typing indicators: Not available via Bot Framework.
startTyping()is a no-op.
Message history (fetchMessages)
Fetching message history requires the Microsoft Graph API with client credentials flow. To enable it:
- Set
appTenantIdin the adapter config - Grant one of these Azure AD app permissions:
ChatMessage.Read.ChatChat.Read.AllChat.Read.WhereInstalled
Without these permissions, fetchMessages will not be able to retrieve channel history.
Receiving all messages
By default, Teams bots only receive messages when directly @-mentioned. To receive all messages in a channel or group chat, add Resource-Specific Consent (RSC) permissions to your Teams app manifest:
Alternatively, configure the bot in Azure to receive all messages.
Troubleshooting
"Unauthorized" error
- Verify
TEAMS_APP_IDand your chosen auth credential are correct - For client secret auth, check that
TEAMS_APP_PASSWORDis valid - For certificate auth, ensure the private key and thumbprint/x5c match what's registered in Azure AD
- For federated auth, verify the managed identity client ID and audience are correct
- For SingleTenant apps, ensure
TEAMS_APP_TENANT_IDis set - Check that the messaging endpoint URL is correct in Azure
Bot not appearing in Teams
- Verify the Teams channel is enabled in Azure Bot
- Check that the app manifest is correctly configured
- Ensure the app is installed in the workspace/team
Messages not received
- Verify the messaging endpoint URL is correct
- Check that your server is accessible from the internet
- Review Azure Bot logs for errors
License
MIT