fcc-core
Version:
Fusion communication center.
123 lines (117 loc) • 4.77 kB
JavaScript
import { changeEmployeeStatus } from '../../../utils/nats/natsApi'
import { addPhoneCallRecord, addOPTRecord, changeOPTRecord, changePhoneCallRecord } from '../../pointToPointCall/pointCall'
let phoneNumber
let XW
let CALLOUT_WAY
let exeSocket
let userBaseInfo
let phoneCallWaterCode = ''
let trafficWaterCode = ''
let duration = 0
let beginDate = 0
export default async function (xw, params) {
console.log('xw.sysLoginStatus', xw.sysLoginStatus)
XW = xw
CALLOUT_WAY = xw.getSysParam('CALLOUT_WAY')
exeSocket = xw.exe
userBaseInfo = xw.userInfo
await xw.validate(params, {
'phoneNum': { type: 'string', required: true }
})
exeSocket.emit('WriteBrowserLog', { logStr: `主动外呼,外呼方式${CALLOUT_WAY}` })
console.log('CALLOUT_WAY: ', CALLOUT_WAY)
return new Promise(async (resolve, reject) => {
phoneNumber = await getNum(params.phoneNum)
callOut(phoneNumber, xw, resolve, reject)
})
}
function getNum (phone) {
return XW.ajaxRequest([{
service: 'E2501411',
CON_NO: phone
}]).then(res => {
if (res.code === '0') {
return res.data[0].CON_NO
}
})
}
function callOut (phoneNumber, xw, resolve, reject) {
if (xw.sysLoginStatus.fsPhone) { // fs agentgatway
console.log('使用fs外呼')
xw.ucc.callOut({
callappdata: 'test',
called: phoneNumber,
caller: XW.userInfo.AGENT_ID
}).then(res => {
resolve(`呼叫电话${phoneNumber}`)
})
} else if (xw.sysLoginStatus.exePhone) {
console.log('使用vc外呼')
ExeCallOut(phoneNumber, resolve, reject)
} else {
reject('电话功能异常')
}
}
function ExeCallOut (phone, resolve, reject) {
exeSocket.emit('PhoneCall', {
isVideo: '0',
userName: phone,
callId: phone, // 对方的电话
callType: '2' // 电话呼叫
})
exeSocket.once('PhoneCall', async data => {
exeSocket.emit('WriteBrowserLog', { logStr: `电话外呼触发事件PhoneCall` })
if (data.resultCode === 0) {
resolve(`呼叫电话${phone}`)
changeEmployeeStatus('2', XW) // 广播并且修改agent_state状态 忙碌
}
// 无论成功失败,都要新增流水
phoneCallWaterCode = await addPhoneCallRecord({ // 添加电话通话流水
USER_CODE: userBaseInfo.USER_CODE,
OPPO_NO: phone, // 对方的ICP_CODE
MEDIA_TYPE: '5', // 5 = 电话呼叫
CALL_CHNL: '51', // 51 = 电话呼叫
CALL_TYPE: '1' // 1 = 普通呼叫
}, XW)
trafficWaterCode = await addOPTRecord({ // 新增话务操作流水
USER_CODE: userBaseInfo.USER_CODE,
AGENT_OPT_TYPE: '92', // 90 = 点对点电话呼叫
CALL_OBJ_ID: '3', // 2 = 内部呼叫 员工编号
IS_SUCCESS: '0'
}, XW)
})
// 接通事件
exeSocket.on('OnCallConnected', handleOnCallConnected, this)
// 挂机事件
exeSocket.once('OnCallEnd', data => {
exeSocket.emit('WriteBrowserLog', { logStr: `电话点呼触发事件OnCallEnd` })
changeEmployeeStatus('1', XW) // 广播并且修改agentState状态 空闲
exeSocket.off('OnCallConnected', handleOnCallConnected)
duration = getDuration(beginDate)
setTimeout(async () => {
trafficWaterCode && await changeOPTRecord(trafficWaterCode, { OPT_DURATION: duration, REMARK: '电话外呼结束,修改话务流水记录时长' }, XW)
phoneCallWaterCode && await changePhoneCallRecord(phoneCallWaterCode, { CALL_DURATION: duration, HANGUP_TYPE: data.endType, CALL_REMARK: '电话点呼结束,修改通话流水记录时长' }, XW)
trafficWaterCode = ''
phoneCallWaterCode = ''
}, 3000)
})
}
function handleOnCallConnected (data) {
if (data.resultCode === 0) {
beginDate = (new Date()).getTime()
if (phoneCallWaterCode && trafficWaterCode) {
phoneCallWaterCode && changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', REMARK: '修改通话流水呼出成功标志' }, XW) // 修改通话流水呼出成功标志
trafficWaterCode && changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, XW) // 修改话务流水成功标志
return
}
setTimeout(() => {
phoneCallWaterCode && changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', REMARK: '修改通话流水呼出成功标志' }, XW) // 修改通话流水呼出成功标志
trafficWaterCode && changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, XW) // 修改话务流水成功标志
}, 2000)
}
}
// 获取时间差
function getDuration (beginDate) {
let endDate = (new Date()).getTime()
return Math.ceil((endDate - beginDate) / 1000)
}