Teams数据统计 - 通话记录

上篇文章介绍了如何获取用户的在线状态,这篇文章我们记录介绍如何统计用户通话记录。

首先,Teams为了安全,它要求 app 要有 CallRecords.Read.All 权限。然后就可以通过这个api来获取 call record。

GET /communications/callRecords/{id}

这个接口会返回类似如下的数据:

{"@odata.context": "https://graph.microsoft.com/beta/$metadata#communications/callRecords/$entity","version": 1,"type": "groupCall","modalities": ["audio"],"lastModifiedDateTime": "2020-12-25T19:00:24.582757Z","startDateTime": "2020-12-25T18:52:21.321Z","endDateTime": "2020-12-25T19:52:46.123Z","id": "e523d2ed-1111-4b6b-925b-754a88034cc5","organizer": {"user": {"id": "821809f5-0000-0000-0000-3b5136c0e777","displayName": "Abbie Wilkins","tenantId": "dc368399-474c-4d40-900c-6265431fd81f"}},"participants": [{"user": {"id": "821809f5-0000-0000-0000-3b5136c0e777","displayName": "Abbie Wilkins","tenantId": "dc368399-474c-4d40-900c-6265431fd81f"}},...]
}

可以看到,我们能通过 organizer 和 participants 来找到参与这个通过的参与人,我们可以记录下用户的 user id,同时我们还可以通过 startDateTime 和 endDateTime 来取得这次 call 的开始和结束时间。

实际上 Teams 里的 call record 比我们想象的复杂很多,一个call里可能有多个 session 组成,我们用一张官方的数据模型图看一下。

TeamsStatistics

 

我们可以给上面这个 api 加上参数来获取 session。

GET https://graph.microsoft.com/beta/communications/callRecords/{id}?$expand=sessions
{"@odata.context": "https://graph.microsoft.com/beta/$metadata#communications/callRecords(sessions(segments()))/$entity","startDateTime": "2020-02-25T18:52:21.2169889Z","endDateTime": "2020-02-25T18:52:46.7640013Z","organizer": { ... },"participants": [ ... ],"sessions": [{"modalities": ["audio"],"startDateTime": "2020-02-25T18:52:21.2169889Z","endDateTime": "2020-02-25T18:52:46.7640013Z","id": "e523d2ed-2966-4b6b-925b-754a88034cc5","caller": {"@odata.type": "#microsoft.graph.callRecords.participantEndpoint","userAgent": {"@odata.type": "#microsoft.graph.callRecords.clientUserAgent","headerValue": "RTCC/7.0.0.0 UCWA/7.0.0.0 AndroidLync/6.25.0.27 (SM-G930U Android 8.0.0)","platform": "android","productFamily": "skypeForBusiness"},"identity": {"@odata.type": "#microsoft.graph.identitySet","user": {"id": "821809f5-0000-0000-0000-3b5136c0e777","displayName": "Abbie Wilkins","tenantId": "dc368399-474c-4d40-900c-6265431fd81f"}}},"callee": {"@odata.type": "#microsoft.graph.callRecords.participantEndpoint","userAgent": {"@odata.type": "#microsoft.graph.callRecords.clientUserAgent","headerValue": "UCCAPI/16.0.12527.20122 OC/16.0.12527.20194 (Skype for Business)","platform": "windows","productFamily": "skypeForBusiness"},"identity": {"user": {"id": "f69e2c00-0000-0000-0000-185e5f5f5d8a","displayName": "Owen Franklin","tenantId": "dc368399-474c-4d40-900c-6265431fd81f"}},"feedback": {"rating": "poor","tokens": {"NoSound": false,"OtherNoSound": false,"Echo": false,"Noisy": true,"LowVolume": false,"Stopped": false,"DistortedSound": false,"Interruptions": false}}}}]
}

从上面返回的json可以看到,session里有 startDateTime 和 endDateTime。还有 caller 和 callee,我们用这些数据来进行进一步的深入统计,而且可以看到里面还有每个用户参与这个通话是使用的设备(userAgent.platform),更有意思的是,这里面还有 feedback,里面有这个用户这次通话中音质是好还是差,有没有噪音等等。有了这些信息,相信大家脑海里已经有了大量的可以统计的点了。

各位看到这里,可能会问,上面的接口是获取某一次 call record 的,那我如何获取所有的记录呢?

这里就需要用到 graph api 的订阅功能。

POST https://graph.microsoft.com/beta/subscriptions
{"changeType": "created","notificationUrl": "https://<<your api url>>","resource": "/communications/callRecords","expirationDateTime":"2016-11-20T18:23:45.9356913Z","clientState": "secretClientValue","latestSupportedTlsVersion": "v1_2"
}

上面的 resource 是 /communications/callRecords,表明如果有任何一个call发生,graph api会回调我们的接口。上面的 "notificationUrl": "https://<<your api url>>" 是你的服务的回调 url,我们可以在这个接口里得到相应的 call record id,并且记录下来,等一段时间call 结束后,就可以获取整个call的信息了。

 

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

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

相关文章

解决JS浮点数(小数)计算加减乘除的BUG

2019独角兽企业重金招聘Python工程师标准>>> //浮点数减法运算function FloatSub(arg1,arg2){var r1,r2,m,n;try{r1arg1.toString().split(".")[1].length}catch(e){r10}try{r2arg2.toString().split(".")[1].length}catch(e){r20}mMath.pow(10…

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…

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;并且确保我们勾…

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…

关于Elemet-ui组件Cascader中proper的配置问题

最近做一个地区的二级联动用上了Cascader组件&#xff0c;但是我的城市数据结构跟他 options的默认的结构不太一样&#xff1b; 默认的结构如下&#xff1a; 我的数据结构是&#xff1a; 先说我的解决办法&#xff1a; 一看我的数据结构跟他默认的数据结构不对劲&#xff0c;我…

将Teams app升级到net6

net6 发布已经有一个多月了&#xff0c;因为我的LuckyDraw app是使用Azure app service&#xff0c;当时我查了一下app service还没有ready&#xff0c;昨天我又查看了一下&#xff0c;发现app service已经默认装了net6。 那就是时候升级我的LuckyDraw了&#xff0c;如果大家的…

作为程序猿,一定要知道的电脑快捷键和Eclipse快捷键

2019独角兽企业重金招聘Python工程师标准>>> 转载自&#xff1a;Java资源社区 1. F2 当你选中一个文件的话&#xff0c;这意味着“重命名”2. F5 刷新3. CTRLF5 强行刷新4. F12另存为5. Alt &#xff0b;F4 关闭程序6. Home首行7. Ctrl Home游标移动到文字编辑的开…

QCustomplot(一) 能做什么事

阅读目录 一、QCustomPlot简介二、效果预览三、源码下载四、相关文章回到顶部一、QCustomPlot简介 之前在Qt之自绘制饼图这篇文章的说明中我简单的描述了下目前依赖于qt的第三方绘图库&#xff0c;此后我会针对自己使用QCustomPlot的情况做一总结&#xff0c;以方便大家参考 QC…

shiro(一)简介、理论知识

2019独角兽企业重金招聘Python工程师标准>>> 开涛学shiro&#xff1a;http://jinnianshilongnian.iteye.com/blog/2018398 shirospirngmvc参考: https://www.cnblogs.com/sharpest/p/5865732.html http://peirenlei.iteye.com/blog/2086639 https://blog.csdn.net/c…

Teams 的 Meeting App

Teams 的 Meeting App 已经正式推出了一段时间&#xff0c;相应的文档也已经较为完善了&#xff0c;我接下来会写一系列的文章&#xff0c;来介绍如何开发一个自己的Meeting app。这篇文章作为这个系列的第一篇&#xff0c;将介绍 meeting app 是如何被使用的&#xff0c;有哪些…

开发第一个Meeting App

今天我们来看一下如何使用c# net6 来开发一个 teams的 meeting app。首先先确保本地安装了最新版本的 net6。创建一个目录&#xff0c;然后在目录下输入下面的命令行&#xff0c;让 dotnet 来生成一个初步的asp.net core 代码框架。 dotnet new razor代码框架生成如下的目录和…

solrCloud搭建

一.什么是solrCloud&#xff1f; SolrCoud(solr云)是solr提供的分布式搜索方案。当一个系统搜索请求并发很高的时候&#xff0c;就需要使用solrCloud来满足这些需求 solrCloud是基于solr和zookeeper的分布式的搜索方案&#xff0c;它的主要思想是使用zookeeper作为挤集群配置的…