You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Microsoft Graph订阅Teams机器人的一对一聊天消息通知?

如何通过MS Graph API接收Teams机器人一对一聊天消息的事件通知

一、关于appCatalogs/teamsApps/{installed-app-id}/installedToChats/getAllMessages订阅无效的问题

目前Beta版的appCatalogs/teamsApps/{installed-app-id}/installedToChats/getAllMessages订阅端点不支持个人上下文的一对一聊天消息。该端点设计目标覆盖机器人被安装到群聊场景的消息,用户与机器人的一对一聊天属于个人上下文会话,不在其覆盖范围内,因此无法通过此订阅接收这类消息。

二、获取所有安装机器人的用户的Chat ID

你提到的GET /beta/appCatalogs/teamsApps/{installed-app-id}/installedToChats目前未正式实现,无法获取相关Chat ID,可通过以下两种方式解决:

1. 实时捕获机器人安装事件

当用户将机器人添加到个人上下文时,Teams会向机器人的webhook地址发送conversationUpdate事件。事件的conversation字段包含对应Chat ID,可在机器人的事件处理逻辑中捕获该ID,用于后续创建消息订阅。

示例事件片段:

{
  "type": "conversationUpdate",
  "conversation": {
    "id": "19:xxxxxx@unq.gbl.spaces",
    "conversationType": "personal"
  },
  "membersAdded": [
    {
      "id": "{bot-app-id}"
    }
  ]
}

2. 批量查询所有包含机器人的聊天

若需回溯已安装机器人的Chat ID,可使用应用权限Chat.Read.All调用以下Graph API,筛选出所有包含机器人成员的聊天:

GET https://graph.microsoft.com/beta/chats?$filter=members/any(m: m/id eq '{bot-app-id}')&$select=id,conversationType

返回结果需通过conversationType字段筛选出personal类型的会话,即一对一聊天。

三、实现一对一聊天消息通知的正确方案

目前MS Graph API无法通过单个全局订阅接收所有机器人所在一对一聊天的消息,需采用逐个聊天订阅的方式,结合实时安装事件或批量查询覆盖所有会话:

步骤1:获取目标Chat ID

通过上述两种方式(实时捕获安装事件或批量查询),获取所有机器人所在的一对一Chat ID。

步骤2:创建单个聊天的消息订阅

针对每个Chat ID,创建chats/{chat-id}/messages的订阅,示例请求如下:

curl -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' --data-binary '{                                              
       "changeType": "created",
       "notificationUrl": "EventHub:<kv-secret-uri>?tenantId=<tenant-uuid>",
       "lifecycleNotificationUrl": "EventHub:<kv-secret-uri>?tenantId=<tenant-uuid>",
       "resource": "chats/<chat-id>/messages",
       "expirationDateTime":"2023-10-19T12:00:00.000000Z",
       "clientState": "secretClientValue",
    }' https://graph.microsoft.com/beta/subscriptions

权限验证

确保应用具备以下权限:

  • 应用权限:ChatMessage.Read.All 或 Chat.ReadWrite.WhereInstalled(优先使用后者,符合最小权限原则)
  • 资源特定权限(RSC):ChatMessage.Read.Chat(已在manifest中配置,需确保在Teams Admin Center完成权限审批)

补充说明

  • 订阅的expirationDateTime最长为3天,需实现自动续期逻辑,避免通知中断。

内容的提问来源于stack exchange,提问作者Bittrance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:47:45