亚马逊AWS官方博客

使用 Amazon Connect 搭建自动外呼系统

需求场景介绍

在很多行业里,特别是面向终端客户提供服务的企业,我们发现都有一个类似的需求,就是在某个服务临近期限的时候,发提醒通知给客户。比如线上教育的企业提醒家长和学生进入即将开始的线上课堂,快递行业提醒客户包裹马上就会抵达某地,社交媒体的应用提醒客户关心的聊天对象已经上线等。这种提醒可以通过 app 内推送,短信,或者电话的方式发送,相比较起来电话提醒的方式肯定是触达客户最有效的一种方式。

技术选择

Amazon Connect 是一款云基础的智能呼叫中心解决方案,提供了全面的功能来帮助企业自动化他们的客户服务,包括呼叫中心管理和自动外呼系统等。Amazon Connect 服务通过在云上创建虚拟实例,申请电话号码,搭建服务工作流,可以在不到一天的时间内,让一个呼叫中心上线。本文将详细介绍如何使用 Amazon Connect 创建一个基本的自动外呼系统,内容会涵盖在 Amazon Connect 上创建实例,申请电话号码以及对 Agent 和 Flow 的配置建议,然后通过配合 Lambda 函数来自定义语音提示的内容,并介绍如何线上测试配置完成的功能。

方案架构

通过下图这个架构,可以实现一个完整的自动呼叫的流程:当程序发起一个外呼请求之后,真实的客户接听电话;客户接通电话会触发 Connect 里呼出号码绑定的工作流(下图中的 Flow1),这个工作流会从关联的 Lambda 函数中获取动态信息(比如客户的姓名等)设置播报内容,然后播放语音,语音播放完毕,电话自动挂断。

配置过程

一:开通 AWS Connect 实例

登陆 AWS 控制区,选择区域(本文以 us-east-1 为例),选择创建一个新的 AWS Connect 实例。

完成创建后,系统会提供一个访问 URL,用于管理和配置实例。

二:申请电话号码

进入 AWS Connect 控制台,选择已创建的实例进入其管理页面(默认用户是 awsuser)。

如上图中位置 1 所示,选择电话号码菜单,点击“申请新的电话号码”。配置电话号码,如上图位置 2 所示,选择号码类型(需要选择 DID 号码才能支持外呼)。如上图位置 3 所示在目前阶段可以先不关联任何特定的 Contact Flow。一共申请两个号码,一个用于呼出,一个用于呼入(模拟客户接电话)。

三:配置 Agent 和 Flow

Connect 服务有一些基本的概念,我们这里先做一个简单的介绍:

  • 电话号码(Phone Number)
    • 这是客户拨打的电话号码,用于进入 Amazon Connect 系统。DID 号码可以用来主动呼出。
  • Agent(坐席)
    • Agent 是指接听客户来电的客户服务人员。
    • 您需要在 Connect 中创建和管理 Agent 账号,并为他们分配必要的权限和技能。
    • Agent 是与客户直接交互的重要角色。他们会具备自己的 Profile,这样就可以等在 Queue 里随时提供服务。
  • Contact Flow(联系流程)
    • Contact Flow 定义了客户进入 Connect 系统后的交互流程。
    • 它决定了客户在拨打电话时会经历哪些步骤,例如自动语音提示、排队等待、转接到 Agent 等。
    • 您可以在 Connect 中自定义设计各种 Contact Flow,根据业务需求进行配置。
    • 一个对外提供服务的电话号码通常需要和一个 Contact Flow 进行关联。

这些概念之间的关系是:

  • 客户通过拨打您的电话号码进入 Connect 系统;本场景里,我们用一个号码呼出,另一个号码模拟客户接听。呼出的号码会绑定一个 Contact Flow 来设定播放提示语音。
  • 系统根据该号码绑定的 Contact Flow 进行处理;本场景里,因为号码用于自动外呼,所以当客户接起电话之后,就会触发这个号码绑定的 Contact Flow。
  • 如果 Flow 里有设定客户进入有 Agent 存在的 Queue,就会最终由 Agent 来接听和处理客户的需求;本场景里,我们用另一个电话号码模拟最终用户接听,所以那个号码我们会绑定一个很简单的工作流(让这个 flow 立刻进入一个 agent 可以接听的状态)。

配置 Agent

在控制台中如下图位置 1 选择“用户管理”,位置 2 创建新的用户,配置名称和登陆密码,同时选择 Agent 作为 Profile。下图位置 3 为最终创建完 Agent 的状态。

设计与配置 Flow

在控制台中选择“Flows”,使用图形界面创建和编辑流程,创建两个 Contact Flow,一个给呼出号码使用,一个给接听的号码使用。

下图是给呼出号码配置的 Contact Flow,我们称为 Flow1:

在 Flow1 里,可以看到从客户接听电话开始,这个 flow 就开始工作了,先调用 Lambda 函数设置可变内容,比如客户的名字等动态信息,然后进入一个循环(循环播放提示语音 3 次)。循环的内容是设定一个 Amazon Polly 的 Voice ID,然后去把在 Play Prompt 控制块里设置的文本用设置的 Voice ID 以语音的方式播放出来。在播放的文字内容里,使用了从 Lambda 获取到的动态内容,设置方式如下:

Flow1 设计完之后,需要保存和发布。

下面这个是给接听电话号码用的 flow,我们称为 Flow2:

Flow2 比较简单,这个电话被呼叫的时候,会触发这个 Flow2,Flow2 会检查是否当前一个特定的 Agent 是 Available 的状态(在测试阶段,我们会用这个 Agent 的身份登入 Agent 的工作台,等待电话呼入)。Flow2 设计完之后,也需要保存和发布。

号码和 Flow 的绑定

对于呼出的号码,绑定关系在调用 connect 的 SDK 接口的时候指定就可以(参看下面内容五)。

对于模拟测试用的被呼叫号码,点进进入该号码的控制台界面,在最下方选择上面配置好的 Flow2:

四:集成 Lambda 函数

创建 Lambda 函数

在 AWS Lambda 控制台创建新函数,函数用 Python 做例子,内容非常简单。通过从 Lambda 的环境变量里读取用户的名和姓,然后返回一个 json 格式的输出。

函数设定好之后,需要在 Amazon Connect 的实例和 Contact Flow 里进行集成。

首先进入你创建的 Connect 实例的控制台界面,找到‘Flow’的菜单,然后把需要集成的 Lambda 函数添加进去,结果如下图:

然后你才能在前面第三步的 Flow1 里使用‘Invoke Lambda’函数这个控制块,选择对应的 Lambda 函数。

五:编写自动外呼的代码

自动外呼的代码可以放在业务代码里去调用,或者使用 Lambda 函数通过某个触发器来触发。这里给出 Python 的样例。这个样例里可以看到需要设置的地方主要有四个:

  1. connect 实例的 ID
  2. Flow1 的 ID (前面介绍过的呼出号码上绑定的 Flow1 的 ID)
  3. 呼出号码(来自 connect)
  4. 被呼叫号码(测试的时候来自 connect,真实场景就是客户的真实手机号码)
import boto3

# 创建Amazon Connect客户端
connect_client = boto3.client('connect')

# 指定Amazon Connect实例ID、联系流(contact flow)ID、目标电话号码和客户端电话号码
instance_id = '9bdc6c6f-6b19-434e-xxxx-xxxxx'
contact_flow_id = '89df7828-badc-4c6c-xxxx-xxxx'
destination_phone_number = '+1xxxxxx'  # 被呼叫方的电话号码,国际格式,测试时使用connect phone number
client_phone_number = '+1xxxxxx'  # 用于发起呼叫的Amazon Connect电话号码,国际格式, connect phone number

# 发起对外电话呼叫
response = connect_client.start_outbound_voice_contact(
    DestinationPhoneNumber=destination_phone_number,
    ContactFlowId=contact_flow_id,
    InstanceId=instance_id,
    SourcePhoneNumber=client_phone_number
)

# 打印响应,其中包含了呼叫的详细信息
print(response)

六:测试完整流程

测试整个系统

使用之前创建的 Agent 身份登陆 connect 实例的 access url,具体如下图所示,保证设置 Agent 的状态为‘Available’:

使用第五步的 Python 脚本,发起呼叫:

在 Agent 的工作台,你会收到电话的呼入提示如下:

点击‘Accept call’,就可以模拟客户接起电话,并听到提示音,提示音播放结束后,电话会自动结束:

七:拨打记录查询

可以使用 connect 实例自带的监控面板,查看过去的拨打记录:

结语

本文通过一个明确的自动外呼的场景,介绍了如何使用 Amazon Connect 搭建一个自动外呼系统的步骤和具体的配置逻辑。在本方案的基础上,我们可以继续添加如 DynamoDB 等服务来获得更丰富的定制内容和交互体验。

本篇作者

薛东

亚马逊云科技解决方案架构师,负责基于亚马逊云科技云平台的解决方案咨询和设计,目前在亚马逊云科技大中华区服务教育行业客户。专注于无服务,安全等技术方向。