Twilio Taskrouter:如何在工作流配置中实施WorkerSid的“请勿联系”列表?

时间:2019-04-25 10:35:46

标签: node.js twilio twilio-taskrouter

此问题与this one I previously asked相似,因为我希望任务对我添加为任务属性之一的WorkerSid列表执行Target Worker Expression检查。但是我认为这个问题足够不同,值得提出自己的问题。

我的目标是将WorkerSids的“请勿联系”列表与任务相关联;这些是不应分配任务的工人(也许客户以前与他们的互动不好)。

我具有以下工作流程配置:

{
        "task_routing":{
            "filters":[
                {

                    "filter_friendly_name":"don't call self",
                    "expression":"1==1",
                    "targets":[
                        {
                            "queue":queueSid,
                            "expression":"(task.caller!=worker.contact_uri) and (worker.sid not in task.do_not_contact)",
                            "skip_if": "workers.available == 0"
                        },
                        {
                            "queue":automaticQueueSid
                        }
                    ]

                }
            ],
            "default_filter":{
                "queue":queueSid
            }
        }
    }

创建任务时,检查Twilio控制台,可以看到任务具有以下属性:

{"from_country":"US","do_not_contact":["WORKER_SID1_HERE","WORKER_SID_2_HERE"],

... bunch of other attributes...
}

所以我知道任务已经成功分配了WorkerSids数组作为其属性之一。

只有一个工人处于空闲状态,并且其属性与queueSid TaskQueue相匹配。该工作人员的SID为WORKER_SID1_HERE,因此唯一可用的工作人员没有资格接收任务预留。因此,应该发生的情况是第一个目标表达式worker.sid not in task.do_not_contact返回false,并且任务进入automaticQueueSid TaskQueue。

相反,任务保留为queueSid未分配。记录以下Taskrouter事件序列:

task-queue.entered
Task TASK_SID entered TaskQueue QUEUESID_QUEUENAME

task.created
Task TASK_SID created

workflow.target-matched
Task TASK_SID matched a workflow target

workflow.entered
Task TASK_SID entered Workflow WORKFLOW_NAME

为了获得所需的工作流程行为,我需要更改什么?

1 个答案:

答案 0 :(得分:0)

skip_if更改为

"skip_if": "1==1"

解决了问题。

在Twilio开发人员的支持下,worker.sid not in task.do_not_contact对于不可用但也不在do_not_contact中的工作程序返回true,因此目标表达式仍返回一组工作程序,然后返回{{1} }之所以返回false,是因为从技术上讲,只有一个“可用”工作人员-由于"skip_if": "workers.available==0"列表而没有资格。

所需的是使do_not_contact始终返回true,因此当第一个目标处理任务而不分配任务时,skip_if然后将其传递给下一个目标,如{{3 }}:

“ TaskRouter仅在以下情况下跳过工作流程中的路由步骤:

  • 当任务进入路由步骤时,不会立即创建保留
  • “跳过超时”表达式的计算结果为true”