メニュー

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 を割り当てます。

Taskの作成中にTask Channelを使用するのに加えて、各TaskChannelを処理できるWorkerのキャパシティーも構成できます。 たとえば、Workerに最大1つの Voice 通話と同時に3つの Chat リクエストを処理するようにしたいといったことが考えられます。 この構成はTwilio Consoleで各Workerインスタンスに移動するか、REST APIを使用することで簡単に実現できます。 加えて、特定のTaskのタイプをキャパシティーを0に設定することなく、一時的にWorkerを利用不可にすることができます。 たとえば、音声通話のQueueがパンクしたときは、音声通話のTask処理に集中させられるよう、一時的に一部のWorkerを他のTaskChannelに対して利用不可状態にする必要があるかもしれません。

メモ: マルチタスク機能では、TaskRouterが適切なTaskChannelに利用可能な負荷に基づいてTaskを割り当てられるよう、常にWorkspaceのWorkerをアイドル状態などの利用可能なActivityにしておくことが必須である点に注意してください。 加えて、WorkerにTaskがReservationされ、その後そのTaskを承諾する際、TaskRouterは自動でWorkerのActivityを変更しません。

この時点でWorkerの利用可能性、キャパシティーの構成、およびTaskQueue内のTaskの種類に基づいて、TaskRouterは各Workerに適切なTaskのReservationを作成します。Workerが複数の異なるタイプのTaskを処理するよう構成されている場合、TaskRouterは引き続き、あるChannelのキャパシティーが最大になっていても、そうではないChannelにWorkerに対してReservationを作成します。たとえば、Workerが音声通話のTaskを処理しており、新規のチャットTaskがやってきたとき、TaskRouterはチャットChannelのキャパシティーにゆとりがある場合Workerに対してReservationを作成します。

In reality you may want to block worker from handling anymore 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

この属性は指定されたChannelに対して構成されたWorkerの現在のキャパシティーを返します。 たとえば、Workerのチャットのキャパシティーが3に、音声通話のキャパシティーが1に設定されている場合、 worker.channel.chat.configured_capacity は3を、 worker.channel.voice.configured_capacity は1をそれぞれ返します。

worker.channel.<Task Channel>.assigned_tasks

This attribute returns 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

この属性は指定されたChannelのWorkerに対して現在の利用可能なキャパシティーを0〜100の範囲内で返します。 0はWorkerがそのChannelに対して手一杯であることを示し、100はそのChannelに対してフルに利用可能であることを示します。 たとえば、Workerが1つの音声通話Taskと3つのチャット Taskをを処理できるように構成され、現在1つの音声通話Taskのみが割り当てられている場合、 worker.channel.voice.available_capacity_percentage は0を、 worker.channel.chat.available_capacity_percentage は100を返します。

つまり、

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

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

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

このシナリオでは、現在音声通話のTaskがアサインされている場合はチャットTaskの受信からWorkerを除外することが必要です。これを行うには、下記のTarget Worker Expressionを記述します。

worker.channel.voice.available_capacity_percentage == 100

また、上記のExpressionと同じことを行う下記のようなExpressionも記述できます。

worker.channel.voice.assigned_tasks == 0

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

このシナリオでは、Workerが1個以下のチャットTaskを処理中に音声通話Taskを受信できるようにしたいと思います。これを行うには、下記のTarget Worker Expressionを記述します。

worker.channel.chat.assigned_tasks <= 1

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

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

このシナリオでは、WorkerがIP Messaging Taskについて50%の繁忙率であった場合に、SMS Taskを処理できるようにしたいと思います。 これを行うには、下記の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
  • 初期値

カスタムチャネルの作成方法

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

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

Workerが利用可能なActivity内に存在しない場合、TaskRouterは、そのWorkerにTaskを割り当てることができず、マルチタスク処理がオンの場合に複数のTaskを取り組めるようになるようにするため、Workerを待ち受け可状態を維持することが重要です。 しかし、TaskRouterは利用可能なキャパシティーを捕捉し、Workerに許容できる以上のTaskを割り当てないようになっています。

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

これは完璧に許容できるユースケースであり、その場合新規Taskの割り当てをストップさせます。 Workerが一時的にTaskを受信しないようにしたい場合、TaskRouterがTaskの割り当てをストップさせるよう、「Busy」などの利用不可ActivityにWorkerを移動させてください。 しかしWorkerは既存のTaskを引き続き処理、完了できます。

チャネルキャパシティーが利用可能になった際に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 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. Workerが取り組むTaskを選択する際、そのTaskに新規の属性を2つ追加します。 manual(という名前の)属性の値を1とし、worker_sidにWorkerのSIDを設定します。
  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タグのついた情報から欲しいものを探してみましょう。