こんにちは!エンジニアの君島です。
このエントリは、Amazon Connect Advent Calendar 2022の4日目の記事です。
ギークフィードとクラスメソッドさんの有志が著者となっているアドベントカレンダーです。
本記事では、Building a contact survey solution for Amazon Connectというワークショップを実際にやってみました。
目次
はじめに
1日目の記事でも紹介したAmazon Connectの学習リソースの中のワークショップ、Building a contact survey solution for Amazon Connectを実践してみました。
前提条件
ブラウザ
以下のブラウザで、最新の3バージョンがサポートされています。
- GoogleChrome
- Mozilla Firefox
Amazon Connect
- インスタンスを作成していること
- 番号を取得していること※
※日本の番号を取るのには各種書類を用意した申請が必要なので、予め用意しておきましょう。米国番号でもよければ、そちらをご利用ください
使用するサービス
- Amazon Connect
- AWS Lambda
- Amazon DynamoDB
- IAM
ゴール
構成図
ワークショップより参照。
Lambda関数の一覧
関数名 | 用途 |
---|---|
surveyUtils | コンタクトフロー内で呼ばれる関数で、ヘルパ関数です。getNextSurveyQuestionとvalidateInputという操作を実装しています。 |
getSurveryConfig | コンタクトフロー内で呼ばれるLambda関数で、DynamoDBからsurveyIdをキーにレコードを取得します。 |
writeResults | コンタクトフロー内で呼ばれるLambda関数で、顧客の回答をDynamoDBに書き込みます。 |
得られるもの
データストアとしてDyanamoDBを採用し、Lambdaで情報を取得したり、書き込んだりするといいったAmazon Connectの問い合わせフローの中でよくある連携サービスの使い方を学ぶことができます。
実際にやってみた
DynamoDBテーブル作成
テーブル一覧
テーブル名 | 用途 |
---|---|
surveyConfig | surveyの構成を格納 |
surveyResults | surveyの結果を書き込み格納 |
surveyConfig
設定 | 値 | 備考 |
---|---|---|
テーブル名 | surveyConfig | 値は任意の文字列でも構いません。 |
パーティションキー | surveyId | 型はString(文字列) |
ソートキー | 設定無し |
その他はデフォルトのままでテーブル作成をします。
続いて、このテーブルの属性を追加してきましょう。この表がアンケートの構成を表していると言えます。シンプルなアンケート
値はJSONで表現されていましたので、以下に記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 |
{ "surveyId": "123456", "surveyName": "My first survey", "introPrompt": "Please answer the following questions.", "outroPrompt": "Thank you for participating !", "min": "1", "max": "5", "question_1": "On a scale of 1 to 5, how much are you enjoying AWS workshops ?", "question_2": "On a scale of 1 to 5, how likely are you to apply what you have learned today ?" } |
surveyResults
設定 | 値 | 備考 |
---|---|---|
テーブル名 | surveyResults | 値は任意の文字列でも構いません。 |
パーティションキー | contactId | 型はString(文字列) |
ソートキー | 設定無し |
その他はデフォルトのままでテーブル作成をします。
Lambdaの実行ロールの作成
DynamoDBとAmazon Connectに関するポリシーを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:PutItem", "connect:StartTaskContact" ], "Resource": [ "{{ARN for surveyConfig table}}", "{{ARN for surveyConfig table}}/index/surveyId", "{{ARN for surveyResults table}}", "{{ARN for your Amazon Connect instance}}/contact-flow/*" ], "Effect": "Allow" } ] } |
作成したポリシーとAWSLambdaBasicExecutionRoleというポリシーを持つ、contactSurveyLambdaRoleという名前のIAMロールを作成します。
Lambda関数の作成
getSurveryConfig、writeResults、surveyUtilsというLambda関数を作成します。
ワークショップにて用意されているLambda関数は、ランタイムはNode16.x、実行ロールは上記で作成したcontactSurveyLambdaRole、ソースコードはページに記載されているものを貼り付けて作成しましょう。
AWS Lambda 関数を Amazon Connect インスタンスに関連付ける
作成したLambda関数をAmazon Connectインスタンスに関連付けます。
問い合わせフローのモジュールの作成
ファイルが用意されているので、問い合わせフローのモジュールのインポートを行いましょう。
4か所のLambdaを設定する箇所があり、それぞれの箇所にLambda関数を設定しましょう。
テスト
上で作ったモジュールだけでは、surveyConfigテーブルの"surveyId": "123456"
を指定することができません。
このモジュールを含む問い合わせフローを作成し、その手前に、surveyId=123456のSet contact attributesブロックを作成して公開しておきます。
Channels > Phone numbersで入電可能な電話番号のContact flow/IVRに新たに作成した問い合わせフローを設定します。
入電可能な電話番号にかけてアンケートに回答していきましょう。
クリーンアップ
作成した以下のリソースは削除しておきましょう。
- Amazon Connect
- AWS Lambda
- Amazon DynamoDB
- IAM
まとめ
AWS公式のワークショップ、Building a contact survey solution for Amazon Connectを実践してみました。
コンタクトセンターシステムにおいて、Amazon Connectを単体のみで利用するケースは少なく何らかのサービスと連携したり、取得したデータを保存し、活用します。
このワークショップではsurveyを例として、DyanamoDBとLambdaというAmazon Connectで良く使用する組み合わせ例を、問い合わせフローで動的に接続させて動作するアーキテクチャを実践することができました。
公式のワークショップではAmazon Quicksightを用いたワークショップを続編としていましたが、Lambdaを書き換えて別の情報を取得したり、問い合わせフローを切り替えるということをするとAmazon Connectについての理解が進むと思います。
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26