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

通过Twilio Task Router接受预约后,如何接通来电?

解决TaskRouter调用dequeue()后无法接通来电的问题

你遇到的核心问题是:仅调用reservation.dequeue()只是触发了任务分配后的通话路由指令,但坐席端缺少**媒体接收终端(Twilio Device)**来建立实际通话,同时TwiML应用的配置和关联环节缺失。以下是具体解决步骤:

1. 必须配置Twilio Device接收通话

坐席端需要初始化Twilio Device来处理浏览器端的通话,这是接通来电的必要条件。示例代码如下:

import { Device } from 'twilio-client';

// 注意:这里的token必须包含`voice`权限,且关联了正确的TwiML应用SID(后台生成Token时指定)
const device = new Device(workerToken);

// 监听来电事件
device.on('incoming', (call) => {
  // 可结合UI让坐席点击接听按钮后执行accept
  call.accept();
});

// 启动Device监听
device.connect();

2. 后台生成Worker Token时关联TwiML应用

生成Worker Token的后台代码中,必须指定twiml_app_sid参数,这个TwiML应用的Voice URL需要返回能路由到坐席Client的TwiML:

  • TwiML应用的Voice URL返回示例:
<Response>
  <Dial answerOnBridge="true">
    <Client>{{To}}</Client>
  </Dial>
</Response>
  • 后台生成Token的核心代码(以Node.js为例):
const twilio = require('twilio');
const client = twilio(accountSid, authToken);

const workerToken = client.taskrouter.workspaces(workspaceSid)
  .workers(workerSid)
  .tokens.create({
    twimlAppSid: '你的TwiML应用SID', // 关联TwiML应用
    permissions: ['voice', 'taskrouter'] // 必须包含voice权限
  });

3. 优化reservation.dequeue()调用

在reservationCreated事件中调用dequeue()时,需明确指定通话的路由目标(坐席的Client身份),确保Twilio能正确找到对应的Device:

worker.on("reservationCreated", async function (reservation) {
  console.log('reserved', reservation);
  // 从Worker属性中获取预先配置的Client身份(比如client:cain)
  const contactUri = worker.attributes.contact_uri;
  await reservation.dequeue({
    to: contactUri,
    from: reservation.task.attributes.from // 来电号码
  });
});

关键逻辑说明

  • reservation.dequeue()的作用是通知Twilio将待接来电路由到指定终端,但终端(Twilio Device)必须提前初始化并处于监听状态。
  • TwiML应用是Twilio处理通话的规则中心,关联到Worker Token后,当dequeue触发时,Twilio会调用TwiML应用的Voice URL获取路由指令,从而将来电转接到坐席的Device。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:50:33