# Microsoft Teams Plugin

## Overview

The Microsoft Teams integration for OpenClaw operates as a plugin (not included in core), enabling bot conversations via Teams DMs, group chats, and channels. This setup involves Azure Bot registration, Teams app manifest creation, and webhook configuration.

## Installation

```bash
openclaw plugins install @openclaw/msteams
```

Configuration is stored in `~/.openclaw/openclaw.json`.

## Key Setup Requirements

### Essential Credentials

- App ID and client secret from Azure Bot registration
- Tenant ID (single-tenant recommended)
- Webhook exposure via public URL or tunnel (port 3978 default)

## Access Control Defaults

- **DMs**: Use a "pairing" policy by default, requiring approval for unknown senders
- **Group chats and channels**: Default to "allowlist" mode - blocked unless explicitly configured

Configuration options support both user IDs and display names.

## Technical Capabilities

### What Works Without Graph API

- Real-time text messaging via webhook
- Personal DM file attachments
- Channel message receiving (RSC permissions only)

### What Requires Microsoft Graph Permissions

- Channel/group image and file downloads
- Message history retrieval
- Per-user file sharing links

## Limitations

- Teams markdown support is more limited than Slack or Discord
- Complex formatting may render incorrectly
- Webhook timeouts can cause duplicate processing if LLM responses exceed Teams' timeout threshold
- Private channels have inconsistent bot support across Microsoft's infrastructure

## File Sharing Architecture

### DMs

Use the built-in FileConsentCard flow.

### Group Chats and Channels

Require SharePoint site integration with Graph API permissions (`Sites.ReadWrite.All`). Files upload to `/OpenClawShared/` within the configured SharePoint site.

## Configuration Flexibility

The system supports per-team and per-channel overrides for:

- Reply style
- Mention requirements
- Tool policies

Reply style configuration addresses Teams' dual UI paradigms (Posts vs. Threads), with "thread" as the default setting.
