如何将Twilio未接听呼叫转回Studio Flow及预检查可用Worker
Twilio无可用Worker时的呼叫处理方案
最优方案:创建Task前检查队列可用Worker
你可以在Studio Flow中通过自定义Twilio Function提前查询指定队列的可用Worker数量,再决定是否将呼叫转至Flex:
- 创建一个Twilio Function,添加以下代码(替换你的Workspace和队列SID):
exports.handler = async function(context, event, callback) { const twilioClient = context.getTwilioClient(); const WORKSPACE_SID = '你的Workspace SID'; const QUEUE_SID = '目标队列SID'; try { const availableWorkers = await twilioClient.taskRouter.v1.workspaces(WORKSPACE_SID) .queues(QUEUE_SID) .workers.list({ available: true }); callback(null, { available_count: availableWorkers.length }); } catch (error) { callback(error); } }; - 在Studio Flow中添加Run Function组件,调用上述Function,若需动态指定队列,可通过Studio变量传递队列SID。
- 添加**Split Based On...**组件,判断Function返回的
available_count:- 若
available_count > 0:继续执行创建Task并发送至Flex的流程。 - 若
available_count = 0:执行自定义操作,比如用Say/Play组件告知用户"当前无在线客服,请通过其他渠道联系",或调用另一个Function触发后续逻辑。
- 若
替代方案:超时后转回Studio并保留上下文
如果无法提前检查Worker可用性,可通过以下方式在Task超时后转回Studio并保留IVR上下文:
- 保存Studio上下文到Task Attributes:在Studio的Create Task组件中,将需要保留的上下文(比如用户IVR选择的选项)添加到Task Attributes里,示例Attributes:
{ "selected_option": "{{widgets.ivr_menu.Digits}}", "call_sid": "{{trigger.callSid}}" } - 配置Workflow超时回调:在TaskRouter的Workflow设置中,添加
task.timeout事件的Webhook,指向一个自定义Twilio Function。 - 在回调Function中转回Studio:在Function中提取Task Attributes里的上下文,调用Studio Flow API将呼叫转回指定节点,代码示例:
exports.handler = async function(context, event, callback) { const twilioClient = context.getTwilioClient(); const STUDIO_FLOW_SID = '你的Studio Flow SID'; const taskAttributes = JSON.parse(event.TaskAttributes); try { // 调用Studio API启动Flow实例,传递上下文参数 await twilioClient.studio.v2.flows(STUDIO_FLOW_SID) .executions.create({ to: event.To, from: event.From, parameters: { selected_option: taskAttributes.selected_option, call_sid: taskAttributes.call_sid } }); // 更新Task状态为已完成 await twilioClient.taskRouter.v1.workspaces(context.TWILIO_WORKSPACE_SID) .tasks(event.TaskSid) .update({ assignmentStatus: 'completed' }); callback(null, 'Success'); } catch (error) { callback(error); } }; - 在Studio Flow中添加入口节点(比如Trigger的"Restart Flow"事件,或自定义等待节点),接收传递的上下文参数,继续后续逻辑。
内容的提问来源于stack exchange,提问作者Facundo Chambó
相关产品推荐
相关产品推荐

