# phone-sdk

> 云呼系统sdk

Latest version **0.2.6** (published 2020-03-24) · 0 weekly downloads

## Install

```sh
npm install phone-sdk
pnpm add phone-sdk
yarn add phone-sdk
bun add phone-sdk
```

## Health

**Score 10/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; low quality score; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.6 |
| Published | 2020-03-24 |
| First published | 2020-02-11 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 7 MB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Maintainers | josson001 |

## Links

- npm: https://www.npmjs.com/package/phone-sdk
- npm.io page: https://npm.io/package/phone-sdk

## Dependencies (6)

- [vue](https://npm.io/package/vue.md) ^2.6.10
- [jquery](https://npm.io/package/jquery.md) ^3.4.1
- [core-js](https://npm.io/package/core-js.md) ^3.4.3
- [element-ui](https://npm.io/package/element-ui.md) ^2.10.1
- [eventemitter3](https://npm.io/package/eventemitter3.md) ^4.0.0
- [socket.io-client](https://npm.io/package/socket.io-client.md) ^2.3.0

## Recent versions

- 0.2.6 (latest) — 2020-03-24
- 0.2.5 — 2020-03-20
- 0.2.4 — 2020-03-20
- 0.2.3 — 2020-02-25
- 0.2.2 — 2020-02-25
- 0.2.1 — 2020-02-25
- 0.2.0 — 2020-02-25
- 0.1.9 — 2020-02-24
- 0.1.8 — 2020-02-20
- 0.1.7 — 2020-02-16
- 0.1.6 — 2020-02-15
- 0.1.5 — 2020-02-15
- 0.1.4 — 2020-02-15
- 0.1.3 — 2020-02-15
- 0.1.2 — 2020-02-11
- … 2 more at https://npm.io/package/phone-sdk/versions

## README

# 话务条接入文档


## 前言
phone-sdk是基于话务条供应商的skd做封装，用于抹平各个供应商sdk之间使用上的差异。
暴露给业务系统统一的调用方式，后续需要接入新的供应商时无需调整系统代码即可完成接入工作。
sdk分为方法和事件两部分，方法提供客户端主动调用服务的能力，事件作为服务端通知客户端的信号，由于底层sdk的限制，
目前sdk的方法暂不提供成功或失败的回调，调用结果服务端会以事件的形式另行通知。同时，由于多个供应商在底层提供的sdk在方法及
事件的细粒度上不一致，phone-sdk会在内部通过代理做一次统一，不过不用担心，对于未代理的api，phone-sdk会原样保留底层sdk的功能，业务系统
可以根据自身需求做对应调整
----

业务系统可以根据自身需求选择使用sdk(推荐)或者单独使用api

## sdk引入
phone-sdk基于vue开发，并通过
```json
{
    "peerDependencies": {
        "vue": "version"
    }
}
```

申明对vue的依赖，所以业务项目中需要安装vue
1.安装
```
npm install phone-sdk --save
```
2.使用
```vue
<template>
    <div>
        <phone-bar  :vendor-type="vendorType"
                 :user="user"
                 :password="password"
                 :url="url"
                 @ring = "ring"
                 ></phone-bar>
    </div>
</template>
<script>

</script>
```
2.使用main.js
```vue
<script>
    import phoneBar from 'phone-sdk'
    import 'phone-sdk/lib/phone-sdk.umd.1.js'
    import 'phone-sdk/lib/phone-sdk.umd.4.js'
    import 'phone-sdk/lib/phone-sdk.css'
    // 注册组件库
    Vue.use(phoneBar)
</script>
```

phone-bar提供的话务条的完整功能，同时也会暴露出必要的方法和事件供开发者处理特殊使用。

## api引入


2.使用

```javascript
import Agent, { VENDOR_TYPE } from './api/src/index'

phoneAgent.connect(userName, password, service)
```

仅对供应商的api做了一层代理及接口统一，使用这种方法开发，需要开发者自行开发界面及维护功能状态，如在通话中，不能进行置忙，拨打电话等功能

----
## 方法
### connect:连接服务器
页面初始化时用吃方法与服务器建立联系
参数:

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| userCode | String | 登录账号 |
| password | String | 登录密码 |
| url | String | 服务器地址 |
通过onConnect事件确认初始化结果

```javascript
const userCode = 'userCode'
const password = 'password'
const url = 'url'
agent.connect(userCode, password, url)
```
----

### checkIn:签入
坐席连签入CTI服务器，连接服务器成功后方可使用该方法。（一般让用户手动签入）
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| groupIds | String | 签入座席组id，多个组用符号 , 分割（三地需要该参数） |
**调用**
```javascript
agent.checkIn(groupIds)
```
----
### checkOut:签出
座席在注册到CTI服务器的状态并处于空闲时才可调用此方法
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**调用**
```javascript
agent.checkOut()
```
----
### dialout:拨号
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| phoneNumber | String | 需要拨打的号码 |
通过phone-agent调用该方法可以拨打电话，但不做任何校验
通过phone-bar调用，方法内部会对状态做校验，如已经在通话过程中，将会调用失败
**调用**
```javascript
agent.dialout(phoneNum)
```

### DTMF:拨号
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| group | String | 需要拨打的DTMF码 |
**调用**
```javascript
agent.transGroupDTMF(group)
```
----
### hangup:挂机
调用挂机成功后，坐席结束当前通话，可在通话，三方通话及监听情况下使用

**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |

----
### pause:暂停
将对应座席置忙暂停接听来电，系统将停止分配来电给该座席
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| agentId | String | 需要暂停服务的坐席工号[^agentId]，不传表示将自己暂停服务 |
**调用**
```javascript
agent.pause(agent)
```
----
### restore:恢复
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| agentId | String | 需要恢复服务的坐席工号，不传表示将自己恢复服务，在暂状态下方可使用此方法 |

**调用**
```javascript
agent.restore(agentId)
```
----
### hold:保持通话

在座席通话的过程中，保持当前通话，调用成功后客户将会进入听音乐状态。
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |

**调用**
```javascript
agent.hold()
```
----
### retrieve:取消保持

当座席处于保持通话的情况下想继续通话，则调用此方法。
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | -|
**调用**
```javascript
agent.retrieve()
```
----
### dialTrans:转接
将通话转接至第三方，当前座席退出通话
**参数:**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | | |

### listen:监听
班长可以使用该方法来监听坐席和客户之间的通话
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| agentId | String | 需要监听的分机号 |
**调用**
```javascript
agent.listen(agentId)
```
### logoutAgent:强制注销
### joinTalk:插话
班长可以对正在通话的坐席使用插话功能，插画成功后，客户，坐席以及班长处于三方通话中
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| agentId | String | ... |
**调用**
```javascript
agent.joinTalk(agentId)
```
### disconnectCall:拆话
班长可以使用拆话功能，与客户进行通话，被拆话的坐席与客户中断通话
h
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| agentId | String | 被拆话的坐席的工号 |
>由于，所以在



### 事件
#### onCheckIn: 签入
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| checkInfo.result | Boolean | 签入是否成功 |
| checkInfo.message | String | 签入失败原因 |
**监听**
```javascript
agent.on('onCheckIn', checkInfo => {
    
})
```
----
#### onCheckOut: 签出
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| checkInfo.result | Boolean | 签出是否成功 |
| checkInfo.message | String | 签出失败原因 |
**监听**
```javascript
agent.on('onCheckOut', checkInfo => {
    
})
```
----
#### onCallInRing: 来电响铃
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| ringInfo.phoneNumber | String | 来电号码 |
| ringInfo.area | String | 来电区号 |
| ringInfo.agentId | String |  收到响铃分机号 |
**监听**
```javascript
agent.on('onCallInRing', ringInfo => {
    
})
```
----
#### onCallOutRing: 呼出响铃
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onCallInRing', res => {
    
})
```
----
#### onThreePartCallInRing: 三方通话响铃
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onThreePartCallInRing', () => {
    
})
```
----
#### onThreePartCallOutRing: 三方通话呼出响铃
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onThreePartCallOutRing', () => {
    
})
```
----
#### onCallout: 电话拨打成功
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onCallout', () => {
    
})
```
----
#### onInCall: 电话接通
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onInCall', () => {
    
})
```
----
#### onCallOutRing: 呼出响铃
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
**监听**
```javascript
agent.on('onCallInRing', res => {
    
})
```
----
#### onCallIn: 来电接通
坐席接通电话之后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onCallIn', callInfo => {
    
})
```
----
#### onCallOut: 呼出接通
坐席呼出电话之后，客户接通后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onCallOut', callInfo => {
    
})
```
----
#### onIdle: 挂断电话
中断通话之后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onIdle', callInfo => {
    
})
```
----
#### onDisconnect: 断开
中断通话之后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onDisconnect', callInfo => {
    
})
```
----
#### onDialOver: 拨号结束（提示不成功原因）
中断通话之后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onDialOver', message => {
    
})
```
----
#### onThreePart: 三方通话接通
中断通话之后收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| 无 | - | - |
**监听**
```javascript
agent.on('onThreePart', message => {
    
})
```
----
#### onPause: 暂停服务通知
调用pause后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| pauseInfo.result | Boolean | 暂停服务结果，true表示已暂停 |
| pauseInfo.message | String | 暂停服务结果描述 |
**监听**
```javascript
agent.on('onPause', pauseInfo => {
    
})
```


----
#### onRestore: 恢复
调用restore后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| restoreInfo.result | Boolean | 恢复服务结果，true表示已恢复服务 |
| restoreInfo.message | String | 恢复服务结果描述 |
**监听**
```javascript
agent.on('onRestore', restoreInfo => {
    
})
```
----
#### onHold: 保持
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| holdInfo.result | Boolean | 保持通话结果，true表示保持通话成功 |
| holdInfo.message | String | 保持通话结果描述 |

**监听**
```
agent.on('onHold', holdInfo => {
    
})
```
----
#### onRetrieve: 取消保持
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |


**监听**
```
agent.on('onRetrieve', () => {
    
})
```
----
#### onGetOrgAgtgrps: 获取组(用于转接)
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| groups | Array | 获取组 |


**监听**
```
agent.on('onGetOrgAgtgrps', groups => {
            let list = [] //转接组的DTMF。
        this.allTransGroupList = list.concat(groups)
 })
```
----
#### onGetAgtGroups: 获取组(用于签入)
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| groups | Array | 获取组 |


**监听**
```
agent.on('onGetAgtGroups',groups => {

 })
```
----
#### onAllAgtInfo: 获取坐席列表
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| groups | Array | 获取组 |


**监听**
```
 agent.on('onAllAgtInfo', groups => {
                  
    })
```
----
#### onGetAgentRights: 获取坐席权限
调用hold方法后会收到此事件
**参数**

| 参数名 | 类型 | 描述 |
| :--- | :--- | :--- |
| rights | Array | 获取组 |


**监听**
```
agent.on('onGetAgentRights', rights => {
    
})
```


[^agentId]: 坐席工号

---
_Source: https://npm.io/package/phone-sdk · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
