--- summary: "安装 Microsoft Teams 插件,注册机器人和 Teams 应用程序,然后针对开发隧道运行" read_when: - "首次设置Microsoft Teams通道" - "手动注册 Azure Bot 和 Teams 应用程序" - "针对本地开发隧道运行 Teams" title: "Microsoft Teams 设置" sidebarTitle: "设置" --- 安装插件,注册机器人和 Teams 应用程序,将 Teams 指向可访问的端点,并验证结果。 ## 捆绑插件 Microsoft Teams 在当前 OpenClaw 版本中作为捆绑插件提供;在正常的打包发行版中,无需单独安装。 如果你使用的是较旧的版本,或者是未包含捆绑 Teams 的自定义安装,请直接安装 npm 包: ```bash openclaw plugins install @openclaw/msteams ``` 使用裸包以跟随当前官方发布标签。仅当需要可复现的安装时,才固定到确切版本。 本地检出(从 git 仓库中运行): ```bash openclaw plugins install ./path/to/local/msteams-plugin ``` 详细信息:[插件](/tools/plugin) ## 快速设置 [`@microsoft/teams.cli`](https://www.npmjs.com/package/@microsoft/teams.cli) 可通过一条命令处理机器人注册、清单创建和凭据生成。 **1. 安装并登录** ```bash npm install -g @microsoft/teams.cli@preview teams login teams status # verify you're logged in and see your tenant info ``` Teams CLI 在 `@preview` dist-tag 下发布(请参阅上面的安装命令)。命令和标志可能会在版本之间发生变化。 **2. 启动隧道**(Teams 无法访问 localhost) 如有需要,请安装并验证 devtunnel CLI([入门指南](https://learn.microsoft.com/en-us/azure/developer/dev-tunnels/get-started))。 ```bash # One-time setup (persistent URL across sessions): devtunnel create my-openclaw-bot --allow-anonymous devtunnel port create my-openclaw-bot -p 18789 --protocol auto # Each dev session: devtunnel host my-openclaw-bot # Your endpoint: https://.devtunnels.ms/api/messages ``` `--allow-anonymous` 是必需的,因为 Teams 无法对 devtunnels 进行身份验证。每个传入的机器人请求仍会由 Teams SDK 验证。 替代方案:`ngrok http 18789` 或 `tailscale funnel 18789`(每个会话的 URL 可能会更改)。如果不同,请使用您配置的网关端口。配置反向代理时,仅公开所需的 Webhook 路径。 新安装仅使用网关端口。 Doctor 在现有安装上使用一次性 `channels.msteams.legacyWebhook` 引脚保留端口 `3978`。移动回调并验证通过网关端口的传递后,删除该引脚以关闭旧端口。 **3. 创建应用** ```bash teams app create \ --name "OpenClaw" \ --endpoint "https:///api/messages" ``` 这将创建一个 Entra ID (Azure AD) 应用程序,生成客户端密钥,构建并上传 Teams 应用清单(带有图标),并注册 Teams- 托管机器人(无需 Azure 订阅)。输出包括 `CLIENT_ID`、`CLIENT_SECRET`、`TENANT_ID` 和 **Teams 应用程序 ID**;它还提供直接在 Teams 中安装该应用程序。 **4. 使用输出中的凭据配置 OpenClaw**: ```json5 { bindings: [{ agentId: "main", match: { channel: "msteams", accountId: "default" } }], channels: { msteams: { enabled: true, tenantId: "", webhook: { path: "/api/messages" }, accounts: { default: { appId: "", appPassword: "", }, }, }, }, } ``` 这种基于帐户的形状适用于一个或多个机器人。环境变量(`MSTEAMS_APP_ID`、`MSTEAMS_APP_PASSWORD`、`MSTEAMS_TENANT_ID`)仅适用于 `default` 账户。每个指定帐户在同一网关端口上都有自己的机器人凭据和 Webhook 路径。有关端点示例,请参阅 [ 多个机器人帐户](/channels/msteams/configuration#multiple-bot-accounts)。 **5. 在 Teams 中安装应用** `teams app create` 会提示你安装该应用;请选择“Install in Teams”。如需稍后获取安装链接: ```bash teams app get --install-link ``` **6. 验证一切正常** ```bash teams app doctor ``` 会对机器人注册、AAD 应用配置、清单有效性和 SSO 设置执行诊断。 对于生产,请考虑使用 [ 联合身份验证](/channels/msteams/authentication#federated-authentication-certificate-plus-managed-identity)(证书或托管身份)而不是客户端密钥。 群聊默认被阻止(`channels.msteams.groupPolicy: "allowlist"`)。要允许群组回复,请设置 `channels.msteams.groupAllowFrom`,或使用 `groupPolicy: "open"` 允许任何成员(默认仍需提及)。 ## 目标 - 通过 Teams DM、群聊或频道与 OpenClaw 交谈。 - 回复始终返回到他们到达的频道。 - 默认采用安全的频道行为(除非另有配置,否则需要提及)。
手动设置(无需 Teams CLI) ### 工作原理 1. 检查 Microsoft Teams 插件是否可用(捆绑在当前版本中)。 2. 创建一个 **Azure Bot**(App ID + secret + tenant ID)。 3. 构建引用机器人的**Teams应用程序包**,包括[RSC权限](/channels/msteams/manifest-and-permissions#current-teams-rsc-permissions-manifest)。 4. Upload/install 将 Teams 应用程序纳入团队(或 DM 的个人范围)。 5. 在 `~/.openclaw/openclaw.json`(或环境变量)中配置 `msteams` 并启动网关。 6. 网关通过 Teams SDK JWT 身份验证在 `/api/messages` 上的 `gateway.port`(默认 `18789`)上提供 Bot Framework Webhook 流量。 ### 第 1 步:创建 Azure Bot 1. Go 到 [创建 Azure Bot](https://portal.azure.com/#create/Microsoft.AzureBot) 2. 填写 **基础信息** 选项卡: | 字段 | 值 | | ------------------ | -------------------------------------------------------- | | **机器人手柄** | 您的机器人名称,e.g.,`openclaw-msteams`(必须是唯一的) | | **订阅** | 选择你的 Azure 订阅 | | **资源组** | 新建或使用现有 | | **定价层** | **Free** 适用于 dev/testing | | **应用类型** | **单租户**(推荐;见下方说明) | | **创建类型** | **创建新的 Microsoft 应用 ID** | 新多租户机器人的创建在 2025-07-31 之后已被弃用。新机器人请使用 **单租户**。 3. 点击 **检查 + 创建**,然后点击 **创建**(约 1-2 分钟)。 ### 第 2 步:获取凭据 1. Azure Bot 资源 → **配置** → 复制 **Microsoft 应用 ID**(即你的 `appId`)。 2. **管理密码** → 应用注册 → **证书和机密** → **新建客户端机密** → 复制 **值**(即你的 `appPassword`)。 3. **概览** → 复制 **目录(租户)ID**(即你的 `tenantId`)。 ### 第 3 步:配置消息端点 1. Azure Bot → **配置**。 2. 设置 **消息传递端点**: - 生产环境:`https://your-domain.com/api/messages` - 本地开发:使用隧道(参见[本地开发](#local-development-tunneling)) ### 第 4 步:启用 Teams 通道 1. Azure Bot → **频道**。 2. 单击**Microsoft Teams**→配置→保存。 3. 接受服务条款。 ### 第 5 步:构建 Teams 应用清单 - 包含一个 `bot` 条目,并设置 `botId = `。 - 作用域:`personal`、`team`、`groupChat`。 - `supportsFiles: true`(个人作用域文件处理所必需)。 - 添加RSC权限(参见[RSC权限](/channels/msteams/manifest-and-permissions#current-teams-rsc-permissions-manifest))。 - 创建图标:`outline.png`(32x32)和 `color.png`(192x192)。 - 将 `manifest.json`、`outline.png` 和 `color.png` 一起打包成 zip。 ### 第 6 步:配置 OpenClaw ```json5 { bindings: [{ agentId: "main", match: { channel: "msteams", accountId: "default" } }], channels: { msteams: { enabled: true, tenantId: "", webhook: { path: "/api/messages" }, accounts: { default: { appId: "", appPassword: "", }, }, }, }, } ``` 环境变量仅配置默认帐户。有关其他机器人注册和路由,请参阅 [ 多个机器人帐户](/channels/msteams/configuration#multiple-bot-accounts)。 ### 第 7 步:运行网关 当插件可用且 `msteams` 配置包含凭据时,Teams 通道会自动启动。
## 本地开发(隧道) Teams 无法访问 `localhost`。请使用持久化开发隧道,以便 URL 在各次会话之间保持稳定: ```bash # One-time setup: devtunnel create my-openclaw-bot --allow-anonymous devtunnel port create my-openclaw-bot -p 18789 --protocol auto # Each dev session: devtunnel host my-openclaw-bot ``` 替代方案:`ngrok http 18789` 或 `tailscale funnel 18789`(每个会话的 URL 可能会更改)。如果不同,请使用您配置的网关端口。配置反向代理时,仅公开所需的 Webhook 路径。 如果隧道 URL 发生变化,请更新端点: ```bash teams app update --endpoint "https:///api/messages" ``` ## 测试机器人 **运行诊断:** ```bash teams app doctor ``` 一次性检查机器人注册、AAD 应用、清单和 SSO 配置。 **发送测试消息:** 1. 安装 Teams 应用(从 `teams app get --install-link` 获取安装链接)。 2. 在Teams中找到机器人并发送DM。 3. 检查网关日志中是否有传入活动。