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

如何创建Twilio呼叫应答组?实现TaskRouter呼叫轮询转语音信箱

TaskRouter多座席呼叫转派+语音信箱实现方案

你的TaskRouter当前运行正常,座席通过JavaScript客户端接听来电,需要实现呼叫依次转派给多位座席(未接听则自动转下一位),全部未接听时转语音信箱,同时来电者全程播放等待音乐。以下是具体实现步骤:


1. 给来电者添加等待音乐(修改enqueue-call.php)

在<Enqueue>标签中加入waitUrl属性,指向一个播放循环音乐的XML文件,确保来电者等待时能听到音乐:

<?php
$digit_pressed = $_REQUEST['Digits'];
// 后续可扩展西班牙语逻辑,当前默认英文
$language = ($digit_pressed == '1') ? "en" : "en";
$wfSid = 'WW.......';
header("Content-Type: application/xml; charset=utf-8");
?>

<Response>
  <Enqueue workflowSid="<?php echo $wfSid; ?>" waitUrl="wait-music.php">
    <Task>{"selected_language": "<?php echo $language ?>"}</Task>
  </Enqueue>
</Response>

新建wait-music.php文件,用来循环播放等待音乐:

<?php
header("Content-Type: application/xml; charset=utf-8");
?>
<Response>
  <Play loop="0">你的公开HTTPS等待音乐URL</Play> <!-- 替换为你自己的等待音乐地址,必须是HTTPS可访问 -->
</Response>

2. 配置TaskRouter Workflow转派规则

登录Twilio控制台,找到对应Workflow(即代码中的$wfSid),编辑任务路由配置,设置超时转派和最终语音信箱规则:

{
  "task_routing": {
    "filters": [
      {
        "filter_friendly_name": "优先派给在线座席",
        "expression": "selected_language == 'en' && worker.activity_name == 'Available'",
        "targets": [
          {
            "queue": "WQ你的英文队列SID",
            "timeout": 20, // 座席20秒未接听则触发超时转派
            "priority": 10
          }
        ]
      },
      {
        "filter_friendly_name": "超时后转派下一位在线座席",
        "expression": "selected_language == 'en' && worker.activity_name == 'Available' && task.attempts < 3", // 最多尝试3位座席
        "targets": [
          {
            "queue": "WQ你的英文队列SID",
            "timeout": 20,
            "priority": 8
          }
        ]
      },
      {
        "filter_friendly_name": "全部座席未接,转语音信箱",
        "expression": "task.attempts >= 3",
        "targets": [
          {
            "queue": "WQ你的英文队列SID",
            "timeout": 0,
            "priority": 5,
            "callback_url": "https://你的域名/fallback-to-voicemail.php" // 触发语音信箱逻辑
          }
        ]
      }
    ],
    "default_filter": {
      "queue": "WQ你的英文队列SID"
    }
  }
}

规则说明:

  • task.attempts:TaskRouter自动记录的任务派单次数,每次超时后自动递增
  • timeout:设置座席的接听等待时长(单位:秒),可根据需求调整
  • task.attempts < 3:控制最多尝试派给3位座席,可修改数值调整次数

3. 创建语音信箱处理文件

新建fallback-to-voicemail.php,当所有座席都未接听时,Twilio会调用这个文件,引导来电者留语音:

<?php
header("Content-Type: application/xml; charset=utf-8");
?>
<Response>
  <Say voice="Polly.Joanna-Neural" language="en-us">抱歉,目前没有可用座席接听你的来电,请在嘟声后留言。</Say>
  <Record maxLength="60" action="handle-voicemail.php" method="POST"/> <!-- maxLength限制留言时长为60秒 -->
  <Say voice="Polly.Joanna-Neural" language="en-us">感谢你的留言,再见。</Say>
  <Hangup/>
</Response>

可选:新建handle-voicemail.php处理录音后的逻辑(比如保存录音地址、发送通知):

<?php
$recording_url = $_REQUEST['RecordingUrl'];
$call_sid = $_REQUEST['CallSid'];
// 这里添加你的业务逻辑:例如将录音URL和呼叫信息存入数据库,发送邮件/短信通知管理员等

header("Content-Type: application/xml; charset=utf-8");
?>
<Response>
  <Hangup/>
</Response>

4. 座席客户端配合设置

确保座席的JavaScript客户端正确处理来电通知,超时未接听时让TaskRouter触发转派逻辑(示例代码):

// 监听新任务分配事件
worker.on('task.created', function(task) {
  // 显示来电提醒给座席
  alert('有新来电,请及时接听');
  
  // 可选:设置自动拒绝超时任务(时长略短于Workflow的timeout,避免冲突)
  setTimeout(function() {
    if (task.status === 'pending') {
      task.reject('未接听');
    }
  }, 18000); // 18秒后自动拒绝
});

// 接听按钮点击事件
document.getElementById('answer-btn').addEventListener('click', function() {
  task.accept().then(function() {
    // 用Twilio Device接听呼叫
    Twilio.Device.connect({TaskSid: task.sid});
  });
});

关键注意事项

  • 确保Workflow中的队列SID、回调URL都正确指向你的公开HTTPS资源
  • 等待音乐地址必须是Twilio可访问的HTTPS链接
  • 测试时可让座席处于在线状态但不接听,验证超时转派和语音信箱流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:35:14