By default when a Task is processing through a Workflow, a Task will wait in a routing step until it is matched to a Worker or until a timeout moves it to the next routing step. If there are initially no matching Workers, it may be preferable to skip to the next routing step immediately. To do this, use the Skip Timeout expression:
skip_if: workers.available == 0
The following special variables can be used to evaluate against the Activity of Workers. These variables are scoped to the Workers in the TaskQueue associated with the currently processing routing step.
Value | Meaning |
---|---|
workers.available | The number of workers in queue that are in an Available activity state |
workers.unavailable | The number of workers in queue that are in an Unavailable activity state |
workers.WAxx | The number of workers in queue that are in the activity state corresponding to WAxx, where WAxx is a valid ActivitySid |
Skip Timeout will only be evaluated if a Task cannot be assigned to a Worker immediately. Also, Skip Timeout is only successful if the expression evaluates to true
. Therefore, TaskRouter will only skip a routing step in a Workflow if:
true
If a Task skips a filter, it will be evaluated as if the Task didn't match the filter expression. This is important when considering your default_filter
behavior because, even though they match one of the filter expressions, Tasks that skip a named filter still qualify for the default_filter
.
You can read more about the behavior of the default filter in the Workflow Overview.
The variables mentioned above only relate to the Activity of Workers. In a multitasking Workspace, Tasks are only assigned to Workers if they:
Available
Activity
The expression 1==1
is useful here. Because 1==1
will always evaluate to true, it can be used to skip the routing step if no Workers are available that match the above criteria.
Example Skip Timeout expressions:
1==1
workers.available == 0
workers.WAxx < 2
workers.WAxx < 2 OR workers.WAyy < 2
Skip Timeout expressions must evaluate to true
or false
, support equality and comparison, and can be compounded with AND/OR logical operators.
1{2"task_routing":{3"filters":[4{5"filter_friendly_name":"Sales filter",6"expression":"type == 'Sales'",7"targets":[8{9"queue":"WQ3935a4f744a241c1356c09310c2398e6",10"expression":"task.subSection == worker.specializedSubField",11"order_by":"worker.english_level ASC",12"priority":"1",13"skip_if": "workers.available == 0"14},15{16"priority":"1",17"queue":"WQ787b271950e0f7687ec432221e672ffa"18}19]20}21]22}23}