2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AmazonConnectとLambdaの連携と拡張

Posted at

#はじめに
こんにちは,僕はエンジニア歴1年目のユウジロウと申します.
僕は大学院生の最後の半年間,株式会社ノベルワークスでインターンし,その際にAmazon Connectを使って音声ボットシステムの開発に携わりました.
その時に感じたあれこれや,備忘録を残しておきたいと思います.
難易度としては,ちょっとConnectを触ってみてこれからサービスを作る人向けの内容になっています.

#Amazon Connect とは
Amazon Connectとは顧客対応する音声システムを簡単に作れる,AWSサービスの1つです.AWSのLambdaやKinesis Video Streams(KVS)と組み合わせて拡張ができます.

体感とても簡単です.直感的なUIと機能が理解しやすくサクサク開発ができます.
また料金も従量課金制なので,使った分だけ請求されます.

大変だった点は様々な拡張機能に関する技術ブログや,公式ページの説明が薄かった点です.調べてもなかなかわからないことが多くありました.また拡張方法も充実しているのですが,LambdaやKVSを使うとその分料金が発生し,「本当に要求されている機能に対してこの設計でいいのか?」を何度も練り直しました.

Connectの設計次第で,運用費用が大きく変わるので突き詰める必要があります.

##読み方の拡張
Amazon Connectには指定した文字の読み上げに,SSMLタグを使用し読み方を拡張できます.
まず[プロンプトの再生]ブロックのテキストの読み上げの中で拡張したいテキストを〜で囲みます.

[解釈する]をSSMLに設定し,準備完了です.
⚠︎段落は考慮されません.また間違えたタグはそのまま読まれてしまいます.
スクリーンショット 2021-03-05 17.37.23.png

###一時停止,breakタグ
最大10秒間一時停止できます.
この間にバックエンドの処理を走らせるという使い方をしました.
スクリーンショット 2021-03-05 17.45.28.png

###その他の読み上げタグ
色々読み方の拡張があったのですが タグ以外は結局使用しませんでした.
読み上げスピードの変更や
使えそうなタグにタグがありましたが,日本語対応していないみたいです.
タグは,タグで囲まれた語句を指定言語で読み上げます.Connectの日本語の読み上げは完璧ではなく,「HP」を「エイチピー」とカタカナで読むため「ホームページ」と指定する必要があります.簡単な英単語の読み上げができないので,タグが機能すればかなり便利だと思います.
その他の使用できるタグは,AWSの公式の詳しいタグ一覧で参照できます.

##通話時間,オペーレーター数による制御
例えば入電からの通話時間で分岐させたい時は「キューの状態を確認する」ブロックを使用します.
また転送先のオペレーターの数が足りない時,待機してもらうには「人員の確認」ブロックを使用します.

スクリーンショット 2021-03-13 21.17.12.png

##営業時間に応じた反応の変化
サービスにオペレータ機能がある場合,営業時間内のみ転送でき,時間外はシステムが受け答えすることが理想的です.
これは「オペレーション時間を確認する」ブロックで実現可能です.
しかし,この方法ではオペレーション可能時間をConnectに登録しなければなりません.
営業時間外の変更や急な休業などの際に,Connectで一々管理しないといけないので,建設的ではありません.

そこでLambdaを呼び出し,Dynamoを参照することで営業時間に応じたフローを実現できます.
この後の[動的な読み上げ設計]の[Lambdaで変数を設定]で説明します.

スクリーンショット 2021-03-13 21.19.52.png スクリーンショット 2021-03-14 21.38.28.png

##動的な読み上げ設計
Connectを使っていると動的な読み上げ機能が欲しくなります.
動的な読み上げを実現するには2パターンあります.

###顧客入力(IVR)と分岐で動的な読み上げインタラクション
よく音声案内サービで「新規お申し込みの方は1を,契約済の方は2を,その他のお問い合わせの方は3を押してください」というインタラクションがあると思います.Amazon Connectでは「顧客の入力を取得する」ブロックが用意されており,IVR入力によりフロー分岐させることが可能です.

まず「顧客の入力を取得する」ブロックを設置します.
スクリーンショット 2021-03-14 18.39.03.png

次にブロック内に読み上げるテキストを入力します.
スクリーンショット 2021-03-14 18.43.31.png

ブロック内のDTMFを設定します.
タイムアウト時間は入力がなかった時の反応で,最小1秒,最大10秒設定できます.
「別の条件の追加」でオプションを増やします.
オプションにはIVRで入力する1から4の数字を入れます.これにより入力に応じた分岐を作れます.

スクリーンショット 2021-03-14 19.14.20.png

全体的にはこのようになります.
急ぎ1〜急ぎ4は1から4の入力に応じた分岐です.
「デフォルト」は1〜4以外の想定されていない入力があった時の分岐です.
その時はもう一度入力して欲しいので,IVRに戻るようにフローを作ります.
しかし,ブロックが自分自身を指定できないので,「プロンプトの再生」や「問い合わせ属性の設定」ブロックなど適当なブロックを挟みましょう.
「もう一度聞きたい方」向けにもこの方法で戻れるようにしましょう.
スクリーンショット 2021-03-14 19.26.35.png

###Lambdaで変数を設定
Connectから呼び出したLambdaで指定した変数を読み上げることができます.
またLambdaで設定した変数を使って,分岐やループも可能です.
Lambdaとの連携により,電話番号からデータベースの検索や,ユーザによって対応を変えるコールbotの作成も可能です.
スクリーンショット 2021-03-05 19.58.36.png

Lambdaの作成
Connectから呼び出すLambdaを作成し,読み上げたい文字列を変数に格納,returnする.
ここで営業時間内外を判断したり,挨拶を時間によって変更したり,データベースを参照し,電話をかけてきているユーザの会員情報を参照することができます.
スクショはNode.js 14xで書かれています.
スクリーンショット 2021-03-05 19.10.55.png

Connectのコンソールではなく,AWS側のConnectコンソールで使用するLambdaを追加します.

スクリーンショット 2021-03-05 18.47.25.png

Connectで[AWS Lambda 関数を呼び出す]ブロックを設置します.
ここで上の「AWS側のConnectコンソールで使用するLambdaを追加」をしていないとLambdaを呼び出せないので,忘れずにしましょう

[問い合わせ属性の設定]ブロックでLambdaからの返り値を固定します.
これにより,Connectで使える変数を定義できます.
このブロックを[AWS Lambda 関数を呼び出す]ブロックの直後に設置しないと,返り値を保存できません.
スクリーンショット 2021-03-14 22.22.37.png

↓[問い合わせ属性の設定]ブロック内の設定
スクリーンショット 2021-03-05 19.16.57.png

プロンプトの再生でこのように記述します.
これにより,問い合わせ属性で設定した値を読み上げることが可能です.
今回の場合は「おはようございます.アマゾンコネクトです.」と読み上げられます.
「Attributes」の部分はおまじないのようなものです.なので「$.Attributes.」以降で変数を指定してください.

スクリーンショット 2021-03-05 20.30.45.png

全体設計はこのようになります.
このLambdaとConnect,Connect内の分岐を使えば,営業時間内外のフローの分岐も実現可能です.
とても便利でできることかなり増えるので,この連携はおすすめです.
スクリーンショット 2021-03-05 20.16.08.png

#総評
とても扱いやすく,拡張方法も工夫次第で多いのですが,まだまだできないことも多くあります.
例えばリアルタイムの文字起こしの機能はまだなく,外部のAPIを使用しないと実現できません.
AWS Transcribeの日本語対応も2019年11月に実装されたのですが,リアルタイムではなく通話終了後の処理のみとなっています.

しかし日々細かなアップデートもきてるみたいで,見る度にコンソール画面が少し変わっています.
まだまだ機能を追加してくれる雰囲気があるので,今後に期待です.
個人的にはContact Lensという機能が楽しみです.
リアルタイムで会話の文字起こし,自然言語分析,感情分析をしてくれるらしいです.
話しているユーザが不快感に感じていないかどうかなどもわかるみたいです.
現在(2021年3月)は日本語対応しておらず,実装が楽しみです.

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?