2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
みなさん、こんにちは。
KDDIウェブコミュニケーションズの Twilioエバンジェリストの高橋です。
Twilio Flex Advent Calendar 2021 11日目の記事となります。
前回までの記事で、ACDの基本的な設定方法について解説をしました。本記事では、ACDに関するTipsの一つとして「特定の担当者に直接つなぐ方法」について説明していきます。
なお、本記事で利用しているのは、Known Agent Routingというパブリックベータの機能となります。
シナリオ
今回のシナリオは以下の通りです。
- 発信者の電話番号をDBと突合し、ユーザーを特定する。
- ユーザーが未登録の場合は通常のACDとして処理し、待受時間の長いオペレーターが対応する。
- ユーザーが登録されているが、担当者がアサインされていない場合は、上記と同様とする。
- ユーザーが登録されていて、かつ担当者がアサインされている場合は、優先的に担当者に振り分ける。
- 担当者が待受状態ではない場合は、一定時間は待ち呼としてキューイングするが、それでも対応できない場合は通常のACDと同様に別のオペレーターが対応する。
DBには、こちらの記事で使ったものと同様のGoogleSpreadsheetを利用します。
具体的なACDの実装
GoogleSpreadSheetの準備
今回のシナリオを実装するため、GoogleSpreadsheetは以下のように設定しておきます。シート名はsheet1
にしてください。
3列目に担当者を作成し、ここに担当者(ワーカー)のSIDを入れておきます。ワーカーのSIDは、TaskRouterのWorkerで確認することができます。
ワークフローの設定
今回は、以下のようなワークフローを新規に作成します。名前は「ByName」にしておきましょう。
- フィルター名は「ByName」にします。
-
MATCHING TASKSに「
worker_sid != ""
」と指定します。これは、「タスクのworker_sid
になにか値が指定された場合にこのフィルターを有効にする」という意味になります。 - MATCHING WORKERSのTASK QUEUEは、デフォルトの「Everyone」のままにします。Everyoneタスクキューには、指名される担当者(ワーカー)が含まれている必要があります。
-
KNOWN WORKERのチェックボックスは、「Worker SID」を選び、その下の枠内には「
task.worker_sid
」を指定します。 -
SKIP TIMEOUTは、デフォルトの「Do not skip」 を選択しておきます。このようにしておくことで、指定された担当者が別の対応をしている場合に、一定時間コールが待ち呼になり、担当者が空いた時点で自動的につながるようになります。ここを「
1==1
」にすると、担当者が出られない場合はすぐに別の担当者に振り分けされます。 - TIMEOUTには、任意の時間を入れておきます。今回は「10」と入れましたので、担当者が応答的ない場合は、10秒間は待ち呼となった後、次のステップに遷移します。
- ステップは2つ作っておき、担当者が対応できない場合のタイムアウトを拾うようにしておきます。
- DEFAULT TASK QUEUEは「Everyone」にしておきます。これにより、フィルターに合致しないコールは通常のACDとして動作します。
ここでのポイントは、task.worker_sid
です。すなわち、タスクの属性としてworker_sid
というパラメーターを設定することで、振り分ける担当者を指定できるということです。
GoogleSpreadsheetを検索する
今回は、以下のようなFunctionを作成しました。Functionの作成方法については、以前の記事を参考にしてください。
Twilio Flexの始め方(GoogleSpreadsheet連携編)
FunctionsをProtectedとして作成しておくことで、外部からの不正なアクセスを防止します。
コード部分を抜き出すとこんな感じです。
const SteinStore = require('stein-js-client');
exports.handler = async function(context, event, callback) {
try {
const number = event.From.replace(/\+81/, '0'); // E.164->0ABJ
const store = new SteinStore(context.STEIN_API);
const data = await store.read("sheet1", { search: { '電話番号': number }});
console.log(`data: ${data}`);
return callback(null, data.length > 0 ? data[0] : {'顧客名': number, '担当者': null});
} catch(err) {
console.error(`ERROR: ${err}`);
return callback(err);
}
};
Google Spreadsheetの内容をAPIとして取得することができるsteinを利用します。シート上の電話番号が0ABJで格納されているので、検索するためにE.164に変換しています。
該当データが登録されていない場合は、顧客名に電話番号、担当者はnullを返却します。
Studioフロー
ウィジェットは2つだけのシンプルなフローになります。
まずは、先程作成したFunctionを呼びだすウィジェットです。
Functionの呼び出しに、パラメーターとしてFrom
を渡しています。パラメーターの値には、{{trigger.call.From}}
と指定することで、発信者番号がE.164形式で渡されるようになります。
次に、TaskRouterを呼び出すウィジェットです。
WORKFLOWに、先程作成したワークフローを指定します。
さらに、ATTRIBUTESには、Functionで取得した担当者
と顧客名
をそれぞれworker_sid
とname
パラメーターとして指定しています。
設定が終わったら、最後にパブリッシュするのを忘れないようにしましょう。
着信番号の指定
最後に、今作成したStudioフローを電話番号に割り当てます。
以上で設定はすべて終了です。
テスト
今回のシナリオをテストするためには、同時に複数名でFlexにログインしておく必要があります。
Chromeブラウザと、Chromeブラウザ(シークレットモード)、BraveブラウザとBraveブラウザ(シークレットモード)の4つでテストすることにします。
全員を「Available」にしておくことを忘れないようにしましょう。
テスト① 担当者がアサインされている番号から発信
- GoogleSpreadsheet上に、担当者をアサインした電話番号から発信します。
- アサインされている担当者に着信することを確認します。
- 何度か発信をして、常に担当者が着信することを確認します。
テスト② 担当者が取り込み中
- 対象の担当者のステータスをAvailable以外にしておきます。それ以外のオペレーターはAvailableにしておきます。
- 担当者がアサインされている電話番号から発信します。
- コールが待ち呼に入り、音楽が流れます。
- 担当者をAvailableに戻すと、担当者に着信が回ってくることを確認します。
テスト③ 別のオペレーターにエスカレーション
- テスト②と同じように、コールを待ち呼に入れます。
- 担当者はそのままAvailableにせずに放置します。
- 10秒くらい待ち呼になったあと、別のオペレーターに着呼することを確認します。
テスト④ GoogleSpreadsheetに番号がない、もしくは担当者がアサインされていない
- GoogleSpreadsheet上に登録されていない番号から発信します。
- オペレーターの誰かが着呼します(発信者番号が顧客名になります)。
- GoogleSpreadsheet上に登録されているが、担当者が空欄の番号から発信します。
- オペレーターの誰かが着呼します(顧客名が表示されます)。
まとめ
今回は、予め着信させたいオペレーターが決まっているようなケースでのワークフローの作成方法について解説しました。なお、冒頭に記載したように、Known Agent Routingはパブリックベータの機能となりますので、今後仕様が変わる可能性があることをご了承ください。
★次の記事
Twilio Flexで誰も応答できない場合の処理
Twilio(トゥイリオ)とは
https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング(SMS /チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。