如何在我的 Amazon Connect 联络中心设置拒绝名单并允许代理实时标记号码?

7 分钟阅读
0

我想让我的 Amazon Connect 联络中心的代理实时向拒绝列表添加号码。我还想让代理手动向列表中添加号码。

简短描述

要允许您的 Amazon Connect 联络中心的代理实时向拒绝列表添加号码,请完成以下步骤:

  • 创建一个包含拒绝号码的 Amazon DynamoDB 表
  • 创建一个 AWS Identity and Access Management (IAM) 角色。然后,AWS Lambda 函数可以代入角色,在 DynamoDB 中查找或添加拒绝号码。
  • 创建一个 Lambda 函数(函数 A),该函数将拒绝号码存储在 DynamoDB 表中。
  • 创建第二个 Lambda 函数(函数 B),该函数在 DynamoDB 表中查询是否有来自拒绝列表中某个号码的来电。
  • 将 Lambda 函数添加到您的 Amazon Connect 实例
  • [创建与申领号码关联的](https://docs.aws.amazon.com/connect/latest/adminguide/create-contact-flow.html#contact-flow-types)入站联系流。联系流必须调用函数 B 才能根据 DynamoDB 中的拒绝列表检查来电。
    如果号码不在拒绝列表中,则该函数会将来电转接到您的常规客户队列流。
    -或-
    如果号码在拒绝列表中,则该函数会播放音频提示并挂断来电。
  • 创建“转接到队列”流,当代理向拒绝列表添加号码时,此流会调用函数 A。
  • 创建快速连接,允许代理使用联系控制面板 (CCP) 向拒绝列表添加号码。

**注意:**您也可以直接编辑 DynamoDB 表,将号码手动添加到拒绝列表中。

解决方法

要在 Amazon Connect 联络中心设置拒绝列表,代理需要用到函数(函数 A)。代理使用函数 A 添加已标记的号码,使用函数 B 来查询已标记的列表。

**重要事项:**在您的 Amazon Connect 实例所在的同一 AWS 区域完成这些步骤。

创建包含拒绝号码的 DynamoDB 表

  1. 打开 DynamoDB 控制台
  2. 选择创建 DynamoDB 表
  3. 创建 DynamoDB 表页面上,输入以下信息:
    对于表名称,输入 DenylistingTable
    分区键面板中,为主键输入 ContactNumber
    对于数据类型,选择字符串
  4. 选择创建
    **注意:**有关更多信息,请参阅使用控制台或 AWS 命令行界面 (AWS CLI) 将数据写入表

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

1.    创建使用以下 JSON 策略的 IAM 角色
**重要事项:**确保策略中包含 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": "*"
    }
  ]
}

2.    将以下第二个 JSON 策略附加到 IAM 角色

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 函数。为与 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}

  {
        "Version": "2012-10-17",
        "Statement": [{
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "dynamodb:PutItem",
            "Resource": "arn:aws:dynamodb:<region>:<account-number>:table/DenylistingTable"
      }
    ]
  }

创建第二个 Lambda 函数(函数 B),该函数在 DynamoDB 表中查询是否有来自拒绝列表中某个号码的来电。

使用以下权限创建第二个 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'}

    {
     "Version": "2012-10-17",
     "Statement": [{
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": "dynamodb:Query",
         "Resource": "arn:aws:dynamodb:<region>:<account-number>:table/DenylistingTable"
      }
    ]
  }

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

  1. 打开 Amazon Connect 控制台
  2. 实例别名列中,选择您的 Amazon Connect 实例的名称。
  3. 在左侧导航窗格中,选择联系流
  4. AWS Lambda 部分中,选择函数下拉列表。然后,选择函数 A 的名称。
    注意:****函数下拉列表仅命名与您的 Amazon Connect 实例位于同一 AWS 区域的函数。如果未列出任何函数,则选择创建新的 Lambda 函数,在正确的区域创建新函数。
  5. 选择添加 Lambda 函数。然后,确认该函数的 Amazon 资源名称 (ARN) 已添加到 Lambda 函数下。
  6. 重复步骤 1 至步骤 5,将函数 B 添加到您的 Amazon Connect 实例。对于步骤 4,请确保选择函数 B 的名称。

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

创建入站联系流

[创建与申领号码关联的新入站联系流](https://docs.aws.amazon.com/connect/latest/adminguide/claim-phone-number.html)。选择“创建联系流”后,将打开联系流设计器。

在联系流设计器中,完成以下步骤:

**注意:**以下是基本入站联系流的示例。为您的用例添加或编辑块。

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

**重要事项:**如果您尚未这样做,请为您的实例开启联系流日志记录

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

  1. 选择设置
  2. 设置日志记录行为块拖放到入口点块右侧的画布上。
  3. 选择块标题(设置日志记录行为)。块的设置菜单打开。
  4. 选择启用

添加“调用 AWS Lambda 函数”块

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

  1. 选择集成
  2. 调用 AWS Lambda 函数块拖放到设置日志记录行为块右侧的画布上。
  3. 选择块标题(调用 AWS Lambda 函数)。块的设置菜单打开。
  4. 选择函数 B 的名称。
  5. 选择保存

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

要确认该号码在拒绝列表中,请使用检查联系人属性块。

  1. 选择分支
  2. 检查联系人属性块拖放到调用 AWS Lambda 函数块右侧的画布上。
  3. 选择块标题(检查联系人属性)。块的设置菜单打开。
  4. 对于类型,选择外部
  5. 对于属性,选择成功
  6. 选择添加另一参数两次,以创建两个参数。
  7. 要检查的条件下,为两个参数选择等于。然后,对于第一个参数的值,输入 true。对于第二个参数的值,输入 false
  8. 选择保存

添加“播放”提示块

要播放在出现拒绝列表请求错误时通知代理的提示,请使用播放提示块。

  1. 选择互动
  2. 播放提示块拖放到调用 AWS Lambda 函数块右侧的画布上。然后,将播放提示块连接到调用 AWS Lambda 函数块的错误输出。
  3. 选择块标题(播放提示)。块的设置菜单打开。
  4. 对于提示,选择文字转语音。然后,选择以下某一项进行操作:
    输入文本后,可将文本转换为逼真的音频消息进行播放
    -或-
    动态输入则支持上传 .wav 文件,播放录制的音频消息。
  5. 选择保存

添加“转接到队列”块

要结束联系流并将来电转接到您的常规客户队列流,请使用转接队列块。

  1. 选择终止/转移
  2. 将“转接队列”块拖放到播放提示块右侧的画布上。
    **注意:**对于此用例,您无需为“转接队列”块配置任何设置。

添加“断开连接”块

如果来电是来自拒绝列表中的号码,要断开来电者与联系流的连接,请添加断开连接块。

  1. 选择终止/转移
  2. 断开连接块拖放到转接队列块右侧的画布上。
    **注意:**对于此用例,您无需为“断开连接”块配置任何设置。

激活联系流

  1. 要保存流草稿,请选择保存
  2. 要激活流,请选择发布

创建“转接队列”流,允许代理实时向拒绝列表添加号码

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

在联系流设计器中,完成以下步骤:

添加“播放”提示块

要让代理知道某个号码正在添加到拒绝列表中,请使用播放提示块。

  1. 选择互动
  2. 播放提示块拖放到入口点块右侧的画布上。
  3. 选择块标题(播放提示)。块的设置菜单打开。
  4. 对于提示,选择文字转语音。然后,选择输入文本动态输入以创建音频消息。
  5. 选择保存

添加“调用 AWS Lambda 函数”块

要在代理向拒绝列表添加号码时使用 CCP 调用函数 A,请使用调用 AWS Lambda 函数块。

  1. 选择集成
  2. 调用 AWS Lambda 函数块拖放到播放提示块右侧的画布上。
  3. 选择块标题(调用 AWS Lambda 函数)。块的设置菜单打开。
  4. 选择函数 A 的名称。
  5. 函数输入参数部分中,选择添加参数,然后选择使用属性。然后完成以下步骤:
    对于目标键,输入 CustomerNumber
    对于类型,选择系统
    对于属性,选择客户编号
  6. 选择保存

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

要让代理知道号码来自拒绝列表,请使用第二个播放提示块。

  1. 选择互动
  2. 播放提示块拖放到调用 AWS Lambda 函数块右侧的画布上。然后,将播放提示块连接到调用 AWS Lambda 函数块的成功输出。
  3. 选择块标题(播放提示)。块的设置菜单打开。
  4. 对于提示,选择文字转语音。然后,选择输入文本动态输入以创建音频消息。
  5. 选择保存

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

要让代理知道某个号码由于出错而不在拒绝列表中,请使用第三个播放提示块。

  1. 选择互动
  2. 播放提示块拖放到调用 AWS Lambda 函数块右侧的画布上。然后,将播放提示块连接到调用 AWS Lambda 函数块的错误输出。
  3. 选择块标题(播放提示)。块的设置菜单打开。
  4. 对于提示,选择文字转语音。然后,选择输入文本动态输入以创建音频消息。
  5. 选择保存

添加“断开连接”块

要断开代理与联系流的连接,请添加断开连接块。

  1. 选择终止/转移
  2. 断开连接块拖放到三个播放提示块右侧的画布上。
  3. 将所有流的分支连接到断开连接块。
    注意:对于此用例,您无需为断开连接块配置任何设置。

激活“转接队列”流

  1. 要保存流草稿,请选择保存
  2. 要激活流,请选择发布

创建快速连接,允许代理使用 CCP 向拒绝列表添加号码。

使用 Amazon Connect 控制台创建具有以下设置的快速连接:

  1. 名称中,输入快速连接的名称。例如: 拒绝列表
    对于类型,选择队列
    目标中,输入您希望具有拒绝列表功能的队列的名称。
  2. 将快速连接添加到分配给代理(您希望这些代理具备访问拒绝列表的功能)的队列中。
  3. 将快速连接添加到分配给代理(您希望这些代理具备访问拒绝列表的功能)的队列中。

完成这些步骤后,代理可以使用 CCP 中的拒绝列表快速连接向拒绝列表添加号码。当该号码呼叫您的 Amazon Connect 联络中心时,其来电将自动断开。此次呼叫未进入队列。

**注意:**如果客户在此过程中挂断,则呼叫将断开。如果断开连接,则代理无法使用快速连接将号码添加到拒绝列表中。您必须手动添加该号码。

AWS 官方
AWS 官方已更新 10 个月前