Microsoft Teams
Microsoft Teams bot integration via Azure Bot Framework with DMs, channels, groups, Adaptive Cards, polls, file sharing via SharePoint, and RSC permissions.
Tags: workspace, microsoft, enterprise, azure
Category: Workspace
Use Cases
- Enterprise AI assistant accessible to all employees via Teams
- IT helpdesk bot with Adaptive Card-based polls and surveys
- Project management AI integrated into team channels
- Meeting summarizer bot deployed in Teams group chats
- Company knowledge base Q&A bot with controlled channel access
- Multi-tenant AI deployment for managed service providers
Tips
- Use the Teams Developer Portal (dev.teams.microsoft.com) to create app packages — it's easier than hand-editing JSON manifests
- Test your webhook with Azure Web Chat first before installing in Teams — it validates the endpoint works
- Use Tailscale Funnel for local development instead of ngrok — it's free and stable
- Set commands.config: true to allow admins to adjust OpenClaw settings directly from Teams via /config
- Use the team/channel allowlist to scope bot access precisely — prevents unwanted channel pollution
- For large organizations, use groupAllowFrom with AAD object IDs for deterministic access control
- Set historyLimit to control how many recent messages are included in the AI prompt context
- Include supportsFiles: true in the bot manifest for file handling in personal scope
Known Issues & Gotchas
- Multi-tenant bot creation was deprecated after 2025-07-31 — always use Single Tenant for new bots
- The messaging endpoint must be publicly reachable — localhost won't work without a tunnel (ngrok, Tailscale Funnel)
- RSC permissions only apply within the team/chat where the app is installed — they're not tenant-wide
- Updating an installed Teams app requires incrementing the manifest version and re-uploading the ZIP
- After updating the Teams app, fully quit and relaunch Teams to clear cached app metadata
- bots[].botId AND webApplicationInfo.id in the manifest MUST match the Azure Bot App ID
- allowFrom should use stable AAD object IDs, not UPNs or display names (which can change)
- groupPolicy defaults to 'allowlist' — group chats are blocked until you explicitly configure groupAllowFrom or set groupPolicy to 'open'
- File sending in DMs works natively, but group chat files require sharePointSiteId configuration
- Env vars (MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD, MSTEAMS_TENANT_ID) only apply to the default account
Alternatives
- Slack
- Mattermost
- Google Chat
- Discord
Community Feedback
The Teams setup is no joke — Azure Bot Framework, app manifests, RSC permissions. But once you get through the gauntlet, having an AI assistant right in Teams where your team already works is incredibly powerful.
— HackerNoon
Tried connecting OpenClaw to Teams. The Azure Bot setup is rough compared to Telegram or Discord, but the Adaptive Cards and thread support make it worthwhile for enterprise use.
— Reddit r/MicrosoftTeams
The 'Abandon all hope' warning in the Teams docs is earned. But the step-by-step Azure Bot walkthrough they added recently makes it much more manageable. Graph API integration for files is a nice touch.
— GitHub Discussions
Frequently Asked Questions
Why is the Teams setup so complex?
Microsoft requires Azure Bot Framework registration, App Registration credentials, RSC permissions in a Teams app manifest, and a publicly reachable webhook endpoint. This is Microsoft's architecture, not OpenClaw's — the plugin abstracts as much as possible but can't eliminate Azure's requirements.
Do I need a paid Azure subscription?
No. The Azure Bot resource has a Free pricing tier that works for development and testing. Production deployments with high message volume may benefit from a paid tier, but most personal/small team use cases are fine on Free.
Can I use multi-tenant bots?
Microsoft deprecated creation of new multi-tenant bots after July 2025. Use Single Tenant for all new bot registrations. Existing multi-tenant bots continue to work but new ones cannot be created.
How do I send files in group chats?
File sending in group chats requires configuring sharePointSiteId in your OpenClaw config and granting Graph API permissions for SharePoint access. DM file sending works natively without additional configuration.
Is the Teams plugin bundled with OpenClaw?
No. As of 2026.1.15, Microsoft Teams was moved out of core into a separate plugin. Install it with: openclaw plugins install @openclaw/msteams.
How do I test locally without a public URL?
Use ngrok (ngrok http 3978) or Tailscale Funnel (tailscale funnel 3978) to create a tunnel. Set the resulting public URL as your Azure Bot messaging endpoint. You can also test basic webhook connectivity via Azure Web Chat before deploying to Teams.
Configuration Examples
Minimal DM-only setup
channels:
msteams:
enabled: true
appId: "<APP_ID>"
appPassword: "<APP_PASSWORD>"
tenantId: "<TENANT_ID>"
webhook:
port: 3978
path: "/api/messages"
dmPolicy: pairingTeam channels with allowlist
channels:
msteams:
enabled: true
appId: "<APP_ID>"
appPassword: "<APP_PASSWORD>"
tenantId: "<TENANT_ID>"
webhook:
port: 3978
path: "/api/messages"
groupPolicy: allowlist
teams:
"Engineering":
channels:
General:
requireMention: true
AI-Help:
requireMention: falseFull-featured with SharePoint files
channels:
msteams:
enabled: true
appId: "<APP_ID>"
appPassword: "<APP_PASSWORD>"
tenantId: "<TENANT_ID>"
webhook:
port: 3978
path: "/api/messages"
groupPolicy: open
sharePointSiteId: "<SHAREPOINT_SITE_ID>"
historyLimit: 50
dmPolicy: allowlist
allowFrom:
- "<AAD_OBJECT_ID>"Installation
openclaw plugins install @openclaw/msteams