Teams数据统计 - 聊天消息

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

在介绍具体 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 有对应的权限,基本就能拿到任何数据,有了数据后,我们的统计报表就简单了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vis.js

1、官网&#xff1a;http://visjs.org/docs/network/ 2、示例&#xff1a; <!doctype html>  <html>     <head>     <title>vis.js</title>     <script type"text/javascript" src"vis.js"></scri…

暑期实习面试——艾锝科技,Python实习生

远程笔试过&#xff0c;拒绝现场面转载于:https://www.cnblogs.com/qinziang/p/9123339.html

Teams App 如何使用设备的能力

我们以前讲到过&#xff0c;Teams有很多中可以扩展的方面&#xff0c;其中有一种是Tab&#xff0c;开发者可以开发一个web page/app&#xff0c;然后以tab的方式嵌入到teams里面。 除了基本的功能&#xff0c;这种tab也可以使用teams客户端设备所带的一些能力&#xff0c;比如…

实验室3

实验3.1 1 #include<stdio.h>2 int main()3 { long int sum,i;4 sum0;5 for(i22;i<1003;i20){6 sumsumi;7 }8 printf("sum%ld",sum);9 return 0; 10 } 11 1 #include<stdio.h>2 int main()3 { 4 long int…

写出整洁的高效的js代码

Variables:变量 使用有意义的可发音的变量名 Bad: var yyyymmdstr moment().format(YYYY/MM/DD);Good: var yearMonthDay moment().format(YYYY/MM/DD);使用可搜索的命名 在开发过程中&#xff0c;我们阅读代码的时间会远远超过编写代码的时间&#xff0c;因此保证代码的可读…

Teams App自定义

当我们开发的 app 被企业安装后&#xff0c;有些企业挺希望能做一些自定义&#xff0c;如果把app的图标改的更加符合企业风格一点&#xff0c;或者把app的名字改成让本企业员工更容易理解一些&#xff0c;或者把app界面的主题色改成个企业风格更加搭配一些&#xff0c;或者对于…

实验四:xl命令的常见子命令以及操作

实验名称&#xff1a; xl命令的常见子命令以及操作 实验环境&#xff1a; 这里我们需要正常安装一台虚拟机&#xff0c;如下图&#xff1a; 我们这里以一台busybox为例&#xff0c;来进行这些简单的常见的操作&#xff1b; 实验要求&#xff1a; 这里我们准备了5个常见操作&…

Teams App 扫描二维码

上篇文章我们讲了如何在app的manifest里设置设备的权限&#xff0c;这篇文章我们来实际操作开发一个可以扫描二维码的teams app。 首先&#xff0c;我们先到app studio里&#xff0c;创建一个teams app&#xff0c;然后创建tab&#xff0c;重要的一点是&#xff0c;我们确保ma…

关于我的知识星球服务

2019独角兽企业重金招聘Python工程师标准>>> 今天刚开通了我的知识星球-攻城师在路上&#xff0c;欢迎大家加入&#xff0c;目前前50名按最低费用收费50元一年&#xff0c;后面会根据人数情况调整。 希望通过这么一个圈子&#xff0c;让大家信息资源共享&#xff0c…

mysql8用户管理

查看当前登录用户&#xff1a; 创建用户&#xff1a; create user 用户名主机地址 identified with mysql_native_password by 密码; 修改密码&#xff1a; alter user 用户名主机地址 identified with mysql_native_password by 新密码; 原因是&#xff1a;在mysql 5.7.9版本以…

Teams App设备的地理位置能力

我们上一篇文章讲了如何在Teams app里扫描二维码&#xff0c;这篇文章我们来看一下如何获取当前设备的地理位置&#xff0c;并且在地图上显示地理位置。 首先&#xff0c;我们先到app studio里&#xff0c;创建一个teams app&#xff0c;然后创建tab&#xff0c;并且确保我们勾…

第4章 变量、作用域和内存问题

JavaScript高级程序设计第四章知识点梳理 1、基本类型值和引用类型值 基本类型值包括&#xff1a;Boolean、String、undefined、Number、Null 引用类型值&#xff1a;Object 注意&#xff1a;ECMAScript中所有函数的参数都是按值传递的。 2、延长作用域链 当执行流进入下列任何…

Teams App如何选择用户

当我们在开发app的时候&#xff0c;很多时候需要选择一个用户&#xff0c;比如我们开发一个审批的app&#xff0c;就要选择审批人&#xff0c;所以这个app就需要实现选择人的界面&#xff0c;而且需要获取完整的用户列表&#xff0c;但是要获取完整的用户列表又需要app拥有较高…

Python终端如何输出彩色字体

Python终端如何输出彩色字体 Python终端如何输出彩色字体 实现过程&#xff1a;终端的字符颜色是用转义序列控制的&#xff0c;是文本模式下的系统显示功能&#xff0c;和具体的语言无关。转义序列是以ESC开头,即用\033来完成&#xff08;ESC的ASCII码用十进制表示是27&#xf…

ID4收藏

IdentityServer4.Admin https://github.com/skoruba/IdentityServer4.Admin转载于:https://www.cnblogs.com/superstar/p/10757886.html

Teams Bot库的JSON

如果你和我一样&#xff0c;一直使用最新的 asp.net core 来开发teams bot的应用&#xff0c;那么你就会发现当你使用最新的 LTS 3.1版本或者 5.0 版本或者最新的 6.0 版本&#xff0c;asp.net core 默认使用System.Text.Json库&#xff0c;所以当你在处理 Teams 发送来的请求的…

码云如何上传代码

1.在码云上创建一个项目&#xff0c;具体操作很简单就不多说了 2.创建本地仓库 在本地创建一个test文件夹&#xff0c;文件夹里右键Git Bash Here, 进入git。 git init初始化本地仓库 git add . 把所有文件添加到暂存区 git commit -m “推送备注” 这里是每次推送时候写的…

v-if v-else-if v-else

1.代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>测试</title><script src"https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script> </head> <body><div id"ap…

Teams Bot如何解析和发送 at 用户

之前有好些看博客的开发者问我有什么较好的方法来解析 at 信息。用户在channel里发消息给 bot 的时候&#xff0c;通常需要 at bot的名字&#xff0c;当然在消息文字中可能还会 at 其他用户&#xff0c;比如 bot的名字是 MyBot&#xff0c;那 bot 收到的 Activity 里的 Text 值…