通话未结束时不通过Graph API获取MS Teams通话信息的替代方法
MS Teams伪活跃通话场景数据获取方案
标准实现路径与现存缺陷
- 常规通话质量分析实现逻辑:订阅Call Records Notification并部署对应webhook,通话结束后微软会将通话详情写入数据库,触发webhook订阅推送,后续即可通过Graph API发起REST请求,获取包含通话起止时间、参会人、通话质量等字段的完整Call Record详情开展分析。
- 已知场景缺陷:若使用“始终开机PC”的用户离开办公室后未主动结束通话,通话将持续处于伪活跃状态,不会触发结束通知,无法走上述流程获取全量通话数据。
问题对应解答
1. 单用户未退出导致的伪活跃通话,能否获取已离开用户的侧端通话信息?
可以获取,无需等待整通通话完全结束。
当单个参会人离开通话时,无论整通通话是否存续,Graph API的Call Record对象会同步生成该参会人对应的participant维度会话片段。你可以调用GET /communications/callRecords/{id}/sessions接口,传入对应通话的callId,筛选endDateTime不为空的参会人会话条目,即可拿到已离开用户的身份、端侧通话质量指标(抖动、丢包率、时延、音视频质量评分等)、入离时间等全量侧端数据,不受未离会用户的状态影响。
注意:伪活跃状态下整通通话的callRecord对象endDateTime字段会持续为空,但已离会用户对应的session条目是实时落库的。
2. 是否存在不依赖Graph API Call Records能力、无需等待通话结束即可获取通话数据的API路径?
存在两类可用路径,覆盖MS Teams和旧版Skype for Business场景:
- MS Teams场景:
- 调用
GET /users/{id}/onlineMeetings/attendanceReports接口,可在会议/通话进行中实时拉取参会人列表、参会时长维度的统计数据; - 对接Graph通信模块下的实时遥测订阅能力,可订阅用户级别的通话质量实时事件,通话过程中就能收到每一位参会人端的质量指标上报,完全不需要等待通话结束,也不依赖Call Record结束触发的通知。
- 调用
- 旧版Skype for Business场景:
直接调用Skype for Business Server的QoE(体验质量)报告接口,该接口直接对接Skype部署侧的QoE数据库,支持按用户、按时间范围拉取历史及进行中的通话质量数据,不依赖Graph API的Call Records能力,也无需等待通话完全终止即可拿到已产生的所有通话片段数据。
调用上述所有接口前,需要提前申请对应权限,例如
CallRecords.Read.All、OnlineMeetings.Read.All这类应用或委托权限,否则会返回权限不足错误。
内容的提问来源于stack exchange,提问作者ingo_ww
相关产品推荐
相关产品推荐

