2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
みなさん、こんにちは。
KDDIウェブコミュニケーションズの Twilioエバンジェリストの高橋です。
Twilio Flex Advent Calendar 2021 7日目の記事となります。
前回の記事では、Twilio Studioを使ったIVRの実装についてご紹介しました。その中で、ユーザーの要件を発話させ、音声認識した結果をエージェントの本来顧客名を出すところに表示する方法を紹介しましたが、今回の記事では、発信者の電話番号からGoogleSpreadsheet上に登録されている顧客名を検索し、それを顧客名として表示させてみたいと思います。
完成すると、このような形で顧客の名前が表示されるようになります。
準備
本記事を実行するための準備について説明します。
すでにFlexのセットアップが完了しているものとします。
Google Spreadsheet
Google Spreadsheetに以下のような簡単な顧客リストを作成してください。
一行目が項目名になります。A列を「顧客名」、B列を「電話番号」という名前にしておきます。
電話番号は、0から始まるため、そのまま登録してしまうと数値として先頭の0がカットされてしまいます。なので、0の前にシングルコーテーションをつけて、文字列として登録しておきましょう。
また、シート名(画面下側にあります)を、「sheet1」(すべて小文字+数字の1)に変更しておいてください。
シートが作成できたら、シートのURLをメモ帳に控えておきます。
Stein
今回は、GAS(Google Apps Script)ではなく、Steinというサービスを使ってデータにアクセスします。Steinは、Google Spreadsheetを簡単にAPI化してくれるサービスで、読み込みだけでなく、書き込みにも対応しています。
Steinのアカウントを、事前にこちらから作成しておいてください。
アカウントの作成が終わると、利用方法のウィザードが始まり、途中で先程控えておいた Google SpreadSheetのURLを聞かれます。
ウィザードが終了すると、以下のようにAPIが完成しています。
後ほど使うので、API URLをメモ帳などに控えておいてください。
顧客名を検索するプログラムを作る
では実際にSpreadsheetを検索するプログラムを作りましょう。
今回は、Twilio Functions内にコードを作成していきます。
-
Twilio管理コンソールにログインします。
-
FunctionのPathには、「get-customer」と指定をしておきます。
Dependenciesの設定
次に、SteinのJavaScriptライブラリを利用できるようにしていきます。
MODULE | VERSION |
---|---|
stein-js-client | 0.0.2 |
- Addボタンを押します。
Environment Variablesの設定
次にSteinのAPI URLを環境変数として指定していきましょう。
KEY | VALUE |
---|---|
STEIN_API | Steinで払い出されたAPIのURL(https://api.steinhq.com/v1/storages/xxxxxxxxxxxxxxx) |
- Addボタンを押します。
コードを作成する
では最後に、Spreadsheetを検索するコードを作成します。
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);
} catch(err) {
console.error(`ERROR: ${err}`);
return callback(err);
}
};
- Saveボタンを押します。
- 続いてDeploy Allボタンを押します。デプロイにはしばらく時間がかかります。
- 以下のように、Functionsの「/get-customer」に緑色のアイコンが表示されれば完成です。
コードの解説
- 1行目は、SteinのJavaScriptの読み込みを行っています。先程のDependenciesで設定しておく必要があります。
- 5行目は、電話番号の変換をしています。Twilio内では、電話番号はすべてE.164形式(日本なら+81から始まる番号)で扱われるため、シート内に設定した0ABJ(0から始まる電話番号)と一致させるために必要です。
- 6〜7行目が、実際にSpreadsheetを検索するコードです。ここでは、シート名(
sheet1
)と項目名(電話番号
)を指定しています。Spreadsheet側の名前が違うとうまく検索できませんので気をつけてください。 - 9行目で検索結果を返却する準備をしています。該当するデータが存在する場合は顧客名を返し、該当するデータがない場合は0ABJの電話番号を返却するようにしています。
なお、今回はFunctionsをProtectedとして作成したため、認証情報がないと外部からこのFunctionを呼び出すことはできません。一方で、Studio内部からは認証情報がなくても呼び出しが可能です。
IVR側でFunctionsを呼び出す
では次に、IVR側から今作成したFunctionsを呼び出すようにStudioフローを作成していきましょう。
-
Triggerウィジェットを選択し、設定パネルのFLOW NAMEを「Voice IVR Customer」に変更します。
-
Saveボタンを押します。
前回の記事通りに作業をしている方は、GetQuestionウィジェットが表示されていると思いますが、今回はこちらのウィジェットは不要なので、削除します。
-
右側のWIDGET LIBRARYから、Run Functionウィジェットをキャンパス上にドラッグして配置します。
-
WIDGET NAME欄に「getCustomer」と入力します。
-
SERVICEのプルダウンリストから「Flex」を選択します。
-
ENVIRONMENTのプルダウンリストから「ui」を選択します。
-
FUNCTIONのプルダウンリストから「/get-customer」を選択します。
-
FUNCTION URLは自動的に入力されます。
-
以下のように値を設定します。
KEY | VALUE |
---|---|
From | {{trigger.call.From}} |
- Saveボタンを押します。
では、それぞれのウィジェットを接続しましょう。
- TriggerウィジェットのIncoming Callと書かれた線を、getCustomerウィジェットの左上の黒丸につなげます。
- getCustomerウィジェットのSuccessと書かれた線を、SendCallToAgentウィジェットの左上の黒丸につなげます。
では最後にTaskRouterへ受け渡す属性に、Functionsの結果を入れましょう。
{ "type": "inbound", "name": "{{widgets.getCustomer.body}}" }
確認ダイアログが表示されるので、Publishボタンを押します。
電話番号にフローを割り当てる
では最後に、今作成したStudioフローを着信番号に割り当てましょう。
-
管理コンソールの左側のスライドメニューから、Phone Numbersを選択します。
-
番号の管理の中のアクティブな電話番号を選択します。
-
Voice & Faxの設定の中にあるA CALL COMES INのプルダウンから、先程作成した「Voice IVR Customer」を選びます。
-
Saveボタンを押して、設定を保存します。
以上で設定はすべて完了です。
テスト
では早速テストをしてみましょう。
事前にGoogleSpreadsheetsに、発信する電話番号と自分の名前を入れておくことを忘れないようにしてください。
準備ができたら、Flexを起動して、エージェントを待ち受け状態にしておきます。
登録した電話機から先程のフローを割り当てた番号に電話をかけると、着信画面上に正しく名前が表示されれば成功です。
もし着信しない場合は、Studio内でFunctionsの呼び出しが失敗している可能性があります。
管理コンソールからDebuggerを選択するとエラーの内容が確認できます。
まとめ
本日の記事では発信者の電話番号から顧客の名前を表示させる方法をご紹介しました。今回はGoogleSpreadsheetを利用しましたが、もしAPIが利用できるサービスであれば同様の方法で顧客を検索することが可能です。担当するオペレーターが決まっているような場合であれば、その情報をTaskRouterに引き渡すことで、直接担当者につなぐことも可能です。
次回からはいよいよTwilio Flexの中心機能であるTaskRouterについて説明していきたいと思います。
★次の記事
Twilio Flexの始め方(TaskRouter基礎編)
Twilio(トゥイリオ)とは
https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング(SMS /チャット)、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。