2022.04.11
「Task Router」とは?Twilioで実装できるスキルベースルーティングの基礎
企業とユーザーを結ぶコミュニケーションの窓口として、いまや欠かせない存在となったコールセンターやコンタクトセンター。日々多くのお問い合わせを受ける中で、「問い合わせ内容に応じて、最適なオペレーターに担当を振り分けたい」と思ったことはありませんか?
Twilioが提供している「TaskRouter」を使えば、それぞれの問い合わせに対して最適な対応ができるオペレーターをあてがう、スキルベースのルーティングシステムを実装できます。
本記事ではそんな「TaskRouter」の基礎について、初めての方にもわかりやすいようご説明していきます。
目次
- TaskRouterとは?
- TaskRouterでできること
- 覚えておきたい基本要素
- タスクがオペレーターに振り分けられる流れ
- タスクが完了するまでのサイクル
- 実際にワークスペースを作ってみよう!
- タスクがワーカーに届くかやってみよう
TaskRouterとは?
TaskRouterは、コンタクトセンター向けのスキルベースルーティングをコードで制御できる機能です。問い合わせに付加された属性に基づいて、どのオペレータにその対応を割り当てたいかをワークフローで設定できます。
大きな特徴として挙げられるのはマルチチャネル対応である点です。音声通話やSMSだけでなく、チャットやSNS、ビデオ通話などによるお問い合わせ(=タスク)もコントロールできます。
またオペレーターの対応時間や放棄呼といった、レポートの構築に必要となるあらゆる統計情報の保持も可能です。あわせてシステム内の全タスクの内容や状況も自動で把握できるため、各パフォーマンスを監視して、顧客対応の品質向上に役立てられるというメリットもあります。
TaskRouterでできること
TwilioのTaskRouterではどのようなことができるのか、主な機能について見ていきましょう。
マルチタスク機能
各オペレーターが同時に対応するタスクの数を指定できます。
チャネルごとに異なる制限を設けられるほか、マルチチャネルの同時利用も可能なため、「チャットの問い合わせを3件並列で対応する」「電話対応中にチャットで別の問い合わせに対応する」など、オペレーターのマルチタスクを実現できます。
ルーティング機能
オペレーターのスキルをあらかじめ設定・更新しておくことで、各タスクに対して、最適な対応ができるオペレーターを自動でマッチングする機能です。タスクのルーティングはTaskRouterがおこなうため、個別にコードを変更する必要がありません。
そのほかにも、緊急時の優先順位を設定しておくことで、即座に解決できる担当者にタスクを割り当てる……といった効率的な動きも実現できます。
覚えておきたい基本要素
ルーティング機能を構築するにあたって、まずはTaskRouterがどのような構成になっているかを確認しておきましょう。
ワークスペース
ワークスペースはコンタクトセンター全体のコンテナ部分です。 すべてのタスクキュー、ワーカー、ワークフローなどを管理します。
ワークフロー
ワークフローはTaskRouterの頭脳にあたる部分です。入ってきたタスクに書かれた属性を判定し、最適なタスクキューやワーカーにルーティングする処理をおこないます。
各タスクを最も適切なワーカーへ割り振るためのフィルターで構成されている、重要な部分です。
タスクキュー
タスクキューはタスクを一時的に保管しておく場所です。そしてタスクキューにはワーカーを紐づけておけるため、「専門のスキルを持ったワーカーのグループ」をタスクキューに関連付けておくことで、入ってくるタスクを分類・グループ化することができます。
たとえば「営業」という名前のタスクキューを作成し、営業の知見・スキルを持つワーカーを紐づけておくとしましょう。そうすればこの「営業」タスクキューに届いたタスクは、必然的に専門的なスキルに秀でたワーカーが対応・処理することになります。
ワーカー
ワーカーは、入ってきたタスクに実際に応対する担当者のことです。コールセンター・コンタクトセンターにおけるオペレーター、というのがわかりやすい例でしょう。
各ワーカーの属性のJSONオブジェクトは任意であり、完全にカスタマイズ可能です。たとえば下記のように、言語や対応スキル、タスクの転送先(電話番号、SIP URI、UserID)などをJSON形式で設定できます。
{
"languages": ["es", "en"],
"skills": ["sales", "support"],
"contact_uri": "+0123456789",
}
ただしJSONオブジェクトにはサイズ制限(4KB)があります。振り分けに必要な最低限の情報のみを記載するようにしましょう。
タスク
タスクは、TaskRouterによって処理される単一の作業項目を表すオブジェクトです。コールセンター・コンタクトセンターにおける、顧客からかかってくる問い合わせの電話などのことを言います。
タスクは通話に限らず、SMSテキストや外部システムによって作成されたアラートなども含まれます。特定のTwilio製品またはAPIに関連づける必要はありません。
ワーカーと同じように、タスクにも任意のJSONオブジェクトで表される属性を設定できます。TaskRouterのセットアップ中にこれらの属性を使用するルールを定義し、タスクのルーティングと割り当ての方法を決定するのです。
なおタスク属性にも4KBのサイズ制限があるため、ルーティングに必要な情報のみの追加をおすすめします。
タスクが振り分けられる流れ
TaskRouterにおいて、どのような流れでタスクがルーティングされていくのか、実際に見ていきましょう。
①タスクが発生、ワークフローに届く
新規のタスクが発生すると、まずワークフローに届きます。
②タスクに付与されている属性に応じてフィルターにかけられる
タスクに付与されている属性(画像では「セールス」の問い合わせとなっています)に応じて、最適なタスクキューへ送るためのフィルターにかけられます。
③タスクキューから適応するスキルを持つワーカーにタスクが振り分けられる
タスクがタスクキューまで届いたら、タスクキューに関連付けられているワーカーの中から、タスクの属性とマッチする担当者が選ばれます。
タスクが完了するまでのサイクル
前項ではタスクがワーカーのもとに届くまでの流れを見ていきました。続いては、実際にタスクが処理されて完了するまでのサイクルについて見てみましょう。
①Pending→Reserved
タスクがルーティングを終えた状態で生成(Pending)されると、まず対応可能なワーカーを予約する(Reserved)状態になります。
ここでワーカーからの応答を得られずタイムアウトになったり、対応できないとして予約拒否されると、再びPendingに戻ります。そして次の候補となるワーカーへの予約を開始します。
どのワーカーにも予約できないままタイムアウトになると、そのタスクはキャンセルされたものとして5分後に消えてしまいます。
②Reserved→Assigned
予約されたワーカーがタスクに対応(Assigned)します。
③Assigned→Wrapping→Complete
タスク対応を終えたワーカーが、通話やチャットの終了後に対応記録を入力(Wrapping)します。
そうしてタスク対応が完了(Complete)されると、そのタスクは5分後に自動で消えます。
実際にワークスペースを作ってみよう!
それでは、実際にTwilioのコンソール画面からTaskRouterのワークスペースを作ってみましょう。
①「Workspaces」を開く
管理画面のメニューから「TaskRouter」を選択して「Workspaces」をクリックすると、下記のような画面が開きます。
「Create a Workspace」をクリックしてワークスペースを作りましょう。
②プロパティを設定する
ワークスペースの名前と、テンプレートを選択します。テンプレートは「Custom」か「Standard Workspace」のいずれかを選べます。なおデフォルトの「Standard Workspace」では、一般的な操作をサポートするためのキューとワークフローを備えたワークスペースを作成できるようになっています。
TaskRouterはワークスペースの状態変化ごとにイベントを生成します。JavaScript SDKを使用すると、これらのイベントをフロントエンドのアプリケーションを定期配信することが可能です。
イベントコールバックは、これらのイベントに応答するためのサーバー側の手段となります。どのURLにコールバックさせるか、またどのイベントをコールバックするかを選択しましょう。
ひと通り入力できたら「Save」を押します。
作ったワークスペースの概要ページが開きました!ここからタスクキュー、ワークフロー、ワーカーの属性を設定していきます。
③ワーカーの設定をおこなう
まずはワーカーの設定をおこないます。サイドカラムの「workers」を選択し、「Create new Worker」をクリックしてください。
ここでは下記の内容について設定が可能です。
Worker Name | ワーカーの名前 |
Activity | ワーカーの(現在の)状態 |
Attributes | ワーカーの属性 |
Activity
Activityは自由に追加作成できるため、ワーカーの状態を細かく設定することで「誰がどのような対応状況か」を詳しく管理できるようになります。ちなみに初期設定では下記の3つが選択肢として用意されています。
- Offline(不在)
- Available(対応可能)
- Unavailable(対応不可)
Attributes
ワーカーの属性は先述の通り、言語やスキルなどをJSON形式で記述します。
画像の例ではわかりやすいように簡素化して、「営業とサポートのスキルを持つ」「言語は英語を用いる」ワーカーであることを記述しています。ちなみに"contact_uri"はワーカーの連絡先を示す属性で、どのワーカーを呼び出すか? を示すために必要な情報となります。
「save」をクリックするとそのワーカーのSIDが発行され、より細かな設定をおこなえるようになります。スクロールして以下の設定を見ていきましょう。
こちらは電話やチャット、SMS、ビデオ通話などの各チャネルのタスクに対して、このワーカーが「同時に何件の処理を受け付けるか」を決める項目です。ワーカーの処理能力に合わせて設定しましょう。
またこのワーカーがどのタスクキューに関連付けられているかもここで確認できます。画像ではデフォルトで設定されている「Sample Queue」が表示されていますが、ご自身で独自のタスクキューを設定して「どのワーカーにタスクを振るか」を指定すれば、そちらにも紐づけられます。
④タスクキューの設定をおこなう
続いてはタスクキューの設定についてご紹介します。
まずはサイドカラムから「タスクキュー」を選択し、+マークをクリックして新規のタスクキューを作成します。
ここではタスクキューの名前やタスクを割り振る順番などを設定します。主な設定項目は下記の通りです。
Task Order
タスクキューに入ってきたタスクを、どのような順番で割り振って処理していくかを設定します。選べるのは下記の2パターンです。
- First In,First Out(古いタスクから処理する)
- Last In,First Out(新しく来たタスクから処理する)
Activity
タスクがReserveおよびAssignの状態になった、つまりワーカーのもとにタスクが届いているとき、ワーカーをどのような状態にするかを設定できます。
こちらも自由に追加作成できますが、初期設定では下記の3つがあります。
- Offline(不在)
- Available(対応可能)
- Unavailable(対応不可)
デフォルトではワーカーがタスクの対応をしている最中に別のタスクが入ってこないよう、Offlineに設定されています。
Max Reserved Workers
タスクを同時に何人に予約するかを指定できます。通常は1つのタスクにつきひとりのワーカーが呼び出されますが、同時に複数のワーカーを呼び出したい場合にはここで設定を変えられます。
デフォルトは1ですが、最大で50まで選ぶことが可能です。
ちなみにここで「複数のワーカーを呼び出す」設定にした場合、タスクキューに入ってきたタスクは複数の予約タスクとして分割されます。そしてもっとも早く対応されたタスクのみが割り当て済みとなり、そのほかの予約タスクは無効になります。ひとつのタスクが複数のワーカーによって、重複して処理されてしまうことはありません。
Queue expression
どの属性を持ったワーカーにタスクを割り振るかを決定できます。画像の例では、skillsに「support」の属性を持ったワーカーにルーティングされるよう記述されています。
すべての項目を埋めたら、「Save」をクリックしましょう。
⑤ワークフローの設定をおこなう
次にワークフローの設定をおこないます。サイドカラムから「Workflow」を選択し、+マークをクリックして新規のワークフローを作成しましょう。
WORKFLOW NAME | このワークフローの名前 |
TASK RESERVATION TIMEOUT | 次の一致するワーカーに移動する前に、タスクを予約する必要がある時間の値 |
ASSIGNMENT URL | タスクがワーカーに予約されているときに呼び出すWebhookURL |
FALLBACK URL | 割り当てコールバック後に200の応答が得られない場合に試行するフォールバックURL |
スクロールすると、タスクを適切なタスクキューへ割り振るためのフィルターを設定する項目が出てきます。なおルーティングはタスクの属性を利用しておこなわれます。
ワークフローではご自身で自由にルールを定義でき、それらをフィルターとして管理します。「Add a Filter」をクリックしましょう。
ここで、タスクがワーカーに割り振られるまでの各段階について設定できます。このフィルターを詳細に設定することで、「最初にどのタスクキューにタスクを入れるか」「タスクを最初に入れたタスクキューで誰も応答できなかった場合、次はどこのタスクキューに入れるか」といったフローを細かく決められます。
MATCHING TASKS
このフィルターで処理するタスクの条件を指定します。ここに処理したいタスクの属性を記入しておくことで、属性の一致するタスクのみがフィルターを通過してタスクキューへと渡されるようになります。
たとえばここに
という条件を記載しておくとしましょう。するとこのフィルターでは、「selectの値がsupport」の属性を持つタスクだけが一致するというわけです。ちなみにこの「selected」はご自身のお好きな値に書き換えられます。
MATCHING WORKERS
上記の条件に一致したタスクの処理を指定する項目のうち、タスクと実際にマッチングするワーカーについての設定を決められます。
TASK QUEUE |
どのタスクキューへ割り振るか |
KNOWN WORKER |
特定のワーカーを指定したい場合に、名前かSIDで選べる |
EXPRESSION |
選択したタスクキュー内から、どの属性のワーカーへ割り振るか |
ORDERING |
予約作成時に、ワーカーを並び替える属性と昇順・降順を指定する |
TIMEOUT & PRIORITY
条件に一致したタスクの処理を指定する項目のうち、次の処理に移る条件としてのタイムアウト値や優先順位を指定できます。
SKIP TIMEOUT |
一致するワーカーがすぐに見つからない場合、タイムアウトを待たずに次のルーティングステップに移行するかどうか |
TIMEOUT |
一致するワーカーを見つけようとしているときに、このルーティングステップで待機する秒数 |
PRIORITY |
タスクを処理する順番 |
また最後の項目では、デフォルトでタスクを送るタスクキューも決められます。画像では「None」になっていますが、タブから先ほど作ったタスクキューを選択することも可能です。
タスクがワーカーに届くかやってみよう
ここからは、先ほど設定したルーティング設定が正しく動くかどうかをチェックします。タスクがきちんとワーカーのところまで割り振られ、アサインされるか見てみましょう。
①タスクを作る
まずはタスクを作ってみましょう。タスクもコンソール画面上で作成できます。サイドカラムから「Tasks」を選択し、「新規Taskの作成」をクリックします。
すると下記の画面になり、タスクのプロパティを設定できます。
WORKFLOW
どのワークフローに渡すかを選べます。選択肢の部分にはデフォルトのワークフローのほか、先ほどご自身で作成したワークフローも出てきます。
TASKCHANNEL
このタスクがどのチャネルから来たものかを設定できます。選べるチャネルは下記のいずれかです。
- デフォルト
- Voice
- Programmable Chat
- SMS
- Video
PRIORITY
このタスクを何番目に処理するのか、優先順位を決められます。横の▲▼をクリックすると数字が動きます。
属性
タスクを最適なワーカーに割り当てるために必要なタスクの情報です。先述の通り、JSONで記述します。ここでは例として、selectedの値がsupportであるタスクにしています。
TIMEOUT
タスクが存続できる時間を秒単位で設定できます。
必要事項を埋めて「Save」をクリックすると、下記の画面に遷移します。選択したワークフローに応じて、そのワークフローのフィルターで設定したタスクキューもここに表示されるようになっています。
これで、タスクがタスクキューに届いて「Pending」状態になりました!
②ワーカーを応答可能な状態にする
まずは「Workers」から該当するワーカー(画像の例ではtest hanako)のページを開き、「Activity」を「Available(対応可能)」にします。
続いて「Tasks」から先ほど作ったタスクを開くと、ページ下部にワーカー「test hanako」への予約(Reserved)が完了しているのがわかります。
ここで予約に対して「Accept(受諾)」するか「Reject(拒否)」するか選べますので、「Accept」をクリックしましょう。ダイアログが出ますが続けてください。
再び該当のタスクを開くと、画面下にタスクの状態が出ます。「accepted」になっていれば成功です!無事にタスクがワーカーのところへ割り振られ、Assign状態になりました。後はワーカーがタスクに対して応答を開始し、処理をおこなえば完了です。
まとめ
スキルベースルーティングを1から構築するとなると、大幅な時間と工数がかかります。しかしTwilioのTaskRouterを利用すればコンソール上で振り分け設定をおこなえるため、開発のコストを減らすことができます。
実際にシステムへ実装する際は別途コードを書く必要がありますが、ルーティング機能を手軽にご利用いただけることがお分かりいただけたのではないでしょうか。
ご興味がございましたら、ぜひこの機にTaskRouterを触ってみてくださいね!

KDDIウェブコミュニケーションズは、日本初のTwilioパートナーとして常に「開発者目線」を大切にしており、ブログ記事がお役に立てれば幸いでございます。
-
Twitter:https://twitter.com/twilioforkwc