Amazon Connectでお客様からの「ありがとう」をカウントしてみた
Amazon Connect アドベントカレンダー 2024、5日目の記事です!
クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)
はじめに
Amazon Connect Contact Lensの音声分析機能を使い、お客様からオペレーターへの「ありがとう」をカウントして記録する方法を考えてみました。
オペレーターとの通話時にお客様が「ありがとう」と発言したことをContact Lensのルールで検知し、EventBridge > Lambda > DynamoDBで「ありがとう」をカウントします。

やってみた
前提条件
- Amazon Connectは構築済み
Amazon Connectの設定
Contact Lensの有効化
AWSコンソールから対象のAmazon Connectインスタンス > 分析ツールを開きます。
Contact Lensが有効になっていない場合は有効にして設定を保存します。

コンタクトフローの設定
コンタクトフローに記録と分析の動作を設定ブロックを追加します。
通話記録と分析をオンに設定します。
分析は音声分析を有効にするにチェックを入れ、通話後の分析を選択します。


Contact Lensルールの作成
分析と最適化からルールを開き、ルールを作成を選択します。
会話分析のルールを作成します。

Contact Lens 通話後分析が利用可能 を選択し、顧客が「ありがとう」と話した場合に検知するように設定します。

アクションのカテゴリ名を入力し、アクションにはEventBridgeイベントを生成を選択します。

ルールを作成します。
DynamoDBの設定
以下の内容でDynamoDBを作成します。
パーティションキー:date(文字列)
ソートキー:staff_id(文字列)

Lambdaの設定
Lambda関数の作成
Lambda関数を作成します。

一般設定のタイムアウトを1分に変更します。

ロールに権限の追加
DynamoDBの記録用と、Connectのユーザー情報を取得する為に以下の権限を追加します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "connect:DescribeUser",
                "dynamodb:UpdateItem"
            ],
            "Resource": "*"
        }
    ]
}
EventBridgeから送信されるイベント
EventBridgeから送信されるイベントの構造は以下です。
このイベントのagentArnを使ってDynamoDBに記録する際のユーザー名を取得します。
{
 "version": "0", // set by EventBridge
 "id": "aaaaaaaa-bbbb-cccc-dddd-bf3703467718", // set by EventBridge
 "source": "aws.connect",
 "detail-type": "Contact Lens Post Call Rules Matched", 
 "account": "your AWS account ID",
 "time": "2020-04-27T18:43:48Z",
 "region": "us-east-1", // set by EventBridge
 "resources": ["arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN"],
 "detail": {
    "version": "1.0",
    "ruleName": "ACCOUNT_CANCELLATION", // Rule name
    "actionName": "NOTIFY_CUSTOMER_RETENTION",  
    "instanceArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN",
    "contactArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/contact/contact-ARN",
    "agentArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/agent/agent-ARN",
    "queueArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/queue/queue-ARN",
    }
}
コード
コード内のDynamoDBテーブル名を作成したDynamoDBテーブル名に変更します。
agent_arnからagent IDを抽出しagent nameを取得してDynamoDBに記録しています。
import boto3
import datetime
from datetime import timedelta
def extract_agent_id(agent_arn):
    # agent ARNから agent ID を抽出
    return agent_arn.split('/')[-1]
def get_instance_id(agent_arn):
    # agent ARNからinstance IDを抽出
    return agent_arn.split('/')[1]
def get_agent_username(connect_client, instance_id, agent_id):
    # Amazon Connectから agent の情報を取得
    response = connect_client.describe_user(
        InstanceId=instance_id,
        UserId=agent_id
    )
    return response['User'].get('Username', '')
def lambda_handler(event, context):
    # AWS クライアントの初期化
    dynamodb = boto3.resource('dynamodb')
    connect = boto3.client('connect')
    table = dynamodb.Table('DynamoDBテーブル名')
    # 現在の日時(JST)を取得
    jst_time = datetime.datetime.now() + timedelta(hours=9)
    current_date = jst_time.strftime('%Y-%m-%d')
    # イベントから agent の情報を抽出
    agent_arn = event['detail']['agentArn']
    agent_id = extract_agent_id(agent_arn)
    instance_id = get_instance_id(agent_arn)
    # Connect から agent の username を取得
    agent_username = get_agent_username(connect, instance_id, agent_id)
    # DynamoDB のレコードを更新
    # ありがとうカウントを1増やし、agent_name を設定
    table.update_item(
        Key={
            'date': current_date,
            'staff_id': agent_id
        },
        UpdateExpression='ADD arigato :arigato SET agent_name = :name',
        ExpressionAttributeValues={
            ':arigato': 1,
            ':name': agent_username
        }
    )
EventBridgeの設定
EventBridgeのルールを作成します。
名前を入力しデフォルトのまま作成を進めます。

イベントソースは以下の内容で設定します。
イベントソース:AWSのサービス
AWSのサービス:Amazon Connect
イベントタイプ:Contact Lens Post Call Rules Matched

ターゲットは以下の内容で設定します。
ターゲットを選択:Lambda 関数
関数:作成した関数を選択

ルールを作成します。
動作確認
Amazon Connectに架電してありがとうがカウントされるか動作確認してみました。
約5分後にDynamoDBに記録されました。

これでどのオペレーターが1日に何回ありがとうを言ってもらえたか記録できます。
お客様からの感謝を記録することでオペレーターのモチベーションアップにも繋がるかと思います。
記録されたデータを可視化してみてもよさそうですね。
参考情報








