0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Connectの DISCONNECTEDイベントをEventBridgeで検知してLambdaを実行する

Posted at

はじめに

本記事では、amazonConnectのセッションが終わった際に、DISCONNECTEDイベントをEventBrigeで検知してLambdaを動かす処理を実装します。

ゴール

  • Connectのセッションが切断された際に、LambdaがコールされてることをCWログから確認する
  • Lambdaでコンタクト属性が取得できてることをCWログから確認する

構成

connect (2).jpg

ConnectのDisconnectイベントを検知するEventBrigeのルールを事前に作成しておきます。イベントが発生したらLambdaをコールします。

作るもの

  • Connectのフロー:1つ
  • EventBrigeのルール:1つ
  • Lambda:1つ

Connectのフロー

プロンプトの再生ブロックで文言を3回チャット表示するだけの簡単なフローを作成します。

image.png

プロンプトの再生ブロックの設定

コンタクト属性のうち、ユーザの定義属性を表示するように設定します。
本記事では、ユーザの定義属性の値はConnectのテストチャットの際に入力します。

image.png

ユーザの定義属性:$.Attributes.name_of_your_destination_key

参考:https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-attrib-list.html#user-defined-attributes

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'
    }

LambdaのIAM ポリシーには、GetContactAttributes のアクションを追加しました。

参考:https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazonconnect.html

EventBrigeのルール作成

  • イベントパターンを構築
    イベントソース > その他 を選択します。

image.png

 作成のメソッド > カスタムパターン (JSON エディタ)を選択します。

image.png

以下のルールを設定します。

イベントパターン
{
  "source": ["aws.connect"],
  "detail-type": ["Amazon Connect Contact Event"],
  "resources": ["arn:~~"],
  "detail": {
    "eventType": ["DISCONNECTED"]
  }
}

イベントパターンの設定には以下のドキュメントが参考になります。

  • ターゲットを選択
    EvnetBrigeからコールするLambdaを選択しておきます。

image.png

Lambdaを確認するとEventBrigeと連携できてる事が確認できました。

image.png

動作の確認

Connectのテストチャット

テストの設定からコンタクト属性を設定し、Connectのテストチャットを試してみます。

問い合わせ属性(オプション)
{"fruit1":"apple","fruit2":"orange"}

image.png

LambdaのCloudWatchログを確認

eventパラメータの中身を確認します。
こちらにはコンタクト属性の値は入ってなかったです。

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つのパラメータがあることを確認できました。

Attributes
{
    "fruit2": "orange",
    "fruit1": "apple"
}

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?