この記事はAmazon Connect アドベントカレンダー 2024、25日目の記事です。
こんにちは、櫻井です。
今年もAmazon Connectのアップデートいっぱいありましたね。
Amazon Connect初心者にはアップデートを読んでも難しくてわからないことが多かったので、今回は初歩的なAmazon ConnectからLambdaを呼び出し、過去に同じ電話番号から何回着信があったのかをカウントする機能を作ってみようと思います。
Amazon Connectの構築方法については、弊社の岩間が記事を書いているので参考にしてみてください。
Amazon Connect最初の一歩!シンプルなコールセンターを構築してみた
構築してみる
DynamoDBを構築する
まずはDynamoDBを構築します。
AWSコンソールにログインしてDynamoDBのページに移動し、テーブルの作成をクリックします。
1.テーブル名は任意のテーブル名を入力します。今回はcall-historyとします。
2.パーティションキーにphoneNumberと入力し、 データ型に文字列を選択します。
3.入力ができたら、テーブルの作成をクリックします。
これでDynamoDBを作成することができました。
Lambdaを構築する
次にAmazon Connectから呼び出すLambdaを作成します。
Lambdaのページに移動し、関数の作成をクリックします。
- 関数名に任意の名前を入力します。今回は call-history-counterとします。
- ランタイムを設定します。今回はPython3.13にします。
- 実行ロールを選択します。最低限以下のポリシーが付与されているロールであれば動作します。
- AWSLambdaBasicExecutionRole(マネージドポリシー)
- 先ほど作成したDynamoDBのテーブルに対するGetItem
- 先ほど作成したDynamoDBのテーブルに対するPutItem
- 先ほど作成したDynamoDBのテーブルに対するUpdateItem
- 関数の作成をクリックします。
関数が作成できたら、実際にコードを書いていきます。
Amazon ConnectからLambdaを呼び出した場合、Lambdaのイベントには以下のような内容で渡ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{ "Details": { "ContactData": { "Attributes": {}, "Channel": "VOICE", "ContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "CustomerEndpoint": { "Address": "+819012345678", "Type": "TELEPHONE_NUMBER" }, "InitialContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "InitiationMethod": "INBOUND", "InstanceARN": "arn:aws:connect:ap-southeast-2:xxxxxxxxxxxx:instance/8db137d2-cacd-xxxx-xxxx-xxxxxxxxxxxx", "PreviousContactId": "305661db-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "Queue": null, "SystemEndpoint": { "Address": "+819012345678", "Type": "TELEPHONE_NUMBER" } }, "Parameters": {} }, "Name": "ContactFlowEvent" } |
DBには発信者電話番号を保存する必要があるので、Details→ContactData→CustomerEndpoint→Addressを関数内で取得し、保存します。
また、着信回数をAmazon Connectに返す必要があるので、返り値にはDBから取得した着信回数を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('call-history') def lambda_handler(event, context): # Amazon Connectからの入力パラメータを取得 phone_number = event['Details']['ContactData']['CustomerEndpoint']['Address'] try: # 現在の通話回数を取得して更新 response = table.get_item( Key={ 'phoneNumber': phone_number } ) if 'Item' in response: # 既存の記録がある場合は通話回数を増やす call_count = response['Item'].get('callCount', 0) table.update_item( Key={ 'phoneNumber': phone_number }, UpdateExpression='SET callCount = :count', ExpressionAttributeValues={ ':count': call_count + 1 } ) else: # 新規の電話番号の場合 table.put_item( Item={ 'phoneNumber': phone_number, 'callCount': 1 } ) call_count = 0 return { 'statusCode': 200, 'callCount': call_count } except Exception as e: print(f"Error: {str(e)}") return { 'statusCode': 500, 'error': str(e) } |
これでコードは完成したので、Deployをクリックしてコードを保存します。
コンタクトフローを作成する
コンタクトフローを作成する前に、先程作成したLambdaをAmazon Connectから呼び出せるようにする必要があります。
AWSコンソールにログインしてAmazon Connectに移動し、フローを作成したいAmazon Connectのインスタンスエイリアスをクリックします。
つぎに、問い合わせフローのタブを開き、Lambda関数に先ほど作成したLambdaを選択し、Add Lambda Functionをクリックします。
これでLambda関数の追加は完了しました。
つぎは、発信者に対して着信回数を返すだけの簡単なフローを作成します。
Amazon Connectにログインし、ルーティング→フローをクリックします。
フロー画面に遷移したら、フローを作成をクリックします。
フロー作成画面に移動したら
ログ記録動作設定→音声の設定→AWS Lambda関数を呼び出す→顧客の入力を保存する→プロンプトの再生→切断
の順でブロック配置します。
設置が完了したら、各ブロックの詳細な設定を行います。
ログ記録動作設定
Amazon Connectのフローログの設定を行うブロックです。
ブロックを配置した時点でログ記録がデフォルトで有効になっているので、何も変更をしなくて大丈夫です。
音声の設定
音声プロンプトの発話言語と、発話音声を変更することが出来るブロックです。
言語に日本語を設定し、音声は任意のもので大丈夫です。
AWS Lambda 関数を呼び出す
Amazon ConnectからLambdaを呼び出すことが出来るブロックです。
関数のARNに先ほど作成したLambdaを設定します。
顧客の入力を保存する
Lambdaから返ってきた値などをフロー内の変数として保存することが出来るブロックです。
プロンプトライブラリ(音声)から選択→動的に設定をチェックし
名前空間に外部を選択してキーにExternalResults.callCountと入力します。
プロンプトの再生
任意の音声を流すことができます。
テキスト読み上げまたはチャットテキスト→手動で設定をチェックし
テキストボックスに”あなたは過去に $.External.callCount 回電話をかけたことがあります。”と入力します。
これで各ブロックの詳細設定が完了したので、フロー名を設定し、公開をクリックします。
フローが公開されたので、最後にフローに電話番号を紐づけます。
チャネル→電話番号をクリックします。
電話番号をクリックします。
コンタクトフロー/IVRに、先ほど作成したコンタクトフローを設定します。
以上でAmazon Connectの設定は完了です。
つかってみる
先ほどコンタクトフローを紐づけた電話番号に発信を行います。
電話がつながったあと
“あなたは過去に X回電話をかけたことがあります。”
と発話され、切断されれば成功です。
もしうまくいかなかった場合は、CloudWatchの/aws/connect/{インスタンスエイリアス}の中にブロックごとのログが出力されているので、そちらを確認することでエラー箇所の特定ができると思います。
まとめ
Amazon ConnectからLambdaを呼び出して過去の着信回数を取得することができました。
Amazon ConnectとLambdaの連携はよく使うと思うので、覚えておくといいかもしれません。
ありがとうございました。
- NAT GatawayからNAT インスタンスに乗り換えて約95%のコスト削減をしてみた - 2024-12-25
- Amazon Connectで同じ電話番号から何回かかってきたかをカウントしてみた - 2024-12-25
- 特定の時間あたりのlambda実行数をSlackに通知する - 2023-12-23
- 公衆電話からでも使える電話帳サービスをLEX + AmazonConnectで作ってみた - 2023-12-19
- SQSを使ってlambdaを10秒ごとに定期実行する - 2023-12-14