2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。

はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズの Twilioエバンジェリストの高橋です。

Twilio Flex Advent Calendar 2021 8日目の記事となります。
前回までの記事で、ワーカーの管理方法まで解説をしたので、今回は着信した電話をどのように振り分けるかについて説明していきます。

ACDとは

コンタクトセンターにおける着信の振り分けは、ACD(Automatic Call Distributor: 着信呼自動分配)と呼ばれます。
ACDの目的は、最適なオペレーターにコールを割り当てることにあります。

そのためには、実際にオペレーターに割り当てる前に発信者が誰なのか、どのような目的で電話をしてきたのかを知る必要があるかもしれません。
発信者が誰かを知るために、電話番号を使って判定することができます。具体的なやり方については、以下の記事を参考にしてください。
Twilio Flexの始め方(GoogleSpreadsheet連携編)

また、着信時にIVRを使って要件を確認することもできます。具体的なやり方については、以下の記事が参考になります。
Twilio Flexの始め方(IVR編)

Twilio Flexには、スキルベースのタスクルーティングが可能なTaskRouterが用意されていますので、スキルの有無やレベルに合わせたACDなども実装することができます。

具体的なACDの実装

今回は、以下のシナリオを沿ってTwilio Flex上でACDの設定をしていきたいと思います。

  • オペレーターは4名。
  • 営業案件に対応する営業グループのオペレーターが2名、既存ユーザーのサポートに対応するサポートグループのオペレーターが2名。
  • 営業グループの担当者のスキルレベルはそれぞれ異なるが、着信は均等に行いたい。
  • サポートグループの担当者もそれぞれスキルレベルが異なり、レベルの低い担当者を優先的に対応させたい。
  • それぞれのグループの担当者がすべて埋まっている場合は、別の担当グループでも対応できるようにしたい。

要件を図にすると以下のようになります。
ACD.png

スキルの設定

まずは、上記シナリオにあるグループ分けをするため、営業(Sales)とサポート(Support)の2つのスキルを作りましょう。

  • Twilio管理コンソール経由でFlexを起動します。管理者としてログインした状態になります。

スクリーンショット 2021-12-17 10.20.20.png

  • マネージメントパネルのASSIGNMENTの中にあるSKILLSボタンを押します。
  • 以下の図のように、2つのスキルを作成してください。

スクリーンショット 2021-12-17 10.22.39.png

ポイントは、それぞれのスキルにレベル(MIN:1、MAX:10)を設定するところです。
これによって、それぞれのワーカーにスキルレベルを与えることができるようになります。

ワーカーの設定

次に、それぞれの担当者(ワーカー)にスキルを設定していきます。

スクリーンショット 2021-12-17 10.25.45.png

  • ワーカーパネルを開いて、一人づつスキルを割り当てます。
  • サポート担当者には、それぞれスキルとして「Support」、一人はスキルレベルを「1」、もうひとりには、スキルレベルを「6」で割り当てを行います。
  • 営業担当者には、それぞれスキルとして「Sales」、スキルレベルもそれぞれ「1」と「6」に割り当てておきます。
  • それぞれの設定時にSaveボタンを押すのを忘れないようにしてください。

IVRの設定

次に、着信時に要件を聞き出すIVRを構築しましょう。
完成フローはこんな感じです。

スクリーンショット 2021-12-17 11.44.56.png

ポイントとなるところだけ説明していきます。

要件を聞き出す

Gather Input On Callウィジェットを使います。今回は「GetQuestion」という名前をつけました。
スクリーンショット 2021-12-17 11.46.30.png

特に難しいことはしていません。営業系の問い合わせは1を押させて、サポートは2を押させるようにしています。

変数でスキルを管理

今回は、入力された値(1か2)を判定して、Set Variablesウィジェット(「SetSkills」という名前をつけました)内で、文字列(SalesもしくはSupport)に変換して、変数に格納しています。

スクリーンショット 2022-02-26 9.05.22.png

Liquid Template Languageを使って、条件式を指定しています。

{% if widgets.GetQuestion.Digits == '1' %}Sales{% else %}Support{% endif %}

TaskのAttributeを設定

最後に、Send To Flexウィジェット(「SendCallToAgent」という名前にしてあります)内で、タスクの属性として変数の値を指定しています。

スクリーンショット 2021-12-17 11.51.50.png

Keyは、skillとし、Valueは変数の値({{flow.variables.skill}})を指定しています。

このフローを電話番号にアサインする作業をすれば、とりあえずIVRの部分は完成です。

TaskRouterの設定

この後いよいよACDを設定していきますが、その前に先程のIVRを経由して作成されたタスクのAttributesを確認してみましょう。

  • Twilio管理コンソールの左側のスライドメニューから、TaskRouterを選択します。
  • WORKSPACEから「Flex Task Assignment」のリンクを選択します。
  • Tasksメニューを選択します。

スクリーンショット 2021-12-17 12.53.09.png

  • 着信直後はタスクの一覧が表示されるので、そちらを選択します(しばらくするとタスクは削除されます)。

スクリーンショット 2021-12-17 12.56.48.png

タスクの詳細画面上に、属性が表示されます。以下はサンプルです(一部マスクしています)。

{
  "from_country":"JP",
  "called":"+1276xxxxxxxx",
  "to_country":"US",
  "to_city":"DAVENPORT",
  "type":"inbound",
  "to_state":"VA",
  "caller_country":"JP",
  "call_sid":"CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "skill":"Support",
  "account_sid":"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "from_zip":"",
  "from":"+8180xxxxxxxx",
  "direction":"inbound",
  "called_zip":"24217",
  "caller_state":"",
  "to_zip":"24217",
  "called_country":"US",
  "from_city":"",
  "called_city":"DAVENPORT",
  "caller_zip":"",
  "api_version":"2010-04-01",
  "called_state":"VA",
  "from_state":"",
  "caller":"+8180xxxxxxxx",
  "caller_city":"",
  "name":"+8180xxxxxxxx",
  "to":"+1276xxxxxxxx"
}

skillというパラメータと、SalesもしくはSupportという値が入っていることを確認しておきます。
また、このタスクが「Assign to Anyone」というワークフローに割り当てられていることも合わせて確認しておきましょう。

タスクキューの設定

では次に、ワーカーをグルーピングしてタスクを処理するためのキューの設定をしていきましょう。

  • TaskRouterのサブメニューにあるタスクキューを選択します。

スクリーンショット 2021-12-17 14.42.27.png

  • 青い+アイコンを押します。

スクリーンショット 2021-12-17 14.46.15.png

  • TASK QUEUE NAMEには、「Sales」と入力します。

  • MAX RESERVED WORKERSには「1」と入力します。これは、タスクを同時に何人に予約するかの指定です。デフォルトは1です。

  • QUEUE EXPRESSIONには、routing.skills HAS "Sales"と入力します。これは、ワーカーの属性としてrouting.skillsという配列に、Salesが入っている人を抽出するための条件文です。先程、スキルの指定をした際に自動的に表示されていたものと同じです。
    スクリーンショット 2021-12-17 14.50.30.png

  • Saveボタンを押します。画面上に、条件に一致するワーカーの一覧が表示されます。

スクリーンショット 2021-12-17 14.53.06.png

上記と同じように、今度はSupportというタスクキューを作成してみてください。

スクリーンショット 2021-12-17 14.58.12.png

ワークフローの設定

ACDの中心となるのが、ワークフローです。
今回は、先程のシナリオに沿ったACDを構築するために、新たにワークフローを作っていきましょう。

  • TaskRouterのサブメニューにあるWorkflowを選択します。
    スクリーンショット 2021-12-17 14.35.30.png

  • 青い+アイコンを押します。

スクリーンショット 2021-12-17 15.10.13.png

  • WORKFLOW NAMEに「Sales and Support」と入力します。
  • TASK RESERVATION TIMEOUTは「120」のままにします。これは、ワーカーが待受中にも関わらず、割り当てられたタスクを処理しないときのタイムアウト値です。デフォルトは120秒(2分)です。
  • Add Filterボタンを押します。

スクリーンショット 2021-12-18 9.49.01.png

  • Unnamed Filterと書かれた場所をクリックして、フィルターに「Sales」という名前をつけます。
  • MATCHING TASKには、skill == 'Sales'と入力します。これでタスクのskill属性がSalesのものが対象になります。
  • TASK QUEUEのプルダウンから、先程作成した「Sales」タスクキューを選択します。
  • SKIP TIMEOUTには、「1==1」を入力します。

☝️タイムアウトについて
フィルター内には、SKIP TIMEOUTTIMEOUTの2つのタイムアウト値が存在します。
SKIP TIMEOUTは、このステップ内でワーカーの割り当てができなかった場合に参照される条件です。今回は、1==1と指定しているので、「対応できるワーカーが不在のときは、このステップをスキップする」という条件になります。シナリオに該当するグループが対応できない場合は、別のグループにエスカレーションする要件があるため、このように設定しておくことで、ワーカーが空くの待たずに、すぐに別グループにエスカレーションされます。
一方、TIMEOUTは、タスクが予約されてからのタイムアウト値です。待受中のワーカーがタスクを処理しなかった場合のケースで、Noneにしておくとワークフローのデフォルト値(120秒)がタイムアウト値になります。

  • Add a Stepのリンクを押します。

スクリーンショット 2021-12-18 9.51.30.png

  • TASK QUEUEに「Everyone」をアサインしておきます。

このように設定することで、営業グループが全員埋まっている場合は、全員のタスクキューにタスクが割り当てられるようになります。

  • Add a Filterボタンを押して、同様にサポート用のフィルターも作成しましょう。

スクリーンショット 2021-12-18 9.53.24.png

サポートのシナリオについては、レベルの低い担当者を優先するというシナリオになっているため、ステップは3つ必要です。
前の2つのステップは、どちらもタスクキューに「Support」を割り当てますが、1つ目のステップのEXPRESSIONworker.routing.levels.Support < 6と入力しています。EXPRESSIONは、タスクキューにタスクを入れる際の条件を指定します。今回は、「サポートレベルが6より小さいワーカーをアサイン」という条件を指定しているため、このステップには、レベルの低いワーカーのみが選択されます。
もし、レベルの低いワーカーが不在の場合は、先程説明したSKIP TIMEOUTが参照され、条件が「1==1」なので、次のステップに遷移します。
次のステップでは、EXPRESSIONがデフォルトのAny available worker in queueになっているため、レベルに関係なくサポート担当者がアサインされるようになります。

  • Createボタンを押して、作成したワークフローを保存します。

Studioフローの修正

では最後に、IVR側の設定を修正しましょう。

スクリーンショット 2021-12-17 16.43.49.png

  • SendCallToAgentウィジェットのWORKFLOWのプルダウンから、今作成した「Sales and Support」を選択します。
  • Saveボタンを押します。
  • Publishボタンを押して、フローをパブリッシュします。

テスト

今回のシナリオをテストするためには、同時に4名でFlexにログインしておく必要があります。
Chromeブラウザと、Chromeブラウザ(シークレットモード)、BraveブラウザとBraveブラウザ(シークレットモード)の4つでテストすることにします。

スクリーンショット 2021-12-17 16.58.07.png

全員を「Available」にしておくことを忘れないようにしましょう。

テスト① 営業とサポートの振り分け

  • 発信後のIVRで1を押すことで営業担当者に着信することを確認します。
  • 応答後終話し、再び待受(Available)に戻します。
  • 発信後のIVRで2を押すことでサポート担当者に着信することを確認します。
  • 応答後終話し、再び待受(Available)に戻します。

テスト② グループ内着信優先度

営業担当者にはデフォルトの優先度である「待ち時間の長いワーカー」が設定されています。

  • 発信後のIVRで1を押すことで営業担当者に着信することを確認します。
  • 応答後終話し、再び待受(Available)に戻します。
  • 再度発信し、IVRで1を押すことで、先程とは別の営業担当者に着信することを確認します。
  • 応答後終話し、再び待受(Available)に戻します。

サポート担当者には、レベルの低いワーカーを優先させるという条件になっています。

  • 発信後のIVRで2を押すことでレベルを低く設定したサポート担当者に着信することを確認します。
  • 応答後終話し、再び待受(Available)に戻します。
  • 発信後のIVRで再び2を押すと、再びレベルを低く設定したサポート担当者に着信することを確認します。
  • 応答後終話し、Offlineにしておきます。
  • 発信後のIVRで再び2を押すと、レベルを高く設定したサポート担当者に着信することを確認します。
  • 応答後、それぞれの担当者を待ち受け(Available)に戻します。

テスト③ 異なるグループへのエスカレーション

  • 営業担当者をすべてOfflineにしておきます。
  • 発信後のIVRで1を押すことでサポート担当者にエスカレーションして着信することを確認します。

まとめ

今回は、コンタクトセンターの基本機能であるACDについて、Flex上でどのように実装するのかを解説しました。
ワーカーの属性をうまく生かしたタスクキューを作成し、ワークフローでフローを調整するのが基本的なACDの設計になります。ワークフローのパラメータにも重要な意味がありますので、ぜひそちらもうまく利用してください。

★次の記事
Twilio Flexで特定の担当者に直接繋ぐ方法


Twilio(トゥイリオ)とは

https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング(SMS /チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

自己紹介  
高橋克己(Katsumi Takahashi) 自称「赤い芸人
グローバル・インターネット・ジャパン株式会社 代表取締役
株式会社KDDIウェブコミュニケーションズ Twilio事業部エバンジェリスト

2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりTwilio事業部にジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。
2015 Hall of Doers
2019 Twilio Champions
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?