OpenClaw Microsoft Teams 渠道
通过 Azure Bot Resource 使用 Bot Framework 将 OpenClaw 连接到 Microsoft Teams。这种基于插件的集成方式使你的 AI 助手能在 Teams 中运行——处理个人私信、群组聊天和频道对话。OpenClaw 在 /api/messages 接收来自 Bot Framework 的 Webhook 事件,并通过 Teams 消息 API 做出响应,支持线程回复、Adaptive Cards、消息回应、通过 SharePoint 共享文件,以及按团队/按频道的配置覆盖。
Microsoft Teams 支持的功能
文本消息
支持
媒体与文件
支持
消息反应
支持
消息线程
支持
语音消息
不支持
群聊
支持
Microsoft Teams 前置条件
- 拥有创建 Azure Bot 资源权限的 Azure 账户
- 已注册的 Azure Bot,包含 App ID、App Password(客户端密钥)和 Tenant ID(建议使用单租户)
- Teams 应用清单(manifest.json),包含机器人配置、作用域和图标(outline.png 32×32、color.png 192×192)
- OpenClaw Gateway 正在运行,并可通过公共 HTTPS URL 或隧道访问(默认 Webhook 端口 3978)
- 已安装 Teams 插件:openclaw plugins install @openclaw/msteams
Microsoft Teams 快速设置
创建 Azure Bot 资源
前往 Azure Portal → 创建资源 → 搜索 'Azure Bot'。选择 Single Tenant 类型创建。在 App Registration 中生成客户端密钥。复制 App ID、客户端密钥和 Tenant ID——OpenClaw 配置时需要这三个值。
安装 Teams 插件并配置
运行 'openclaw plugins install @openclaw/msteams' 安装插件。在 openclaw.json 中添加 Teams 渠道配置,包含 appId、appPassword 和 tenantId。你也可以使用环境变量 MSTEAMS_APP_ID、MSTEAMS_APP_PASSWORD 和 MSTEAMS_TENANT_ID。
设置消息端点并启用 Teams 渠道
在 Azure Portal 中,导航到你的 Bot 资源 → Configuration。将消息端点设置为 'https://<your-domain>/api/messages'。然后前往 Channels → Add Microsoft Teams → Configure。本地开发时,使用隧道工具(ngrok 或 Tailscale Funnel)暴露端口 3978。
创建并安装 Teams 应用
创建 manifest.json,将你的机器人 App ID 作为 botId,设置 scopes(personal、team、groupChat)和 RSC 权限。将其与 outline.png 和 color.png 一起打包成 zip 文件。通过 Teams Developer Portal 或 Teams Admin Center 上传。测试时可直接旁加载应用包。
测试机器人
在 Teams 中找到你的机器人并发送一条私信。如果使用默认的配对策略,需要在终端中运行 'openclaw pairing approve msteams <code>' 来批准发送者。机器人应该会回复 AI 生成的消息。
Microsoft Teams 配置示例
{
"channels": {
"msteams": {
"enabled": true,
"appId": "YOUR_APP_ID",
"appPassword": "YOUR_APP_PASSWORD",
"tenantId": "YOUR_TENANT_ID",
"webhook": {
"port": 3978,
"path": "/api/messages"
}
}
}
}Microsoft Teams 深入了解
架构概述
Azure Bot 设置与应用注册
{
"channels": {
"msteams": {
"appId": "<APP_ID>",
"appPassword": "<APP_PASSWORD>",
"tenantId": "<TENANT_ID>"
}
}
}Teams 应用清单与 RSC 权限
私信策略
{
"channels": {
"msteams": {
"dmPolicy": "allowlist",
"allowFrom": [
"user@org.com",
"40a1a0ed-4ff2-4164-a219-55518990c197"
]
}
}
}群组聊天与频道管理
{
"channels": {
"msteams": {
"groupPolicy": "allowlist",
"groupAllowFrom": ["user@org.com"],
"teams": {
"My Team": {
"channels": {
"General": {
"requireMention": true
}
}
}
}
}
}
}回复样式与线程
{
"channels": {
"msteams": {
"replyStyle": "thread",
"teams": {
"19:abc...@thread.tacv2": {
"channels": {
"19:xyz...@thread.tacv2": {
"replyStyle": "top-level"
}
}
}
}
}
}
}文件处理与 SharePoint
{
"channels": {
"msteams": {
"sharePointSiteId": "YOUR_SHAREPOINT_SITE_ID",
"mediaAllowHosts": ["*.microsoft.com", "*.sharepoint.com"],
"mediaAuthAllowHosts": ["graph.microsoft.com"]
}
}
}Adaptive Cards 与投票
Teams ID 提取
Microsoft Teams 配置参考
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | 启用或禁用 Microsoft Teams 渠道 |
| appId | string | "" | Azure Bot App ID(Microsoft App ID)。也可使用 MSTEAMS_APP_ID 环境变量 |
| appPassword | string | "" | Azure Bot 客户端密钥。也可使用 MSTEAMS_APP_PASSWORD 环境变量 |
| tenantId | string | "" | 用于单租户身份验证的 Azure AD Tenant ID。也可使用 MSTEAMS_TENANT_ID 环境变量 |
| webhook.port | number | 3978 | 接收 Bot Framework 事件的 Webhook 监听端口 |
| webhook.path | string | "/api/messages" | 接收 Bot Framework 消息的 Webhook 端点路径 |
| dmPolicy | string | "pairing" | 控制谁可以向机器人发送私信。选项:pairing、allowlist、open、disabled |
| allowFrom | string[] | [] | 允许向机器人发送私信的 AAD 对象 ID、UPN 或显示名称(当 dmPolicy 为 allowlist 时) |
| groupPolicy | string | "allowlist" | 群组/频道访问控制。选项:allowlist、open、disabled |
| groupAllowFrom | string[] | [] | 群组聊天中允许的发送者。未设置时回退到 allowFrom |
| teams | object | {} | 按团队和按频道的配置覆盖(replyStyle、requireMention、tools) |
| requireMention | boolean | true | 在频道和群组聊天中需要 @提及。配合 RSC 权限设置为 false 可响应所有消息 |
| replyStyle | string | "thread" | 回复布局样式。选项:thread(经典 Posts)、top-level(类 Slack Threads) |
| configWrites | boolean | true | 允许 /config set|unset 命令在运行时修改渠道设置 |
| textChunkLimit | number | — | 出站消息分块前的最大字符数 |
| chunkMode | string | "length" | 文本分块策略。选项:length(硬分割)、newline(段落感知) |
| sharePointSiteId | string | "" | 用于群组聊天/频道文件上传的 SharePoint 站点 ID |
| mediaAllowHosts | string[] | MS/Teams domains | 下载媒体附件时允许的域名 |
| mediaAuthAllowHosts | string[] | Graph + Bot Framework | 下载媒体时接收 Authorization 头的域名 |
| dmHistoryLimit | number | 50 | 每个对话中作为 AI 上下文包含的最近私信消息数量 |
| historyLimit | number | 50 | 作为 AI 上下文包含的最大频道/群组消息数量 |
启用或禁用 Microsoft Teams 渠道
Azure Bot App ID(Microsoft App ID)。也可使用 MSTEAMS_APP_ID 环境变量
Azure Bot 客户端密钥。也可使用 MSTEAMS_APP_PASSWORD 环境变量
用于单租户身份验证的 Azure AD Tenant ID。也可使用 MSTEAMS_TENANT_ID 环境变量
接收 Bot Framework 事件的 Webhook 监听端口
接收 Bot Framework 消息的 Webhook 端点路径
控制谁可以向机器人发送私信。选项:pairing、allowlist、open、disabled
允许向机器人发送私信的 AAD 对象 ID、UPN 或显示名称(当 dmPolicy 为 allowlist 时)
群组/频道访问控制。选项:allowlist、open、disabled
群组聊天中允许的发送者。未设置时回退到 allowFrom
按团队和按频道的配置覆盖(replyStyle、requireMention、tools)
在频道和群组聊天中需要 @提及。配合 RSC 权限设置为 false 可响应所有消息
回复布局样式。选项:thread(经典 Posts)、top-level(类 Slack Threads)
允许 /config set|unset 命令在运行时修改渠道设置
出站消息分块前的最大字符数
文本分块策略。选项:length(硬分割)、newline(段落感知)
用于群组聊天/频道文件上传的 SharePoint 站点 ID
下载媒体附件时允许的域名
下载媒体时接收 Authorization 头的域名
每个对话中作为 AI 上下文包含的最近私信消息数量
作为 AI 上下文包含的最大频道/群组消息数量
Microsoft Teams 常见问题
Microsoft Teams 故障排查
Graph API 权限未授予或缺少管理员同意。机器人收到的是内容占位符而非实际文件。
机器人默认在频道和群组聊天中需要 @提及,或者 RSC 权限未配置。
Teams 对应用元数据的缓存非常积极。仍在使用旧的清单。
OpenClaw 配置中的 appId、appPassword 或 tenantId 与 Azure Bot 注册不匹配,或者在没有正确 Azure JWT 令牌的情况下手动测试。
Microsoft Teams 过去对私有频道的机器人支持有限。自 2026 年初起,微软正在逐步推出私有频道的完整应用支持,但可能尚未在所有租户中可用。