本页内容
本页内容
主流消息传递
Microsoft Teams 故障排除
Teams 路径不支持什么、操作员最常遇到的故障以及在哪里可以阅读更多内容。
已知限制
Webhook 超时
Teams 通过网关 HTTP Webhook 路由传递消息。有界 Express 解析器保留 1 MiB 解码的 JSON 限制,包括 gzip、deflate 和 Brotli 回调。网关 HTTP 生命周期限制适用于主侦听器;兼容性侦听器保留以前的 Teams 限制:30 秒不活动、30 秒总请求和 15 秒接收标头。在通道停止期间,新回调会接收可重试的 HTTP 503,同时主动响应会稳定下来,最多持续 30 秒,然后才会释放路由。入站附件下载最多需要 120 秒,因为经过身份验证的 Teams 图像视图可能需要数十秒;未达到该预算的附件将被视为不可用而到达代理。可选的上下文丰富(团队身份、引用的消息、线程历史记录)然后获得其自己的 10 秒预算。 SDK 在原始活动持久附加后返回;代理轮独立排水并主动回复。如果请求处理或持久准入错过了传输窗口,Teams 可能会重试该活动,并且入口逻辑删除会拒绝重复事件 ID。
如果删除 legacyWebhook 引脚或将其设置为 false 后 Teams 变得静默,请检查 Azure Bot 或反向代理是否仍指向端口 3978。按照 端点迁移说明 使用网关端口或完成显式旧侦听器的迁移。
Teams 云环境和 service URL 支持
此 SDK- 支持的 Teams 路径针对 Microsoft Teams 公共云进行了实时验证。
入站回复使用传入的 Teams SDK turn context。上下文外的主动操作——发送、编辑、删除、卡片、投票、文件同意消息,以及排队的长时间运行回复——使用已存储的会话引用 serviceUrl。公有云默认使用 Teams SDK 公有云环境,并允许在公有 Teams Connector 主机上存储引用:https://smba.trafficmanager.net/。
公有云是默认配置。对于正常的公有云机器人,你无需设置 channels.msteams.cloud 或 channels.msteams.serviceUrl。
对于非公有 Teams 云环境,请在 Microsoft 发布后设置 cloud 以及相应的主动边界:
channels.msteams.cloud选择 Teams SDK 云预设进行身份验证、JWT 验证、令牌服务和图形范围。channels.msteams.serviceUrl选择 Bot 连接器端点边界,用于在主动发送、编辑、删除、卡片、轮询、文件同意消息和排队的长时间运行回复之前验证存储的对话引用。 USGov 和 DoD SDK 云需要它。对于 China/21Vianet,OpenClaw 使用 SDKChina预设,并仅在 Azure China Bot Framework 通道主机上接受 stored/configured 服务 URL。
Microsoft 在 Teams 主动消息文档的 创建会话 部分发布了全局主动 Bot Connector 端点。优先使用传入活动的 serviceUrl(如果可用);否则使用下表中的 Microsoft 值。
| Teams 环境 | OpenClaw 配置 | 主动 serviceUrl |
|---|---|---|
| 民众 | 无需 cloud/serviceUrl 配置 | https://smba.trafficmanager.net/teams |
| GCC | 设置 serviceUrl;不存在单独的 Teams SDK 云预设 |
https://smba.infra.gcc.teams.microsoft.com/teams |
| GCC 高 | cloud: "USGov" + serviceUrl |
https://smba.infra.gov.teams.microsoft.us/teams |
| DoD | cloud: "USGovDoD" + serviceUrl |
https://smba.infra.dod.teams.microsoft.us/teams |
| China/21Vianet | cloud: "China" |
使用传入活动的 serviceUrl |
GCC 的示例,其中 Microsoft 文档提供了单独的主动 service URL,但 Teams SDK 不暴露单独的 GCC 云预设:
GCC High 的示例:
channels.msteams.serviceUrl 仅限于受支持的 Microsoft Teams Bot Connector 主机。配置服务 URL 时,OpenClaw 会在主动发送、编辑、删除、卡片、轮询或排队的长时间运行回复运行之前检查存储的对话 serviceUrl 是否使用同一主机。使用默认的公共云配置,如果存储的对话指向公共 Teams 连接器主机之外,OpenClaw 将拒绝这些操作。更改 cloud/service URL 设置后,从对话中接收新消息,以便存储的对话参考是最新的。
China/21Vianet 在 Microsoft 的 Teams 主动端点表中没有单独的全局主动 smba URL。配置 cloud: "China",以便 Teams SDK 使用 Azure China 的身份验证、令牌和 JWT 端点。随后,主动发送需要来自传入 China Teams 活动的已存储会话引用,或者在 Azure China Bot Framework channel 边界(*.botframework.azure.cn)上显式配置的 service URL。对于 cloud: "China",基于 Graph 的 Teams 辅助功能会被禁用,直到 OpenClaw 将 Graph 请求路由到 Azure China Graph 端点为止。
格式
Teams 的 markdown 比 Slack 或 Discord 更受限制:
- 基本格式设置:bold、斜体、
code、链接。 - 文本编辑、文件标题和最终的流式回复使用与普通消息相同的 Markdown 转换和用户提及格式。流媒体预览可能会显示未完成的 Markdown,直到最终答复取代它们。
- 复杂 markdown(表格、嵌套列表)可能无法正确渲染。
- 自适应卡支持批准提示、投票和语义表示发送(请参阅 卡片和操作)。
故障排查
常见问题
- 图像未在频道中显示: 缺少图形权限或管理员同意。重新安装 Teams 应用程序并完全安装 quit/reopen Teams。
- 频道内无回复:默认需要提及;设置
channels.msteams.requireMention=false或按 team/channel. 配置 - 版本不匹配(Teams 仍显示旧的 manifest): 移除并重新添加应用,然后完全退出 Teams 以刷新。
- 来自 webhook 的 401 未授权: 在没有 Azure JWT 的情况下手动测试时属于预期现象;这表示端点可达,但认证失败。请使用 Azure Web Chat 进行正确测试。
manifest 上传错误
- “Icon file cannot be empty”: manifest 引用了 0 字节的图标文件。请创建有效的 PNG 图标(
outline.png为 32x32,color.png为 192x192)。 - **“webApplicationInfo.Id已在使用”:**该应用程序仍然安装在另一个team/chat.中先找到并卸载它,或者等待5-10分钟传播。
- 上传时“出现问题”: 通过 https://admin.teams.microsoft.com 上传,打开浏览器 DevTools (F12) → 网络选项卡,然后检查响应正文以了解实际错误。
- 侧载失败: 尝试使用“Upload an app to your org's app catalog”而不是“Upload a custom app”;这通常可以绕过侧载限制。
RSC 权限不生效
- 确认
webApplicationInfo.id与你的 bot App ID 完全一致。 - 重新上传应用程序并重新安装在team/chat.中
- 检查你的组织管理员是否已阻止 RSC 权限。
- 确认你使用的是正确的作用域:团队使用
ChannelMessage.Read.Group,群聊使用ChatMessage.Read.Chat。
参考资料
- 创建 Azure Bot - Azure Bot 设置指南
- Teams 开发人员 Portal - create/manage Teams 应用程序
- Teams 应用清单架构
- 使用 RSC 接收通道消息
- RSC 权限参考
- Teams bot 文件处理(channel/group 需要图表)
- 主动消息发送
- @microsoft/teams.cli - 用于 bot 管理的 Teams CLI
相关内容
- Channels Overview - 所有支持的渠道
- Pairing - DM 身份验证和配对流程
- 群组 - 群聊行为和提及门控
- 通道路由 - 消息的会话路由
- Security - 访问模型和强化