UNPKG

fcc-core

Version:

Fusion communication center.

218 lines (217 loc) 5.17 kB
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 } }