[Amazon Connect] 電話するLambda と ユーザが入力した番号を受け取るLambda を作ってみた
Amazon Connectで任意の番号に電話をかけ、ユーザに数字を押してもらい、その数字をLambdaで取得するという一連の流れを作ってみました。
Amazon Connectの準備
インスタンスの作成と電話番号の取得
【東京リージョン】Amazon Connectでコンタクトセンター構築はじめの一歩を参考にして、次の作成を行います。
- Amazon Connectのインスタンス作成
- 電話番号の取得
問い合わせフローを作成する
問い合わせフローを作成しますが、呼び出し先Lambdaの指定を含めたフローの作成はあとで行うため、この時点では適当でOKです。
任意文字列の発話(プロンプトの再生)を行うフローを作成します。
- 音声の設定
- 言語:日本語
- 音声:Mizuki
プロンプトの再生を次のようにすることで、Lambda関数から任意の文字列を渡して発話可能になります。
- プロンプトの再生
- テキスト読み上げまたはチャットテキスト
- 動的に入力
- タイプ:ユーザー定義
- 属性:message
- 解釈する:テキスト
作成後、左上で名前を入力します。
問い合わせフローを保存して公開する
続いて右上の「保存」と「公開」を押します。
問い合わせフローのARNを取得する
この時点で左上の「追加のフロー情報の表示」を選択します。
ここにARNが書かれているため、メモしておきます。
電話番号と問い合わせフローを紐付ける
左のメニューから「電話番号」を選択し、続けてさきほど取得した電話番号を選択します。
電話番号の編集画面で「問い合わせフロー」にさきほど保存&公開したフローを選択し、保存します。
Lambda関数の作成
2つのLambda関数を作成します。ここではAWS SAMを使います。
ディレクトリ構造
必要なファイルのみ記載しています。
. ├── src │ ├── publish │ │ └── app.py │ └── subscribe │ └── app.py └── template.yaml
AWS SAMテンプレート
次のAWS SAMテンプレートを作成します。
電話を掛けるLambdaには、Amazon Connectに対する権限を持つIAMロールを作成して付与しています。
また、次の4つの情報が必要になるため、デプロイ時のコマンドでLambdaの環境変数に指定します。
- 相手の電話番号:DestinationPhoneNumber
- 自分の電話番号:SourcePhoneNumber
- インスタンスID:InstanceId
- 問い合わせフローID:ContactFlowId
Lambdaコード
電話するLambda
src/publish/app.py
です。
ユーザが入力した番号を受け取るLambda
src/subscribe/app.py
です。statusCode: 200
を返さない場合、Amazon Connect側で失敗と判断されます。
build
sam build
package
バケット名は適宜変更してください。
sam package \ --output-template-file packaged.yaml \ --s3-bucket cm-fujii.genki-sam-app-sample-bucket
deploy
次のパラメータが必要です。
- 相手の電話番号:DestinationPhoneNumber
- 自分の電話番号:SourcePhoneNumber
- Amazon Connectで取得した電話番号です
- インスタンスID:InstanceId
- 問い合わせフローID:ContactFlowId
インスタンスIDと問い合わせフローIDは、問い合わせフローの画面で取得したARNに含まれています。
arn:aws:connect:ap-northeast-1:111122223333:instance/671b6be1-b3e2-4c9c-9539-896ecd56b75d/contact-flow/0c6d0dc4-437a-4863-834c-35ba0105304d
arn:aws:connect:ap-northeast-1:111122223333:instance/<インスタンスID>/contact-flow/<問い合わせフローID>
全体のコマンドは次になります。
sam deploy \ --template-file packaged.yaml \ --stack-name AmazonConnect-Sample-Stack \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset \ --parameter-overrides \ DestinationPhoneNumber=+819011112222 \ SourcePhoneNumber=+818099998888 \ InstanceId=671b6be1-b3e2-4c9c-9539-896ecd56b75d \ ContactFlowId=0c6d0dc4-437a-4863-834c-35ba0105304d
問い合わせフローとLambdaを連携させる
AWSのAmazon Connect
画面に行き、作成したインスタンスIDを選択します。
続いて左側メニューの「問い合わせフロー」を選択します。
下側にあるAWS Lambdaで先ほどデプロイしたLambda関数を選択し、「Lambda関数の追加」を選択します。
問い合わせフロー更新
次のように更新します。細かい内容はお好みでどうぞ。
更新後は、「保存」と「公開」を忘れず実行します。
顧客の入力を保存する
- テキスト読み上げまたはチャットテキスト
- テキスト:1〜9の数字を入力してください。
- お客様の入力
- カスタム
- 最大桁数:1
AWS Lambda 関数を呼び出す
- 関数を選択する
- 先ほど追加したLambda関数
- 関数入力パラメータ
- 属性を使用する
- 宛先キー:SelectedNumber
- タイプ:システム
- 属性:保存済みのお客様の入力
動作確認
発信用のLambda関数(phone-publish-function
)にアクセスし、適当にテスト実行します(動けばOKです)。
すぐに電話がかかってきて、任意の番号(今回は7)を入力し、電話が切れます。
受け取る用のLambda関数(phone-subscribe-function
)でログ出力したevent
は下記となっており、無事に「ユーザが入力した番号(SelectedNumber
)」を受け取れました!!!
{ "Details": { "ContactData": { "Attributes": { "message": "これはテストメッセージです。" }, "Channel": "VOICE", "ContactId": "2b449fc6-e1a9-4eeb-900f-a87c3a2fd9f0", "CustomerEndpoint": { "Address": "+819011112222", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "2b449fc6-e1a9-4eeb-900f-a87c3a2fd9f0", "InitiationMethod": "API", "InstanceARN": "arn:aws:connect:ap-northeast-1:111122223333:instance/671b6be1-b3e2-4c9c-9539-896ecd56b75d", "MediaStreams": { "Customer": { "Audio": null } }, "PreviousContactId": "2b449fc6-e1a9-4eeb-900f-a87c3a2fd9f0", "Queue": null, "SystemEndpoint": { "Address": "+818099998888", "Type": "TELEPHONE_NUMBER" } }, "Parameters": { "SelectedNumber": "7" } }, "Name": "ContactFlowEvent" }
さいごに
思っていたよりも簡単に実現できました。これは便利ですね!
参考
- 【東京リージョン】Amazon Connectでコンタクトセンター構築はじめの一歩 | Developers.IO
- Amazon ConnectでCloudWatchのアラームを電話通知してみた | Developers.IO
- [Amazon Connect] 日本語で使用すると、接続直後のアナウンスが欠けたり、発話内容の区切りが無く聞き取りにくかったりする場合の対処 | Developers.IO
- [Amazon Connect] 問い合わせフローの中でLambda関数を実行する | Developers.IO
- [Amazon Connect] 超便利 Lambdaへのパーミッション追加がGUIからできるようになった(新機能) | Developers.IO
- Amazon Connect とは - Amazon Connect