如何在我的 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 将数据写入表

创建一个 IAM 角色,以便 Lambda 函数在 DynamoDB 中查找或添加拒绝号码时代入该角色

1.    创建一个 IAM 角色,该角色使用以下 JSON 策略:

重要提示:确保策略中包含 AWSLambdaBasicExecutionRole 以及 DynamoDB 权限。如果策略中未包含 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": "*"
        }
    ]
}

创建一个 Lambda 函数(函数 A),该函数在 DynamoDB 表中存储拒绝号码

使用以下 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}

创建第二个 Lambda 函数(函数 B),该函数查询 DynamoDB 表以检查来电是否来自拒绝清单中的号码

使用以下 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.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'}

将这些 Lambda 函数(函数 A 和函数 B)添加到您的 Amazon Connect 实例

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 Resource Name (ARN) 已添加到 Lambda Functions(Lambda 函数)下。

6.    重复步骤 1-5,将函数 B 添加到您的 Amazon Connect 实例。对于步骤 4,请确保选择函数 B 的名称。

有关更多信息,请参阅调用 AWS Lambda 函数

创建一个入站联系流

创建一个入站联系流,与声明的号码相关联。选择 Create contact flow(创建新联系流)后,系统将打开联系流设计器。

在联系流设计器中,执行以下操作:

注意:以下是基本入站联系流的示例。您可以为自己的使用案例添加或编辑数据块。

添加“设置日志记录行为”数据块

重要提示:如果您还没有为实例启用联系流日志记录,请立即启用

要在 Amazon Connect CloudWatch Logs 中打开联系人流日志,请使用设置日志记录行为数据块。

1.    选择 Set(设置)。

2.    将 Set logging behavior(设置日志记录行为)数据块拖放到 Entry point(入口点)数据块右侧的画布上。

3.    选择数据块标题(Set logging behavior(设置日志记录行为))。这时将打开该数据块的设置菜单。

4.    选择 Enable(启用)。

添加“调用 AWS Lambda 函数”数据块

要调用函数 B 并检查来电是否来自拒绝清单中的号码,请使用调用 AWS Lambda 函数数据块。

1.    选择 Integrate(集成)。

2.    将 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块拖放到 Set logging behavior(设置日志记录行为)数据块右侧的画布上。

3.    选择块标题(Invoke AWS Lambda function(调用 AWS Lambda 函数))。这时将打开该数据块的设置菜单。

4.    选择函数 B 的名称。

5.    选择 Save(保存)。

添加“检查联系人属性”数据块

要确认号码是否已添加到拒绝清单,请使用检查联系人属性数据块。

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(添加另一个参数),以创建两个参数。

7.    在 Conditions to check(要检查的条件)下,为两个参数选择 Equals(相等)。然后,对于第一个参数的值,输入 true。对于第二个参数的值,输入 false

8.    选择 Save(保存)。

添加“播放提示”块

要在拒绝清单请求发生错误时播放提示通知座席,请使用播放提示数据块。

1.选择 Interact(交互)。

2.    将 Play prompt(播放提示)数据块拖放到 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块右侧的画布上。然后,将 Play prompt(播放提示)数据块连接到 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块的 Error(错误)输出。

3.    选择数据块标题(Play prompt(播放提示))。这时将打开该数据块的设置菜单。

4.    对于 Prompts(提示),选择 Text-to-speech(文本转语音)。然后选择以下一种方案:
输入文本可以通过逼真的音频消息播放文本。
–或者–
动态输入允许您上传 .wav 文件以播放录制好的音频消息。

5.    选择 Save(保存)。

添加“转接队列”数据块

要结束联系流并将呼叫转接到常规客户队列流,请使用转接队列数据块。

1.    选择 Terminate/Transfer(终止/转移)。

2.    将 Transfer to queue(转接队列)数据块拖放到 Play prompt(播放提示)数据块右侧的画布上。

注意:对于此使用案例,无需为“转接队列”数据块配置任何设置。

添加“断开连接”数据块

如果来电来自拒绝清单中的号码,要将呼叫方与联系流断开连接,请添加断开连接数据块。

1.    选择 Terminate/Transfer(终止/转移)。

2.    将 Disconnect(断开连接)数据块拖放到 Transfer to queue(转接队列)数据块右侧的画布上。

注意:对于此使用案例,无需为“断开连接”数据块配置任何设置。

激活联系流

1.    选择 Save(保存)以保存联系流草案。

2.    要激活流,请选择 Publish(发布)。

创建“转接队列”流,允许座席实时向拒绝清单添加号码

创建新的“转接队列”流。选择 Create contact flow(创建新联系流)后,系统将打开联系流设计器。

在联系流设计器中,执行以下操作:

添加“播放提示”数据块

要通知座席某个号码正在添加到拒绝清单中,请使用播放提示数据块。

1.    选择 Interact(交互)。

2.    将 Play prompt(播放提示)数据块拖放到 Entry point(入口点)数据块右侧的画布上。

3.    选择数据块标题(Play prompt(播放提示))。这时将打开该数据块的设置菜单。

4.    对于 Prompts(提示),选择 Text-to-speech(文本转语音)。然后,选择 Enter text(输入文本)或Enter dynamically(动态输入)以创建音频消息。

5.    选择 Save(保存)。

添加“调用 AWS Lambda 函数”数据块

要在座席使用 CCP 向拒绝清单添加号码时调用函数 A,请使用调用 AWS Lambda 函数数据块。

1.    选择 Integrate(集成)。

2.    将 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块拖放到 Play prompt(播放提示)数据块右侧的画布上。

3.    选择块标题(Invoke AWS Lambda function(调用 AWS Lambda 函数))。这时将打开该数据块的设置菜单。

4.    选择函数 A 的名称。

5.    在 Function input parameters(函数输入参数)部分,选择 Add a parameter(添加参数),然后选择 Use attribute(使用属性)。然后,执行以下操作:对于 Destination key(目标键),输入 CustomerNumber。对于 Type(类型),选择 System(系统)。对于 Attribute(属性),选择 Customer Number(客户号码)。

6.    选择 Save(保存)。

添加第二个“播放提示”数据块

要通知座席某个号码已添加到拒绝清单中,请使用第二个播放提示数据块。

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(保存)。

添加第三个“播放提示”数据块

要通知座席由于发生错误而没有向拒绝清单中添加号码,请使用第三个播放提示数据块。

1.    选择 Interact(交互)。

2.    将 Play prompt(播放提示)数据块拖放到 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块右侧的画布上。然后,将 Play prompt(播放提示)数据块连接到 Invoke AWS Lambda function(调用 AWS Lambda 函数)数据块的 Error(错误)输出。

3.    选择数据块标题(Play prompt(播放提示))。这时将打开该数据块的设置菜单。

4.    对于 Prompts(提示),选择 Text-to-speech(文本转语音)。然后,选择 Enter text(输入文本)或Enter dynamically(动态输入)以创建音频消息。

5.    选择 Save(保存)。

添加“断开连接”数据块

要断开座席与联系流的连接,请添加断开连接数据块。

1.    选择 Terminate/Transfer(终止/转移)。

2.    将 Disconnect(断开连接)数据块拖放到三个 Play prompt(播放提示)数据块右侧的画布上。

3.    将流的所有分支连接到 Disconnect(断开连接)数据块。

注意:对于此使用案例,无需为断开连接数据块配置任何设置。

激活“转接队列”流

1.    选择 Save(保存)以保存联系流草案。

2.    要激活流,请选择 Publish(发布)。

创建快速连接,允许座席使用 CCP 向拒绝清单添加号码

1.    使用 Amazon Connect 控制台创建快速连接,包含以下设置:
对于 Name(名称),输入快速连接的名称。例如:拒绝清单
对于 Type(类型),选择 Queue(队列)。
对于 Destination(目标),输入您希望使用拒绝清单功能的队列的名称。

2.    将快速连接添加到分配给您希望有权使用拒绝清单功能的座席的队列

现在,当座席进行通话时,他们可以使用 CCP 中的拒绝清单快速连接将号码添加到拒绝清单中。下次您的 Amazon Connect 联络中心有该号码的来电时,呼叫将自动断开连接,而不会被放入队列中。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?