AWS構成図
こんにちは、シーズ代表の西垣です。
先日AWSソリューションアーキテクトプロフェッショナル試験に無事受かりまして、その記念に勉強を兼ねて構築していたAmazon Connectを利用した架電システムサーバーレスアーキテクチャの記事を公開いたします。
目次
なぜこのシステムを作ろうと思ったのか
社員からの暗証番号的なシークレット情報の問い合わせがたまにあり、毎回DMなどで伝えているのですが、DMといえど内容が目に触れたりテキスト記録に残したくなかったり、私の都合で送付が遅れると悪いなと思ったりしていたので、本人のタイミングでシークレット情報を受け取れるシステムを作ろうと思いました。
ポイントはこちらです。
- 利用者の欲しいタイミングでシークレット情報を受け取れる
- シークレット情報は音声で伝わるためログに残ることはない
- 電話をかけるのではなく掛かってくるので利用者の電話代負担がない
- VPN限定、会社メールアドレスでの社員所属認証
- 完全サーバーレスで固定費を極力無料に近づける
- 社長の仕事が一つ減る
Amazon Connectとは
https://aws.amazon.com/jp/connect/
使いやすいオムニチャネルのクラウドコンタクトセンターで、優れたカスタマーサービスを低コストで提供します。https://aws.amazon.com/jp/connect/
あらゆる規模のコールセンターをコンタクトフロービルダーで簡単に作成でき、AWSの各種マネージメントツールを通じて様々なシステムとの連携もできます。
コンタクトフローサンプル
電話の声は、Amazon Pollyが連携されておりテキストを入れておくだけで音声に変換されるので、かなり気軽に電話ソリューションを試すことができます。
Amazon Pollyサンプル音声
大まかな流れ
- コンタクトセンターの作成
- 電話番号の取得
- コンタクトフローの設定
1.コンタクトセンターの作成
まずはじめにAWSマネージメントコンソールにログインしAmazon Connectにアクセスします。
「インスタンスを追加する」に進みます。
すでにインスタンスがある場合は、一覧に表示されています。
ID管理を設定
「Amazon Connectでユーザーを作成および管理」を選びます。
今回はデモ用途なのでID管理はAmazon Connectで完結させていますが、既存システムとの連携も可能です。
アクセスURLは任意のURLを入れます。
Amazon Connectの運用は今後このURLにアクセスして行うことになります。
管理者の作成
管理者情報を入力します。
テレフォニーオプション
着信と発信の許可を設定します。
特にこだわりがなければ両方許可のままでOKです。後から変更できます。
データストレージもこだわりがなければこのままでOKです。
次に進むと最終確認画面となり、問題なければ確定します。
以上でインスタンスの作成が完了し、仮想コンタクトセンターが作成されました。一覧画面に戻って作成されているか確認します。
ここまでの詳細な流れはAWS側ドキュメントが参考になります。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/amazon-connect-instances.html
2.電話番号の取得
アクセスURLをクリックするとログイン画面が表示されるので先程設定した管理者情報でログインします。
以後の作業はすべてこのコンタクトセンターにログインして行います。
AWSアカウントとは別にコンタクトセンター用のユーザーアカウント発行も可能ですが、今回は管理者アカウントのみで進めます。
ログインに成功するとダッシュボードが表示されます。
まずは電話番号を取得します。
左メニュー>チャネル>電話番号
電話番号取得
電話番号取得に進み、自国の番号「+81」を選択すると、電話番号が表示されるので案内に沿って取得を進めます。
無事に取得できれば、次が核心となるコンタクトフローの作成となります。
3.コンタクトフローの設定
Amazon Connectは大規模なコールセンター構築にも対応できるため、かなり機能が豊富なのですが、今回は電話をかけるだけのシンプルな仕組みを行います。
流れとしてはこのような感じです。
- 指定の電話番号に架電する(発信フローのみ要Lambda)
- 挨拶メッセージを流す
- 簡易暗証番号を入力してもらう
- 本文を読み上げる
- 再度聞きたい処理
発信も着信も基本同じフローで作成します。2つの違いは着信時のフロー開始は着信により自動的に開始されますが、発信はLambdaなどから発信先を指定する必要があるという違いだけです。
ということで、Lambdaでの発信処理は改めて別記事でやるとして、今回の記事では受信用のコンタクトフローまでを作成します。
コンタクトフロー新規作成
左メニュー>ルーティング>コンタクトフローにアクセスします。
既にテンプレートがいくつか登録されています。
今回はシンプルなものを1から作るので右上の「コンタクトフロー作成」で新規作成します。
こんな感じの画面(コンタクトフロー作成画面)が表示されます。
右上の赤枠では「コンタクトフロー(インバウンド)」となっていますが、アウトバウンドと共通なので気にしなくて大丈夫です。
それでは、設定を始めます。
メニュー>インタラクション>プロンプト再生を画面にドラッグ&ドロップします。
「プロンプトの再生」をクリックすると右サイドに詳細設定画面が開くので、読み上げたいテキストを入力します。
続いて、各処理を矢印でつなげていきます。
エントリー>プロンプト再生>終了の3つをつなげて一度テストしてみます。
右上の「保存」を押して保存し、「公開」を押して、本番として公開します。
着信処理との紐づけ
左メニュー>チャンネル>電話番号から電話番号を選択し、今回作成した処理を紐づけます。
保存と公開が正しく行われていれば、一覧に表示されるので選択し保存してください。
以上で紐付け完了です。
これで一度電話をかけてみます。
何か読み上げられていたら着信テストはOKです。
ただこの状態は最低限のものしかないため、日本語がカタコトだったりするので、運用ではもう少しブラッシュアップが必要です。
日本語音声にする
「音声の設定」ブロックを追加をエントリーとプロンプトの再生の間に追加
言語を日本語、音声をMizukiさん(女性)に設定します。
これでまた保存、公開を行い、電話をかけて確認してみます。
Mizukiさんが日本語で応えてくれるようになりました。
音声をもう少し聴きやすくしたい
Mizukiさんが話してくれるようにはなりましたが、行間がなかったりして少し不自然なので、音声をもう少し調整します。
プロンプトの再生の詳細から、テキストの解釈を「SSML」に変更し、SSML形式で記載します。
1<speak>
2お電話ありがとうございます<break time="1s"/>
3お伝えしたい内容はこれです<break time="1s"/>
4</speak>
この例では、行ごとに1秒の間をとっています。
SSML(音声合成マークアップ言語)を使いこなすとかなり自然な読み上げが可能になります。
https://docs.aws.amazon.com/ja_jp/polly/latest/dg/supportedtags.html
キーパットからの入力で分岐する
サポートセンターなどに電話すると「ご請求に関するお問い合わせは1を」みたいな入力を案内されることがあります。
それが実現できるのが、「顧客の入力を取得する」ブロックです。
「1」を設定し、ブロックに繋げます。
それ以外は終了ブロックなど繋げておきます。
最終形態
最終的にプロンプトの再生と顧客の入力取得の2つの組み合わせでこんな感じの処理が出来ました。
子供向けプログラム言語Scratchみたいな感覚で、慣れると簡単にどんどん作れます。
「顧客の入力取得」は一桁の数字だけしか対応してませんが、本格的に認証を行うのであればLambda+DynamoDBなどの連携を行うことも可能です。
以上で受信フローが完了です。続いてこれをベースにLambdaを使って発信できるように修正していきます。