如何准确获取Microsoft Teams会议(含recurring系列实例)的StartDateTime
问题:精准获取单实例/Recurring会议实例的StartDateTime
背景
- 已配置Microsoft callTranscript事件通知,完成CAP及应用权限配置
- 会议录制结束后,会收到Microsoft推送的转录通知,包含
UserId、MeetingId、ContentId三个核心字段 - 当前通过MS Graph API的
GET /onlineMeetings/{meetingId}接口获取会议详情
遇到的问题
- 当会议是recurring series的一个实例时,上述接口返回的
StartDateTime和EndDateTime属于系列主会议,而非当前实际召开的实例时间 - 尝试通过Calendar View接口查询准确时间,但无法可靠关联OnlineMeeting与CalendarView的结果:
- 解码OnlineMeeting返回的MeetingId后可匹配
joinUrl,但CalendarView可能返回多个拥有相同joinUrl的条目 - 通过会议主题匹配的方式也不可靠(主题可能修改或重复)
- 解码OnlineMeeting返回的MeetingId后可匹配
解决方案
1. 借助seriesMasterId关联主会议与实例
如果调用GET /onlineMeetings/{meetingId}返回的会议是recurring实例,响应中会包含seriesMasterId字段:
- 先用该ID调用
GET /onlineMeetings/{seriesMasterId}获取系列主会议的信息 - 再结合转录通知的大致时间(比如会议结束的时间节点),调用Calendar View查询该主会议下的所有实例,筛选出对应时间的条目
2. 扩展Calendar View查询,通过OnlineMeeting ID直接匹配
调用Calendar View时,通过$expand=onlineMeeting参数让每个日历事件携带对应的在线会议信息,再用$filter直接匹配目标MeetingId,精准定位实例:
GET /users/{userId}/calendarView?startDateTime={起始时间范围}&endDateTime={结束时间范围}&$expand=onlineMeeting&$filter=onlineMeeting/id eq '{你的MeetingId}'
- 时间范围建议设置为会议结束前后1-2天,确保覆盖目标实例的时间区间
- 返回的日历事件就是对应会议实例的记录,直接取
StartDateTime和EndDateTime即可
3. 检查OnlineMeeting接口的实例时间返回
直接调用GET /onlineMeetings/{meetingId}?$select=startDateTime,endDateTime,seriesMasterId,isOnlineMeeting,recurrence,如果该MeetingId本身就是实例ID,部分版本的Graph API会直接返回该实例的准确时间。可通过响应中的recurrence字段判断是否为recurring实例,进一步验证时间有效性。
内容的提问来源于stack exchange,提问作者yodellingbutters
相关产品推荐
相关产品推荐

