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

如何将Twilio未接听呼叫转回Studio Flow及预检查可用Worker

Twilio无可用Worker时的呼叫处理方案

最优方案:创建Task前检查队列可用Worker

你可以在Studio Flow中通过自定义Twilio Function提前查询指定队列的可用Worker数量,再决定是否将呼叫转至Flex:

  1. 创建一个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);
      }
    };
    
  2. 在Studio Flow中添加Run Function组件,调用上述Function,若需动态指定队列,可通过Studio变量传递队列SID。
  3. 添加**Split Based On...**组件,判断Function返回的available_count:
    • 若available_count > 0:继续执行创建Task并发送至Flex的流程。
    • 若available_count = 0:执行自定义操作,比如用Say/Play组件告知用户"当前无在线客服,请通过其他渠道联系",或调用另一个Function触发后续逻辑。

替代方案:超时后转回Studio并保留上下文

如果无法提前检查Worker可用性,可通过以下方式在Task超时后转回Studio并保留IVR上下文:

  1. 保存Studio上下文到Task Attributes:在Studio的Create Task组件中,将需要保留的上下文(比如用户IVR选择的选项)添加到Task Attributes里,示例Attributes:
    {
      "selected_option": "{{widgets.ivr_menu.Digits}}",
      "call_sid": "{{trigger.callSid}}"
    }
    
  2. 配置Workflow超时回调:在TaskRouter的Workflow设置中,添加task.timeout事件的Webhook,指向一个自定义Twilio Function。
  3. 在回调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);
      }
    };
    
  4. 在Studio Flow中添加入口节点(比如Trigger的"Restart Flow"事件,或自定义等待节点),接收传递的上下文参数,继续后续逻辑。

内容的提问来源于stack exchange,提问作者Facundo Chambó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:55:32