メニュー

Expand
Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

マルチタスキング

Multitasking extends the power of TaskRouter by allowing workers to handle parallel tasks. In a typical call center environment agents may be handling both voice calls and messaging requests (chat, SMS, Facebook, etc ...). While it’s unlikely that workers need to handle more than one voice call at a time, you may want workers to be able to handle multiple tasks of different types - whether messaging, email, etc. Multitasking provides the logic for you to specify in what way you want workers to be able to work on more than one task at a time.

マルチタスク処理がオンにされたWorkspaceでは、全Taskは利用可能なTaskChannel(Voice、SMS、Chat、Video、あるいはDefault)に割り当てられます。 Taskの作成時は、APIで適切なTaskChannelの一意な名前を提供することで、Taskのタイプを指定できます。 また、Twilio製品のいずれかでTaskが作成された場合、TaskRouterは適切なTaskChannelに自動的にそれを割り当てます。たとえば、Taskが <Enqueue> 動詞を使用してProgrammable Voiceで作成された場合、TaskChannelには Voice が設定されます。Taskの作成時にTaskChannelが与えられなかった場合、TaskRouterはTaskChannelとして Default を割り当てます。

In addition to using Task Channel while creating Tasks, you also need to configure the worker’s capacity to handle each of these TaskChannels. For example, you may want a worker to handle a maximum of 1 Voice call, but 3 Chat requests. This configuration can be easily done from within the Twilio Console by navigating to each worker instance, or by using the REST API. In addition, you can temporarily make a worker unavailable to handle specific task types without setting their capacity to 0. For example, if your Voice Queue is getting busy, you might want to make some workers unavailable to handle other TaskChannels so that they can focus on handling Voice tasks.

Note: Please keep in mind that, in a Multitasking Workspace workers must always remain in an available activity such as Idle so that TaskRouter can assign tasks based on their available capacity for appropriate TaskChannel. In addition, TaskRouter does not automatically change the worker’s activity state when they are reserved with a Task and later accepted the task.

At this point based on the worker’s availability, configured capacity and type of Task in TaskQueues, TaskRouter will create reservations for appropriate Tasks for each of the workers. If workers are configured to handle Tasks of multiple different types TaskRouter will continue to create reservations for workers for each channel type that is not at maximum capacity, even if they are busy with one channel. For example, if a worker is currently handling a Voice task and a new Chat Task arrives, TaskRouter will create a reservation for the worker if the worker still has available capacity for Chat TaskChannel.

In reality, you may want to block workers from handling any more Tasks if they are busy with Voice Task. To address this use case TaskRouter provides the following pre-defined attributes that you can use to write an appropriate Target Worker Expression in a Workflow.

worker.channel.<Task Channel>.configured_capacity

This attribute returns the current configured capacity of a worker for an appropriate channel. For example, if a worker’s Chat capacity is configured to 3 and Voice capacity is configured to 1 then, worker.channel.chat.configured_capacity returns 3 and worker.channel.voice.configured_capacity returns 1.

worker.channel.<Task Channel>.assigned_tasks

This attribute returns the total number of tasks that are assigned (this includes states "pending", "accepted" and "wrapping") to a specific channel for the worker. For example, if the worker is currently handling 2 Chat Tasks and 0 Voice Tasks then, worker.channel.chat.assigned_tasks returns 2 while worker.channel.voice.assigned_tasks returns 0.

worker.channel.<Task Channel>.available_capacity_percentage

This attribute returns the appropriate channel’s current available capacity between 0 and 100 for a worker, where 0 means the worker is capped out handling Tasks for the channel and 100 means the worker is fully available to handle Tasks for the channel. For example, if a worker is configured to handle 1 voice Task and three Chat Tasks and is currently assigned to one Voice Task but not assigned to any other Tasks, worker.channel.voice.available_capacity_percentage returns 0 while worker.channel.chat.available_capacity_percentage returns 100.

つまり、

worker.channel.chat.available_capacity_percentage = Math.floor((1 - (worker.channel.chat.assigned_tasks/worker.channel.chat.configured_capacity))*100 )

下記のようなユースケースに対応するためにこれらの属性がどのようにしようできるか見ていきましょう。

Workerに対して、音声通話Taskの処理中にチャットTaskを受信することを防ぐ

In this scenario, we want to filter out workers from receiving Chat Tasks if they are currently assigned to Voice Task. To do that we will write the following Target Worker Expression,

worker.channel.voice.available_capacity_percentage == 100

Alternatively, we could also write the following expression which does the same thing as the above expression,

worker.channel.voice.assigned_tasks == 0

WorkerがチャットTaskを0個または1個処理している場合、音声通話Taskを受信することを許可する

In this scenario, we want to make workers available to receive Voice Tasks as long as they are handling one or fewer Chat Tasks. To do this we will write the following Target Worker Expression,

worker.channel.chat.assigned_tasks <= 1

このExpressionは1つ以下のチャットTaskを処理しているWorkerに対してのみ音声通話Taskをルーティングします。

他のChannelで50%の負荷があるWorkerにのみTaskを受諾できるようにします。

In this scenario, we want to make a worker available to handle SMS Tasks if they are only 50% busy with Chat Task. To do this we will write the following Target Worker Expression,

worker.channel.chat.available_capacity_percentage <= 50

このExpressionではチャットTaskについて50%の繁忙率のWorkerに対してSMS Taskをルーティングします。

例: Workerが4個のチャットTaskを処理するよう構成されており、現在2個の Chat Taskが割り当てられている場合、 worker.channel.chat.available_capacity_percentage is 50 となり、他のChannelからのTaskを受信できるようになります。しかし、Workerが3個の Chat Taskを処理するよう構成されており、現在2個の Chat Taskが割れ当てられている場合、 worker.channel.chat.available_capacity_percentage is 66 となり、他のChannelからのTaskは受信できなくなります。

これらは、ご自身のユースケースで適切なルーティングを決定できるようにするため、Workflowにおいてどのようにこれら定義済み属性を使用できるかをお見せするほんの一例にしかすぎません。

詳細については、下記のFAQおよびRESTドキュメントを参照してください。 さらにご質問がある場合、またマルチタスク機能についてフィードバックや機能リクエストを提供したい場合は、twilio_support@kdd-web.comまでメールをお送りください。

よくある質問

マルチタスク処理をオンにする方法

マルチタスク処理はWorkspaceレベルの設定であり、Console内のWorkspace / 設定、またはREST API経由でオン/オフできます。

マルチタスク処理をオンにし、Workerのキャパシティーを構成したあと、これを一時的にオフにしたい場合

マルチタスク処理をオンにして全ての変更を行い、その後に何らかの理由でマルチタスク処理を無効にする必要が生じた場合は、Consoleからオフにできます。 Workerに構成した全キャパシティーは再度マルチタスク処理を有効にした際にも保持されます。

TaskChannelとは何で、どのようにしようするのか

Task Channelは基本的には様々なTaskのタイプ、すなわち音声通話やビデオなどなどです。 Taskの作成時は音声通話が発信源の場合、TaskChannelに「Voice」が設定され、「Voice」Taskに基づいてTaskRouterは利用可能なWorkerを探すことができます。

マルチタスク処理がオンの場合に利用可能なチャネルについて

現在、既定で下記のチャネルを作成します。

  • Voice
  • SMS
  • Chat
  • Video
  • 初期値

How can I create a custom channel?

Please stay tuned, custom channels are coming soon ... If you need one sooner, contact support with your use case.

マルチタスク処理の使用時、WorkerがActivityを変化させない理由

TaskRouter cannot assign any Tasks to workers unless a worker is in an available activity and since a worker needs to be able to work on multiple tasks when Multitasking is enabled, it’s important to keep the worker Idle. However, TaskRouter will keep track of the available capacity and will not assign more tasks than allowed for a worker.

マルチタスク処理をオンにした状態でWorkerをビジー状態にした場合どうなりますか?

This is a perfectly acceptable use case and it will immediately stop TaskRouter from assigning any new Tasks. If a worker wants to temporarily not receive any Tasks, move the worker to an unavailable activity such as Busy so that TaskRouter stops assigning Tasks. However, the worker can continue to work on existing Tasks and complete them.

チャネルキャパシティーが利用可能になった際にTaskRouterがそれを知る方法

WorkerがReservationを受諾し、TaskがそのWorkerに割り当てられると、そのWorkerの利用可能キャパシティーはひとつずつ減少していきます。 Taskが完了割当ステータスに移動されると、TaskRouterは自動的に利用可能キャパシティーをひとつずつ増加させます。 REST APIまたはtaskrouter JS SDKのcompletetask()関数を使用して、Taskを完了ステータスに移動させることが可能です。

TaskをTask Channelごとに分類できますか?

現在はサポートされていませんが、間もなく利用可能になります。

マルチタスク処理の使用時、どのような統計が提供されますか?

You can continue to expose the existing statistics and we will provide more Task Channel specific statistics soon. If you have a request for some specific statistics and metrics please contact support.

高度なユースケース

このセクションは様々なユースケースについてお話しし、マルチタスク処理を使用してどのようにそれを実装するかについて触れています。

自動で割り当てられるTaskのほか、Workerが手動でTaskを取得できるようにする

TaskRouterでよくお問い合わせをいただくユースケースは、「自動でTaskRouterからプッシュされてくるTaskを受信する傍ら、Workerが手動でTaskQueueからTaskを拾う方法」についてです。 チャットのTaskをWorkerにルーティングする例を考えてみましょう。 チャットをWorkerに自動で割り当てるほか、ダッシュボードに全Queueを公開して彼らが自由裁量でQueueからさらにTaskを手動で取り出すことができるようにしたいかもしれません。 マルチタスク処理を使用してこれをどのように行うのかご説明しましょう。

  1. sidという名前のWorker属性を設定し、それにTwilioから返されたWorkerのSIDを保存します(これは将来、手動で行わなくても自動で利用可能になる予定です)。
  2. Taskの一覧APIを使用して、チャットQueue内の保留中の全Taskを表示し、チャットQueueとTaskの割り当てステータスでフィルターします。
  3. When a worker selects a Task to work, add two new attributes to the Task. Set manual with the value of 1, and worker_sid to the SID of the worker.
  4. 下記のようなWorkflowを作成します。
{
  "task_routing": {
    "filters": [
      {
        "filter_friendly_name": "Manually grabbed by Workers",
        "expression": "manual == 1 AND task_channel_unique_name == \"chat\"",
        "targets": [
          {
            "queue": "WQ9e9572cbd73269f7c1f6c99645f14611",
            "expression": "task.worker_sid = worker.sid",
            "priority": "1000"
          }
        ]
      },
      {
        "filter_friendly_name": "All other chats",
        "expression": "task_channel_unique_name == \"chat\"",
        "targets": [
          {
            "queue": "WQ9e9572cbd73269f7c1f6c99645f14611",
            "expression": "worker.channel.chat.available_capacity_percentage < 75",
            "priority": "50"
          }
        ]
      }
    ]
  }
}

マルチタスク処理のWorkflow

This workflow assigns a high priority to manually selected tasks and then applies Target Workers Expression to look for worker where the task.worker_sid matches the sid of the worker. Any other task would be added to the queue with lower priority and are routed by TaskRouter based on the worker capacity.

他の側面として、自動割り当てされたTaskの処理用にWorkerが持つキャパシティーを制御すること、そしてなお手動で割り当てられるTaskをこなせる空きキャパシティーがあるようにすることがあります。 Target Worker ExpressionではTaskRouterはWorkerの利用可能キャパシティーが75(パーセント)以下の場合のみ、Reservationを作成することにきづかれるでしょう。 手動でTaskを取ってこれるよう、いくばくかのキャパシティーをWorkerに残しておくことが重要です。 これはまた、TaskRouterによって自動で予約されるTaskと、Workerが手動で取ってくることを許可するTaskとの割合を決める場所でもあります。 たとえば、Workerがチャットのリクエストを処理するキャパシティーの合計が4に構成され、3つまでのTaskをTaskRouterに割り当てさせつつ、1つのTaskを手動でWorkerに取ってこれるようにするためのターゲットWorker Expressionは、以下のようになります。 worker.channel.ipm.available_capacity_percentage < 75一方、Workerに2つまでTaskを手動で取ってこれるようにし、かつ自動的に2つまでTaskを割り当てたい場合は、Target Worker Expressionは以下のようになります。 worker.channel.ipm.available_capacity_percentage < 50

Rate this page:

ヘルプが必要ですか?

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