Skip to content

本文档由 AI 编写,已经人工审核。

Microsoft Teams

Teams 驱动器通过 Azure Bot Framework 将 Microsoft Teams 与其他平台桥接。它运行一个 HTTP 服务器接收 Teams 推送的消息,并使用 Bot Connector REST API 发送回复。

前置条件

  1. Azure 门户 创建一个 Azure Bot 资源。
  2. 在机器人资源中,记录 应用程序(客户端)ID,并在 证书和密钥 下创建一个 客户端密钥
  3. 通道 中,添加 Microsoft Teams 通道。
  4. 将机器人的 消息传递终结点 设置为 https://<your-host>:<listen_port><listen_path>。 终结点必须通过 HTTPS 公开可访问(开发阶段可使用 nginx 反向代理或 ngrok / Cloudflare Tunnel 等隧道工具)。

配置项

config.jsonteams.<instance_id> 下添加:

必填默认值说明
app_idAzure 机器人应用程序(客户端)ID
app_secretAzure 机器人客户端密钥
listen_port3978驱动器监听传入 Activity 的端口
listen_path"/api/messages"消息传递终结点的 HTTP 路径
max_file_size20971520附件大小上限(字节),默认 20 MB
proxy所有 Teams API 请求的代理 URL(例如:http://proxy.example.com:8080socks5://proxy.example.com:1080)。设置为 null 可显式禁用此实例的代理(忽略全局代理设置)。
json
{
  "teams": {
    "my_teams": {
      "app_id":     "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "app_secret": "your-client-secret"
    }
  }
}

规则通道键

说明
service_url来自传入 Activity 的 Bot Framework 服务 URL(例如 "https://smba.trafficmanager.net/amer/"
conversation_id来自传入 Activity 的 Teams 会话 ID

这两个值在驱动器收到的每条消息中均自动存在。可从日志中复制,或使用 webhook 捕获工具在收到第一条消息时获取。

json
{
  "teams": {
    "my_teams": {
      "service_url":     "https://smba.trafficmanager.net/amer/",
      "conversation_id": "19:abc123@thread.tacv2"
    }
  }
}

工作原理

接收: 驱动器启动 aiohttp HTTP 服务器。用户在 Teams 中发送消息时,Bot Framework 将 JSON Activity POST 到该终结点。驱动器会:

  • 忽略非消息事件(正在输入提示、表情回应等)
  • 从消息正文中去除 @机器人 的提及文本
  • 跳过机器人自身发送的消息(通过 28: ID 前缀识别)
  • 将规范化消息转发到桥接核心

发送: 对于每条出站消息,驱动器会:

  1. 从 Microsoft Identity 获取 OAuth2 客户端凭据令牌(自动缓存并刷新)
  2. {service_url}/v3/conversations/{conversation_id}/activities POST 一个 message Activity
  3. 对于图片,发送嵌入 base64 图像的 Adaptive Card
  4. 对于其他文件类型,发送文本标签 [类型: 文件名](Teams 文件上传需要 SharePoint 集成,单纯 REST API 无法实现)

注意事项

  • 消息传递终结点在生产环境中必须使用 HTTPS;Teams 会拒绝纯 HTTP 终结点。
  • service_url 因租户所在区域而异,请使用该会话第一条传入 Activity 中返回的值。
  • rich_header 前缀使用 Markdown 粗体/斜体格式(**标题** · *内容*)渲染。
  • Teams 对 Adaptive Card 有约 28 KB 的载荷限制,超大图片将改为文本标签发送。