Amazon Connectの問い合わせフロー内でAmazon S3へ保存した音声ファイルを利用することができるようになりました。
動作を試すとともに、この機能の活用案を考えてみます。
概要
従来の機能でも、あらかじめ任意の音声ファイルをAmazon Conenctの管理画面からアップロード、利用することはできましたし、テキスト読み上げ機能を利用することでお客様のお名前の読み上げる、等の動的な挙動も実現可能でした。
今回のアップデートによって、さらに柔軟に、下記のような要求にこたえられるようになります。
- 既存の音声ガイドシステムとオンデマンドに連携したい
- 音声ガイドを定期的・それなりの頻繁で大量に入れ替えたい
- サードパーティーのテキスト読み上げ音声を動的に利用したい
設定
S3バケットの準備
音声プロンプトファイルを保存するS3バケットを作成します。
各種設定については、今回は初期値のまま作成しました。
- ACL無効
- パブリックアクセスをすべてブロック
- サーバー側の暗号化:無効
作成したS3バケットのバケットポリシーを設定します。
下記JSONの customer-prompt-example-bucket
をバケット名に、
Condition
部分の SourceAccount、SourceArn部分へ、利用するAWSアカウントID、Amazon ConnectインスタンスARNをそれぞれ設定します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "Service": "connect.amazonaws.com" }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::customer-prompt-example-bucket", "arn:aws:s3:::customer-prompt-example-bucket/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "account-id", "aws:SourceArn": "arn:aws:connect:region:account-id:instance/instance-id" } } } ] }
音声ファイルのアップロード
音声ファイルは サンプリングレート(サンプリング周波数)8KHz、ビット深度(ビットレート)8bit、モノラル(1チャンネル)、音声フォーマットは μ-lawで準備します。
上記S3バケットへ音声ファイルをアップロードします。
今回はプレフィックスをつけて connect/hello.wav
としました。
問い合わせフローを作成
プロンプトの作成ブロックを設置し、「S3バケットから音声ファイルを指定」を選択、S3ファイルパスを入力します。
今回は最もシンプルな S3 URI形式で指定しましたが、https://で始まるオブジェクトURL形式も可です。
または、それを属性値としてセットしても良いですし、ファイルパス部分で変数を記述して連結した記述も可能となっていますので、動的に変化させたいケースでも柔軟に対応できそうです。
動作確認
電話を掛け、指定した音声が再生されることを確認できました。
念のため、CloudWatchLogs へ出力された問い合わせフローログを確認します。
成功時
ログは2行出力されました。
1行目で取得元のS3オブジェクトを確認できます。
2行目は音声再生結果が成功したことを確認できます。
{ "ContactId": "xxxxx", "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/yyyyy/contact-flow/zzzzz", "ContactFlowName": "InboundS3Prompt", "ContactFlowModuleType": "PlayPrompt", "Timestamp": "2022-04-06T10:24:29.406Z", "Parameters": { "PromptLocation": "s3://my-prompts/connect/hello.wav", "PromptSource": "S3" } } { "Results": "Success", "ContactId": "xxxxx", "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/yyyyy/contact-flow/zzzzz", "ContactFlowName": "InboundS3Prompt", "ContactFlowModuleType": "PlayPrompt", "Timestamp": "2022-04-06T10:24:31.178Z" }
失敗時
1行目は成功時と同様、2行目は 失敗したことがわかります。
なお、失敗した場合は問い合わせフローの 「エラー」へ分岐します。
{ "ContactId": "xxxxx", "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/yyyyy/contact-flow/zzzzz", "ContactFlowName": "InboundS3Prompt", "ContactFlowModuleType": "PlayPrompt", "Timestamp": "2022-04-06T07:58:36.991Z", "Parameters": { "PromptLocation": "s3://my-prompts/connect/hello.wav", "PromptSource": "S3" } } { "Results": "Failed To Play Prompt.", "ContactId": "xxxxx", "ContactFlowId": "arn:aws:connect:ap-northeast-1:123456789012:instance/yyyyy/contact-flow/zzzzz", "ContactFlowName": "InboundS3Prompt", "ContactFlowModuleType": "PlayPrompt", "Timestamp": "2022-04-06T07:58:37.258Z" }
注意ポイント
このログで失敗したことは分かるのですが、失敗理由までは表示されないようでした。
失敗の理由はいくつか考えられます。
- S3バケット・オブジェクトが存在しない
- アクセスポリシーがキチンと設定できていない
- 音声ファイルが適切でない(サンプルレートやコーデックが再生できない形式等)
活用案
思いつきですが、この機能の活用アイデアを考えてみます。
1.サードパーティ製音声読み上げサービスを利用する
標準機能としてAmazon Pollyの音声読み上げ機能が利用できますが、別の音声サービスを利用したいケースもあると思います。
問い合わせフロー内からAWS Lambdaで連携し、音声データをS3へアップロードすることで、動的にサードパーティ音声サービスと組み合わせた仕組みが実現できそうです。
2.定期的に変化する音声情報を自動更新する
定期的に変化する情報をバッチ処理で音声データ生成・アップロードし、電話すると再生する仕組みも実現できそうです。
たとえば、ローカル天気情報を朝・昼・夕で入れ替える、みたいな仕組みを作ることができそうです。
(昔、自分の地元では地域の火災情報を教えてくれる番号がありました。消防車のサイレンが聞こえたら電話すると、「〇〇町1丁目で民家火災です」みたいな自動音声が流れていました)
3.留守番電話再生機能
IVR、音声ストリーム機能で顧客の音声データを保存しておき、後から電話操作で再生する、ということもできそうですね。
最後に
S3の音声ファイルを再生する機能は、下記の問い合わせフローブロックで利用可能になっています。
- プロンプトの再生
- 顧客の入力を取得する
- 顧客の入力を保存する
- プロンプトのループ
今回はS3へ手動でアップロードした音声をプロンプトの再生ブロックで利用しただけですが、動的に音声を差し替えられる機能は色々な場面で応用できそうですね。
以上、ご参考になれば幸いです。
参考リンク
AWSブログ
S3の音声を利用するための設定
プロンプトの作成ブロック
音声プロンプトの作成