# ybcti-js-sdk

## 使用

<br>

## 安装

通过npm进行安装

```
npm install yb-xcti-sdk -S
```

<br>

## 引用
```javascript
// 在main.js文件中
import YBCTI from 'yb-xcti-sdk/lib/yb-xcti-sdk.umd.js';
Vue.use(YBCTI);
```

```html
<!-- vue组件中 -->
<yb-cti />或 <yb-cti></yb-cti>
```


<br>

## 支持环境

* 推荐使用chrome浏览器

<br>

## 开始
库加载后，会在全局注入一个实例对象window.ybcti，window.ybcti包含了初始化,坐席操作和事件监听方法。

<br>

### 初始化

<br>

#### 初始化使用示例

<br>

```javascript
window.ybcti.initCTI(params).then(res => {
    console.log(res)
})
```
参数对象params

参数 | 类型 | 是否必选 | 描述 | 
:-: | :-: | :-: | :-: | 
channelId |  String  | 是 | 合作渠道 ID
accessToken |  String  | 是 |客户端接入 Token
account |  String  | 是 |用户标识
secretKey |  String  | 是  |密钥

<br>

返回字段说明

参数 | 类型 | 说明 | 
:-: | :-: | :-: |  
code |  Number | 结果码 | 
message |  String | 返回结果描述 | 

<br>


### 坐席操作

<br>

### 外呼

<br>

外呼使用示例
```javascript
window.ybcti.callOut(params).then(res => {
    console.log(res)
})
```

<br>

参数对象params

参数 | 类型 | 是否必选 | 描述 | 
:-: | :-: | :-: | :-: | 
customId |  String | 是 | 线索Id | 
callMode |  Number | 是 | 1、 自动号码外呼（推荐）2、 使用上次呼叫号码呼叫 3、 兜底号码外呼 | 

<br>

返回字段说明

参数 | 类型 | 说明 | 
:-: | :-: | :-: |  
code |  Number | 结果码 | 
message |  String | 返回结果描述 | 

<br>

签出

```javascript
window.ybcti.logout(params)
```
参数对象params

参数 | 类型 | 是否必选 | 描述 | 
:-: | :-: | :-: | :-: | 
logoutType |  Number | 可选 | 签出类型 枚举值 1 : 完全退出 2：仅退出动态模式（默认） | 

<br>

返回字段说明

参数 | 类型 | 说明 | 
:-: | :-: | :-: |  
code |  Number | 结果码 | 
message |  String | 返回结果描述 | 


<br>

### 事件
注意:必须开启all监听后才能开启对其他子事件的监听。

<br>
事件监听方法

```javascript
window.ybcti.listenEvent(params).then()
```
<br>

事件使用示例，以 all 事件为例
```javascript
<script>
    window.ybcti.listenEvent('all').then(res => {
        console.log(res)
    })
</script>
```
<br>

#### 事件表

<br>

顶层事件

eventName | 描述 | 
:-: | :-: |  
all |  所有状态 | 
ws |  ws连接状态 | 
phone |  电话状态 | 
agent |  坐席状态 | 
initstate |  websocket重连更新状态 | 
ivr |  ivr状态 | 
update |  更新状态 | 
error |  错误状态 | 

<br>

phone子事件

eventName | 描述 | 
:-: | :-: |  
phoneHangup |  通话完成 | 
phoneCallOut |  外呼中 | 
phoneRing |  来电振铃 | 
phoneConnect |  通话中 | 
phoneSelfConnect |  己方接通 | 
phoneConsultOut |  咨询外呼中 | 
phoneConsultConnect |  咨询接通 | 
phoneConsultBack |  咨询接回 | 
phoneConsultFail |  咨询未呼通 | 
phone3WaySuccess |  三方接通 | 
phone3WayBack |  三方接回 | 
phoneChanSPYSuccess |  监听成功 | 
phoneBreakinSuccess |  强插成功 | 
phoneTransferSuccess |  转接成功 | 
phoneInterceptSuccess |  拦截成功 | 
phoneTransfer |  电话转接 | 

<br>

phoneRing子事件

eventName | 描述 | 
:-: | :-: |  
phoneRingCalled |  被叫 | 
phoneRingQueue |  技能组分配来电 | 
phoneRingOutbound |  外呼来电 | 
phoneRingChanSPY |  监听来电 | 
phoneRingConsult |  咨询来电 | 
phoneRingAutoCall |  自动外呼来电 | 

<br>

agent子事件

eventName | 描述 | 
:-: | :-: |  
agentLogout |  被签出 | 
agentUnbusy |  空闲 | 
agentSysBusy |  忙碌 | 
agentSysUnbusy |  空闲 | 
agentSysOccupy |  系统占用 | 
agentSysAftDeal |  事后处理 | 

<br>

update子事件

eventName | 描述 | 
:-: | :-: |  
updateQueue |  技能组 | 
updateCaller |  主叫号码 | 

<br>

error子事件

eventName | 描述 | 产生场景 | 
:-: | :-: | :-: |  
errorLogoff |  强制退出 | 后台进行强制签出时会收到此事件 | 
errorUnbusy |  强制置闲 | 后台进行强制置闲时会收到此事件 | 
errorBusy |  强制置忙 | 后台进行强制置忙时会收到此事件 | 
forceLogoff |  超时退出 | 当签入类型为动态坐席时，websocket连接由于网络异常等原因断开连接超过1分钟后，此时服务端会认为此坐席已经签出，此时websocket再重新连接上后会收到此事件，但是SDK会自动进行重连并自动签入 | 