目前云呼叫中心与阿里云函数计算做了集成,如下图所示,用户可以通过函数计算完成云呼叫中心IVR对第三方服务或者自有业务系统的调用。本文将通过一个IVR调用第三方接口查询号码归属地的案例来说明具体的操作配置流程。
背景
我有一个呼叫中心,按地区划分了不同的技能组,如北京客服组,河北客服组,上海客服组等,能不能根据来电号码归属地,将通话分配给对应的客服组呢?
下面我们基于上述背景,通过函数计算实现相应的IVR流程
创建函数
1. 函数计算开通授权
首先,需要开通函数计算服务,阿里云主账号登录到函数计算控制台,首次登录时,会提示您开通函数计算,点击立即开通。函数计算价格说明;
注
:上述操作也可以通过子账号完成,前提需要您授权您的子账号管理函数计算(FC)服务的权限 AliyunFCFullAccess
,或者参考通过RAM角色实现跨云账号授权完成授权.
2. 新建函数
在新建函数之前,需要先了解下函数计算相关的概念服务地址和什么是函数计算。
这里简要说明下:
-服务地址是函数计算服务所在的区域;
-服务(Service)是管理函数计算的基本资源单位,每个服务地址下可以有多个Service;
-函数(Function)是调度和运行的基本单位,是执行特定功能的一段应用代,,每个Service可以有多个Function;
下面我们开始创建函数。
选择一个Region,新建一个Service。这里我们选择了华东1(杭州),新建了一个名为demo-service的服务。
在demo-service,创建一个新的函数Function,这里我们选择了一个空白函数模板,创建了一个名为get_number_region的python2.7函数
实现函数逻辑,这里有关函数入口含义可以参考下函数入口定义, 函数实现如下
# -*- coding: utf-8 -*-
import logging
import json
import urllib2
def handler(event, context):
try:
phone = json.loads(event)['phone']
url ="https://cx.shouji.360.cn/phonearea.php?number={number}".format(number=phone)
request = urllib2.Request(url)
result = urllib2.urlopen(url).read()
value = json.loads(result)
return'{province}{city}'.format(province=value['data']['province'], city=value['data']['city'])
exceptExceptionas as e:
logging.error(" Unexpected Error: {}".format(e))
3. 测试函数
函数编辑完成后,我们可以通过函数计算控制台进行一下测试。
点击 执行, 执行结果为null,由于我们的函数中第一步 phone = json.loads(event)['phone']
需要从入参中获取phone字段,这里没有给入参赋值,所以结果为null;为了验证我们点击 执行 右边的 触发事件, 填写参数,点击保存。
点击执行,结果返回了号码的归属地信息
这样我们就在函数计算控制台完成了函数的创建。
呼叫中心添加函数信息
主账号访问云呼叫中心管理控制台(也可以授权子账号管理呼叫中心的权限AliyunCCCFullAccess)。
选择进入需要访问的实例连接,在设置中的IVR集成中进行添加。
2. 点击添加函数信息
这里我们添加了Region为华东1,Service为demo_service, Function为get_number_region的函数信息,也就是我们刚刚在函数计算控制台创建的函数相关信息。
3. 验证函数连通性
之前在函数计算控制台我们已经验证了函数可以执行,这里添加函数信息成功后,我们看到函数信息右侧有一个测试的按钮,通过测试可以验证所填的函数信息是否正确,以及云呼叫中心是否可以正常调用您的函数。下面我们点击测试、填写相应参数验证一下。
当提示函数调用正常时,即会返回相应的结果,说明云联络中心可以正常的调用您的函数计算中相应的函数了。
创建带有函数模块IVR
如图所示,我们创建一个IVR,客户拨打电话进来,首先通过 放音模块 播放欢迎语,然后进入 函数模块,函数模块配置如下:
在函数模块 中我们首先选择函数,通过下拉列表选择刚刚添加的函数信息;
设置入参,这里的参数名字要和之前的编写的函数中所解析的参数名字一致,由于之前我们函数中解析的参数名为phone,这里我们入参名称仍设为phone,参数值这里我们设置为${开始.caller},表示获取的是主叫号码。( caller是一个系统参数有关系统参数,可以在开始模块中系统参数一栏查看)。
函数模块出口,当函数调用成功后,将进入下一模块,在该示例IVR中是 条件判断模块;根据${函数.responseBody}作为参数值进行判断。如:可以根据将函数模块返回的值于几个归属地做分支,然后在进行不同的操作处理,具体的处理可以根据您的流程实际情况来设定。
由于我们在号码归属地查询函数中依赖了第三方接口,我们无法完全保证该接口的可用性,保险起见,我们在函数调用失败出口处接了一个转人工模块,这样的好处是当函数调用失败后,会进入转人工模块,而不会直接挂断通话,具体的处理可以根据您的流程实际情况来设定。
函数出参多参数功能,在函数节点中开启多参数开关,可以支持函数返回JSON格式的对象,例如:函数返回值为 {title: ‘多参数测试’, age: 10, name: ‘张三’} ,则多参数功能可以按照上图配置,参数项对应的就是自定义参数,赋值项对应的就是函数返回的对象中的key值。(注意:参数项定义的参数不能重复且不能与设置出参的参数重复,流程参数只能输入大小写英文字母和下划线)。
函数模块执行成功后,流程进入分支模块,在分支模块中,我们根据函数模块的出参来设置我们的判断条件,这里作为示例,我们只提供了两个条件作为参考。
根据分支模块的执行结果,最终通话分配到了指定的技能组。