You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Twilio Voice JS SDK如何接听第二个来电/会议?

解决Twilio Voice JS SDK多来电/会议处理问题

你遇到的问题根源是Twilio Voice JS SDK在浏览器端默认仅支持单个活跃通话会话,直接调用call.accept()会替换当前的通话连接。要实现同时处理多个来电(通过会议中转),需要调整会议管理逻辑,而非单纯调用参与者hold接口。

核心解决方案思路

不要让浏览器直接作为两个通话的端点,而是将所有来电都接入同一个会议房间,把浏览器作为会议的主持人/参与者,通过Twilio服务器端API管理会议内的参与者状态(保持/恢复),以此实现多来电的切换处理。

具体实现步骤

  1. 统一来电路由到已有会议
    当第二个来电进入时,不要在浏览器端直接接听,而是在你的Twilio后端函数(比如Twilio Functions)中,将该来电转接到已存在的会议房间。这样第二个来电会直接进入会议,不会触发浏览器端的新通话请求。

    后端路由示例:

    exports.handler = function(context, event, callback) {
      const twiml = new Twilio.twiml.VoiceResponse();
      // 传入已存在的会议SID,确保所有来电进入同一会议
      twiml.dial().conference({
        sid: event.existingConferenceSid,
        startConferenceOnEnter: false,
        endConferenceOnExit: false // 避免主持人离开导致会议结束
      });
      callback(null, twiml);
    }
    
  2. 正确调用API保持会议参与者
    你之前调用ParticipantResource.Update()无效,大概率是参数错误或未在服务器端执行(浏览器端直接调用会暴露凭证且权限不足)。需要在后端服务中,指定正确的会议SID和目标参与者SID来更新状态:

    后端API调用示例:

    const client = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
    
    // 保持第一个会议参与者
    client.conferences('你的会议SID')
      .participants('第一个参与者的SID')
      .update({ hold: true })
      .then(participant => console.log(`参与者 ${participant.sid} 已保持`))
      .catch(err => console.error('保持失败:', err));
    
  3. 浏览器端会议状态监听与切换
    在浏览器端,通过Twilio Voice SDK监听会议的参与者事件,当新参与者加入时,触发UI提示让用户选择切换通话,同时调用后端API切换参与者的保持状态:

    // 监听会议参与者连接事件
    conference.on('participantConnected', (participant) => {
      // 更新UI提示用户有新来电
      // 用户点击"切换"按钮后,调用后端API保持当前活跃参与者,恢复新参与者
    });
    

关键注意事项

  • 确保会议配置endConferenceOnExit为false,防止主持人暂时断开导致整个会议结束。
  • 所有Twilio API调用必须在后端执行,不要在浏览器端暴露账号SID和Auth Token。
  • 如果需要自定义等待音,可在ParticipantResource.Update()中添加holdUrl参数,指定等待音的音频文件地址。

内容的提问来源于stack exchange,提问作者vltruong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:20:27