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

首先,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 组成,我们用一张官方的数据模型图看一下。

我们可以给上面这个 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的信息了。

Teams数据统计 - 通话记录相关推荐

  1. Teams数据统计 - 聊天消息

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

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

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

  3. 循环、格式化输出、数据统计

    主要内容: for循环 while循环 格式化输出(2) 数据统计及记录 ############################################################# 1 ...

  4. 学术前沿趋势分析_学习_论文数据统计Task1

    论文数据统计学习记录 任务说明 分析说明 1. 获得方法:**==使用python 爬虫爬取数据集==** 2. 这里**==使用正则化加以限制==** 3. 判断数据是否存在 4. json文件的设 ...

  5. 大数据项目(二)————某电信公司通话记录改造

    1.项目介绍 某互联网公司面向APP应用开发者提供的,以品牌互推.流量互导.广告分账为主的一站式服务平台. 将通话记录数据由原来的oracle系统改造成使用大数据架构解决方案.主要使用hbase做通话 ...

  6. 离线分析:Flume+Kafka+HBase+Hadoop通话数据统计

    文章目录 项目背景 项目架构 系统环境 系统配置 框架安装 JDK Hadoop Zookeeper Kafka Flume HBase 项目实现 项目结构 表设计 HBase Mysql 功能编写 ...

  7. 多条记录取最近日期的一条_Excel VBA:基于员工打卡记录的考勤数据统计

    微信公众号:金融数学 使用VBA做一个基于员工打卡记录的考勤数据分析工具; 1应用场景 某公司通过门禁系统记录了每位员工上下班打卡时间,现在需要对一段特定时间内员工出勤情况进行统计分析,包含加班时间( ...

  8. dataframe记录数_大数据系列之Spark SQL、DataFrame和RDD数据统计与可视化

    Spark大数据分析中涉及到RDD.Data Frame和SparkSQL的操作,本文简要介绍三种方式在数据统计中的算子使用. 1.在IPython Notebook运行Python Spark程序 ...

  9. 城市智慧路灯综合管理平台、图监控、灯箱实时监控、策略管理、故障报警、灯具管理、数据统计、故障分析、开关灯记录分析、区域管理、分组管理、DIV+CSS布局设计、HTML/Bootstrp/jQuery

    源码类别: 后台模板     文件大小: 21.5 MB    源码内容:城市智慧路灯综合管理平台后台模板 前端技术: HTML/CSS/Bootstrap/jQuery    模板语言: 简体中文  ...

最新文章

  1. mybatis 大于小于转义_10 HTML5特性、转义字符和注释
  2. 怎么获取codeforces的数据_原创 | codeforces 1417C,逆向思考的数据结构题
  3. linux动态库文件.so为什么有多个版本号?(多个名字)(小版本升级)
  4. C#内存泄露与资源释放 经验总结
  5. 你的目的是什么是谁指使你_电视剧《谁说我结不了婚》第25-27集剧情:魏书帮程璐搞定投资人...
  6. html图片自动切换的幻灯片效果的,js带点自动图片轮播幻灯片特效代码分享
  7. php cii订单导出,使用 kingcms.php 建立一个留言本【附模型代码】
  8. SpringBoot 一个依赖搞定 session 共享,没有比这更简单的方案了!
  9. 阿里云存储负责人吴结生:我经历的三个重大决策
  10. 【路径规划】基于matlab粒子群算法机器人栅格路径规划【含Matlab源码 018期】
  11. 内容管理系统CMS学习总结
  12. 阿里云运行python_使用阿里云运行python
  13. 罗技鼠标驱动怎么下载?
  14. 1988-2020年各省、分城乡基尼系数、基尼系数计算及相关经典文献、1978-2019年中国省市恩格尔系数表、泰尔指数计算模板、208个地级市和31个省、市城乡泰尔指数
  15. IV 估计:工具变量不外生时也可以用!
  16. NanoHTTPD 获取请求ip
  17. abd串口工具使用教程_adb调试工具包(adb调试程序)
  18. transition参数css,css3的transition属性详解
  19. 电脑开两个及以上微信
  20. 如何设置跨网段共享打印机?

热门文章

  1. 【高并发】面试官:性能优化有哪些衡量指标?需要注意什么?
  2. 程序大佬和菜鸟的区别,太准确了!
  3. 两张趣图助你理解状态码的含义~
  4. html鼠标悬停区域拉伸,html – :将鼠标悬停在具有边框半径的div上
  5. JDK 8 新特性 之 方法引用
  6. Java 面向对象的程序设计(二)
  7. Vue多个组件映射到同一个组件,页面不刷新?
  8. Spring Bean默认配置为单实例 Spring Bean生命周期
  9. openstack 中国联盟公开课參会总结
  10. 定制安装centos6.4系统 上汽集团线上环境