egain-config
Version:
JavaScript library for interfacing with eGain back-end systems.
331 lines (317 loc) • 12.1 kB
JavaScript
const mssql = require('mssql')
const agent = require('./sql/agent')
const queue = require('./sql/queue')
const moment = require('moment')
module.exports = {
listAgents: async function (config) {
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request().query('SELECT * FROM dbo.EGPL_USER')
// console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
findAgents: async function (config, {skillTargetId}) {
const query = agent.find()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('SKILL_TARGET_ID', mssql.Int, skillTargetId)
.query(query)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
changeAttribute: async function (config, {skillTargetId, attribute, value}) {
const query = agent.updateAttribute(attribute)
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input(attribute, mssql.VarChar, value)
.input('SKILL_TARGET_ID', mssql.Int, skillTargetId)
.query(query)
// console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
updateScreenName: async function (config, {skillTargetId}) {
const query = agent.updateScreenName()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('SKILL_TARGET_ID', mssql.Int, skillTargetId)
.query(query)
// console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
addRole: async function (config, {skillTargetId, roleId}) {
const query = agent.addRole()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('SKILL_TARGET_ID', mssql.Int, skillTargetId)
.input('ROLE_ID', mssql.Int, roleId)
.query(query)
// console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
findRoleId: async function (config, {roleName, departmentId}) {
const query = agent.findRoleId()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('role_name', mssql.VarChar, roleName)
.input('department_id', mssql.Int, departmentId)
.query(query)
const roleId = results.recordset[0].role_id
mssql.close()
return roleId
} catch (e) {
mssql.close()
throw e
}
},
addLicense: async function (config, {skillTargetId, licenseKey}) {
const query = agent.addLicense()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('SKILL_TARGET_ID', mssql.Int, skillTargetId)
.input('LICENSE_KEY', mssql.Int, licenseKey)
.query(query)
console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
findWithLicense: async function (config, {licenseKey}) {
const query = agent.findWithLicense()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('LICENSE_KEY', mssql.Int, licenseKey)
.query(query)
console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
findDefaultUserGroup: async function (config, {departmentId}) {
const query = agent.findDefaultUserGroup()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('department_id', departmentId)
.query(query)
// console.log(results)
mssql.close()
return results
} catch (e) {
mssql.close()
throw e
}
},
getUserQueues: async function (config, {username}) {
const query = agent.getUserQueues()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('user_name', mssql.VarChar, username)
.query(query)
mssql.close()
return results.recordset
} catch (e) {
mssql.close()
throw e
}
},
setConcurrentTaskLimit: async function (config, {userId, queueId, concurrentTaskLimit}) {
const query = agent.setConcurrentTaskLimit()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('user_id', mssql.Int, userId)
.input('queue_id', mssql.Int, queueId)
.input('concurrent_task_limit', mssql.Int, concurrentTaskLimit)
.query(query)
mssql.close()
return results.rowsAffected
} catch (e) {
mssql.close()
throw e
}
},
// setConcurrentTaskLimitBySkillTargetId: async function (config, {skillTargetId, queueId, concurrentTaskLimit}) {
// const query = agent.setConcurrentTaskLimitBySkillTargetId()
// try {
// const pool = await new mssql.ConnectionPool(config).connect()
// const results = await pool.request()
// .input('skill_target_id', mssql.Int, skillTargetId)
// .input('queue_id', mssql.Int, queueId)
// .input('concurrent_task_limit', mssql.Int, concurrentTaskLimit)
// .query(query)
// mssql.close()
// return results.rowsAffected
// } catch (e) {
// mssql.close()
// throw e
// }
// },
addIcmUser: async function (config, {username, firstName, lastName, skillTargetId, departmentId, licenseIds}) {
try {
// create modified values string
// the admin user who creates this new agent
let whoCreated = 1
// now
// let whenCreated = '2018-01-26 02:04:24'
let whenCreated = moment().subtract(6, 'hours').format('YYYY-MM-DD hh:mm:ss')
let password = '3946333242393341314236343038424234434133463143344638394334303946383139313633304431364531333730443836314338334236414530393937343943424638353242344336454533393642384241414539394434424344454544363746334339343934364535303843373739323546434643423046343533354543233538363333383334343137333246363937353331333033323435373733443344'
let modifiedValues = `'${password}','${firstName} ${lastName}','${password}','${username}',${whoCreated},'${whenCreated}','${firstName}','${lastName}'`
let modifiedColumns = 'password,screen_name,case_insensitive_password,user_name,who_created,when_created,first_name,last_name'
// get connection pool
const pool = await new mssql.ConnectionPool(config).connect()
// make request object and attach inputs
const request1 = new mssql.Request(pool)
.input('v_calleruser_id', whoCreated)
.input('v_resourcedepartment_id', departmentId)
.input('v_modified_user_column_names', modifiedColumns)
.input('v_modified_user_column_values', modifiedValues)
.input('v_modified_user2_column_names', null)
.input('v_modified_user2_column_values', null)
.output('v_parentfolder_id', mssql.Int)
.output('v_new_party_id', mssql.Int)
.output('v_sql_code', mssql.Int)
.output('v_sql_message', mssql.VarChar)
// run sp
const results1 = await request1.execute('egpl_user_f_create_user')
const newPartyId = results1.output.v_new_party_id
console.log('newPartyId', newPartyId)
console.log('successfully created eGain user')
// get default user group Id
const request2 = new mssql.Request(pool)
.input('department_id', departmentId)
const results2 = await request2.query(agent.findDefaultUserGroup())
// console.log('results2', results2)
const groupId = results2.recordset[0].group_id
console.log('successfully retrieved default group ID', groupId)
// get default user group Id
const request3 = new mssql.Request(pool)
const results3 = await request3.query(agent.findUserResourceTypeId())
// console.log('results3', results3)
const resourceTypeId = results3.recordset[0].resource_type_id
console.log('successfully retrieved user resource type ID', resourceTypeId)
// insert egain user pref resource for new agent
const request4 = new mssql.Request(pool)
.input('resource_type_id', mssql.Int, resourceTypeId)
.input('group_id', mssql.Int, groupId)
.input('department_id', mssql.Int, departmentId)
.input('resource_id', mssql.Int, newPartyId)
const results4 = await request4.query(agent.addPrefResource())
// console.log('results4', results4)
console.log('successfully added eGain user pref resource')
// set new agent's default language preference
const request5 = new mssql.Request(pool)
.input('user_id', mssql.Int, newPartyId)
.input('department_id', mssql.Int, departmentId)
const results5 = await request5.query(agent.setUserContentLanguage())
// console.log('results5', results5)
console.log('successfully set eGain user default language')
// find role ID for 'Agent' role in our department
const request6 = new mssql.Request(pool)
.input('department_id', mssql.Int, departmentId)
const results6 = await request6.query(agent.findAgentRole())
// console.log('results6', results6)
const roleId = results6.recordset[0].role_id
console.log('successfully found Agent role in our department', roleId)
// insertRoleId
const request7 = new mssql.Request(pool)
.input('party_id', mssql.Int, newPartyId)
.input('role_id', mssql.Int, roleId)
const results7 = await request7.query(agent.insertRoleId())
// console.log('results7', results7)
console.log('successfully added Agent role to new agent')
// assign licenses to new agent
const request8 = new mssql.Request(pool)
.input('ip_intUserId', mssql.Int, newPartyId)
.input('ip_licenseIds', mssql.VarChar, licenseIds)
.output('op_sql_code', mssql.Int)
.output('op_sql_msg', mssql.VarChar)
const results8 = await request8.execute('egpl_lic_assign_user')
// console.log('results8', results8)
console.log('successfully assigned licenses to new agent')
// add icmuser entry
const request9 = new mssql.Request(pool)
.input('user_id', mssql.Int, newPartyId)
.input('skill_target_id', mssql.Int, skillTargetId)
const results9 = await request9.query(agent.insertIcmUser())
// console.log('results9', results9)
console.log('successfully added user to icmusers')
// done!
mssql.close()
return {newPartyId}
} catch (e) {
mssql.close()
throw e
}
},
createChatQueue: async function (config, {queueName, queueId, departmentId}) {
// create a new chat queue in specified department
const query = queue.create()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('department_id', mssql.Int, departmentId)
.input('queue_id', mssql.Int, queueId)
.input('queue_name', mssql.VarChar, queueName)
.query(query)
mssql.close()
return results.rowsAffected
} catch (e) {
mssql.close()
throw e
}
},
setQueueCallId: async function (config, {queueId, callId}) {
// set the call identifier call variable
const query = queue.setCallIdentifier()
try {
const pool = await new mssql.ConnectionPool(config).connect()
const results = await pool.request()
.input('queue_id', mssql.Int, queueId)
.input('call_identifier', mssql.VarChar, callId)
.query(query)
mssql.close()
return results.rowsAffected
} catch (e) {
mssql.close()
throw e
}
}
}