LoginSignup
0
0

More than 3 years have passed since last update.

AmazonConnectとGoogleSTTでオウム返し音声ボットを作ってみた(1)

Last updated at Posted at 2021-04-06

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. アーキテクチャ

 このシステムのアーキテクチャは, 大体こんな感じになります↓

connect_bot_diagram (1).png

4. 問い合わせフローの作成

 音声ボットの流れを決めるために, Connectで問い合わせフローを作ります。

 では, 早速作っていきましょう!

  • 音声の設定を作り, 日本語を設定します。エントリーポイントから繋げて下さい。

  • 問い合わせ属性の設定を作り, 以下のように設定します。音声の設定から繋げて下さい。
    これは, Connect内の変数を設定できます。ConnectからLambdaを呼び出す時に, この変数を渡すことができます。
    replyCountは, 何回目の返答かを表す変数です。DynamoDBに書き込まれた文字起こしを取得する際に使います。
    saveCallRecordingは, 音声をs3に保存するかどうかのフラグです。

contactFlow1.png

  • メディアストリーミングの開始を作り, [顧客から]にチェックを付けます。
    問い合わせ属性の設定から繋げて下さい。
    [顧客から]にチェックを付けると, 電話をかけてきた人が喋る音声が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は, 何回目の返答かを表す変数です。

contactFlow2.png

  • 問い合わせ属性を確認するを作り, 以下のように設定します。
    問い合わせ属性の設定から繋げて下さい。
    if文の役割を担います。isKeyError=Falseなら, DynamoDBから文字起こし結果を取得できた事を表し, Trueであれば, 取得できなかった事を表します。

  • プロンプトの再生を作り, 以下のように設定します。問い合わせ属性を確認するのFalseから繋げて下さい。
    ここでは, DynamoDBから取得した文字起こし(reply)を喋らせています。
    終わったら, プロンプトの再生に繋げます。


contactFlow3.png

  • プロンプトの再生を作り, 以下のように設定します。問い合わせ属性を確認するのTrueから繋げて下さい。
    ここでは, DynamoDBから文字起こし結果が取得できなかったので, 1秒間のブレイクタイムを設けています。
    ブレイクタイムを設けないと, 文字起こし結果がDynamoDBに書き込まれていない間に, Lambda関数が頻繁に呼び出されてしまいます。なので, 1秒だけ時間を空けています。
    終わったら、Lambda関数を呼び出すに繋げます。

SSMLについてはこちら
https://qiita.com/novelworks/items/8b5cd9e0dae9a472c966


contactFlow4.png

 終わりです!

補足

  • エラーになった時は切断に繋げていますが, プロンプトの再生でエラー内容を喋らせた後に,切断に繋げると良いでしょう。デバッグしやすくなります。
  • 問い合わせフローはjsonファイルでimport/exportできます。私の完成問い合わせフローはこちら↓

完成問い合わせフロー
https://drive.google.com/file/d/1rxNnbWM--u3VTU-xyEAZr_58jF2HIzlt/view?usp=sharing

5. 次回

次回は, Lambdaの作成をメインに説明します。お楽しみに〜
次の記事はこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0