Amazon Lexの第3回です。今回はV1でしか使えないAmazon Connectのコンタクトフローとの統合を試してみたいと思います。
なお、予め注意すべき点として、「Amazon Connectで日本の電話番号を個人で取得することは現時点ではできない」という点があります。以下の手順ではアメリカの電話番号を取得しています。つまり国際電話になりますので、電話料金についてはくれぐれもご注意ください。
目次
- 目次
- Amazon Connectコンタクトセンターインスタンスの作成
- Amazon ConnectのコンタクトフローにAmazon Lexのボットを紐付ける
- Amazon Connectのコンタクトフローの作成
- テスト
- まとめ
Amazon Connectコンタクトセンターインスタンスの作成
まずはAmazon Connectの設定を行っていきましょう。マネジメントコンソールからAmazon Connectの画面を開き、「今すぐ始める」をクリック。
Amazon Connectのリソースの設定を行います。まず、ID管理。
Amazon Connectは、マネジメントコンソールとは別にConnect専用の管理画面が作成されます。その際のユーザの管理方法と管理画面のURLを設定します。
- ID管理については、AWS Directory ServiceやSAMLを使った外部アカウントとの連携も可能なようですが、今回は「Amazon Connect内にユーザーを保存」を選択しました。
- アクセスURLは管理画面にアクセス適当なものを設定します。これがコンタクトセンターのインスタンス名となるようです。今回は"lex-booktrip-sample"としました。
設定したら「次のステップ」をクリック。
次にコンタクトセンターの管理者アカウントを設定します。おそらく「Amazon Connect内にユーザーを保存」を選択したためですね。適宜入力して「次のステップ」をクリック。
テレフォニーオプションでは、着信・発信の有効無効を設定します。着信のみ、発信のみ、ということもできるということですかね。デフォルトでは両方有効になるようです。今回は両方有効にしておきます。「次のステップ」をクリック。
ストレージの設定画面です。通話やチャットの記録はAmazon Connect用にS3バケットが作成され保存されます。カスタマイズもできるようですが、今回はデフォルトで。「次のステップ」をクリック。
確認画面です。ここまでの設定に問題がなければ「インスタンスの作成」をクリックします。
インスタンスが作成されます。数分程かかりますのでしばらく待ちましょう。
以下のような画面が表示されればインスタンスの作成が完了しました。「今すぐ始める」をクリックします。
新しいタブがひらいて以下の画面が表示されます。これがAmazon Connectの管理画面です(初回のみセットアップ画面が出てくるようで、2回目以降はちょっと変わります)。ちょっと面倒なので日本語にしましょう。
日本語になりました。ではセットアップします。「今すぐ始める」をクリックします。
通知とマイクの有効化を促すメッセージが出ます。多分ブラウザフォンを使うためには必要なのではないかと思います。「許可」しておきます。
最初に電話番号を取得します。「国/地域」で「Japan」を選択します。「タイプ」は、通常の電話番号である「DID(直通ダイアル)」といわゆるフリーダイアルである「料金無料電話」から選択できますが、「DID(直通ダイアル)」のままでよいです。
するとこういうメッセージが表示されて、先に進めません・・・
調べてみるとありました。
どうやら使える電話番号の在庫が枯渇しているということ、そして法改正により書類提出が義務となっているため、電話番号が取得できないようですね。
どうやらアメリカの電話番号であれば取得できるようなので、今回はあくまでも検証用ということでそれで進めます。
以下のように表示されれば電話番号が取得できています。他にも色々表示されていますが、とりあえず"Continue"をクリック。
Amazon Connectのダッシュボード画面が表示されれば完了です。
Amazon ConnectのコンタクトフローにAmazon Lexのボットを紐付ける
ではAmazon Connectの応答にAmazon Lexのボットを使うようにしてみましょう。この設定はAWSマネジメントコンソール側で行います。検索からAmazon Connectの設定画面を開きます。
先ほど作成したコンタクトセンターのインスタンス名が表示されていますので、これをクリック。
左のメニューの「問い合わせフロー」をクリックします。
Amazon Lexのところで、作成したLexボットのリージョンおよびボット名を選択して「+Lexボットの追加」をクリックします。(前々回で作成したBookTripのサンプルをそのまま使っています)
以下のように表示されればOKです。これでAmazon ConnectのコンタクトフローからAmazon Lexを呼び出せるようになりました。
Amazon Connectのコンタクトフローの作成
ではAmazon Connectのコンタクトフローを作成していきましょう。Amazon Connectの管理画面に戻り、左の「ルーティング」メニューから「問い合わせフロー」をクリックします。
予め登録されているコンタクトフローの一覧が表示されていますが、新規に作りましょう。右上の「コンタクトフローの作成」をクリックします。
コンタクトフローの作成画面が開きます。Amazon ConnectではGUIでブロックを並べて線をつなげることで会話フローを作成します。Voiceflowを使ったことがあれば理解しやすいのではないかなと思います。
図にも記載してますが、「エントリポイント」が会話フローの起点になります。電話をかけるとここからフローがスタートするということです。そして左のメニュー内にいろいろな機能のブロックが用意されているので、これらを組み合わせていくことで会話フローが構築されます。
では早速やってみましょう。
最初にフローの名前を入力します。なんでもよいです。
そして基本的な音声の設定を行います。「設定」をクリック。
下のほうにある「音声の設定」をドラッグ・アンド・ドロップでエントリポイントの右側あたりに配置します。
エントリポイントの「開始」の白い丸からドラッグすると線が引けますので、先程配置した「顧客の入力を取得する」につなげます。
ブロックを設定するとその設定が行なえます。「音声の設定」では言語と音声を選択します。この設定は日本語の場合は必ず必要になりますので忘れないようにしてください(設定しない場合のデフォルトは英語になります)。設定したら「Save」をクリック。
次に「操作」から「顧客の入力を取得する」をさらに右側に配置して、線でつなげます。
「顧客の入力を取得する」ブロックの設定はこんな感じになっています。
「顧客の入力を取得する」は、ユーザの音声発話やダイヤル押下(「〜の場合は1を」みたいなやつですね)などの入力を受け取るためのブロックです。Amazon Lexで作成したボットはインテントにマッチしたサンプル発話を受け取ることで実行されますので、Amazon Connect側でユーザの発話が受け取ってLexに渡してあげる必要があるわけですね。
また、Amazon Connectからの音声発話も設定することができます。電話をかけてきたユーザに何も言わずにいきなり喋ってもらうというのは、ユーザからするとどうすればいいかわかりませんので、導入となるAmazon Connectからの発話もここで設定しましょう。
まず、Amazon Connectからの応答です。「プロンプトライブラリ(音声)」と「テキスト読み上げまたはチャットテキスト」から選択します。「プロンプトライブラリ(音声)」は予め用意された音声データを再生、「テキスト読み上げまたはチャットテキスト」は設定したテキストを読み上げます。ここでは、「テキスト読み上げまたはチャットテキスト」を選択して、「テキストの入力」を選択、最初の発話をAmazon Connectから行うようにします。
そしてユーザからの発話の取得の設定です。「DTMF」はダイヤルからのプッシュ信号、「Amazon Lex」はユーザの発話を入力として受け取ります。「Amazon Lex」をクリックして、Amazon Lexのボット名を指定します。インテントは受け取る事が可能なLexのボットのインテントを指定します。BookTripサンプルでは2つのインテントが用意されているので療法家取れるようにしてみました。最後に「Save」をクリックします。
「顧客の入力を取得する」の表示が変わりました。ユーザからの発話に応じて、2つのインテント、デフォルト、エラーと、合計で4つのフロー分岐が行えるようになります。デフォルトとエラーは、それぞれインテントにマッチしない場合、またはLexからエラーが返ってきた場合になるようです。
では分岐のフローを作りましょう。会話のインタフェースとしては良くないですが、あくまでも検証なので以下のような簡易なものにしたいと思います。
- Lexの2つのインテントが処理されたら、「ご利用ありがとうございました」と発話して、電話を切る。
- どのインテントにもマッチしない場合は、「最初からやりなおしてください」と発話して、電話を切る。
少し説明は割愛しますが、Amazon Connectに発話だけを行わせるブロックは「操作」にある「プロンプトの再生」、電話の切断は「終了/転送」にある「切断」を使います。最終的にはこういう感じになります。
フローができたら、右上の「保存」をクリックして「公開」をクリックします。
作成したフローを電話番号と紐付けます。左の「ルーティング」メニューから「電話番号」をクリックします。
取得した電話番号が表示されます。デフォルトでは「Sample inbound flow」という予め用意されたフローに紐付いているようです。電話番号をクリックして変更します。
先ほど作成したコンタクトフローに変更して「保存」をクリックします。
これでAmazon ConnectからAmazon Lexを呼び出せるようになりました。
テスト
実際に電話を掛けて試してみました。国際電話になるのでちょっと怖いですがw
ちゃんと動いてますね。
まとめ
あくまでも検証なので、会話フローやエラーハンドリングなどいろいろ改善の余地はありますが(エラーになったらもう一度最初に戻すとか、あとはユーザが発話するターンということを促すために効果音を入れたり、とかは必要かなと思いました)、とてもかんたんに電話と組み合わせることができました。
Amazon Connect単体だと(そこまで深く触ってないのでわかってないだけかもですが)複雑な会話は難しい気がしますが、Amazon Lexと組み合わせることでより自然な対話が実現可能になるのではないかなと思います。
あとは、
- コンタクトセンター統合は現状Amazon Lex API v1でしか使えない。今後v2が移行していくことを考えると早く対応してほしい。
- 個人で日本の電話番号が取得できるともっとお試ししやすくていいんですが・・・
あたりは今後に期待したいところです。