对接呼叫中心-通用接口

目前市面上呼叫中心厂家繁多,为了提高呼叫中心对接效率,纷享提供了方便快捷的呼叫中心对接插件,仅需按照要求进行函数的编写及配置,即可实现市面上大部分呼叫中心厂家的对接。

一、纷享侧初始化呼叫中心

呼叫中心插件配置路径:管理-业务插件管理-呼叫中心
- 当租户初始化成功后会产生以下影响:
① 管理-角色权限管理-业务功能权限-角色权限设置中增加角色【呼叫中心客服】
② CRM中新增预设对象【通话记录】

二、插件配置

首先需要选择服务商为:【新厂商对接】,输入厂商名称。
接下来您需要进行以下几个步骤,以保障系统的正常对接。
step 1:参数配置;
step2:回调函数配置;
step3:外呼函数配置;
step4:电话条插件集成(没有对接电话条的业务需求时,此配置项可忽略)

三、各项函数配置的有关说明

3.1 链接说明

根据不同的场景替换占位符的值,进行url配置:
POST请求:
无string:https://www.fxiaoke.com/open/callcenter/common/handle/pushData/{fsEa}/{eventType}/{callType}
有string:https://www.fxiaoke.com/open/callcenter/common/handle/pushData/string/{fsEa}/{eventType}/{callType}
GET请求:
有get,无string:https://www.fxiaoke.com/open/callcenter/common/handle/pushData/get/{fsEa}/{eventType}/{callType}
有get,有string:https://www.fxiaoke.com/open/callcenter/common/handle/pushData/get/string/{fsEa}/{eventType}/{callType}

3.1.1 链接占位符说明

{fsEa}:企业号,必填
{eventType}:该链接对应的事件类型
{callType}: 呼叫类型,in:呼入 out:外呼,可为空

3.1.2 链接有string和没有string区别

           有string:返回值是字符串,通常用于第三方系统弹屏使用,大部分情况使用无string格式的url即可
        无string:返回值是标准格式
// errorCode=0表示成功 // data中eventType表示事件类型,result是函数执行的返回值 { "errorCode": 0, "errorMessage": "成功", "data": { "eventType": "popThird", "result": "https://www.fxiaoke.com/open/cc/?code=2010&msg=%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7%E6%9A%82%E6%9C%AA%E5%9C%A8%E7%BA%B7%E4%BA%AB%E9%94%80%E5%AE%A2%E4%B8%AD%E6%BF%80%E6%B4%BB%EF%BC%8C%E8%AF%B7%E8%81%94%E7%B3%BB%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%91%98%E8%BF%9B%E5%85%A5%E7%BA%B7%E4%BA%AB%E9%94%80%E5%AE%A2%3Cbr%3ECRM%E7%AE%A1%E7%90%86%E2%80%93%E6%8F%92%E4%BB%B6%E2%80%93%E5%91%BC%E5%8F%AB%E4%B8%AD%E5%BF%83%E9%85%8D%E7%BD%AE%E8%B4%A6%E5%8F%B7%E7%BB%91%E5%AE%9A%E4%BF%A1%E6%81%AF%E3%80%82" }, "traceMsg": "callcenter-provider Server: 10.124.68.61, env: fstest-gray, traceId: fs-eservice-gray/639c1d0239fcbd0001695d52" }

3.2 回调函数说明

厂商请求配置链接,链接会调用绑定的回调函数,传过来的数据参数以及eventType的值都会透传到函数,此时可根据不同的eventType值以及接收参数自行进行业务处理。

四、函数配置教程

回调函数和外呼函数 配置相同
返回值类型:Map
绑定对象:通话记录
函数接收固定参数
回调函数:
类型:String 名称:eventType 链接上配置的事件类型
类型:Map名称:externalDataMap 接口请求传过来的参数
回调函数 externalDataMap接收的参数字段取决于厂商请求接口传递过来的参数
外呼函数:
类型:Map名称:externalDataMap 接口请求传过来的参数
外呼函数 externalDataMap接收的参数字段: { "callOutApiName": "AccountObj", // 被呼叫中对象的apiName "callOutDataId": "629ddf6484d613000131686d",// 被呼叫中对象的数据id "customerNum": "18390940098" // 被呼叫的电话号码 }

外呼函数模板

/** * @codeName 呼叫中心外呼函数模板 */ // 可从externalDataMap取值:[callOutApiName:外呼对象apiName, callOutDataId:外呼对象数据id, customerNum:外呼号码] Fx.log.info("请求接收的参数: " + externalDataMap); // 获取当前企业绑定的配置和当前用户的座席信息 String methodName = "queryBindInfo"; // 座席id Map args = ["seatId": "2002"]; // 统一调用模板 def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Map map = result.content as Map; Fx.log.info("企业和当前座席绑定信息: " + map); Fx.log.info("外呼请求开始 start"); /** * 根据厂商文档编写外呼请求逻辑,可使用上述绑定信息进行接口外呼 */ Fx.log.info("外呼请求结束 end"); // 直接返回空结果即可 Map resultMap = [:]; return resultMap;

回调函数模板

/** * @codeName 呼叫中心回调函数模板 */ // 取自请求地址配置的占位符{eventType} Fx.log.info("请求接收的事件类型: " + eventType); Fx.log.info("请求接收的参数: " + externalDataMap); Map resultMap = [:]; /** * 根据eventType不同进行相应逻辑处理,接口调用使用统一调用模板,methodName和args区分即可 */ // (1)如果获取当前企业绑定的配置和当前用户的座席信息,请调用 String methodName = "queryBindInfo"; // 座席id Map args = ["seatId": "2002"]; // 统一调用模板 def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Map map = result.content as Map; // (2)如果需要在第三方系统弹屏,需返回弹屏地址,请调用 // String methodName = "getPopWindowUrl"; // seatId: 座席Id customerNum:客户号码 // Map args = ["seatId": "2002", "customerNum":"18390940098"]; // *** 统一调用模板调用,对map返回结果进行组装 *** // resultMap = ["url": (map.data as Map).url]; // ps:若希望接口直接重定向,则返回结果增加固定动作字段newCallCenterAction,如下 // resultMap = ["url": (map.data as Map).url, "newCallCenterAction":"redirect"]; // Fx.log.info("弹屏地址: " + resultMap); // (3)如果需要在纷享系统弹屏【客服工作台弹屏以及显示飘窗】,通常是响铃时调用,调用如下 // String methodName = "popWorkbench" // seatId: 座席Id customerNum:客户号码 callId:通话记录id callType: 呼叫类型 in 呼入 out 外呼 // Map args = ["seatId": "2002", "customerNum":"18390940098", "callId":"medias_3-1671505262.109912", "callType":"in"]; // (4)第3步调用之后,最后一定要隐藏飘窗,通常是挂机时进行调用,调用如下 // String methodName = "hangupHandle" // callId和第3步的callId相同 // isDealing 是否接听:true已接听 false未接听 用于更新客服工作台左侧接听图标 // Map args = ["callId": "medias_3-1671505262.109912", "isDealing": true]; return resultMap;

函数接口提供

查询企业和座席绑定信息

// 方法名称 String methodName = "queryBindInfo" Map args = ["seatId": "2002"]; // 座席id def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Map map = result.content as Map; Fx.log.info("企业和当前座席绑定信息: " + map); 返回格式: { "errorCode": 0, "errorMessage": "成功", "data": { "tenantInfo": { // 企业绑定配置信息 "name": "新厂商名称" }, "paramMappings": [ // 参数配置信息 { "name": "account", "apiName": "account", "value": "N000000004037" } ], "userInfo": { // 座席绑定信息 "seatId": "2002", // 座席绑定的第三方账户id,座席id "userId": 1000 // 用户id } } }

客服工作台弹屏以及飘窗(通常响铃时间调用)

String methodName = "popWorkbench"; // seatId:座席id customerNum:客户号码 callId:通话记录Id callType:in 呼入 out 外呼 Map args = ["seatId": "2002", "customerNum":"18390940098", "callId":"medias_3-1671505262.109912", "callType":"in"]; def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Fx.log.info("弹屏: " + result); return resultMap;

清除飘窗并且更新客服工作台接听状态(调用“客服工作台弹屏以及飘窗”函数之后一定要调用此接口,否则飘窗会一直存在,通常挂机事件调用)

String methodName = "hangupHandle"; // callId:通话记录id(和弹屏函数callId保持一致) // isDealing 是否接听:true已接听 false未接听 用于更新客服工作台左侧接听图标 Map args = ["callId": "medias_3-1671505262.109912","isDealing":true]; def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Fx.log.info("清除飘窗: " + result); return resultMap;

上传录音文件(通常挂机事件调用)

String methodName = "uploadRecordFile"; // fileUrl 录音文件下载地址 Map args = ["fileUrl": "https://api-sh.clink.cn/download_record_file?AccessKeyId=5df4fac362a47ab3600b19110a163bd9&AccessKeySecret=365pLLP37M8BrF73ew2x&Expires=43200&Timestamp=2023-02-14T09%3A55%3A28Z&mainUniqueId=medias_4-1676285723.113456&Signature=hTKxIz43fKZ965fh88O%2BRybpD%2Fw%3D"]; def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Map map = result.content as Map; // fileUrl 上传到纷享服务器后返回的录音文件地址 Fx.log.info("文件地址: " + (map.data as Map).fileUrl);

第三方系统弹屏

String methodName = "getPopWindowUrl"; // seatId-座席id customerNum-客户号码 Map args = ["seatId": "2002", "customerNum":"18390940098"]; def ret = Fx.proxy.callAPI("eservice.proxy", ["x-fs-methodname": methodName,"Content-Type": "application/json;charset=UTF-8"], ["args": args]); HttpResult result = ret.data as HttpResult; Map map = result.content as Map; Map resultMap = ["url": (map.data as Map).url]; Fx.log.info("弹屏地址: " + resultMap); return resultMap;

电话条组件模板

系统设置--->定制开发平台---自定义组件--->新建

六、账号绑定

用户对接主要是绑定CRM和呼叫中心用户,让对应用户绑定后拥有呼叫中心和CRM的共同能力,绑定过程如下:
① 选择纷享员工(选择的员工需授权呼叫中心客服角色)
② 输入第三方坐席工号

七、业务设置

可在纷享后台进行客服设置,主要支持如下设置:
①支持弹屏列表配置,一个手机号被识别匹配到多个客户,联系人时,会显示客户或者联系人列表。
②自定义弹屏字段识别配置,可自由指定使用哪些字段进行来电用户身份识别;同时支持设置弹屏优先级,可按需配置。
③弹屏新建列表,当呼叫中心有电话呼入,且系统内未识别到对应电话信息后,系统会根据配置的选项弹屏快速新建入口。
④坐席接听优先级设置,在不将客户信息同步到呼叫中心系统的前提下,可返回特定参数给呼叫中心,进行语音导航。
⑤支持给客服人员开通临时业务数据的数据权限。
外呼设置项如下:

八、一键外呼

  当存在客服需要直接在CRM侧进行外呼的场景时,在纷享侧进行外呼配置后,即可进行一键外呼。
 系统会把客户、销售线索、联系人三个对象预设为外呼对象,如果需要在上述对象进行外呼,需要进行以下两项设置:
          在上述对象下,增加自定义按钮,按钮apiname必须为:button_e_call_out__c。             
      在外呼设置下配置外呼字段,如下图。
 如果您需要在其他对象下进行外呼,则需要进行以下两项配置工作。
          在外呼设置下增加呼对象
注:由于增加外呼按钮需要消耗自定义按钮的配额,在配额不足时,可能会导致初始化失败。可在增加配额后,手动增加自定义按钮,按钮apiname:button_e_call_out__c
2024-08-14
1 3