Amazon Connect コンタクトセンターで、エージェントがリアルタイムで番号にフラグを立てることができる拒否リストを設定する方法を教えてください。

最終更新日: 2021 年 5 月 24 日

Amazon Connect コンタクトセンターのエージェントが、拒否リストにリアルタイムで番号を追加できるようにしたいと考えています。手動でもリストに番号を追加できるようにする必要があります。設定する方法を教えてください。

簡単な説明

Amazon Connect コンタクトセンターのエージェントがリアルタイムで拒否リストに番号を追加できるようにするには、次の手順を実行します。

注: DynamoDB テーブルを直接編集して、拒否リストに番号を手動で追加することもできます。

解決方法

重要: Amazon Connect インスタンスが存在するのと同じ AWS リージョンで、以下の手順を実行してください。

拒否された番号を保持する DynamoDB テーブルを作成する

1.    DynamoDB コンソールを開きます。

2.    [Create DynamoDB table (DynamoDB テーブルの作成)] を選択します。次に、以下を実行します。
[Table name (テーブル名)] に、DenylistingTable と入力します。
[Partition key (パーティションキー)] パネルの [Primary key (プライマリキー)] に ContactNumber と入力します。
[Data type (データタイプ)] で、[String (文字列)] を選択します。
[Create (作成)] を選択します。

注意: 詳細については、コンソールまたは AWS CLI を使用してテーブルにデータを書き込むを参照してください。

DynamoDB で拒否された番号を検索または追加するために Lambda 関数が引き受けることができる IAM ロールを作成する

1.    次の JSON ポリシーを使用する IAM ロールを作成します。

重要: ポリシーに、DynamoDB アクセス許可とともに AWSLambdaBasicExecutionRole が含まれていることを確認してください。AWSLambdaBasicExecutionRole がポリシーに含まれていない場合、関数は呼び出されません。

Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cloudwatch:GetInsightRuleReport",
            "Resource": "arn:aws:cloudwatch:*:*:insight-rule/DynamoDBContributorInsights*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": [
                        "application-autoscaling.amazonaws.com",
                        "application-autoscaling.amazonaws.com.cn",
                        "dax.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName": [
                        "replication.dynamodb.amazonaws.com",
                        "dax.amazonaws.com",
                        "dynamodb.application-autoscaling.amazonaws.com",
                        "contributorinsights.dynamodb.amazonaws.com",
                        "kinesisreplication.dynamodb.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "cloudwatch:DeleteAlarms",
                "sns:Unsubscribe",
                "dynamodb:*",
                "lambda:GetFunctionConfiguration",
                "datapipeline:CreatePipeline",
                "kinesis:ListStreams",
                "logs:CreateLogStream",
                "kinesis:DescribeStreamSummary",
                "resource-groups:GetGroup",
                "cloudwatch:DescribeAlarmsForMetric",
                "lambda:DeleteFunction",
                "sns:Subscribe",
                "iam:GetRole",
                "application-autoscaling:RegisterScalableTarget",
                "sns:ListSubscriptionsByTopic",
                "datapipeline:ListPipelines",
                "dax:*",
                "lambda:ListFunctions",
                "sns:CreateTopic",
                "application-autoscaling:DeleteScalingPolicy",
                "cloudwatch:GetMetricStatistics",
                "logs:CreateLogGroup",
                "resource-groups:CreateGroup",
                "application-autoscaling:DescribeScalingPolicies",
                "lambda:ListEventSourceMappings",
                "application-autoscaling:PutScalingPolicy",
                "cloudwatch:DescribeAlarms",
                "resource-groups:ListGroupResources",
                "ec2:DescribeSubnets",
                "lambda:DeleteEventSourceMapping",
                "datapipeline:ActivatePipeline",
                "resource-groups:GetGroupQuery",
                "tag:GetResources",
                "sns:DeleteTopic",
                "cloudwatch:GetMetricData",
                "sns:ListTopics",
                "sns:SetTopicAttributes",
                "lambda:CreateEventSourceMapping",
                "datapipeline:DescribePipelines",
                "cloudwatch:ListMetrics",
                "cloudwatch:DescribeAlarmHistory",
                "application-autoscaling:DescribeScalingActivities",
                "kms:DescribeKey",
                "datapipeline:PutPipelineDefinition",
                "application-autoscaling:DescribeScalableTargets",
                "datapipeline:QueryObjects",
                "iam:ListRoles",
                "datapipeline:DescribeObjects",
                "kinesis:DescribeStream",
                "sns:ListSubscriptions",
                "resource-groups:ListGroups",
                "datapipeline:GetPipelineDefinition",
                "logs:PutLogEvents",
                "ec2:DescribeSecurityGroups",
                "resource-groups:DeleteGroup",
                "cloudwatch:PutMetricAlarm",
                "ec2:DescribeVpcs",
                "kms:ListAliases",
                "datapipeline:DeletePipeline",
                "application-autoscaling:DeregisterScalableTarget"
            ],
            "Resource": "*"
        }
    ]
}
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:*",
                "dynamodb:*"
            ],
            "Resource": "*"
        }
    ]
}

DynamoDB テーブルに拒否された数値を格納する Lambda 関数 (関数 A) を作成する

以下の Python コードを使用して、Lambda 関数を作成し、以前に作成したロールをアタッチします。

Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import json
import boto3 

client = boto3.client('dynamodb')

def lambda_handler(event, context):
    response = client.put_item(
    TableName='DenylistingTable',
    Item={
        'ContactNumber':{
            'S':event['Details']['ContactData']['CustomerEndpoint']['Address']
        }
    }
    )
    
    return{'Success':True}

DynamoDB テーブルをクエリする 2 番目の Lambda 関数 (関数 B) を作成し、着信が拒否リストの番号からのものかどうかをチェックする

以下の Python コードを使用して、2 つ目の Lambda 関数を作成し、以前に作成したロールをアタッチします。

Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import json
import boto3 

client = boto3.client('dynamodb')

def lambda_handler(event, context):
    
    response = client.query(
        TableName="DenylistingTable",
        Select= 'ALL_ATTRIBUTES',
        KeyConditionExpression='ContactNumber = :ConNum',
        ExpressionAttributeValues={":ConNum":{
            "S": event['Details']['ContactData']['CustomerEndpoint']['Address']
        }}
        )
    if (len(response['Items']) == 0):
        return {'Success':'false'}
    else:
        return {'Success':'true'}

Amazon Connect インスタンスに Lambda 関数 (関数 A と関数 B) を追加する

1.    Amazon Connect コンソールを開きます。

2.    [Instance Alias] 列で、Amazon Connect インスタンスの名前を選択します。

3.    左のナビゲーションペインで、[Contact flows] を選択します。

4.    [AWS Lambda] セクションで、[Function (関数)] ドロップダウンリストを選択します。次に、関数 A の名前を選択します。
注意: [Function (関数)] ドロップダウンリストには、Amazon Connect インスタンスと同じ AWS リージョンにある関数だけが表示されます。関数が表示されない場合は、[Create a new Lambda function (新規 Lambda 関数の作成)] を選択して、適切なリージョンで新しい関数を作成します。

5.    [Add Lambda Function (Lambda 関数の追加)] を選択します。次に、関数の Amazon リソースネーム (ARN) が Lambda 関数の下に追加されていることを確認します。

6.    手順 1 ~ 5 を繰り返して、Amazon Connect インスタンスに関数 B を追加します。手順 4 では、関数 B の名前を選択していることを確認します。

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

インバウンドコンタクトフローを作成する

要求された番号に関連付けられた新しいインバウンドコンタクトフローを作成します。[Create contact flow (コンタクトフローの作成)] を選択すると、コンタクトフローデザイナーが開きます。

コンタクトフローデザイナーで、次の操作を行います。

注意: 次に、基本的なインバウンドコンタクトフローの例を示します。ユースケースのブロックを追加または編集できます。

[Set logging behavior (ログ記録動作の設定)] ブロックを追加する

重要: インスタンスのコンタクトフローロギングをまだ有効にしていない場合は、有効にします

Amazon Connect CloudWatch Logs でコンタクトフローログを有効にするには、[Set logging behavior (ログ記録動作の設定)] ブロックを使用します。

1.    [Set] を選択します。

2.    [Set logging behavior (ログ記録動作の設定)] ブロックをドラッグし、[Entry point (エントリポイント)] ブロックの右にあるキャンバスにドロップします。

3.    ブロックタイトル ([Store customer input (ログ記録動作の設定)]) を選択します。ブロックの設定メニューが開きます。

4.    [Enable (有効にする)] を選択します。

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

関数 B を呼び出し、着信が拒否リストの番号からのものかどうかを確認するには、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックを使用します。

1.    [Integrate] を選択します。

2.    [Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックをドラッグし、[Set logging behavior (ログ記録動作の設定)] ブロックの右にあるキャンバスにドロップします。

3.    ブロックのタイトルを選択します (AWS Lambda 関数の呼び出し)。ブロックの設定メニューが開きます。

4.    関数 B の名前を選択します。

5.    [Save (保存)] を選択します。

[Check contact attributes (コンタクト属性を確認する)] ブロックを追加する

番号が拒否リストに追加されたかどうかを確認するには、[Check contact attributes (コンタクト属性を確認する)] ブロックを使用します。

1.    [Branch] を選択します。

2.    [Check contact attributes (コンタクト属性を確認する)] ブロックをドラッグし、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの右にあるキャンバスにドロップします。

3.    ブロックのタイトル ([Check contact attributes (コンタクト属性を確認する)]) を選択します。ブロックの設定メニューが開きます。

4.    [Type (タイプ)] で [External (外部)] を選択します。

5.    [Attribute (属性)] で [Success (成功)] を選択します。

6.    [Add another Parameter (別のパラメータの追加)] を 2 回選択すると、2 つのパラメータが作成されます。

7.    [Conditions to check (チェックする条件)] で、両方のパラメータに対して [Equals (等しい)] を選択します。次に、最初のパラメータの値に true と入力します。2 番目のパラメータの値には false と入力します。

8.    [Save (保存)] を選択します。

[Play prompt (プロンプトの再生)] ブロックを追加する

拒否リスト要求エラーが発生したときにエージェントに通知するプロンプトを再生するには、[Play prompt (プロンプトの再生)] ブロックを使用します。

1.[Interact] を選択します。

2.    [Play prompt (プロンプトの再生)] ブロックをドラッグし、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの右にあるキャンバスにドロップします。次に、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの [Error (エラー)] 出力に [Play prompt (プロンプトの再生)] ブロックを接続します。

3.    ブロックタイトル ([Play prompt (再生プロンプト)]) を選択します。ブロックの設定メニューが開きます。

4.    [Prompts (プロンプト)] で、[Text-to-speech (テキスト読み上げ機能)] を選択します。以下のいずれかを選択してください。
[Enter text (テキストの入力) ] を使用すると、生きた音声メッセージとしてテキストを再生できます。
- または -
[Enter dynamically (動的に入力する)] を使用すると、.wav ファイルをアップロードして、録音されたオーディオメッセージを再生できます。

5.    [Save (保存)] を選択します。

[Transfer to queue (キューへ転送)] ブロックを追加する

コンタクトフローを終了し、通話を通常のカスタマーキューフローに転送するには、[Transfer to queue (キューへ転送)] ブロックを使用します。

1.    [Terminate /Transfer (終了/転送)] を選択します。

2.    [Transfer to queue (キューへ転送)] ブロックをドラッグし、[Play prompt (プロンプトの再生)] ブロックの右にあるキャンバスにドロップします。

注意: このユースケースでは、[Transfer to queue (キューへ転送)] ブロックの設定を構成する必要はありません。

[Disconnect (切断)] ブロックを追加する

着信が拒否リストにある番号からの場合、発信者をコンタクトフローから切断するには、[Disconnect (切断)] ブロックを追加します。

1.    [Terminate /Transfer (終了/転送)] を選択します。

2.    [Disconnect (切断)] ブロックをドラッグし、[Transfer to queue (キューへ転送)] ブロックの右にあるキャンバスにドロップします。

注意: このユースケースでは、[Disconnect (切断)] ブロックの設定を構成する必要はありません。

コンタクトフローを有効化する

1.    フローのドラフトを保存するには、[Save (保存)] を選択します。

2.    フローを有効にするには、[Publish (公開)] を選択します。

エージェントがリアルタイムで拒否リストに番号を追加できるキューへの転送フローを作成する

新しいキューへの転送フローを作成します。[Create contact flow (コンタクトフローの作成)] を選択すると、コンタクトフローデザイナーが開きます。

コンタクトフローデザイナーで、次の操作を行います。

[Play prompt (プロンプトの再生)] ブロックを追加する

拒否リストに番号を追加中であることをエージェントに知らせるには、[Play prompt (プロンプトの再生)] ブロックを使用します。

1.    [Interact] を選択します。

2.    [Play prompt (プロンプトの再生)] ブロックをドラッグし、[Entry point (エントリポイント)] ブロックの右にあるキャンバスにドロップします。

3.    ブロックタイトル ([Play prompt (再生プロンプト)]) を選択します。ブロックの設定メニューが開きます。

4.    [Prompts (プロンプト)] で、[Text-to-speech (テキスト読み上げ機能)] を選択します。次に、[Enter text (テキストの入力)] または [Enter dynamically (動的に入力する)] を選択して、オーディオメッセージを作成します。

5.    [Save (保存)] を選択します。

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

エージェントが CCP を使用して拒否リストに番号を追加するときに関数 A を呼び出すには、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックを使用します。

1.    [Integrate] を選択します。

2.    [Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックをドラッグし、[Play prompt (プロンプトの再生)] ブロックの右にあるキャンバスにドロップします。

3.    ブロックのタイトルを選択します (AWS Lambda 関数の呼び出し)。ブロックの設定メニューが開きます。

4.    関数 A の名前を選択します。

5.    [Function input parameters (関数入力パラメータ)] セクションで、[Add a parameter (パラメータを追加する)] を選択し、[Use attribute (属性を使用する)] を選択します。次に、以下の操作を実行します。[Destination key (宛先キー)] に CustomerNumber と入力します。[Type (タイプ)] では、[System (システム)] を選択します。[Attribute (属性)] で、[Customer Number (顧客電話番号)] を選択します。

6.    [Save (保存)] を選択します。

2 番目の [Play prompt (プロンプトの再生)] ブロックを追加する

拒否リストに番号が追加されたことをエージェントに知らせるには、2 番目の [Play prompt (プロンプトの再生)] ブロックを使用します。

1.    [Interact] を選択します。

2.    [Play prompt (プロンプトの再生)] ブロックをドラッグし、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの右にあるキャンバスにドロップします。次に、[Play prompt (プロンプトの再生)] ブロックを [Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの [Success (成功)] 出力に接続します。

3.    ブロックタイトル ([Play prompt (再生プロンプト)]) を選択します。ブロックの設定メニューが開きます。

4.    [Prompts (プロンプト)] で、[Text-to-speech (テキスト読み上げ機能)] を選択します。次に、[Enter text (テキストの入力)] または [Enter dynamically (動的に入力する)] を選択して、オーディオメッセージを作成します。

5.    [Save (保存)] を選択します。

3 番目の [Play prompt (プロンプトの再生)] ブロックを追加する

エラーが原因で拒否リストに番号が追加されなかったことをエージェントに知らせるには、3 番目の [Play prompt (プロンプトの再生)] ブロックを使用します。

1.    [Interact] を選択します。

2.    [Play prompt (プロンプトの再生)] ブロックをドラッグし、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの右にあるキャンバスにドロップします。次に、[Invoke AWS Lambda function (AWS Lambda 関数の呼び出し)] ブロックの [Error (エラー)] 出力に [Play prompt (プロンプトの再生)] ブロックを接続します。

3.    ブロックタイトル ([Play prompt (再生プロンプト)]) を選択します。ブロックの設定メニューが開きます。

4.    [Prompts (プロンプト)] で、[Text-to-speech (テキスト読み上げ機能)] を選択します。次に、[Enter text (テキストの入力)] または [Enter dynamically (動的に入力する)] を選択して、オーディオメッセージを作成します。

5.    [Save (保存)] を選択します。

[Disconnect (切断)] ブロックを追加する

エージェントをコンタクトフローから切断するには、[Disconnect (切断)] ブロックを追加します。

1.    [Terminate /Transfer (終了/転送)] を選択します。

2.    [Disconnect (切断)] ブロックをドラッグし、3 つの [Play prompt (プロンプトの再生)] ブロックの右にあるキャンバスにドロップします。

3.    すべてのフローのブランチを [Disconnect (切断)] ブロックに接続します。

注意: このユースケースでは、[Disconnect (切断)] ブロックの設定を構成する必要はありません。

キューへの転送フローを有効にする

1.    フローのドラフトを保存するには、[Save (保存)] を選択します。

2.    フローを有効にするには、[Publish (公開)] を選択します。

エージェントが CCP を使用して拒否リストに番号を追加できるクイック接続を作成する

1.    以下の設定を持つ Amazon Connect コンソールを使用して、クイック接続を作成します。
[Name (名前)] に、クイック接続の名前を入力します。例: 拒否リスト
[Type (タイプ)] に、[Queue (キュー)] を選択します。
[Destination (宛先)] に、拒否リスト機能を持たせるキューの名前を入力します。

2.    拒否リスト機能へのアクセスを許可するエージェントに割り当てられたキューにクイック接続を追加します

これで、エージェントが通話中のときに、CCP で拒否リストクイック接続を使用して、拒否リストに番号を追加できます。次にその番号から Amazon Connect コンタクトセンターに着信があると、キューに入れられずに自動的に切断されます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?