Twilio TaskRouter


TaskRouter is a skills/attribute based routing system.

It is most often used as the ACD (Automatic Call Distribution) engine for a contact center. But it can also be used for many other uses from Business Process Management to IoT.

For Contact Center, it is the engine that can be used for distributing phone calls, chats, emails, leads, support tickets, and other work items to the people that can best handle them. Example applications for TaskRouter include:

  • 通話をコールセンターエージェントに割り当てます。タスクルーターは、コールセンター環境に必要な一般的な機能(スキルをベースとするルーティング、タスクの優先利用など)をサポートします。
  • CRM ケースがサービスレベルの範囲内で確実に処理されるように、優先度を付けて、エージェントに割り当てます。タスクルーターを使うと、タスクのオーバーフロールールを指定して、キューでの待機時間およびケースの内容に基づいてさまざまな割り当てルールを設定できます。
  • リードを社内セールスチームに割り当てます。タスクルーターのビジネスルールを使って、チームが常に最重要案件に取り組むように、優先度付けを制御できます。


TaskRouter overview

Want to get straight into code? Dive into the TaskRouter QuickStart here.

The TaskRouter object model

The core concepts can be boiled down to: You create Tasks in the system. Your Workflow decides which TaskQueue that task should wait in, and then which Worker it should be assigned to once a matching worker becomes available.

In more detail:

  • Task: a task represents work that needs to be routed. A task has a priority and a channel type, as well as a set of customizable attributes defined in JSON. The custom attributes can contain whatever you like, such as skills required, skill level required, or context about the customer.
  • Workflow: The Workflow is the brain 
of TaskRouter. The Workflow inspects 
the task to understand 
how to route it, based on Task attributes assigned 
at creation. The Workflow does not just route and forget, but monitors tasks as they’re in the queue. If a task exceeds a defined timeout period without 
being handled, the Workflow can define how to escalate the task. The workflow is defined in JSON, and this is the primary syntax in order to learn about the potential of TaskRouter. You can have multiple workflows routing to the same workers.
  • TaskQueue: TaskQueues represent where tasks wait while waiting for a matching worker to be available to work on the task. They define which workers are eligible to consume tasks from the queue. It is best to think of TaskQueues as primarily a statistics container. There are often routing behaviors that you could create with just one TaskQueue and most of the routing logic in the workflow, or with many TaskQueues. When designing your system, consider TaskQueues as your primary way of filtering out statistics.
  • Workspace: Workspaces are a container for completely separate routing systems, such as distinct contact centers in different departments that never have to interact. In most cases you would be better to create a different account/project to represent your separation of e.g. dev/stage/prod or different contact center deployments.


The workflow will execute your logic on each Task you create, and place the task into a queue. For any worker who is available and has free capacity, TaskRouter will look for a task which they are eligible to work on. When there are multiple tasks the worker could work on, TaskRouter will select the longest waiting of the highest priority tasks (if the queue is FIFO), or the shortest waiting task (if the queue is LIFO).

When a Task is matched to a Worker, TaskRouter makes a reservation request for your worker. If your worker is registered using the TaskRouter JavaScript SDK (preferred) then you will receive this reservation as an event on the SDK. You can also configure a webhook destination for assignment to come as an HTTP callback to your web application, informing your application of the reservation. If your agents are sitting in front of a web user interface, the JavaScript SDK mechanism is the recommended approach.

Your application (either server side or client side) is then responsible for replying with an assignment instruction to tell TaskRouter how to deliver the work to the agent (for example, telling Twilio to bridge two callers) or implementing your own Task bridging logic and then accepting the reservation (for example, accepting a sales lead in a CRM, sending an email, etc). To learn more about the possible assignment instructions, read an overview of them here.

How workflow decides on the match

ワーカーとタスクにはどちらも、"attributes" フィールドがあります。これらのフィールドは、タスクまたはワーカーを記述する特別な JSON オブジェクトです。たとえば、タスクにフィールド "required_language" を追加して、値 "spanish" を設定できます。また、ワーカーに属性 "spoken_languages" を追加して、値 ["english", "spanish", "french"] を設定できます。 タスクルーターは、これらの属性を使用して、各タスクを、それを処理する資格を持つワーカーにルーティングします。

A Workflow might have a rule that says "if the task has {"required_language": "spanish", "type": "sales"} as its attribute, then put that Task in the TaskQueue with the spanish speaking sales workers."

最後に、Workerの許容量があります。Taskは異なるチャネル(タイプ)に割り当て可能です。 たとえば、音声通話、SMS、チャットが挙げられます。 Workerは各Taskタイプを同時に、特定のボリュームを扱うよう構成できます。 たとえば、Workerは同時に1つの音声通話を受けつつ、3つのチャットセッションを同時に処理できるかもしれません。 Workerが同時に複数のタスクを処理可能な場合は、他の作業を行なっていてもアベイラビリティ〜が「idle(待機中)」となる点に注意してください。 なぜなら、そのWorkerの許容量にまだ達していないからです。 また、Workerは手動で他のアベイラビリティー(プレゼンス)状態を、「Offline(オフライン)」または「Busy(取り込み中)」などのように設定できます。 マルチタスキングについては、こちらをお読みください


  • アプリケーションが、適切な属性を持つ 1 つまたは複数のワーカー、タスクを保持するタスクキュー、およびタスクの優先度とエスカレーションルールを制御するワークフローを作成します。
  • アプリケーションが、いずれかのワーカーのアクティビティを "Offline" にします。
  • アプリケーションが、ワークフローに新しいタスクを追加します。このタスクは、ワーカーが使用可能になるまで、キューで待機します。
  • アプリケーションが、ワーカーのアクティビティを "Idle" に更新します。
  • TaskRouter, seeing a Worker is in an available Activity and is eligible to handle the Task, reserves the Worker and Task. The Worker will not receive any new Task assignments until the reservation has a response.
  • エージェントはTaskRouter JS SDKを使用して構築されたエージェントUIを確認し、SDKはそのWorker用に作成されたトークンを使用して接続されます。 TaskRouterは新規予約に対してSDK上でイベントを発生させて、アプリケーションに予約が作成されたことを知らせます。
  • アプリケーションは、タスクをワーカーと接続する方法の指示を含むレスポンスを返すか、または独自のカスタム接続ロジックを実装することによって、予約を受諾または拒否します。
  • For example, if the task is a Twilio phone call, you can respond with an instruction:conference and tell Twilio to bridge the call to the Worker and set it up ready for multi-party call control in the future.
  • Once the call finishes, the task will move into wrapup/wrapping state. This means the worker has not yet freed up that capacity to be assigned a new task so they can take time to write notes etc.
  • WorkerがTaskを完了すると許容量が解放され、処理が繰り返されます。



タスクルーターをアプリケーションに統合して、次の API を使用してタスクルーターを管理できます。


誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。