七鱼开发文档中心
总览服务端 APIWebiOSAndroid鸿蒙Uniapp微信小程序插件三方接入
呼叫中心呼叫系统接入

呼叫工具条详细说明

呼叫工具条 SDK 登录、加载、事件、方法、Safari/iOS 授权和样式说明。

呼叫工具条

呼叫工具条功能作为一个嵌入式插件提供给需要呼叫工具条的第三方网站使用。建议第三方在需要嵌入的页面加载成功后,通过异步接口向自己服务器端发起请求,获取工具条的SDK地址,并完成工具条SDK加载以及外呼拨号对接后即可使用。在异步接口中,第三方需要根据当前登录的客服,获取客服对应的账号信息,向七鱼发起HttpClient请求,来获取七鱼动态生成的SDK文件地址。前端页面拿到SDK地址之后,将其作为js文件进行加载即可完成工具条的初始化,再配合工具条提供的拨号接口,即可完成工具条功能的接入。

功能使用步骤拆解:

 步骤1: 向自己服务器端发起异步请求,获取工具条的`SDK`地址;
 步骤2: 加载SDK并进行初始化设置;
 步骤3: (按需使用) 初始化完成后,进行SDK接口调用;

注意

确保使用https协议的页面

由于呼叫工具条使用了 webRTC 功能,必须在https页面中加载呼叫工具条(本地调试可以使用 localhost 页面)

Safari 浏览器和 iOS webview 登录注意事项

由于Safari浏览器对第三方 Cookie的限制 (opens new window),Safari浏览器和iOS webview无法按正常流程无感登录,需要用户进行额外的操作:

1. 监听cookieAccessibleChanged事件

代码示例:

qiConnect.on({cookieAccessibleChanged: function(data){
    if (data.result) {
        console.log('此时可以获取cookie');
    } else {
        console.log('没有获取cookie权限');
        // 【非常重要】如果已经隐藏了工具条,请务必暂时将工具条置为可见状态,才能点击按钮授权
    }
}});

该事件会监听呼叫工具条获取cookie权限的变化,当可以正常获取cookie时,无需其他操作;如果呼叫工具条没有获取cookie的权限,界面会展示一个【获取授权】按钮:

2. 点击按钮授权

点击【获取授权】按钮,浏览器会打开一个新的tab页,提示授权成功。点击页面内的【确定】按钮,该页面会关闭,回到加载呼叫工具条的页面

3. 再次授权

回到加载呼叫工具条的页面后,可以看到原来的【获取授权】按钮变为【请再次获取授权】,点击按钮,即可加载呼叫工具条。同时也会监听到cookieAccessibleChanged事件,提示此时可以正常获取cookie

说明

以上流程不是每次加载呼叫工具条都必须操作。根据Webkit的说法,如果用户在30天内在授权成功页面点击过【确定】按钮,呼叫工具条可以正常获取cookie,此时呼叫功能会无感加载

获取SDK接入地址

第三方向七鱼请求SDK接入地址的时候,七鱼会执行客服在七鱼的登录事件,并生成含动态口令的SDK接入地址返回给第三方

接口调用及数据校验规则参考上面营销接口调用及校验

接口请求地址

POST http://qiyukf.com/openapi/ipcc/login?appKey=1c088a89de51d0af457616605f28390f&checksum=f570a5eb049eb803b086e45829b07e48&time=1511832531

请求参数

Query

参数数据类型是否必须参数说明
appKeyString是企业appkey
timeInteger是当前 UTC 时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数
checksumString是SHA1(appSecret + md5 + time), 三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)

Body

参数是否必须数据类型参数说明
staffName是String使用工具条的客服在七鱼这边对应的客服名(此处对应的参数值为客服账号)

返回参数

接口返回数据为JSON格式,最外层参数如下:

参数参数说明
code错误码。200表示设置成功。
resultcode为200时,返回值有效。
message请求错误时,填错误提示信息

如果code等于200表示客服登录成功,result内容为json数据

result内的参数说明如下:

参数数据类型参数说明
sdk_urlString生成的含动态登录口令的SDK接入地址
corp_codeString登录客服对应的七鱼企业域名
tokenString动态登录口令

示例

请求示例

curl请求样例如下

curl -X POST \
  '[http://qiyukf.com/openapi/ipcc/login?appKey=1c088a89de51d0af457616605f28390f&checksum=f570a5eb049eb803b086e45829b07e48&time=1511832531](http://qiyukf.com/openapi/ipcc/login?appKey=1c088a89de51d0af457616605f28390f&checksum=f570a5eb049eb803b086e45829b07e48&time=1511832531)' \
  -H 'content-type: application/json;charset=utf-8' \
  -d '{"staffName": "admin"}'

返回示例

{
    "code": 200,
    "message": "",
    "result": {
        "sdk_url": "[https://xxx.qiyukf.com/toolbar/script/get?token=cb1ec3c43089493eb4039945685ebf51](https://xxx.qiyukf.com/toolbar/script/get?token=cb1ec3c43089493eb4039945685ebf51)",
        "corp_code": "xxx",
        "token": "cb1ec3c43089493eb4039945685ebf51"
    }
}

初始化SDK

前端页面通过上面异步接口获得sdk_url之后,动态加载这个sdk_url对应的js文件,即可完成工具条的初始化

动态加载js样例

// 呼叫工具条的加载、销毁、重新加载(代码仅供参考)

// 工具方法-加载script
const loadScript = (options = {}) => new Promise((resolve, reject) => {
  const script = document.createElement('script');
  Object.assign(script, options);
  script.addEventListener('load', () => resolve(script));
  script.addEventListener('error', reject);
  document.body.appendChild(script);
});

class Adaptor {
  // 呼叫工具条加载状态枚举
  static loadStatusMap = {
    0: '未加载',
    1: '加载中',
    2: '加载成功',
    3: '加载失败',
    4: '已销毁',
  }

  constructor() {
    // 初始化属性
    Object.assign(this, {
      script: null, // script元素
      loadStatus: 0 // 工具条加载状态
    });
  }

  // 加载工具条
  async load() {
    const adaptor = this;
    adaptor.loadStatus = 1; // 工具条加载中

    try {
      // login需要自己实现,参考上面的【获取SDK接入地址】
      const { sdk_url } = await login();
      
      // 在页面中插入script标签,src为sdk_url
      // 这个script会在window上添加qiConnect对象,提供一系列API
      adaptor.script = await loadScript({
        async: true,
        src: sdk_url
      });
      
      if(!window.qiConnect.CODE) {
        // 如果window.qiConnect.CODE不存在,说明token过期
        adaptor.loadStatus = 3; // 工具条加载失败
        return Promise.reject(new Error('token过期'))
      }

	  // 监听呼叫工具条事件
      window.qiConnect.on({
        onload() {
          this.loadStatus = 2; // 工具条加载成功
        },
        initSuccess() {
		  // 呼叫功能初始化成功
          // 如果使用软电话模式,可以设置坐席状态为在线
          qiConnect.setStatus([1])
        },
        session() {
          // 通话开始
        }
      });
      
      return Promise.resolve(window.qiConnect)
    } catch (error) {
      adaptor.loadStatus = 3; // 工具条加载失败
      return Promise.reject(error)
    }
  }
  
  // 登出并销毁工具条
  async logoffAndDestroy() {
    try {
      await window.qiConnect?.logoffAsync(); // 登出工具条
    } catch(_error) {}
    window.qiConnect?.clean(); // 销毁工具条UI
    // 销毁load方法插入的script标签
    this.script?.remove();
    this.script = null;
    this.loadStatus = 4; // 工具条已销毁
  }
  
  // 重新加载工具条
  async reload() {
    await this.logoffAndDestroy();
    return this.load();
  }
}

const adaptor = new Adaptor();

// 加载失败时重新加载
adaptor.load().catch(() => {
  adaptor.reload();
});

呼叫工具条加载完成后,会在接入页面添加id为CONTAINER-CC-TOOLBAR的工具条容器元素,可通过定义该容器的样式,定制呼叫工具条的位置以及叠放层级。

自定义样式示例

<style>
    #CONTAINER-CC-TOOLBAR {
        top: 100px;
        right: 100px;
        z-index: 100001;
    }
</style>

呼叫工具条SDK加载完成后,SDK会在全局对象window上挂载qiConnect对象,该对象实现了SDK 接口功能:SDK事件、SDK方法。

SDK事件

qiConnect对象提供了一系列事件监听功能,通过qiConnect.on({ [eventType]:[eventHandler] })进行注册。

注意: SDK事件操作需要在sdk脚本加载完成后才能注册监听。

事件 eventType说明
onload加载成功
initSuccess初始化成功
session会话开始
answered会话接通
byeFailed通话挂断失败
sessionClose会话结束
statusOptionsChanged状态可选项变更
statusChanged状态设置成功
statusChangeFailed状态设置失败
overProcess完成处理
acceptedByKefu双向回呼,客服已接起
asrContentUpdateasr识别结果
cookieAccessibleChanged【Safari浏览器、iOS webview】获取cookie权限发生变化
refresh页面刷新
error呼叫工具条出现异常

加载完成 onload

工具条加载完成后,可进行面板操作或调用SDK方法。

使用方式

qiConnect.on({onload: function(){
    // other code ……
}});

初始化成功 initSuccess

工具条初始化完成后,可以设置状态

使用方式

qiConnect.on({initSuccess: function(){
    // other code ……
}});

会话开始事件 session

呼叫会话的创建事件,包括外呼和呼入。监听该事件可获取当前会话信息。

使用方式

qiConnect.on({session: function(data){
    // other code ……
}});

data字段

名称类型含义
sessionidNumber会话id
addressString号码归属地
usernumberNumber客户号码
staffnumberNumber坐席号码
staffidNumber坐席id
staffnameString坐席名
directionNumber会话方向 1 呼入 2 呼出
ivrpathnameStringIVR路径名称 格式:节点名称1-节点名称2……-节点名称N
sessionIdFromNumber转接至该会话的上一通会话id

会话结束事件 sessionClose

呼叫会话的结束事件,包括呼出和呼入。监听该事件可获取当前会话信息。

使用方式

qiConnect.on({sessionClose: function(data){
    // other code ……
}});

data字段

名称类型含义
addressNumber号码归属地
usernumberNumber客户号码
sessionidNumber会话id
staffidNumber
staffnameNumber坐席名
throughDatastringcall(numbers, throughData)方法透传字段

会话接通事件 answered

表示会话双方已准备就绪,可以开始通话。当呼叫会话为呼入时,坐席接起电话后触发的事件 或者 当呼叫会话为呼出时,被外呼客户接起后触发的事件。监听该事件可获取当前会话的拨号方式和接起方式。

使用方式

qiConnect.on({ answered: function(data){
    // other code ……
}});

data字段

名称类型含义
directionString"IN" 呼入通话 "OUT" 外呼通话
typeString"SIP" sip话机 "AUTOANSWER" 自动应答 "CALLPANEL" 面板点击 "" 外呼通话接起类型未知

通话挂断失败事件 byeFailed

当执行挂断通话的操作失败后触发,如当前处于非通话状态时,调用了bye()方法,故建议在有answered事件相应后调用bye()方法。监听该事件可获取失败原因。

使用方式

qiConnect.on({ byeFailed: function(data){
    // other code ……
}});

data字段

名称类型含义
hasErrorBoolean是否有错误
causeString挂断失败的具体原因

坐席可选状态变更事件 statusOptionsChanged

坐席可选状态变更事件,当软电话、SIP话机、手机在线等服务模式发生变更时,伴随着坐席可用状态的变更,此事件会通知变更信息。

使用方式

qiConnect.on({statusOptionsChanged: function(data){
    // other code ……
}});

data字段

名称类型含义
statusArray当前状态
statusOptionsArray可选状态选项

坐席状态设置成功事件 statusChanged

坐席状态设置成功事件,工具条坐席当前状态发生变更,此事件会通知变更成功的状态。

使用方式

qiConnect.on({statusChanged: function(data){
    // other code ……
}});

data字段

名称类型含义
statusArray当前设置的状态

data.status枚举如下(管理端设置、电话模式等设置可能会导致某些状态不会出现):

status值含义备注
['0']离线
['1']软电话在线
['2', 小休细分状态]小休例如小休-就餐,对应值为['2', '1']
['3']通话中
['4']手机在线
['5']sip话机在线
['6']挂起
['7']处理中
['8']自动外呼

小休细分状态枚举如下(管理端设置可能会导致某些状态不会出现):

小休细分状态值含义
'0'无细分状态
'1'就餐
'2'会议
'3'培训
'4'休息
'5'洗手间
'6'其他

坐席状态设置失败事件 statusChangeFailed

坐席状态设置失败事件,此事件会通知变更失败的状态以及失败原因。

使用方式

qiConnect.on({statusChangeFailed: function(data){
    // other code ……
}});

data字段

名称类型含义
statusArray设置的状态
errorMsgstring失败信息

完成处理事件 overProcess

使用方式

qiConnect.on({overProcess: function(data){
    // other code ……
}});

data字段

名称类型含义
addressstring号码归属地
sessionidnumber会话id
staffidnumber坐席id
staffnamestring坐席账号
usernumberstring客户号码

双向回呼,客服已接起 acceptedByKefu

使用方式

qiConnect.on({acceptedByKefu: function(data){
    // other code ……
}});

data字段

名称类型含义
sessionidnumber会话id

asr识别结果事件 asrContentUpdate

使用方式

qiConnect.on({asrContentUpdate: function(data){
    // other code ……
}});

data字段

名称类型含义
contentstring音频内容
createTimenumber消息生成时间
userType0 | 1音频来源方类型:0-坐席 1-访客
userIdstring坐席或访客id
userNamestring坐席或访客名称

获取cookie权限发生变化【只对Safari浏览器、iOS Webview生效】 cookieAccessibleChanged

使用方式

qiConnect.on({cookieAccessibleChanged: function(data){
    if (data.result) {
        console.log('此时可以获取cookie');
    } else {
        console.log('没有获取cookie权限');
        // 此时工具条会展示授权按钮
        // 如果已经隐藏了工具条,请务必暂时将工具条置为可见状态,才能点击按钮授权
    }
}});

data字段

名称类型含义
resultboolean是否有获取cookie权限

呼叫工具条出现异常 error

使用方式

const errorTypeMap = {
	'out-call': '外呼错误',
    'in-call': '呼入错误',
    'rights': '权限错误',
    'consult': '咨询转接错误',
    'intercom': '内部通话错误',
    'conference': '多方通话错误',
    'status': '设置状态错误',
    'others': '其他错误',
}

qiConnect.on({error: function(data){
    const { type, message = '' } = data;
	console.error(`出现异常,错误类型:${errorTypeMap[type] || errorTypeMap.others},错误信息:${message}`);
}});

data字段

名称类型含义
type'out-call' | 'in-call' | 'rights' | 'consult' | 'intercom' | 'conference' | 'status' | 'others'错误类型,具体含义参考代码示例
messagestring错误信息

SDK方法

qiConnect对象提供了一系列方法。 需要在qiConnect的onload事件完成(呼叫功能加载完成)之后才能执行。使用格式 qiConnect.fn(), fn如下:

注意: SDK操作需要在qiConnect的onload事件完成(呼叫功能加载完成)之后才能执行。

方法 Method说明
config()个性化配置
call()外呼
bye()挂断当前通话
logoff()账号登出(同步)
logoffAsync()账号登出(异步)
clean()销毁工具条
setStatus()设置坐席状态
setMode()设置呼叫服务模式
keepPanelUnfold()面板保持展开
getCaptcha()获取手机验证码
bindPhone()绑定手机号
exportLocaleLogs()导出本地日志
toggle()展开/收起面板
setNumber()设置拨号盘号码
cancelAfterFail外呼失败后,跳过重拨状态
recallAfterFail外呼失败后,重拨

个性化配置 qiConnect.config(options: {preserveNumber?: boolean})

加载工具条后,进行个性化配置

传参释义

名称类型默认值含义
options{preserveNumber?: boolean; ignoreRefresh?: boolean;applyCallInSummary?: boolean;}{preserveNumber: false, ignoreRefresh: false,applyCallInSummary: false,}必填;options.preserveNumber-通话结束后,呼叫面板是否保留对方号码options.ignoreRefresh-关闭页面是否跳过弹窗提示、忽略刷新事件options.applyCallInSummary-是否开启来电摘要

使用样例

qiConnect.on({
  // 要在呼叫工具条加载后(ready事件)进行配置
  ready(){
    qiConnect.config({
      preserveNumber: true, // 通话结束后,在呼叫面板中保留对方号码
      ignoreRefresh: true, // 关闭页面不弹窗提示、不通知刷新事件
      applyCallInSummary: true, // 开启来电摘要
    });
  }
})

外呼拨号 qiConnect.call(options)

该接口实现了一键外呼的功能,传入需要外呼的号码直接调用即可。

传参释义

名称类型含义
options{number?: string;throughData?: any;thirdPartyClueId?: string;}options.number-外呼号码options.throughData-透传字段,该字段会通过JSON.stringify()进格式化处理,当通话结束时通过sessionClose事件进行回传options.thirdPartyClueId-线索id,根据线索id外呼时使用,需配置CRM接口、联系七鱼技术支持同学开启白名单。传入此参数时options.number参数不生效

使用样例

<form onsubmit="return false;" id="yyy">
    <p id="call">外呼号码<input type="text" name="mobile" />
        <input type="button" value="外呼" name="buttonCall" />
    </p>
</form>
document.getElementById('yyy').buttonCall.onclick = function() {
    if (!form.mobile.value) return alert('请输入电话号码');
    qiConnect.call({
      numbers: form.mobile.value
    });
}

挂断通话 qiConnect.bye()

该接口实现了挂断当前通话的功能,直接调用即可。如当前处于非通话状态时无法执行操作,强行调用会有异常错误相应可通过监听事件处理, 建议在answered事件响应后进行挂断场景处理。

使用样例

<form onsubmit="return false;" id="yyy">
    <p id="call">外呼号码<input type="text" name="mobile" />
        <input type="button" value="挂断" name="buttonBye" />
    </p>
</form>

var isCalling = false;
qiConnect.on({
    answered: function(data){
        isCalling = true;
    },
    sessionClose: function() {
        isCalling = false;
    },
    byeFailed: function(data) {
        alert('挂断异常:'+data.cause);
    }
});

document.getElementById('yyy').buttonBye.onclick = function() {
    if(isCalling){
        qiConnect.bye();
    }
}

退出系统(同步方法) qiConnect.logoff()

该接口实现了退出七鱼系统的功能,直接调用即可。退出后工具条所有功能将不可用,若想再次启用呼叫功能需重新走一遍功能使用的几个步骤。

使用样例

<form onsubmit="return false;" id="exampleLogoff">
     <input type="button" value="退出七鱼工具条" name="buttonLogoff" />
</form>
document.getElementById('exampleLogoff').buttonLogoff.onclick = function() {
    // some code...
   var conditionLogoffQiyu = true; //退出七鱼系统的条件
   if (conditionLogoffQiyu) {
      window.qiConnect.logoff();
   }
   // some code...
}

退出系统(异步方法) qiConnect.logoffAsync()

该接口实现了退出七鱼系统的功能,直接调用即可。退出后工具条所有功能将不可用,若想再次启用呼叫功能需重新走一遍功能使用的几个步骤。

使用样例

<form onsubmit="return false;" id="exampleLogoffAsync">
     <input type="button" value="退出七鱼工具条" name="buttonLogoffAsync" />
</form>
document.getElementById('exampleLogoffAsync').buttonLogoffAsync.onclick = function() {
    // some code...
   var conditionLogoffQiyu = true; //退出七鱼系统的条件
   if (conditionLogoffQiyu) {
      // 使用Promise
      window.qiConnect.logoffAsync().then(() => {
        console.log('登出成功')
      }).catch(({ message }) => {
        console.error(message)
      });
      // 使用回调
      window.qiConnect.logoffAsync({}, ({ status, message }) => {
        if (status) {
            console.log('登出成功')
        } else {
            console.error(message)
        }
      })
   }
   // some code...
}

销毁工具条 qiConnect.clean()

销毁工具条,为重新加载做准备:

  • 销毁注册的事件
  • 销毁界面
  • 还原内部状态
  • 清除window.qiConnect对象 一般在logoffAsync api之后调用

设置坐席状态 qiConnect.setStatus(status)

该接口实现了重置坐席服务状态的功能,需传入当前服务模式可用的坐席状态。

@param status {Array} 初始化成功后状态默认为qiConnect.status, 可设置状态来自qiConnect.statusOptions, 当服务模式(软电话/SIP话机/手机在线)发生改变时, 可选坐席状态也将发生对应更新,可通过事件statusOptionsChanged获取更新的状态信息

qiConnect.statusOptions {Array} 可状态列表,格式 [{ label , value, children} ]

示例

// qiConnect.statusOptions
[
    { "label": "离线", "value": "0" },
    { "label": "小休", "value": "1",
        "children": [
            { "label": "会议", value: "0" }
        ]
    },
    ...
]

使用样例

<form onsubmit="return false;" id="yyy">
    <label> 请选择状态:
        <select name="chooseStatus">
            // qiConnect.statusOptions 当前可选状态
            <option value="statusOption.value">statusOption.label</option>
        </select>
    </label>
</form>
const selectElement = document.querySelector('[name="chooseStatus"');

selectElement.addEventListener('change', (event) => {
  const status = event.target.value;
  // 可选状态若存在二级状态 参数格式示例 [status, subStatus]
  qiConnect.setStatus([status]);
});

设置呼叫服务模式 qiConnect.setMode(options, callback)

该接口实现了设置呼叫服务模式的功能,类型为({ mode: 0 | 1 | 2 | 3 }, ({ status: boolean; message: string; statusOptions: number[]; }) => void) => Promise<{ status: boolean; message: string; statusOptions: number[]; }>;

大部分场景下可以通过回调函数获取设置结果,包含是否设置成功、提示信息、新模式下可选坐席状态等数据;

如果浏览器支持Promise,可以不传回调函数,setMode方法会返回promise,在then和catch中获取以上信息

传参释义

名称类型含义
options{ mode: 0 | 1 | 2 | 3 }必填;0-软电话 1-手机在线 2-sip话机 3-双向回呼
callback({ status: boolean; message: string; statusOptions: number[]; }) => void选填;status-是否设置成功;message-提示信息;statusOptions-在新模式下可选坐席状态,qiConnect.setStatus会用到

使用样例

// 在回调函数中进一步处理流程
// 切换为软电话模式
qiConnect.setMode({ mode: 0 }, ({ status, message, code }) => {
    if (status) {
        // 呼叫服务模式设置成功
        console.info('服务模式设置成功');
    } else {
        // 呼叫服务模式设置失败
        console.error('服务模式设置失败', message);
        // 如果code为18051,表示没有设置转接的手机号码,此时需要获取验证码
        if (code === 18051) {
            // 输入手机号
            const mobile = prompt('请输入手机号');
            // 获取手机验证码
            qiConnect.getCaptcha({ mobile })
                .then(() => {
                    console.info('获取手机验证码成功');
                }).then(() => {
                    // 输入验证码
                    const captcha = prompt('请输入手机验证码');
                    return qiConnect.bindPhone({ mobile, captcha })
                }).then(() => {
                    console.info('绑定手机号成功');
                }).catch(({ message }) => {
                    // 获取手机验证码/绑定手机号失败
                    console.error(message);
                });
        }
    }
});

// 在promise中进一步处理流程
// 切换为sip话机模式
qiConnect.setMode({ mode: 2 }).then(() => {
    // 呼叫服务模式设置成功
    console.info('服务模式设置成功');
}).catch(({ message, code }) => {
    // 呼叫服务模式设置失败
    console.error('服务模式设置失败', message);
    // 如果code为18051,表示没有设置转接的手机号码,此时需要获取验证码
    if (code === 18051) {
        // 输入手机号
        const mobile = prompt('请输入手机号');
        // 获取手机验证码
        qiConnect.getCaptcha({ mobile })
            .then(() => {
                console.info('获取手机验证码成功');
            }).then(() => {
                // 输入验证码
                const captcha = prompt('请输入手机验证码');
                return qiConnect.bindPhone({ mobile, captcha })
            }).then(() => {
                console.info('绑定手机号成功');
            }).catch(({ message }) => {
                // 获取手机验证码/绑定手机号失败
                console.error(message);
            });
    }
});

设置面板保持展开状态 qiConnect.keepPanelUnfold(flag)

该接口实现了面板保持展开状态的功能。面板默认不展开,通话接通时若面板为展开状态则会自动收起,如需面板一直保持展开状态可使用该功能,设置成功后,点击工具条依然可以手动操作展开和收起动作,或根据需求取消该功能。

@param flag {boolean} 默认为 false

示例场景-初始化成功后一直保持展开

使用样例

qiConnect.on({
    onload: () => {//呼叫工具条加载完毕的事件通知
        console.log('demo info: 呼叫工具条加载完毕!');
        qiConnect.keepPanelUnfold(true);
    }
});

获取手机验证码 qiConnect.getCaptcha(options, callback)

使用手机在线或双向回呼模式之前,要绑定客服手机号,为了确保手机号为客服所有,要先获取手机验证码,校验通过后再绑定手机号

传参释义

名称类型含义
options{ mobile: string }必填;options.mobile-手机号
callback({ status: boolean; message: string; }) => void选填;status-是否获取成功;message-提示信息

示例场景-切换到手机在线或双向回呼模式之前

使用样例

// 在回调函数中进一步处理流程
qiConnect.getCaptcha({ mobile: '1xxxxxxxxxx' }, ({ status, message }) => {
    if (status) {
        console.info('获取手机验证码成功');
    } else {
        console.error('获取手机验证码失败', message);
    }
});

// 在promise中进一步处理流程
qiConnect.getCaptcha({ mobile: '1xxxxxxxxxx' }).then(() => {
    console.info('获取手机验证码成功');
}).catch(({ message }) => {
    console.error('获取手机验证码失败', message);
});

绑定手机号 qiConnect.bindPhone(options, callback)

获取到手机验证码后,绑定客服手机号。切换到手机在线/双向回呼模式都会将通话接通至该手机号

传参释义

名称类型含义
options{ mobile: string; captcha: string }必填;options.mobile-手机号;options.captcha-验证码
callback({ status: boolean; message: string; }) => void选填;status-是否绑定成功;message-提示信息

示例场景-切换到手机在线或双向回呼模式之前,获取手机验证码之后

使用样例

// 输入手机号
const mobile = prompt('请输入手机号');
// 获取手机验证码
qiConnect.getCaptcha({ mobile })
    .then(() => {
        console.info('获取手机验证码成功');
    }).then(() => {
        // 输入验证码
        const captcha = prompt('请输入手机验证码');
        return qiConnect.bindPhone({ mobile, captcha })
    }).then(() => {
        console.info('绑定手机号成功');
    }).catch(({ message }) => {
        // 获取手机验证码/绑定手机号失败
        console.error(message);
    });

绑定手机号 qiConnect.exportLocaleLogs(options)

导出储存在本地的呼叫业务日志,会触发浏览器下载txt日志文件,可以转发给七鱼对接同学进行进一步问题排查

传参释义

名称类型含义
options{ range?: [number, number] }选填;options.range-导出日志的起止时间的毫秒数,如果省略该字段,会导出所有日志

示例场景-出现呼叫问题时:

// 1. 确认出现问题的大致起止时间
// 假设问题开始时间为2023-12-12 13:10
const startTime = new Date(2023, 11, 12, 13, 10, 0, 0)
// 假设问题结束时间为2023-12-12 13:30
const endTime = new Date(2023, 11, 12, 13, 30, 0, 0)
// 2. 为了导出日志上下文,前后各预留5分钟
const buffer = 5 * 60 * 1000;
const range = [startTime.getTime() - buffer, startTime.getTime() + buffer];
// 3. 导出日志
qiConnect.exportLocaleLogs({ range });
// 4. 把日志文件转发给七鱼对接同学

完成处理 qiConnect.overProcess(options, callback)

该接口实现了在处理中状态下,完成处理的功能,类型为({}, ({ status: boolean; message: string}) => void) => Promise<{ status: boolean; message: string;}>;

可以通过回调函数获取调用结果,包含是否操作成功、提示信息;

如果浏览器支持Promise,可以不传回调函数,overProcess方法会返回promise,在then和catch中获取以上信息

传参释义

名称类型含义
options{}预留字段,传空对象即可
callback({ status: boolean; message: string;}) => void选填;status-是否设置成功;message-提示信息;

使用样例

// 当前为处理中状态

// 使用方式1-callback
qiConnect.overProcess({}, ({ status, message }) => {
    if (status) {
        // 完成处理成功
        console.info('完成处理成功');
    } else {
        // 完成处理失败
        console.error('完成处理失败', message);
    }
});

// 使用方式2-promise
qiConnect.overProcess({}).then(() => {
    // 完成处理成功
    console.info('完成处理成功');
}).catch((error) => {
    // 完成处理失败
    console.error('完成处理失败', error.message);
});

展开/收起面板 qiConnect.toggle(open)

该接口实现了控制面板的展开/收起

传参释义

名称类型含义
openboolean是否展开面板

使用样例

qiConnect.toggle(true); // 展开面板
qiConnect.toggle(false); // 收起面板

设置拨号盘号码(只支持在非通话中调用) qiConnect.setNumber(options)

该接口实现了在拨号盘中预填号码,但不外呼

传参释义

名称类型含义
options{number: string}options.number-填入拨号盘中的号码

使用样例

qiConnect.setNumber({ number: '13000000000' }); // 设置拨号盘中的号码为13000000000,但不外呼

外呼失败后,跳过重拨状态(只支持在外呼失败时调用) qiConnect.cancelAfterFail()

该接口实现了外呼失败后,跳过重拨状态

使用样例

// 此时为外呼失败状态
qiConnect.cancelAfterFail(); // 跳过重拨状态,恢复为空闲状态

外呼失败后,重拨(只支持在外呼失败时调用) qiConnect.recallAfterFail()

该接口实现了外呼失败后重拨

使用样例

// 此时为外呼失败状态
qiConnect.recallAfterFail(); // 重拨

这篇文档有帮助吗?

目录

呼叫工具条
功能使用步骤拆解:
注意
确保使用https协议的页面
Safari 浏览器和 iOS webview 登录注意事项
1. 监听cookieAccessibleChanged事件
2. 点击按钮授权
3. 再次授权
说明
获取SDK接入地址
接口请求地址
请求参数
Query
Body
返回参数
示例
请求示例
返回示例
初始化SDK
动态加载js样例
自定义样式示例
SDK事件
加载完成 onload
使用方式
初始化成功 initSuccess
使用方式
会话开始事件 session
使用方式
data字段
会话结束事件 sessionClose
使用方式
data字段
会话接通事件 answered
使用方式
data字段
通话挂断失败事件 byeFailed
使用方式
data字段
坐席可选状态变更事件 statusOptionsChanged
使用方式
data字段
坐席状态设置成功事件 statusChanged
使用方式
data字段
坐席状态设置失败事件 statusChangeFailed
使用方式
data字段
完成处理事件 overProcess
使用方式
data字段
双向回呼,客服已接起 acceptedByKefu
使用方式
data字段
asr识别结果事件 asrContentUpdate
使用方式
data字段
获取cookie权限发生变化【只对Safari浏览器、iOS Webview生效】 cookieAccessibleChanged
使用方式
data字段
呼叫工具条出现异常 error
使用方式
data字段
SDK方法
个性化配置 qiConnect.config(options: {preserveNumber?: boolean})
传参释义
使用样例
外呼拨号 qiConnect.call(options)
传参释义
使用样例
挂断通话 qiConnect.bye()
使用样例
退出系统(同步方法) qiConnect.logoff()
使用样例
退出系统(异步方法) qiConnect.logoffAsync()
使用样例
销毁工具条 qiConnect.clean()
设置坐席状态 qiConnect.setStatus(status)
示例
使用样例
设置呼叫服务模式 qiConnect.setMode(options, callback)
传参释义
使用样例
设置面板保持展开状态 qiConnect.keepPanelUnfold(flag)
使用样例
获取手机验证码 qiConnect.getCaptcha(options, callback)
传参释义
使用样例
绑定手机号 qiConnect.bindPhone(options, callback)
传参释义
使用样例
绑定手机号 qiConnect.exportLocaleLogs(options)
传参释义
完成处理 qiConnect.overProcess(options, callback)
传参释义
使用样例
展开/收起面板 qiConnect.toggle(open)
传参释义
使用样例
设置拨号盘号码(只支持在非通话中调用) qiConnect.setNumber(options)
传参释义
使用样例
外呼失败后,跳过重拨状态(只支持在外呼失败时调用) qiConnect.cancelAfterFail()
使用样例
外呼失败后,重拨(只支持在外呼失败时调用) qiConnect.recallAfterFail()
使用样例