外观
通用连接器对接
通过通用连接器接入未提供直连能力的呼叫中心厂商。
概述
通过通用连接器接入未提供直连能力的呼叫中心厂商。
开始之前
IMPORTANT
- 请使用具有 CRM 管理权限的账号完成配置。
- 请确认已具备对应呼叫中心厂商的管理后台访问权限及对接参数。
- 涉及坐席绑定、事件推送或弹屏时,请先与厂商管理员确认可用账号和接口能力。
配置说明
一、纷享侧初始化呼叫中心
呼叫中心插件配置路径:管理-业务插件管理-呼叫中心
- 当租户初始化成功后会产生以下影响:
① 管理-角色权限管理-业务功能权限-角色权限设置中增加角色【呼叫中心客服】
② CRM中新增预设对象【通话记录】
二、插件配置
首先需要选择服务商为:【通用连接器】,输入厂商名称。
接下来您需要进行以下几个步骤,以保障系统的正常对接。
step 1:参数配置;
step2:回调函数配置;
step3:外呼函数配置;
step4:电话条插件集成(没有对接电话条的业务需求时,此配置项可忽略)

三、各项函数配置的有关说明
3.1 链接说明
根据不同的场景替换参数标识的值,进行url配置:
POST请求:
无string: https://www.fxiaoke.com/open/callcenter/common/handle/`pushData`/{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: 192.0.2.61, env: example, `traceId`: <trace-id>"
}
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,如果传了则根据seatId查询座席绑定数据,如果没有传,则自动根据当前用户userId查询座席绑定数据
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,如果传了则根据seatId查询座席绑定数据,如果没有传,则自动根据当前用户userId查询座席绑定数据
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);
返回格式: tenantInfo和paramMappings是企业级数据,是一直返回的,userInfo是用户级的,根据参数返回
{
"`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://example.com/recordings/<recording-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;
// 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
预期结果与验证
- 保存通用连接器的厂商参数和回调函数配置。
- 使用测试事件调用回调地址。
- 确认 CRM 可接收事件,并按配置返回预期结果。
常见问题与故障排除
- 回调失败时,检查事件类型、参数名称和函数返回值。
- 坐席信息为空时,检查 CRM 员工与第三方坐席的绑定关系。