Amazon Connect コンタクトセンターのエージェントが特定の電話番号に発信できないようにする方法を教えてください。

最終更新日: 2020 年 3 月 25 日

Amazon Connect コンタクトセンターのエージェントが特定の国や割増料金の電話番号に電話をかけないようにしたいです。このような電話を防ぐにはどうすればよいですか?

簡単な説明

アウトバウンドウィスパーフローの問い合わせフローで、ダイヤルされた電話番号が許可されているかどうかを確認する AWS Lambda 関数を呼び出します。電話番号が許可されていない場合は、Amazon Connect StopContact API を使用して問い合わせを停止してください。

注: このソリューションには以下の制限があります。

  • キューに入れられたコールバックをブロックすることはできません。エージェントの側からコールバックリクエストが開始された場合、アウトバウンドウィスパーフローを介して渡される問い合わせ ID は、実際の問い合わせ ID ではありません。
  • Lambda 関数が何らかの理由で呼び出しに失敗した場合、コールをブロックすることはできません。関数が失敗した場合、問い合わせは問い合わせフローのエラーブランチに続き、コールは停止されません。
  • これは基本的な例です。本番環境では、ユースケースとエージェントのダイヤル許可に合わせてセットアップをカスタマイズします。

解決方法

Lambda 関数を作成する

任意のランタイムを使用して、Lambda 関数を作成します。以下について、Amazon Connect からの着信 JSON リクエストをチェックする関数ロジックを含めます。

  • エージェントユーザー名 ("Attributes" で)
  • 現在の問い合わせ ID ("ContactId")
  • ダイヤルされた電話番号 ("CustomerEndpoint" で)
  • 最初の問い合わせ ID ("InitialContactId")
  • コンタクトセンターインスタンスの Amazon リソースネーム (ARN) ("InstanceARN")

詳細については、「Amazon Connect で利用できる問い合わせ属性」と次の「Lambda 関数への JSON リクエストの例」を参照してください。

{
    "Details": {
        "ContactData": {
            "Attributes": {},
            "Channel": "VOICE",
            "ContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
            "CustomerEndpoint": {
                "Address": "+1234567890",
                "Type": "TELEPHONE_NUMBER"
            },
            "InitialContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXXX",
            "InitiationMethod": "INBOUND | OUTBOUND | TRANSFER | CALLBACK",
            "InstanceARN": "arn:aws:connect:aws-region:1234567890:instance/c8c0e68d-2200-4265-82c0-XXXXXXXXXX",
            "PreviousContactId": "4a573372-1f28-4e26-b97b-XXXXXXXXXX",
            "Queue": "QueueName",
            "SystemEndpoint": {
                "Address": "+1234567890",
                "Type": "TELEPHONE_NUMBER"
            }
        },
        "Parameters": {
            "sentAttributeKey": "sentAttributeValue"
        }
    },
    "Name": "ContactFlowEvent"
}

ヒント: ユースケースに応じて、関数コードに特定のロジックを追加します。たとえば、エージェントのダイヤル権限の内部データベースに対して問い合わせ属性を確認できます。詳細については、「Lambda 関数での属性の使用」を参照してください。

関数には、Amazon Connect StopContact API の呼び出しも含める必要があります。API 呼び出しで、停止する問い合わせの「ContactId」と「InstanceId」を指定します。

さらに、StopContact API を呼び出すための十分なアクセス権限を持つ AWS Identity and Access Management (IAM) ポリシーを関数の実行ロールにアタッチする必要があります。次の JSON ポリシードキュメントの例には、API を呼び出すための基本的な権限が含まれています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StopContactPermission",
            "Effect": "Allow",
            "Action": "connect:StopContact",
            "Resource": "*"
        }
    ]
}

例として、次の Python 関数コードを使用します。必ずユースケースに合わせてカスタマイズしてください。

注: このコード例には、ブロックする番号を識別する条件が含まれています。その番号がリクエストされたコールバック番号である場合、関数は API エラーとパススルーを処理します。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0

import boto3
from botocore.exceptions import ClientError
connect = boto3.client('connect')

def lambda_handler(event, context):
    response = {
            'phoneNumberBlockerMessage': 'Passing through AmazonConnectPhoneNumberBlocker. No contact is blocked.'
    }

    try:
            if event['Details']['ContactData']['CustomerEndpoint']['Address'] == '<telephone-number-condition>':
                # Stop contact here

                connect.stop_contact(
                    ContactId = event['Details']['ContactData']['InitialContactId'],
                    InstanceId = event['Details']['ContactData']['InstanceARN'].split('/')[1]
                )
                response = {
                    'phoneNumberBlockerMessage': 'Call is blocked.'
                }
    except ClientError as e:
            if e.response['Error']['Code'] == 'ContactNotFoundException':
                response = {
                    'phoneNumberBlockerMessage': 'This is either a callback contact or contact ID does not exist, contact pass through.'
                }
            else:
                # Handle other error
                pass
    return response

Lambda 関数をインスタンスに追加する

Amazon Connect コンソールで、Lambda 関数をコンタクトセンターインスタンスに追加します。

アウトバウンドウィスパーフローを作成する

まだ作成していない場合は、アウトバウンドウィスパー問い合わせフローを作成します。

重要: 問い合わせフローを作成するには、セキュリティプロファイルに十分なアクセス権限を持つユーザーとして Amazon Connect インスタンスにログインする必要があります。

  1. アクセス URL (https://alias.awsapps.com/connect/login) を使用して、Amazon Connect インスタンスにログインします。
    注: aliasインスタンスのエイリアスに置き換えます。
  2. 左側のナビゲーションバーで、[ルーティング] を一時停止し、[問い合わせフロー] を選択します。
  3. [問い合わせフロー] ページで、[問い合わせフローの作成] ボタンの横にある下向き矢印を選択し、[アウトバウンドウィスパーフローの作成] をクリックします。
  4. 問い合わせフローデザイナーの [名前を入力] に、問い合わせフローの名前を入力します。(例: アウトバウンドウィスパー (停止))。
  5. [保存] を選択します。

詳細については、「新しい問い合わせフローの作成」を参照してください。

問い合わせ属性の設定ブロックを追加する

このブロックを設定して、Lambda に送信して解析するエージェントのユーザー名を取得します。

  1. 問い合わせフローデザイナーで、[設定] を展開します。
  2. 問い合わせ属性の設定ブロックをキャンバスにドラッグアンドドロップします。
  3. ブロックのタイトルを選択します (問い合わせ属性の設定)。ブロックの設定メニューが開きます。
  4. [保存する属性] で、[属性の使用] を選択して、次の操作を行います。
    [宛先キー] には、キー名を入力します。たとえば、agent_username です。
    [タイプ] では、[エージェント] を選択します。
    [属性] では、[ユーザー名] を選択します。
  5. [保存] を選択します。

[AWS Lambda 関数の呼び出し] ブロックを追加する

  1. 問い合わせフローデザイナーで、[統合] を展開します。
  2. [AWS Lambda 関数の呼び出し] ブロックをキャンバスにドラッグアンドドロップします。
  3. ブロックのタイトルを選択します (AWS Lambda 関数の呼び出し)。ブロックの設定メニューが開きます。
  4. [関数 ARN] で [関数の選択] をクリックし、インスタンスに追加した Lambda 関数を選択します。
  5. (オプション) [タイムアウト (最大 8 秒)] に、Amazon Connect がタイムアウトする前に Lambda からの応答の取得を待機する秒数を入力します。
  6. [保存] を選択します。

詳細については、「Lambda 関数の呼び出し」を参照してください。

問い合わせフローを終了する

  1. ユースケースの必要に応じて、問い合わせブロックを追加して接続します。ガイダンスについては、「問い合わせフローの例」を参照してください。
  2. 問い合わせフローのすべてのコネクタを、ブロックに接続します。[問い合わせ属性の設定] ブロックの [成功] ノードを [AWS Lambda 関数の呼び出し] ブロックに必ず接続してください。少なくとも次のブロックを必ず使用してください。
    [エントリポイント] > [問い合わせ属性の設定] > [AWS Lambda 関数の呼び出し] > [フローの終了/再開]
  3. 問い合わせフローを保存して公開します。

詳細については、「新しい問い合わせフローの作成」を参照してください。

アウトバウンドウィスパーフローでキューを設定する

エージェントが割り当てられているルーティングプロファイルで、デフォルトのアウトバウンドキューを識別します。詳細については、「ルーティングプロファイルを作成する」と「RoutingProfile オブジェクト」を参照してください。

以下の手順を実行して、キューを編集します。

  1. Amazon Connect インスタンスの左側のナビゲーションペインで、[ルーティング] を一時停止し、[キュー] をクリックします。
  2. [キュー] ページで、デフォルトのアウトバウンドキューとして識別したキューの名前をクリックします。
  3. [キューの編集] ページの [アウトバウンドウィスパーフロー (オプション)] で、作成したアウトバウンドウィスパーフローの名前を検索し、クリックします。
  4. [保存] を選択します。