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

Twilio Conference按*进入菜单后重进错误新建同名房间问题求助

解决方案

问题根因

  • Twilio的会议friendlyName不是全局唯一标识符,当原会议内所有参与者临时退出导致会议为空时,Twilio默认会立即销毁空会议,此时再用相同friendlyName调用<Conference>动词会创建全新会议
  • 你配置的hangupOnStar: true会让主持人按*键时直接从会议中断开(不是保持状态),如果会议此时没有其他参与者,会直接变为空会议被销毁

修复方案

方案1:修改初始会议配置,延长空会议保留时间

在初始创建会议的<Conference>配置中增加emptyConferenceTimeout参数,设置空会议最长保留时长(单位为秒,最大支持86400秒即24小时),避免主持人临时退出时会议被立即销毁:

exports.handler = function(context, event, callback) {
    let twiml = new Twilio.twiml.VoiceResponse();
    let twilio_call_id = event.twilio_call_id;
    twiml.dial({
        hangupOnStar: true,
        action: "https://" + context.DOMAIN_NAME + "/clientConferenceMenu",
        method: 'POST'
    }).conference(twilio_call_id, {
        startConferenceOnEnter: true,
        endConferenceOnExit: false,
        emptyConferenceTimeout: 3600, // 新增:空会议保留1小时
        statusCallbackEvent: "join end leave hold",
        statusCallback: "https://" + context.DOMAIN_NAME + "/callStatus",
        record: "record_from_start",
        participantLabel: "Client"
    });
    return callback(null, twiml);
};

方案2:用会议SID直接添加参与者(推荐,彻底避免同名会议问题)

Twilio的<Conference>动词仅支持通过friendlyName加入会议,但Participant API支持直接通过会议SID将现有呼叫加入对应会议,不会出现新建同名会议的问题。修改返回会议的代码如下:

client.conferences(conference_id)
  .fetch()
  .then((conference) => {
    // 直接用Participant API把当前呼叫加入指定SID的会议
    return client.conferences(conference.sid)
      .participants
      .create({
        callSid: event.CallSid, // 当前用户的呼叫SID,从事件参数中直接获取
        startConferenceOnEnter: true,
        endConferenceOnExit: false,
        participantLabel: "Client"
      });
  })
  .then(() => {
    // 加入成功返回空TwiML即可,呼叫会自动被桥接到会议
    const twiml = new Twilio.twiml.VoiceResponse();
    return callback(null, twiml);
  })
  .catch(err => {
    console.error("加入会议失败:", err);
    const twiml = new Twilio.twiml.VoiceResponse();
    twiml.say("加入会议失败,请稍后重试");
    twiml.hangup();
    return callback(null, twiml);
  });

验证注意事项

  • 确保你传递到菜单路由的conference_id是原有会议的SID,而不是friendlyName
  • 开启会议状态回调后可以在回调中记录会议SID和friendlyName的对应关系,避免后续取值错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:42:03