この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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