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

如何获取Microsoft Teams中消息的已读回执信息:Teams应用开发场景下机器人消息已读状态查询咨询

嘿,这个需求完全可行!在Microsoft Teams生态里,针对机器人发送的消息,确实有成熟的方案来追踪收件人的读取时间,下面我给你拆解具体的实现路径:

一、先明确核心能力支持

Teams平台原生支持消息已读回执功能,机器人发送的消息也不例外——不管是一对一私聊还是团队频道消息,都能通过官方提供的API或事件机制获取到用户的读取状态和具体时间。

二、具体技术解决方案

1. 事后查询:使用Microsoft Graph API拉取已读回执

如果需要批量查询历史消息的读取情况,或者在用户读取后异步获取数据,Graph API是最直接的选择:

  • 关键前提:机器人发送消息时,一定要保存返回的messageId(这是后续查询的唯一标识)。
  • 接口区分场景:
    • 团队频道消息:调用 GET /teams/{team-id}/channels/{channel-id}/messages/{message-id}/readReceipts
    • 一对一私聊:调用 GET /chats/{chat-id}/messages/{message-id}/readReceipts
  • 权限要求:需要在Azure AD中为机器人应用配置ChannelMessage.Read.All(频道场景)或ChatMessage.Read.All(私聊场景)的应用权限,并完成管理员同意。
  • 返回结果:接口会返回所有读取该消息的用户信息,其中readDateTime字段就是用户读取消息的具体时间戳。

示例请求(频道场景):

GET https://graph.microsoft.com/v1.0/teams/19%3Aabc123@thread.tacv2/channels/19%3Adef456@thread.tacv2/messages/16987654321/readReceipts

2. 实时监听:通过Bot Framework捕获messageRead事件

如果需要实时获取用户读取消息的通知,可以直接在机器人代码里监听Teams推送的messageRead事件:
当用户打开聊天窗口并读取了机器人发送的消息后,Teams会主动向机器人发送一个事件通知,包含消息ID、读取用户ID和读取时间。

以Node.js的Bot Framework代码为例:

this.onEvent(async (context, next) => {
    // 判断是否为消息已读事件
    if (context.activity.name === 'messageRead') {
        const { messageId, readDateTime } = context.activity.value;
        const readerId = context.activity.from.id;
        
        // 这里可以将读取记录存入你的业务数据库
        console.log(`用户 ${readerId} 于 ${readDateTime} 读取了消息 ${messageId}`);
    }
    await next();
});

3. 重要注意事项

  • 权限配置要到位:无论是Graph API还是事件监听,都必须确保机器人应用在Azure AD中拥有对应的权限,否则会出现访问被拒绝的错误。
  • 历史消息限制:对于超过一定时长的历史消息,可能无法获取到已读回执数据,具体限制可以参考Teams官方文档的说明。
  • 延迟问题:messageRead事件的推送可能存在几秒的延迟(取决于Teams客户端的同步频率),如果需要绝对实时的场景,建议结合Graph API做兜底校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:02:32