如何在客户接听前将坐席接入Twilio外呼通话?
解决Twilio Flex外呼坐席延迟接起问题
核心问题是任务创建时机太晚——你当前是客户接听后才将通话入队分配给坐席,自然会导致坐席错过通话开头。最简便的解决方法是提前创建任务,在发起外呼的同时就将任务推送给坐席,等客户接听后直接桥接通话,具体步骤如下:
1. 调整流程逻辑
- 第一步:先通过Twilio TaskRouter创建外呼任务,分配给空闲坐席
- 第二步:任务分配完成后,发起给客户的外呼
- 第三步:客户接听后,直接将通话桥接到已分配的坐席
2. 修改发起外呼的Twilio函数
先创建TaskRouter任务,再发起外呼:
// 先创建TaskRouter任务 const task = await client.taskrouter.workspaces(context.TWILIO_WORKSPACE_SID) .tasks .create({ attributes: JSON.stringify({ to: event.To, from: event.From, direction: "outbound", // 其他需要传递给坐席的业务属性 }), workflowSid: context.TWILIO_WORKFLOW_SID, taskChannel: "voice" }); // 再发起外呼,URL指向负责桥接通话的函数 await client.calls.create({ url: `https://your-twilio-function-domain.com/connect-call?taskSid=${task.sid}`, to: event.To, from: event.From, statusCallback: statusCallbackURL, statusCallbackEvent: ["ringing", "answered", "completed", "failed", "busy", "no-answer"] });
3. 编写桥接通话的Twilio函数
上面url指向的函数返回Twiml,用<Connect>直接连接到已创建的任务:
const taskSid = event.taskSid; const twiml = new Twilio.twiml.VoiceResponse(); // 直接桥接到指定TaskRouter任务 twiml.connect({ taskSid: taskSid }); callback(null, twiml);
4. 处理客户未接听的情况
在statusCallback对应的函数中,监听通话未接通状态,删除已创建的TaskRouter任务,避免坐席接到无效任务:
if (["failed", "busy", "no-answer"].includes(event.CallStatus)) { await client.taskrouter.workspaces(context.TWILIO_WORKSPACE_SID) .tasks(event.TaskSid) .remove(); }
额外优化点
- 在任务属性中添加
autoAnswer: true,配置Flex自动接听外呼任务,进一步缩短响应延迟 - 确保Workflow路由规则优先分配当前空闲的坐席,避免任务等待分配的时间损耗
内容的提问来源于stack exchange,提问作者ege
相关产品推荐
相关产品推荐

