0

这个问题与我之前提出的问题类似,因为我希望任务对我添加为任务属性之一的 WorkerSid 列表执行目标工作人员表达式检查。但我认为这个问题的不同足以证明它自己的问题。

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

我有以下工作流程配置:

{
        "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。该工作人员的 SID 是WORKER_SID1_HERE,因此唯一可用的工作人员没有资格接收任务预留。所以应该发生的是第一个目标表达式worker.sid not in task.do_not_contact返回false,并且任务落入automaticQueueSidTaskQueue。

相反,该任务仍处于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

我需要更改哪些内容才能获得所需的工作流行为?

4

1 回答 1

0

更改skip_if

"skip_if": "1==1"

解决了这个问题。

根据 Twilio 开发人员支持,worker.sid not in task.do_not_contact对于不可用但也不在 中的工作人员返回 true do_not_contact,因此目标表达式仍返回一组工作人员,然后"skip_if": "workers.available==0"返回 false,因为从技术上讲,有一个“可用”工作人员——即由于do_not_contact名单不合格。

需要的是skip_if始终返回 true,因此当第一个目标处理任务而不分配它时,skip_if然后将其传递给下一个目标,如Taskrouter Workflow 文档中所述:

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

  • 任务进入路由步骤时不会立即创建保留
  • 跳过超时表达式的计算结果为真"
于 2019-04-26T06:33:03.270 回答