電話番号 電話番号 お問い合わせ

受付時間 平日10:00~18:00

TOP

資料ダウンロードはこちら >>

ロゴ

AWSやシステム・アプリ開発の最新情報|クロスパワーブログ

Amazon Connect AWS DynamoDB Lambda

Amazon Connect ~個別エージェントへの通話転送~

データ転送

こんにちは。katoです。

 

今回は昨年末に追加されたAmazon Connectの個別エージェントへの通話転送機能をご紹介させていただきます。

概要

 

Amazon Connectの個別エージェントへの通話転送機能を利用することで、特定のエージェントを指定して直接通話を転送させることが可能となりました。

 

この機能を利用することで、顧客と担当エージェントの紐づけや、専門技能に基づいた特定エージェントへの転送といったことが可能となります。

 

今回はこの個別エージェントへの通話転送機能を利用して、問い合わせ履歴に基づき、前回の担当エージェントに優先的に転送を行う問合せフローの作成を行っていきます。

 

なお、今回は電話番号以外の顧客情報は利用しません。

 

事前に電話番号と顧客名などをデータベースに登録し担当者を決定することも可能ですが、事前作業が面倒なうえ、登録外の電話番号への対応や登録情報の更新など運用において面倒な点も多くあります。

 

今回は上記のようなデータベース管理作業が不要なシンプルなコールセンターの仕組みをご紹介します。

手順

 

まず初めに問い合わせフローで必要となるリソース類を用意して行きます。

 

 

DynamoDBテーブル

 

今回DynamoDBは電話番号と前回の担当エージェントを紐づけるために利用します。

 

本記事ではプライマリパーティションキーを「Number」としてテーブルの作成します。

 

プライマリソートキーの指定は不要です。

 

 

Lambda関数

 

今回ご紹介する問い合わせフローでは以下の3つのLambda関数を利用します。

 

・担当者確認用

・エージェント指定用

・担当者登録用

 

担当者確認用Lambda関数
import json
import boto3
import os

connect = boto3.client('connect')
dynamodb = boto3.client('dynamodb')

def lambda_handler(event, context):
    phnum = event['Details']['ContactData']['CustomerEndpoint']['Address']
    print (phnum)
    getitem = dynamodb.get_item(
        TableName=os.environ['Table'],
        Key={
            'Number': {
                'S': str(phnum)
            }
        }
    )
    if "Item" in getitem:
        username = getitem['Item']['Agent']['S']
        return {'user': username, 'users': username, 'number': phnum}
    else:
        listusers = connect.list_users(
            InstanceId=os.environ['Instance']
        )
        username = listusers['UserSummaryList'][0]['Username']
        return {'user': username, 'users': username}

 

環境変数としてAmazon ConnectのインスタンスARNとDynamoDBのテーブル名指定してください。

 

このLambda関数では発信元の電話番号を基に、DynamoDBのアイテムを検索し、電話番号が一致するアイテムが存在すれば担当エージェントを返します。

 

アイテムが存在しない(問い合わせ履歴が存在しない)場合には、新規の問い合わせとして適当なエージェントを返します。

 

今回、空き時間のチェックは行っていないので、list_usersの結果に基づいて毎回同じユーザからステータスチェックが行われる可能性があります。

 

新規の問い合わせが多いようなケースでは、担当者に偏りが出る場合が御座いますので、ランダムでエージェントを指定するなどの対応が必要になる可能性が御座います。

 

なお、キューへの転送では転送先エージェントの情報を取得できないので今回は利用できません。

 

 

エージェント指定用Lambda関数
import json
import boto3
import os

connect = boto3.client('connect')

def lambda_handler(event, context):
    print (event)
    user = event['Details']['Parameters']['user']
    users = event['Details']['Parameters']['users']
    userlist = users.split(";")
    listusers = connect.list_users(
        InstanceId=os.environ['Instance']
    )
    for i in range(len(listusers['UserSummaryList'])):
        username = listusers['UserSummaryList'][i]['Username']
        if username not in userlist:
            users = users + ";" + username
            return {'user': username, 'users': users, 'status': 'available'}
        else:
            pass
    return {'status': 'unavailable'}

 

環境変数としてAmazon ConnectのインスタンスARNを指定してください。

 

このLambda関数は担当者確認用Lambda関数の結果として受け取ったエージェントが利用不可の場合に、次のエージェントを指定するための関数となります。

 

エージェントステータス確認用のAPIがまだ存在しないため、問い合わせフロー側にて一人ずつ判定する必要があり、このようなLambda関数を利用しております。

 

なお、最後のreturn文はLambda関数が必要以上に呼び出されることを防ぐ目的で利用します。

 

このreturn文をなくした場合、すべてのエージェントが利用不可の期間中、エージェントがAvailableになるか電話が切られるまで処理がループされ必要以上にLambda関数が実行されてしまいますのでご注意ください。

 

 

担当者登録用Lambda関数
import json
import boto3
import os

dynamodb = boto3.client('dynamodb')

def lambda_handler(event, context):
    user = event['Details']['Parameters']['user']
    phnum = event['Details']['ContactData']['CustomerEndpoint']['Address']
    putitem = dynamodb.put_item(
        TableName=os.environ['Table'],
        Item={
            'Number': {
                'S': phnum
            },
            'Agent': {
                'S': user
            }
        }
    )
    message = "担当者にお繋ぎ致しますので少々お待ちください。"
    return {'message': message}

環境変数として DynamoDBのテーブル名を指定してください。

 

このLambda関数は今回の担当者をDynamoDBに登録するためのものとなります。

 

処理としてはDynamoDBにアイテムをputしているだけになります。

 

以上でLambda関数の準備は完了となりますが、Amazon ConnectからLambdaを呼び出せるようにadd-permissionの設定を忘れずに行うようご注意ください。

 

 

問い合わせフロー

 

今回作成する問い合わせフローの全体は下図の通りとなります。

 

 

順を追ってご説明していきます。

 

まず、左下のLambda関数の呼び出しの個所で担当者確認用Lambda関数を指定します。

パラメータの指定は不要です。

 

担当者確認用Lambda関数の実行が成功したら返り値として受け取ったエージェントのステータスを確認します。

 

 

エージェントが利用可能な場合には、該当エージェントをキューに設定します。

 

 

キューの設定後、担当者登録用Lambda関数を呼び出して、返り値のmessageをテキスト読み上げした後、エージェントへの転送が行われます。

 

担当者登録用Lambda関数の呼び出し時には、パラメータとしてエージェント情報を指定することを忘れないでください。

 

 

エージェントのステータス確認でエージェントが利用不可となった場合、エージェント指定用Lambda関数を実行し、他のエージェントの空き状況を確認します。

 

パラメータとして前段のLambda関数の返り値をすべて指定します。

 

 

ここで利用可能なエージェントにヒットするまでステータス確認とLambda関数の実行が繰り返されます。

 

利用可能なエージェントが見つかった場合にはキューの設定へと進みますが、すべてのエージェントが利用不可の場合にはプロンプト再生を行い通話を切断しております。

 

エージェントがすべて利用不可かどうかの確認はエージェント指定用Lambda関数の返り値「status」にて判断しています。

 

 

以上でコンタクトフローの設定は完了となります。

 

後は電話番号に問い合わせフローを紐づければ完了となります。

動作確認

 

それでは実際に動作を確認していきます。

 

最初の電話は新規問い合わせとなるので、利用可能なエージェントに自動的に転送されます。

 

転送時にはDynamoDBテーブルに電話番号と担当エージェントの情報が記載されます。

 

 

次に再度同じ電話番号から電話を掛けるとDynamoDBに登録されているエージェントに優先的に電話が転送されます。

 

ここで、前回担当のエージェントが利用不可であった場合には、他の利用可能なエージェントに電話が転送され、DynamoDBテーブルの情報が今回の担当者に置き換えられます。

 

最後にすべてのエージェントが利用不可であった場合には、プロンプトの設定に基づき、対応不可の旨の通知が行われ電話が切断されます。

まとめ

 

今回はAmazon Connectの個別エージェントへの通話転送機能についてご紹介いたしました。

 

この機能を利用することで、顧客と担当者を紐づけ、電話の度に担当者が変わってしまい、一からヒアリングを実施するといった手間を削減することができます。

 

Amazon Connectは新機能の追加やAPIの整備などが進んできていますので、ますます便利なコールセンターサービスになってきております。

 

東京リージョンでもAmazon Connectが利用できるようになり、身近なサービスとなりましたので、ご興味のある方は一度お試しになってみてはいかがでしょうか。
  
このブログの著者