メニュー

マルチタスキング

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.

よくある質問

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

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

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

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

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

How can I create a custom channel?

You can create Task Channels via the REST API.

マルチタスク処理の使用時、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がそれを知る方法

When a worker accepts a reservation and the Task is assigned to the worker, the available capacity for the worker is decremented by 1. Once Task is moved to complete assignment status, TaskRouter automatically increments the available capacity by 1. You can move a Task to complete status by using either the REST API or using the completetask() function in taskrouter JS SDK.

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.

Can I disable Multitasking?

If your Twilio project was created prior to December 19, 2019, you may be able to disable/re-enable Multitasking. Multitasking is a workspace level setting, and you can enable/disable by navigating to Workspace/Settings in Console or REST API. Once you enable Multitasking and made all the changes, if for any reason you need to disable Multitasking, simply change it from the Console. All the Capacity you’ve configured for the workers will remain when you enable Multitasking again.

高度なユースケース

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

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 the 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までメールをお送りください。

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

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

  1. Set a Worker Attribute called sid and set its value to the SID of the worker returned by Twilio (this will be automatically available in the future without manually setting).
  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 channel == \"chat\"",
        "targets": [
          {
            "queue": "WQ9e9572cbd73269f7c1f6c99645f14611",
            "expression": "task.worker_sid = worker.sid",
            "priority": "1000"
          }
        ]
      },
      {
        "filter_friendly_name": "All other chats",
        "expression": "channel == \"chat\"",
        "targets": [
          {
            "queue": "WQ9e9572cbd73269f7c1f6c99645f14611",
            "expression": "worker.channel.chat.available_capacity_percentage < 75",
            "priority": "50"
          }
        ]
      }
    ]
  }
}

taskrouter_multitasking_advanced_manually_grab_workflow.png

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

ページを評価:

ヘルプが必要ですか?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.

フィードバックくださりありがとうございます!

Please select the reason(s) for your feedback. The additional information you provide helps us improve our documentation:

Sending your feedback...
🎉 Thank you for your feedback!
Something went wrong. Please try again.

Thanks for your feedback!

Refer us and get $10 in 3 simple steps!

ステップ1

Get link

Get a free personal referral link here

ステップ2:

Give $10

Your user signs up and upgrade using link

ステップ3

Get $10

1,250 free SMSes
OR 1,000 free voice mins
OR 12,000 chats
OR more