NodeJs+React集成ACS视频呼叫如何查询会话、强制结束及配置回调
ACS 视频呼叫集成功能实现方案
功能落地说明
以下是你提到的4个需求的具体实现方案,基于Azure Communication Services(Node.js SDK) + 自定义业务层实现:
1. 查询当前全部通话会话列表
ACS 原生未提供全局通话列表查询接口,需要在业务侧自行维护会话状态:
- 预约创建时,你的Node.js后端生成唯一业务会话ID,关联绑定预约时间段、对应ACS呼叫ID/群组ID
- 会话建立、结束事件触发时,同步更新业务库中该会话的状态(进行中/已结束)
- 后续查询全量进行中会话直接读取业务库即可,无需调用ACS接口
2. 查询每个会话的参与人列表
两种实现方案可选:
- 业务侧存储:用户加入会话时,前端调用后端接口上报用户ID与关联的ACS会话ID,在业务库中维护参与人列表,查询效率最高
- 调用ACS接口:使用Node.js SDK的
CallAutomationClient的getCallConnectionProperties方法,传入目标callConnectionId,返回结果中的participants字段即为当前所有参与人信息,对应REST接口为GET /calling/callConnections/{callConnectionId}?api-version=2023-10-15
3. 强制结束指定会话
直接调用ACS服务端挂断接口实现全量踢出:
const { CallAutomationClient } = require('@azure/communication-call-automation'); // 初始化客户端 const callClient = new CallAutomationClient('<你的ACS资源连接字符串>'); // 强制结束会话方法 async function forceTerminateCall(callConnectionId) { // 第二个参数isForEveryone设为true,会挂断所有参与人并结束整个会话 await callClient.hangUp(callConnectionId, true); }
对应REST请求为POST /calling/callConnections/{callConnectionId}:hangup?api-version=2023-10-15,请求体携带{"isForEveryone": true}即可
4. 会话关闭、参与人离开的回调配置
ACS 原生支持事件订阅回调:
- 在ACS资源配置页新建事件订阅,选择需要监听的事件:
Microsoft.Communication.CallEnded(会话结束事件)、Microsoft.Communication.ParticipantLeft(参与人离开事件) - 回调地址配置为你的Node.js后端公网可访问接口,事件触发时ACS会主动推送会话ID、参与人ID、事件时间等参数到该接口,你可以在接口逻辑中更新业务库状态即可
预约时长管控全流程
- 预约创建成功后,给对应会话注册定时任务(可使用
node-schedule或bullmq消息队列实现),触发时间设为预约结束时间 - 定时任务触发时调用上述强制结束会话接口,同步更新业务库会话状态
- 收到ACS的会话结束回调时,主动销毁对应会话的定时任务,避免重复执行
内容的提问来源于stack exchange,提问作者jin chong
相关产品推荐
相关产品推荐

