此问题与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
为了获得所需的工作流程行为,我需要更改什么?
答案 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仅在以下情况下跳过工作流程中的路由步骤: