Microsoft Teams:如何通过MS Graph获取Teams频道中未读消息相关信息
获取Microsoft Teams频道未读消息数量或提示的方法
其实目前Microsoft Graph并没有直接返回频道未读消息列表的接口,但我们可以通过结合用户的频道已读状态和频道消息过滤来实现需求,具体步骤如下:
1. 获取用户在目标频道的最后已读时间
首先需要拿到你自己(或目标用户)在该频道的最后读取时间戳,用这个时间作为判断未读消息的分界点。调用这个接口:
GET /me/teams/{teamId}/channels/{channelId}/lastMessageReadDateTime
返回结果会是一个ISO格式的时间字符串,比如2024-05-20T14:30:00Z,这就是用户最后查看该频道消息的时间。
2. 计算未读消息数量(或判断是否有未读)
接下来用这个时间戳过滤频道中晚于该时间创建的消息,就能得到未读的内容:
- 如果要获取未读消息的数量,调用你熟悉的消息接口,加上
$filter和$count参数:
GET /teams/{teamId}/channels/{channelId}/messages?$filter=createdDateTime gt {lastReadDateTime}&$count=true
⚠️ 注意:调用这个接口时需要在请求头中添加ConsistencyLevel: eventual,否则$filter和$count无法正常工作。返回的@odata.count字段就是未读消息的数量。
- 如果只需要一个“有未读”的提示标识,不用获取全部未读消息,可以加上
$top=1来快速判断是否存在未读内容:
GET /teams/{teamId}/channels/{channelId}/messages?$filter=createdDateTime gt {lastReadDateTime}&$top=1
如果返回结果不为空,就说明有未读消息。
一些注意事项
- 权限要求:你需要申请
ChannelMessage.Read.All(读取所有频道消息)或者ChannelMessage.ReadBasic.All(读取基本消息内容)的应用权限或委派权限,具体根据你的使用场景选择。 - 已读时间的准确性:这个
lastMessageReadDateTime是用户最后主动查看频道或标记频道为已读的时间,如果用户只是滚动查看了旧消息,这个时间不会更新。
内容的提问来源于stack exchange,提问作者H Martinsen
相关产品推荐
相关产品推荐

