前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。

在介绍具体 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?$filter=resourceProvisioningOptions/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}/channels
Response:
{"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}/messages
Response:
{"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": "<div><div>Nice 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": []},...]
}

大家可以发现上面有用的信息非常多,比如:

  • createdDateTimelastModifiedDateTimelastEditedDateTime 和 deletedDateTime,各种时间
  • from:message是谁发的
  • mentions:消息里有没有 @ 其他人
  • reactions:消息有没有被点赞,谁在什么时候点了赞或者点了什么其他表情

由于一个channel里的 message 会很多,所以 graph api 还有一个分批获取 message 的接口,如果对这个接口感兴趣,可以参考这个文档:https://docs.microsoft.com/en-us/graph/api/chatmessage-delta?view=graph-rest-beta&tabs=http

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}/chats
Response:
{"value": [{"id": "19:meeting_MjdhNjM4YzUtYzExZi00OTFkLTkzZTAtNTVlNmZmMDhkNGU2@thread.v2","topic": "Meeting chat sample","createdDateTime": "2020-12-08T23:53:05.801Z","lastUpdatedDateTime": "2020-12-08T23:58:32.511Z","chatType": "meeting"},{"id": "19:561082c0f3f847a58069deb8eb300807@thread.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-da9c5dbcf6ca@unq.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 有对应的权限,基本就能拿到任何数据,有了数据后,我们的统计报表就简单了。

Teams数据统计 - 聊天消息相关推荐

  1. Teams数据统计 - 用户在线离线状态

    前几天我在wechat的moments里看到以为朋友发了腾迅会议的对用户个人的年度数据统计,看上去很有大数据感.    实际上 Teams 也具备的类似的能力,只是它把这个能力开放给了开发人员,我们可 ...

  2. Teams数据统计 - 通话记录

    上篇文章介绍了如何获取用户的在线状态,这篇文章我们记录介绍如何统计用户通话记录. 首先,Teams为了安全,它要求 app 要有 CallRecords.Read.All 权限.然后就可以通过这个ap ...

  3. 技术干货 | 如何在 Electron 上实现 IM SDK 聊天消息全文检索

    导读:在 IM 场景的客户端需求上,基于本地数据的全文检索(Full-text search)扮演着重要的角色.本文具体来聊聊网易云信是如何实现全文检索的. 文|李宁 网易云信高级前端开发工程师 所谓 ...

  4. 浅析直播间海量聊天消息的架构设计难点

    在视频直播场景中,弹幕交互.与主播的聊天.各种业务指令等等,组成了普通用户与主播之间的互动方式. 从技术的角度来看,这些实时互动手段,底层逻辑都是实时聊天消息或指令的分发,技术架构类比于IM应用的话, ...

  5. IM开发干货分享:网易云信IM客户端的聊天消息全文检索技术实践

    1.引言 在IM客户端的使用场景中,基于本地数据的全文检索功能扮演着重要的角色,最常用的比如:查找聊天记录.联系人,就像下图这样. ▲ 微信的聊天记录查找功能 类似于IM中的聊天记录查找.联系人搜索这 ...

  6. 个推数据统计产品(个数)iOS集成实践

    2019独角兽企业重金招聘Python工程师标准>>> 最近业务方给我们部门提了新的需求,希望能一站式统计APP的几项重要数据.这次我们尝试使用的是个推(之前专门做消息推送的)旗下新 ...

  7. Android QQ、微信聊天消息界面设计原理与实现

     原理:Android平台上,典型的以腾讯的QQ.微信这些聊天消息界面通常可以采用ListView设计与实现,需要使用ListView 适配器Adapter的getItemViewType()和g ...

  8. 移动端数据统计,精细化运营的永动机

    2019独角兽企业重金招聘Python工程师标准>>> 前言 随着移动互联网市场快速发展,以往"跑马圈地"式的粗犷运营时代已成为过去时.大环境的改变,也导致移动端 ...

  9. 【转】编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。...

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

最新文章

  1. 学python有什么好处 学完可以做什么
  2. Linux基础第一周
  3. iPhone常用设置
  4. python实现进度条的3种方式
  5. 花式看超级碗 人工智能、大数据在碗里
  6. 怎么查询局域网内全部电脑IP和mac地址..
  7. 【Python CheckiO 题解】I Love Python!
  8. Tensorflow新手通过PlayGround可视化初识神经网络
  9. 【转】通过IRQL看NT内核
  10. ===,!==,==,!=的使用
  11. 有序表的索引顺序结构查找次数分析
  12. 团队-象棋游戏-开发环境搭建过程
  13. 数据结构题集c语言版答案严蔚敏第二章,数据结构习题集答案(C语言版严蔚敏)2(可编辑).doc...
  14. 电脑上怎样安装python,【初学者教程】在电脑上安装Python,写第一个程序
  15. Gym 10102B 贪心
  16. 100个python算法超详细讲解:掷骰子
  17. leetcode——control reaches end of non-void function
  18. 【Redis】布隆过滤器
  19. 一鲸落万物生,公链还需看Hoo Smart Chain,六十余家项目报名万物生长计划
  20. java之Mybatis(实训笔记)

热门文章

  1. 读源码,对程序员重要吗?
  2. Linux文本截取命令cut​笔记
  3. 这份网约车安全乘车指南,请务必收下!
  4. Vim和Vi的常用命令
  5. String equals()方法 源码分析
  6. 你知道source map如何帮你定位源码么?
  7. Python--day60--一个简单(不完整)的web框架
  8. faster rcnn训练过程讲解
  9. 第十一篇:(顺序)容器的好伴侣 --- 容器适配器
  10. 第一轮复习完毕,kmp走起