Twilio Taskrouter: как реализовать список «не связываться» WorkerSids в конфигурации рабочего процесса? - PullRequest
0 голосов
/ 25 апреля 2019

Этот вопрос похож на этот вопрос, который я ранее задавал , в том смысле, что я хочу, чтобы задача выполнила проверку целевого рабочего выражения в списке WorkerSids, который я добавил в качестве одного из атрибутов задачи.Но я думаю, что эта проблема достаточно отличается, чтобы оправдать свой собственный вопрос.

Моя цель - связать список 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 голосов
/ 26 апреля 2019

Изменение 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 :

"TaskRouter пропустит шаг маршрутизации в рабочем процессе, если:

  • Нет немедленного резервирования, когда задача входит в шаг маршрутизации
  • ПропуститьВыражение тайм-аута имеет значение true "
...