## 来电弹屏
>[info]**功能说明:**
> 在自动外呼(即预测式外呼)中,客户接听,电话分配座席后,座席在接听前,座席电脑上应该会自动弹出本次电话的来电信息,一般会包含有:主叫号码,主叫号码归属地,主叫用户信息(姓名,地址,历史来电记录,历史沟通记录等等)。
> 通过该接口即可实现座席电话振铃同时座席电脑上自动弹出来电信息。
### **使用websocket获取座席状态**
客户端(浏览器),直接使用websocket连接到服务器,服务器会发送座席分机的状态,根据服务器发送的状态来判断浏览器是否需要弹屏,如果需要websocket的demo我们可以提供demo文件.
以下为websocket的demo文件部分代码,仅供参考
`
$(function() {
var lockReconnect = false;//避免重复连接的变量
var ws = null; //WebSocket
var wsUrl = "ws://cs.aicallcenter.cc:2348?ext=8001";//WebSocket地址,参数ext为座席分机号
//创建WebSocket连接
function createWebSocket(url){
try {
if ('WebSocket' in window) {
ws = new WebSocket(url);
} else {
ws = new SockJS(url);
}
initEventHandle();
} catch (e) {
reconnect(wsUrl);
}
}
function reconnect(url) {
if(lockReconnect) return;
lockReconnect = true;
//没连接上会一直重连,设置延迟避免请求过多
setTimeout(function () {
createWebSocket(wsUrl);
console.log("正在重连,当前时间"+new Date())
lockReconnect = false;
}, 5000); //这里设置重连间隔(ms)
}
function initEventHandle() {
// 连接成功建立后响应
ws.onopen = function() {
console.log("成功连接到" + wsUrl);
//发送登录信息,服务器端绑座席定分机
var cmd='{"type":"login","ext":"8001"}';//参数ext为座席分机号
ws.send(cmd);
//心跳检测重置
heartCheck.reset().start();
}
// 收到服务器消息后响应
ws.onmessage = function(e) {
//拿到任何服务器的消息都说明当前连接是正常的
heartCheck.reset().start();
try {
var msg=eval('(' + e.data + ')');
} catch(ex) {
var msg='';
console.log(e);
return false;
}
if(msg){
/*
这里判断服务器消息是否是谈判消息
如果是,则弹屏
*/
}
}
// 连接关闭后响应
ws.onclose = function() {
console.log("关闭连接");
reconnect(wsUrl);//重连
}
ws.onerror = function () {
reconnect(wsUrl);//重连
};
}
//与服务器的心跳
var heartCheck = {
timeout: 30000,//连接超时时间毫秒(30s)
timeoutObj: null,
serverTimeoutObj: null,
reset: function(){
clearTimeout(this.timeoutObj);
clearTimeout(this.serverTimeoutObj);
return this;
},
start: function(){
var self = this;
this.timeoutObj = setTimeout(function(){
//这里发送一个心跳,后端收到后,返回一个心跳消息,拿到返回的心跳就说明连接正常
var cmd='{"type":"heartBeat","ext":"8001"}';//参数ext为座席分机号
ws.send(cmd);
console.log("heartBeat");
//如果超过一定时间还没重置,说明后端主动断开了
self.serverTimeoutObj = setTimeout(function(){
ws.close();//如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
}, self.timeout)
}, this.timeout)
}
}
// 强制退出
window.onunload = function() {
ws.close();
}
createWebSocket(wsUrl);//浏览器连接WebSocket
});
`
* **服务器发送的消息**
| 参数 | 类型 | 描述 |
| --- | --- | --- |
| status | string | 请求结果:success:成功。failed:失败。|
| msg | string | 如果返回failed,对失败原因的描述。|
| data对象 | json | 返回ext对应的座席的状态。|
| data.agentNum | string | 座席工号,“签入”接口中所传的值。也可用于判断座席是否签入,如果为空则未签入。|
| data.agentName | string | 座席姓名,“签入”接口中所传的值。|
| data.agentGroup | string | 座席工作组,“签入”接口中所传的值。|
| data.status | string | 座席状态,系统有:签入,签出,空闲,分机未注册,呼入,呼出,话后,置忙。其他状态是由“座席置忙”API接口传的值,如:小休,就餐,培训,等等。|
| data.callid | string | 本次通话的唯一ID。|
| data.phone | string | 与座席通话的外线号码。|
| data.callee | string | 被叫号码,只有呼入才会有值。比如呼叫中心系统有多条个外线号码,表示主叫拨打的是哪一个号码 |
| data.calleeQueue | string | 被叫的队列(组)号码,只有呼入才会有值,如果在“签入”接口中,座席同时签入了多个队列,该值表示本次接听的号码是哪一个队列分配给座席的电话。|
| data.direction | string | 本次通话的呼叫方向,值:inbound,outbound,(来电弹屏一般是呼入才弹屏,呼出不 弹屏)。|
| data.icon | string | 座席状态图标,值:1,2,3 座席客户端。座席客户端界面状态图标显示,一般3个颜色,1灰;2绿;3红;1灰表示座席没签入系统;2绿表示队列会给座席分配电话(空闲是绿);3红表示队列不会给座席分配电话(签入,置忙,通话,话后都是红),该字段仅供参考,开发人员也可以根据座席状态显示业务上需要的状态图标。|
* **响应示例**
```
{
"status": "success",
"data": {
"agentNum":"1001",
"agentName":"Linda",
"agentGroup":"6700,6701",
"status":"空闲",
......
......
}
}
```