如何防止 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":
}
将下面的 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 == '<telephone-number-condition>':
# Stop contact here
connect.stop_contact(
ContactId = event,
InstanceId = event.split('/')
)
response = {
'phoneNumberBlockerMessage': 'Call is blocked.'
}
except ClientError as e:
if e.response == '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 实例,而且该用户身份要在其安全配置文件中有足够权限。
-
使用您的访问 URL (https://alias.awsapps.com/connect/login) 登录您的 Amazon Connect 实例。
注:将 alias 替换成您的实例的别名。 在左侧导航窗格中,选择路由,然后选择联系流。 在联系流页面上,选择创建联系流按钮旁的向下箭头,然后选择创建出站私密消息流。 在联系流设计器的输入名称中,为联系流输入名称。(例如,出站私密(停止)。) 选择保存。
有关更多信息,请参阅创建新的联系流。
添加“设置联系属性”数据块
配置此数据块以获取代理的用户名,您可以将该用户名发送至 Lambda 进行解析。
-
在联系流设计器中,展开设置。
将设置联系人属性数据块拖放到画布中。
选择数据块标题(设置联系属性)。这时将打开该块的设置菜单。
在待保存属性下,选择使用属性,然后执行以下操作:
对于目标键,输入键名称。例如,agent_username。
对于类型,选择代理。
对于属性,选择用户名。 选择保存。
添加调用 AWS Lambda 函数数据块
-
在联系流设计器中,展开集成。
将调用 AWS Lambda 函数数据块拖放到画布上。
选择数据块标题(调用 AWS Lambda 函数)。这时将打开该块的设置菜单。
在函数 ARN 下,选择选择函数,然后选择已添加到实例的 Lambda 函数。
(可选)在超时(最多 8 秒)部分,输入超时之前 Amazon Connect 等待 Lambda 响应的秒数。
选择保存。
有关更多信息,请参阅调用 Lambda 函数。
完成联系流
-
根据需要,为使用案例添加并连接更多联系数据块。有关指导,请参阅示例联系流。
将联系流中的所有连接器连接到数据块。请确保将设置联系人属性块的成功节点连接到调用 AWS Lambda 函数数据块。您必须至少使用以下数据块:
接入点 > 设置联系人属性 > 调用 AWS Lambda 函数 > 结束流/恢复 保存并发布联系流。
有关更多信息,请参阅创建新的联系流。
配置队列的出站私密流
在分配了代理的路由配置文件中,标识默认出站队列。有关更多信息,请参阅创建路由配置文件和 RoutingProfile 对象。
请执行以下操作,编辑队列:
-
在 Amazon Connect 实例上,在左侧导航窗格中,选择路由,然后选择队列。
在队列页面上,选择标识为默认出站队列的队列的名称。
在编辑队列页面上,对出站私密消息流(可选)搜索并选择您创建的出站私密消息流的名称。
选择保存。