使用ACS接入Teams群组通话媒体流的可行性及实现方案咨询
问题解答
支持情况
以ACS Call Automation应用身份无交互接入Teams群组通话并获取媒体流的场景是支持的,无需以额外用户身份加入。
实现步骤
- 获取Teams群组通话上下文:
从Teams侧提取目标群组通话的callId和会议链接/meetingId。如果你的Teams Bot已具备通话处理能力,可通过Bot的通话事件(如callStarted)获取这些信息;也可通过Graph API查询目标会议详情拿到对应参数。 - 用ACS Call Automation发起接入请求:
放弃常规CallInvite对象,改用ACS的JoinMeetingCall接口,传入Teams会议上下文参数。核心是构造包含会议信息的JoinMeetingCallOptions,C#示例代码如下:var callClient = new CallClient(); var callAutomationClient = callClient.GetCallAutomationClient("<ACS资源连接字符串>"); var joinOptions = new JoinMeetingCallOptions( new Uri("<Teams会议链接/meetingId>"), new CallLocator("<Teams通话callId>"), new CommunicationUserIdentifier("<ACS应用身份ID>") ); // 订阅音频媒体流,用于后续转录 joinOptions.MediaSubscription = new MediaSubscription(MediaType.Audio); var callConnection = await callAutomationClient.JoinMeetingAsync(joinOptions); - 订阅并处理媒体流:
ACS成功接入通话后,会触发MediaStreamingStarted等媒体相关事件,监听这些事件即可获取音频流数据,对接转录服务生成文本。需确保ACS资源已配置媒体流处理能力,且接入时明确订阅音频类型。 - 配置权限:
在Azure AD中为ACS服务主体授予OnlineMeeting.JoinAsGuest.All类应用权限,同时确认Teams会议允许外部应用接入(部分组织需调整会议设置)。
注意事项
- 全程以ACS应用身份接入,无需创建额外Teams用户,无交互操作。
- 媒体流处理需在ACS侧配置对应媒体服务或自定义逻辑,确保能接收并处理音频数据。
- 若通过Teams Bot触发ACS接入,需保障两者通信安全,防止上下文信息泄露。
内容的提问来源于stack exchange,提问作者user1515791
相关产品推荐
相关产品推荐

