fcc-core
Version:
Fusion communication center.
218 lines (217 loc) • 5.17 kB
JavaScript
const CALLDATAKEYS = [
'CALL_ID',
'ALLO_SNO',
'caot_task_sno',
'CUST_CODE',
'CALL_CHNL',
'caller',
'called',
'noop',
'CALL_TYPE',
'taskSno',
'isConsult'
]
export default {
/**
* 使用数组记录发起操作之后预期收到的事件
* 如果2s收到预期事件则主动移除
* 否则以调用结果为准
* @param eventname
*/
executeEvent (eventname) {
const self = this
const eventctrl = self.eventctrl
eventctrl.eventQueue.push(eventname)
self.eventTimer = setTimeout(function () {
while (eventctrl.eventQueue.length > 0) {
eventctrl.executeChangebtn(eventctrl.eventQueue.shift())
}
}, 2000)
},
/**
* 对象属性混合(浅)
*/
extend (to, _from) {
if (!to) {
return null
}
return Object.assign(to, _from)
},
/**
* 计算事件的起讫时间差
*/
getTime (events) {
let time = 0
if (!events) {
console.error(`getTime方法缺少必要参数---事件名`)
return
}
const ev = this.eventData[events]
if (ev && ev['time']) {
time = ev['time']
}
if (time === 0) {
return 0
}
return Math.round((new Date().getTime() - time) / 1000)
},
/**
* 根据事件名称获 或者 事件名 key值 获取缓存的事件数据
* @param eventname
*/
getEventData (eventname, key) {
const data = this.eventData[eventname]
if (data) {
const { params } = data
if (!key) {
return params
}
if (params && key in params) {
return params[key]
}
}
return ''
},
/**
* 业务代码执行器
*/
generator (fn) {
fn.call(this)
},
/**
* 批量修改坐席标识
* @param flags
* @param bool
* @returns {Promise<any>}
*/
modifyFlag (params) {
const self = this
return new Promise(function (resolve, reject) {
for (let key in params) {
self[key] = params[key]
}
resolve()
})
},
/**
* 挂断原因[HANGUP_TYPE]1 坐席挂机 2 客户挂机 3
* 保持中客户挂机 4 咨询/求助结束
* 5 应答前客户挂机 6 通话前坐席挂机
* (5,6针对手动应答 暂不考虑)
* 根据操作类型获取对应的挂断类型
* @param type
*/
getHangup () {
// 坐席主动挂机
if (this.isClickHangup) {
return 1
}
if (!this.isClickHangup) {
if (!this.isHolding) {
return 2
}
return 3
}
},
/**
*根据坐席当前的操作类型获取来电类型
* 1.普通呼入
* 2.咨询来电
* 3.转移来电
* 4.三方
* 5.呼出
* 6.保持中外呼
* 7.未接呼出
* 8.质检员接管通话
* @param type
* @returns {*}
*/
getCallType (type = 0) {
if (type === 0) {
return '0'
}
if (!type) {
return '1'
}
if (type == '2' || type == '5') {
return '2'
}
if (type == '4' || type == '7') {
return '1'
}
if (type == '1' || type == '3' || type == '6') {
return '3'
}
if (type == '15') {
return '5'
}
if (type == '16') {
return '6'
}
if (type == '17') {
return '8'
}
},
/**
* 客户呼入 计算出
* 等待时长 = 排队时长 + 座席接听耗时
* 排队时长--通过ivr进入队列的时间点--坐席收到振铃事件的时间点
* 也就是振铃的时间点-写转接流水的时间点
* 坐席接听耗时--坐席收到应答成功事件的时间点-坐席收到振铃事件的时间点
* @returns {number}
*/
getWaitTime (eventname) {
const { FORWARD_TIME, FORWARD_DATE } = this.getEventData(eventname)
if (!FORWARD_DATE || !FORWARD_TIME) {
return 0
}
const y = FORWARD_DATE.substr(0, 4)
const m = FORWARD_DATE.substr(4, 2)
const d = FORWARD_DATE.substr(6, 2)
const time = new Date(`${y}/${m}/${d} ${FORWARD_TIME}`).getTime()
const timenow = new Date().getTime()
if (time > timenow) {
return 0
}
return Math.round((timenow - time) / 1000)
},
/**
* 解析url 或者IVR的随路数据
* @param str
* @returns {*}
*/
parseUrl (str) {
const reg = /([^?&=]+)=([^?&=]*)/g
let obj = null
str.replace(reg, function (rs, $1, $2) {
var name = decodeURIComponent($1)
var val = decodeURIComponent($2)
val = String(val)
obj[name] = val
return rs
})
return obj
},
/**
* 通过获取的随路数据字符串解析出对应的随路数据
* @param str
* @returns {*}
* @constructor
*/
ParseCalldataStr (str) {
let o = {}
str = str.split('|')[1] || ''
let arr = str.split('^')
for (let i = 0; i < arr.length; i++) {
o[CALLDATAKEYS[i]] = arr[i]
}
return o
},
/**
* 判断是否展示示忙原因弹框
* @returns {boolean}
*/
isshow () {
return this.isClickBusyBtn && this.busydata.length > 0
}
}