运动网站建设,百度网站推广服务商,学校网站建设维护,公司注册资本前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。
在介绍具体 api 如何调用前#xff0c;我们可以先看一下 Teams 里对于 Message 的层级结构#xff0c;在 Teams 里#xff0c;message有两种#xff0c;一种是 …前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。
在介绍具体 api 如何调用前我们可以先看一下 Teams 里对于 Message 的层级结构在 Teams 里message有两种一种是 Team 的 Channel 的 message一种是对一对聊天或者群聊里的 message。他们的层级设计是不同的。
Channel 里的消息
它的层次结构如下 Team - Channel - Message - Reply 一个 tenant 里有多个 Team每个 Team 里可以有多个 Channel每个 Channel 里有多个 Message每个 Message 可以有 0 到 n 个 reply消息。 所以我们使用 graph api 来获取信息的时候我们先获取 teams 列表因为 graph api目前没有一个简单的获取 team 列表的接口所以必须要用下面这个获取 group 列表的接口再加上 filter。这是一个已知的问题希望以后能被fix掉。
GET /groups?$filterresourceProvisioningOptions/Any(x:x eq Team)Response:
{odata.context: https://graph.microsoft.com/beta/$metadata#groups,value: [{id: 02bd9fd6-8f93-4758-87c3-1fb73740a315,displayName: HR Taskforce,visibility: Private...},...]
}我们有了 team 列表后就可以开始获取每个 team 的 channel。使用如下接口
GET https://graph.microsoft.com/beta/teams/{team-id}/channelsResponse:
{value: [{description: description-value,displayName: display-name-value,id: 02bd9fd6-1111-4758-87c3-1fb73740a315,....},...]
}有了 channel 后我们就可以获取 channel 里的 message 列表。
GET https://graph.microsoft.com/beta/teams/{team-id}/channels/{channel-id}/messagesResponse:
{value: [{id: 1555375673184,messageType: message,createdDateTime: 2019-04-16T00:47:53.184Z,lastModifiedDateTime: 2019-05-04T19:58:15.511Z,lastEditedDateTime: null,deletedDateTime: null,subject: ,summary: null,importance: normal,locale: en-us,from: {user: {id: bb8775a4-4d8c-42cf-a1d4-4d58c2bb668f,displayName: Adele Vance,userIdentityType: aadUser}},body: {contentType: html,content: divdivNice to join this team. at id\0\Megan Bowen/at, have we got the March report ready please?/div\n/div},attachments: [],mentions: [{mentionText: Megan Bowen,mentioned: {user: {id: 5d8d505c-864f-4804-88c7-4583c966cde8,displayName: Megan Bowen,userIdentityType: aadUser}}}],reactions: []},...]
}大家可以发现上面有用的信息非常多比如
createdDateTime, lastModifiedDateTime, lastEditedDateTime 和 deletedDateTime各种时间frommessage是谁发的mentions消息里有没有 其他人reactions消息有没有被点赞谁在什么时候点了赞或者点了什么其他表情
由于一个channel里的 message 会很多所以 graph api 还有一个分批获取 message 的接口如果对这个接口感兴趣可以参考这个文档https://docs.microsoft.com/en-us/graph/api/chatmessage-delta?viewgraph-rest-betatabshttp
GET /teams/{team-id}/channels/{channel-id}/messages/delta有了 message 后就可以获取每个 message 的replies 了。
GET /teams/{team-id}/channels/{channel-id}/messages/{message-id}/replies对一对聊天或者群聊里的 message
它的层次结构比较简单如下 User - Chat - Message 我们先需要枚举当前 tenant 下的所有的 user然后对每一个 user 调用下面的接口来获取这个用户的聊天。
GET https://graph.microsoft.com/beta/users/{user-id}/chatsResponse:
{value: [{id: 19:meeting_MjdhNjM4YzUtYzExZi00OTFkLTkzZTAtNTVlNmZmMDhkNGU2thread.v2,topic: Meeting chat sample,createdDateTime: 2020-12-08T23:53:05.801Z,lastUpdatedDateTime: 2020-12-08T23:58:32.511Z,chatType: meeting},{id: 19:561082c0f3f847a58069deb8eb300807thread.v2,topic: Group chat sample,createdDateTime: 2020-12-03T19:41:07.054Z,lastUpdatedDateTime: 2020-12-08T23:53:11.012Z,chatType: group},{id: 19:d74fc2ed-cb0e-4288-a219-b5c71abaf2aa_8c0a1a67-50ce-4114-bb6c-da9c5dbcf6caunq.gbl.spaces,topic: null,createdDateTime: 2020-12-04T23:10:28.51Z,lastUpdatedDateTime: 2020-12-04T23:10:36.925Z,chatType: oneOnOne}]
}可以看到上面的接口返回了各种对话类型 (chatType)一对一聊天 oneOnOne 群聊 group 和会议里的聊天 meeting。有了chat列表后我们就能对每一个chat来获取 message。
GET https://graph.microsoft.com/beta/users/{user-id}/chats/{chat-id}/messages这个接口返回的内容和channel message返回的内容类似。
看到这里想必大家已经发现了 teams 的强大和 graph api 的开放性只要 app 有对应的权限基本就能拿到任何数据有了数据后我们的统计报表就简单了。