#1. はじめに
こんにちは, ノベルワークスでインターンをしているユウガです。
音声ボットシステムの開発に携わってきました。
この時に使用した技術をふんだんに盛り込んで, オウム返し音声ボットを作りました。
特に, AmazonConnectとGoogleSTTを組み合わせて, リアルタイムに文字起こしをしたい方
に有益になると思います。
今回の記事では, Connectをメインに説明します。
次の記事はこちら
リアルタイムに日本語を文字起こしできるサービスとして, AmazonTranscribeもあります
https://aws.amazon.com/jp/blogs/news/amazon-transcribe-streaming-adds-support-for-japanese-korean-and-brazilian-portuguese/
目次
1.はじめに
2.デモ
3.アーキテクチャ
4.問い合わせフローの作成
5.次回
#2. デモ
作る物のイメージが無いと理解しにくいと思うので, デモを公開します↓
https://drive.google.com/file/d/1OsolNuuSxA6zbFeaM-fIVdolntdGaLqo/view?usp=sharing
#3. アーキテクチャ
このシステムのアーキテクチャは, 大体こんな感じになります↓
#4. 問い合わせフローの作成
音声ボットの流れを決めるために, Connectで問い合わせフローを作ります。
では, 早速作っていきましょう!
-
音声の設定を作り, 日本語を設定します。エントリーポイントから繋げて下さい。
-
問い合わせ属性の設定を作り, 以下のように設定します。音声の設定から繋げて下さい。
これは, Connect内の変数を設定できます。ConnectからLambdaを呼び出す時に, この変数を渡すことができます。
replyCountは, 何回目の返答かを表す変数です。DynamoDBに書き込まれた文字起こしを取得する際に使います。
saveCallRecordingは, 音声をs3に保存するかどうかのフラグです。
-
メディアストリーミングの開始を作り, [顧客から]にチェックを付けます。
問い合わせ属性の設定から繋げて下さい。
[顧客から]にチェックを付けると, 電話をかけてきた人が喋る音声がKVSに保存されます。さらに, そのデータにアクセスするための変数がConnect内に作られます。
メディアストリーミングの有効化についてはこちら
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/enable-live-media-streams.html
-
Lambda関数を呼び出すを作ります。メディアストリーミングの開始から繋げて下さい。
ここで設定するLambdaは, Connect内の変数を使って, 別のLambdaをinvokeします。
Lambdaは次回作ります。 -
プロンプトの再生を作り, テキストの入力で「何か話して下さい」と設定します。
Lambda関数を呼び出すから繋げて下さい。 -
Lambda関数を呼び出すを作ります。プロンプトの再生から繋げて下さい。
ここで設定するLambdaは, DynamoDBから文字起こし結果を取得します。
このLambdaで, reply, isKeyError, replyCount をreturnします。
そうする事で、Lambdaの変数をConnectで扱う事ができます。
Lambdaは次回作ります。 -
問い合わせ属性の設定を作り, 以下のように設定します。Lambda関数を呼び出すから繋げて下さい。
前のLambdaでreturnした変数をConnectで保持するための設定です。
replyは, ボットの返答文。
isKeyErrorは, DynamoDBに文字起こし結果があるかどうかのフラグ。
replyCountは, 何回目の返答かを表す変数です。
-
問い合わせ属性を確認するを作り, 以下のように設定します。
問い合わせ属性の設定から繋げて下さい。
if文の役割を担います。isKeyError=Falseなら, DynamoDBから文字起こし結果を取得できた事を表し, Trueであれば, 取得できなかった事を表します。
-
プロンプトの再生を作り, 以下のように設定します。問い合わせ属性を確認するのFalseから繋げて下さい。
ここでは, DynamoDBから取得した文字起こし(reply)を喋らせています。
終わったら, プロンプトの再生に繋げます。
-
プロンプトの再生を作り, 以下のように設定します。問い合わせ属性を確認するのTrueから繋げて下さい。
ここでは, DynamoDBから文字起こし結果が取得できなかったので, 1秒間のブレイクタイムを設けています。
ブレイクタイムを設けないと, 文字起こし結果がDynamoDBに書き込まれていない間に, Lambda関数が頻繁に呼び出されてしまいます。なので, 1秒だけ時間を空けています。
終わったら、Lambda関数を呼び出すに繋げます。
![contactFlow4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599936/11efff25-ce77-8a35-60c4-2613981a6c51.png)SSMLについてはこちら
https://qiita.com/novelworks/items/8b5cd9e0dae9a472c966
終わりです!
補足
- エラーになった時は切断に繋げていますが, プロンプトの再生でエラー内容を喋らせた後に,切断に繋げると良いでしょう。デバッグしやすくなります。
- 問い合わせフローはjsonファイルでimport/exportできます。私の完成問い合わせフローはこちら↓
完成問い合わせフロー
https://drive.google.com/file/d/1rxNnbWM--u3VTU-xyEAZr_58jF2HIzlt/view?usp=sharing
#5. 次回
次回は, Lambdaの作成をメインに説明します。お楽しみに〜
次の記事はこちら