热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Teams数据统计聊天消息

前两篇文章介绍了如何对用户的在线状态和通话记录进行数据统计。这篇文章我们来看看如何统计用户的聊天消息。在介绍具体api如何调用前,我们可以先看一下Teams里对于Message的层

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

在介绍具体 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": "

Nice to join this team. Megan Bowen, have we got the March report ready please?
\n
"
},
"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 有对应的权限,基本就能拿到任何数据,有了数据后,我们的统计报表就简单了。



推荐阅读
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
author-avatar
孔阳kyy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有