1. 为什么要在 Teams 里接一个 OpenClaw 机器人
Microsoft Teams 是很多公司日常沟通的主阵地,消息、文件、会议纪要都堆在里面。如果能把 OpenClaw 这类自动化助手直接塞进 Teams 的聊天窗口,团队里查资料、跑脚本、拉数据就不用再切浏览器了。OpenClaw 本身是个可扩展的网关型工具,它通过插件机制对接外部平台,而 Teams 这一侧靠的是 Azure Bot Service 做消息中转。整条链路是:Teams 客户端 → Azure Bot Service → 你的 OpenClaw Gateway → 插件处理 → 原路返回。
这套方案适合谁?一是手里已经有 Microsoft 365 或 Azure 订阅、且具备 Teams 管理员权限的团队;二是已经在跑 OpenClaw Gateway、想把它从命令行搬到协作平台的人;三是需要给内部机器人做权限隔离、又不想自己从零写 Bot Framework 适配层的开发者。我试过把 OpenClaw 接到 Teams 上,踩过的坑主要集中在三块:Azure Bot 的凭证配置、消息端点的公网可达性、以及插件加载顺序。下面按可跟做的顺序拆开讲。
需要提前说明的是,Teams 在中国大陆可以通过由世纪互联运营的 Office 365 中国版使用,但它的 Azure 端点和国际版是两套独立体系,账号数据不互通。如果你的团队用的是国内版,配置里要额外指定端点,这一点在第 3 节会给出具体写法。
2. 前置准备:TaoToken 统一 Key 与 OpenClaw 环境
在动 Azure 之前,先把 OpenClaw 这一侧的基础打好。OpenClaw 的模型调用可以走 TaoToken 的统一 Key,这样你不需要在多个平台之间来回切换凭证。TaoToken 的 API 地址是https://taotoken.net/api,官网入口在https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。
你需要先拿到一个 API Key。登录后进入控制台,在 API Keys 页面创建一个新 Key,复制保存。这个 Key 后面会写进 OpenClaw 的配置文件里,作为模型请求的鉴权凭证。如果你还没决定用哪个模型,可以先去模型对话页面试一下效果,确认响应风格符合预期再落到配置里。
OpenClaw Gateway 本身要已经安装并处于运行状态。检查方式是执行:
openclaw gateway status如果返回 running,说明网关正常。接着安装 Teams 官方插件:
openclaw plugins install @openclaw/msteams openclaw plugins list第二条命令用来确认插件已经出现在列表里。插件没装上的话,后面配置里写msteams字段也不会生效,Gateway 启动时会直接忽略这个 channel。
注意:插件安装和 Gateway 重启有先后顺序。先装插件,再改配置,最后重启,顺序反了会出现配置读取不到插件的情况。
3. 可复制配置:Azure Bot 注册与 config.toml 骨架
3.1 注册 Azure Bot 并拿三个凭证
登录 Azure Portal,搜索 Azure Bot 服务,点击 Create。类型选 Single Tenant(单租户),填写名称和资源组,区域按团队所在位置选。创建完成后,你需要记录三个值:
App ID 在 Bot Configuration 页面直接可见。App Password 需要进入 Manage Password → Certificates & secrets → New client secret 创建,这个值只在创建时显示一次,关掉页面就再也看不到,必须立刻记下来。Tenant ID 在 Azure Active Directory → Overview 里找。
3.2 启用 Teams Channel 并设置消息端点
在 Azure Bot 的 Channels 页面点击 Microsoft Teams 图标,同意条款并保存。然后在 Configuration 页面设置 Messaging endpoint:
https://your-domain.com/api/channels/msteams/messages这个地址必须公网可访问,Azure Bot Service 会把 Teams 的消息 POST 到这里。本地开发可以用内网穿透工具临时暴露端口,但生产环境建议用正式域名加 HTTPS。
3.3 config.toml 与 settings.json 骨架
OpenClaw 的配置写在config.toml里,Teams 相关的段落如下:
[channels.msteams] enabled = true appId = "YOUR_APP_ID" appPassword = "YOUR_APP_PASSWORD" tenantId = "YOUR_TENANT_ID" groupRequireMention = true useAdaptiveCards = true cardStyle = "default"如果你用的是世纪互联版,需要额外加两个端点字段:
[channels.msteams] enabled = true appId = "YOUR_APP_ID" appPassword = "YOUR_APP_PASSWORD" tenantId = "YOUR_TENANT_ID" azureEndpoint = "https://login.partner.microsoftonline.cn" botFrameworkEndpoint = "https://smba.trafficmanager.cn"模型侧的 Key 配置放在settings.json里,指向 TaoToken:
{ "model": { "provider": "taotoken", "apiKey": "YOUR_TAOTOKEN_KEY", "baseUrl": "https://taotoken.net/api" } }3.4 Teams App Manifest 与 RSC 权限
在 Teams App Manifest 里添加资源特定权限,让 Bot 能读取频道和聊天消息:
{ "authorization": { "permissions": { "resourceSpecific": [ { "name": "ChannelMessage.Read.Group", "type": "Application" }, { "name": "ChatMessage.Read.Chat", "type": "Application" } ] } } }同时准备两个图标(32x32 和 192x192),和manifest.json一起打包成 ZIP,上传到 Teams Admin Center 等待管理员审批。
4. 验证请求:重启 Gateway 并用 Teams 测试消息
配置写完后重启 Gateway:
openclaw gateway restart重启后查看日志,确认 msteams channel 已加载:
openclaw gateway logs --follow日志里应该出现类似channel msteams started的行。如果没有,说明配置字段有拼写错误或插件未生效。
接下来在 Teams 里搜索你的 Bot 名称,发起 1-on-1 对话。第一次对话会返回一个 Pairing Code,用下面的命令批准:
openclaw pairing approve msteams <code>批准后在聊天窗口发一条测试消息,比如「ping」。如果 Gateway 日志里出现入站消息记录,并且 Teams 窗口收到回复,说明整条链路通了。群组聊天里需要 @提及 Bot 才会触发响应,这是groupRequireMention = true控制的行为。
Adaptive Cards 开启后,Bot 可以发送带按钮、表格、图片的结构化消息。测试时可以发一条包含卡片的指令,观察 Teams 里的渲染效果。如果卡片显示异常,把cardStyle从default改成compact再试。
5. 本篇常见错排查
Bot 在 Teams 里找不到:最常见的原因是 App 没有上传到 Admin Center,或者上传了但管理员还没审批。去 Teams Admin Center 的 Manage apps 页面确认状态。
消息发送失败:先检查 Messaging endpoint 是否公网可达,用 curl 从外部机器访问一下那个地址。然后确认 App Password 没有过期,Azure 里的 client secret 有有效期,到期后要重新创建并更新配置。最后看 Gateway 日志里的错误详情,通常会指明是鉴权失败还是端点不可达。
插件加载失败:执行openclaw plugins list确认@openclaw/msteams在列表里。如果不在,重新安装。如果在了但 channel 没启动,检查config.toml里[channels.msteams]的拼写,TOML 对大小写敏感。
国内版连不上:世纪互联版必须用login.partner.microsoftonline.cn和smba.trafficmanager.cn这两个端点,用国际版端点会直接超时。另外 Azure 资源要在中国区 portal.azure.cn 创建,两边资源不互通。
配对码批准后仍无响应:检查settings.json里的 TaoToken Key 是否有效,模型请求失败时 Bot 可能静默不回复。可以先用模型对话页面单独验证 Key 能不能正常调用。
6. 后续接入与长期运行建议
链路跑通之后,如果你打算长期在团队里用,建议把 Gateway 部署在有固定公网 IP 的服务器上,避免内网穿透地址变化导致端点失效。模型调用这块,TaoToken 的统一 Key 可以覆盖多个模型,省去逐个平台配置的麻烦,接入文档里有完整的参数说明。
对于需要长期跑编码任务或 Agent 场景的团队,可以了解一下 Coding Plan,它更适合高频、持续的自动化调用。日常调试和验证模型响应,直接用模型对话页面就够了。凭证管理上,API Keys 页面可以创建和轮换 Key,建议给不同环境分配不同的 Key,方便出问题时定位。
最后提醒一点:App Password 和 TaoToken Key 都不要写进版本控制,用环境变量或独立的 secrets 文件管理。Teams 这边的 RSC 权限按最小必要原则申请,只开实际用到的读消息权限,减少审批阻力。