如何通过Graph API等途径获取所有Teams通话与会议的通话质量数据
Microsoft Graph Teams通话记录全量获取问题复盘
背景
此前研究获取企业内部所有Teams音视频通信质量的方案,遇到运行时异常时使用了旧版的视频创建源码,该问题后续可修复,但并非仅收到部分通知而非全量通知的原因。
尝试通过变更通知获取callRecords时仅部分生效,无法收到全量通知,且端点处理程序的运行时长超过半天(印象中为12、14或16小时)。
预期逻辑与缺失数据
按照规则,所有云通信音视频通话都可以通过https://graph.microsoft.com/beta/communications/callRecords/访问,如果CallRecord属于会议类型,会设置joinWebURL字段,可将该字段加入过滤条件以获取对应的会议数据。
目前缺失的数据包括:
- 所有在线会议数据
- 部分群组呼叫、直接路由呼叫数据
- PSTN呼叫尚未测试
已完成配置
订阅配置
创建的订阅配置如下:
{ "changeType": "created,updated", "notificationUrl": "https://a283-178-27-237-107.ngrok.io/api/notifications", "resource": "/communications/callRecords", "expirationDateTime": "2021-08-29T11:00:00.0000000Z" }
每次创建或续订订阅时都使用了最长4230分钟的有效期,也尝试过短有效期+定期续订的方案。
应用权限配置
注册应用的权限配置如下:
// add permissions to registered app CallRecord-PstnCalls.Read.All CallRecords.Read.All Calls.AccessMedia.All Directory.Read.All OnlineMeetings.Read.All OnlineMeetings.ReadWrite.All Reports.Read.All User.Read.All (OnlineMeetings相关权限仅短期添加过)
已经通过PowerShell为该应用配置了应用访问策略。
排查过程
后续尝试通过Teams管理中心的通话记录历史获取CallRecords,但是其中的ID仅对创建会议或呼叫的用户部分生效。
排查中收到了Forbidden、无效令牌等报错,判断应用是按委派权限运行,但实际配置的是应用权限,这也能解释无法获取全量CallRecords的原因:如果为拥有应用权限的应用创建订阅,webhook应该在每次通话时被触发。
当时的核心问题为两个:
- 为什么无法收到全量通知?
- 如何获取适用于应用权限而非委派权限的有效访问令牌?
问题更新
- 阶段性更新:后续已可收到全量通知,上述两个核心问题不再相关,但使用Postman访问订阅时,无论怎么尝试都无法获取有效令牌(OAuth2认证、从notificationUrl处理程序复制令牌都试过),判断是应用访问策略的影响,寻找对应的解决方案。
- 2021年9月15日最终更新:CallRecords功能现在运行正常,问题出在Postman环境配置上。按照官方Postman使用步骤操作,使用应用权限创建订阅后,已经可以收到全量通知。目前全量通知获取功能正常,问题关闭。
内容的提问来源于stack exchange,提问作者ingo_ww
相关产品推荐
相关产品推荐

