Today we’re excited to introduce a new feature for TaskRouter – multitasking. Before we get into multitasking, a quick refresher: TaskRouter is a skill-based routing engine, designed for routing work such as customer support interactions to the best matched agent. Multitasking extends what you can build with TaskRouter by allowing workers to handle multiple tasks concurrently.
TaskRouter can be used for many different solutions, but the most common use case is as the beating heart of a contact center – pumping the right task to the right place with the right priority. When those tasks are voice calls, you typically only want one agent to work on one task at a time. But we increasingly see TaskRouter powering multi-channel contact centers. For example, the global bank ING use TaskRouter to power their contact center for customer service in 17 different countries. TaskRouter routes not just voice calls, but messaging sessions as well.
When customers contact a company through messaging, those interactions are well suited to being handled in parallel. Agents can often handle chatting with 2 or 3 different customers at any given time. These interactions are asynchronous in a way voice calls are not.
In fact, we often see customers building solutions which suggest to callers on hold in a queue to hang up and message their query instead – on average that approach pivots about 40% of call traffic over to messaging, where it can be handled in parallel with other interactions, making agents more efficient and allowing the company to flatten out the spikes in load.
TaskRouter multitask is designed to make this sort of solution easy to build and scale. Tasks belong to one of multiple different Task Channel types (Voice, Video, IP Messaging, SMS). Each worker within TaskRouter can then be configured as to how many tasks of each type they can handle concurrently. So for example if you build your chat solution using IP Messaging, you can say that they can handle 3 IP Messaging sessions with the following API call:
$ curl -X POST https://taskrouter.twilio.com/v1/Workspaces/{WorkspaceSid}/Workers/{WorkerSid}}/Channels/ipm
-d 'Capacity=3&Available=true'
-u '{account_sid}:{auth_token}'
Sometimes, you may want to specify that workers cannot handle tasks of one type if they are busy with a task of another type. To do this you use Target Worker Expressions, which allow you to specify matching workers based on the multitasking specific pre-defined attributes. These can be used from either the TaskQueue or the Workflow.
worker.channel.<task type>.available_capacity_percentage
worker.channel.<task type>.configured_capacity
worker.channel.<task type>.assigned_tasks
For example, you may want to see that workers can handle one voice call or three messaging sessions – but if they’re on a voice call then they can’t handle any new messaging sessions. Using these attributes you can write expressions to route tasks of different types to workers based on their configured and consumed capacity.
$ curl -X POST https://taskrouter.twilio.com/v1/Workspaces/{WorkspaceSid}/Workers/{WorkerSid}}/Channels/ipm
-d 'Available=false'
-u '{account_sid}:{auth_token}'
To get started with TaskRouter multitasking, check out the docs or the sample code from my prototype sentiment-based-routing contact center. If you’re using TaskRouter through our Helper Libraries, you will need to use the next generation ‘yoyodyne’ helper libraries in order to access Multitask.
We’ve seen more and more companies build contact centers on top of TaskRouter. We’re excited to see how multitasking can make it even easier to build multi-channel contact centers. We can’t wait to see what you build.