如何防止 Amazon Connect 联络中心的代理对某些电话号码进行出站呼叫?

上次更新时间:2020 年 3 月 25 日

我不想要 Amazon Connect 联络中心的代理呼叫某些国家/地区或高收费电话号码。如何阻止进行这些呼叫?

简短描述

出站私密流联系流中,调用 AWS Lambda 函数,检查被拨打的电话号码是否被允许。如果该电话号码不被允许,则使用 Amazon Connect StopContact API 停止联系。

注意:此解决方案有一些限制:

  • 它无法阻止排队的回调。如果回调请求从代理端发起,则通过出站私密流传递的联系人 ID 将不是实际的联系人 ID。
  • 如果 Lambda 函数出于任何原因调用失败,它将无法阻止呼叫。如果该函数失败,联系人将跟随联系流的错误分支,且呼叫不会停止。
  • 以上为基本示例。对于生产环境,为您的使用案例和代理的拨号权限定制设置。

解决方法

创建 Lambda 函数

使用您选择的运行时创建 Lambda 函数。包含函数逻辑,检查来自 Amazon Connect 的传入 JSON 请求中有无以下内容:

  • 代理用户名(在“属性”下)
  • 当前联系人 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”

此外,您还必须附加 AWS Identity and Access Management (IAM) 角色,该角色具有足够的权限来调用函数执行角色StopContact API。以下示例 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. 选择保存