はじめに
本記事では、amazonConnectのセッションが終わった際に、DISCONNECTED
イベントをEventBrigeで検知してLambdaを動かす処理を実装します。
ゴール
- Connectのセッションが切断された際に、LambdaがコールされてることをCWログから確認する
- Lambdaでコンタクト属性が取得できてることをCWログから確認する
構成
ConnectのDisconnect
イベントを検知するEventBrigeのルールを事前に作成しておきます。イベントが発生したらLambdaをコールします。
作るもの
- Connectのフロー:1つ
- EventBrigeのルール:1つ
- Lambda:1つ
Connectのフロー
プロンプトの再生ブロックで文言を3回チャット表示するだけの簡単なフローを作成します。
プロンプトの再生ブロックの設定
コンタクト属性のうち、ユーザの定義属性を表示するように設定します。
本記事では、ユーザの定義属性の値はConnectのテストチャットの際に入力します。
ユーザの定義属性:$.Attributes.name_of_your_destination_key
Lambda
eventの中身とコンタクト属性を出力するLambdaを作成します。
取得したcontactIdをもとにセッション内で使用したコンタクト属性を取得します。
import json
import logging
import boto3
logger = logging.getLogger()
logger.setLevel(logging.INFO)
connect = boto3.client('connect')
def lambda_handler(event, context):
logger.info("=== Event ===")
logger.info(json.dumps(event, indent=2, ensure_ascii=False))
contactId = event['detail']['contactId']
instanceId = event['detail']['tags']['aws:connect:instanceId']
try:
# 属性の取得
response = connect.get_contact_attributes(
InstanceId=instanceId,
InitialContactId=contactId
)
# 取得した属性のログ出力
logger.info("=== Contact Attributes ===")
logger.info(json.dumps(response.get('Attributes', {}), indent=2, ensure_ascii=False))
except Exception as e:
logger.error(f"Error getting contact attributes: {str(e)}")
return {
'statusCode': 200,
'body': 'hoge'
}
- 参考:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/connect/client/get_contact_attributes.html
- https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-attrib-list.html#user-defined-attributes
LambdaのIAM ポリシーには、GetContactAttributes
のアクションを追加しました。
参考:https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazonconnect.html
EventBrigeのルール作成
- イベントパターンを構築
イベントソース > その他 を選択します。
作成のメソッド > カスタムパターン (JSON エディタ)を選択します。
以下のルールを設定します。
{
"source": ["aws.connect"],
"detail-type": ["Amazon Connect Contact Event"],
"resources": ["arn:~~"],
"detail": {
"eventType": ["DISCONNECTED"]
}
}
イベントパターンの設定には以下のドキュメントが参考になります。
- ターゲットを選択
EvnetBrigeからコールするLambdaを選択しておきます。
Lambdaを確認するとEventBrigeと連携できてる事が確認できました。
動作の確認
Connectのテストチャット
テストの設定からコンタクト属性を設定し、Connectのテストチャットを試してみます。
{"fruit1":"apple","fruit2":"orange"}
LambdaのCloudWatchログを確認
event
パラメータの中身を確認します。
こちらにはコンタクト属性の値は入ってなかったです。
{
"version": "0",
"id": "~~",
"detail-type": "Amazon Connect Contact Event",
"source": "aws.connect",
"account": "~~",
"time": "2025-01-13T05:49:34Z",
"region": "~~",
"resources": [
"arn:aws:connect:~~", // Connectのインスタンス
"arn:aws:connect:~~" // Connectのフロー
],
"detail": {
"eventType": "DISCONNECTED",
"contactId": "~~",
"channel": "CHAT",
"instanceArn": "~~",
"initiationMethod": "API",
"initiationTimestamp": "2025-01-13T05:49:29.237Z",
"connectedToSystemTimestamp": "2025-01-13T05:49:30.537Z",
"disconnectTimestamp": "2025-01-13T05:49:34.502Z",
"tags": {
"aws:connect:instanceId": "~~"
},
"segmentAttributes": {
"connect:Subtype": {
"valueString": "~~"
}
}
}
}
boto3のget_contact_attributes
で取得した属性を確認すると、テストチャットで入力した2つのパラメータがあることを確認できました。
{
"fruit2": "orange",
"fruit1": "apple"
}