c9d201dd0f7e0f18e8e021970ce548c119e2a2f2
[motion2.git] / server / api / webbar / webbar.controller.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x2e3e=['error','name','status','send','NotFound','request','then','code','message','result','catch','findOne','agent','all','rows','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','body','json','userId','callNumber','callerId','callbackUrl','entityFound:','format','user:%s','originate\x20executed!','hangup','hangup\x20fired:','webbar:hangup','hangup\x20executed!','webbar:answer','answer\x20executed!','hold','hold\x20fired:','webbar:hold','unhold\x20fired:','webbar:unhold','unhold\x20executed!','calls','calls\x20fired:','filter','conference\x20fired:','webbar:conference','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','transfer\x20executed!','path','lodash','../../config/environment','util','bluebird','jayson/promise','client','http','../../config/logger','ioredis','redis','defaults','localhost','socket.io-emitter','validate','number','string','callNumber\x20is\x20required','userId\x20is\x20required','sessionId\x20is\x20required','info','stringify','log','handleError:'];(function(_0x16ff0e,_0x4e7dc6){var _0x95bd68=function(_0x2b39ba){while(--_0x2b39ba){_0x16ff0e['push'](_0x16ff0e['shift']());}};_0x95bd68(++_0x4e7dc6);}(_0x2e3e,0x1b0));var _0xe2e3=function(_0x5b1aa0,_0xed786a){_0x5b1aa0=_0x5b1aa0-0x0;var _0x111084=_0x2e3e[_0x5b1aa0];return _0x111084;};'use strict';var path=require(_0xe2e3('0x0'));var fs=require('fs');var _=require(_0xe2e3('0x1'));var db=require('../../mysqldb')['db'];var config=require(_0xe2e3('0x2'));var util=require(_0xe2e3('0x3'));var BPromise=require(_0xe2e3('0x4'));var jayson=require(_0xe2e3('0x5'));var amiClient=jayson[_0xe2e3('0x6')][_0xe2e3('0x7')]({'port':0x232a});var logger=require(_0xe2e3('0x8'))('webbarapi');var Redis=require(_0xe2e3('0x9'));config[_0xe2e3('0xa')]=_[_0xe2e3('0xb')](config['redis'],{'host':_0xe2e3('0xc'),'port':0x18eb});var io=require(_0xe2e3('0xd'))(new Redis(config[_0xe2e3('0xa')]));var Schema=require(_0xe2e3('0xe'));var originateValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],'userId\x20is\x20required']},'callNumber':{'type':_0xe2e3('0x10'),'required':[!![],_0xe2e3('0x11')]},'callerId':{'type':_0xe2e3('0x10')},'callbackUrl':{'type':'string'}});var hangupValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],_0xe2e3('0x12')]},'sessionId':{'type':_0xe2e3('0x10'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],_0xe2e3('0x12')]},'sessionId':{'type':_0xe2e3('0x10'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],_0xe2e3('0x12')]},'sessionId':{'type':_0xe2e3('0x10'),'required':[!![],_0xe2e3('0x13')]},'transferNumber':{'type':'string','required':[!![],'transferNumber\x20is\x20required']}});var holdValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],_0xe2e3('0x12')]},'sessionId':{'type':_0xe2e3('0x10'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0xe2e3('0x10'),'required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0xe2e3('0x12')]}});var conferenceValidation=new Schema({'userId':{'type':_0xe2e3('0xf'),'required':[!![],_0xe2e3('0x12')]}});function emit(_0x54a830,_0x31dd25,_0x2e40a3){logger[_0xe2e3('0x14')](_0x54a830,_0x31dd25,JSON[_0xe2e3('0x15')](_0x2e40a3));io['to'](_0x54a830)['emit'](_0x31dd25,_0x2e40a3);}function handleError(_0x5904af){return function(_0x51d87d){console[_0xe2e3('0x16')](_0xe2e3('0x17'),_0x51d87d,_0x51d87d instanceof RangeError);logger[_0xe2e3('0x18')](_0x51d87d['stack']);if(_0x51d87d instanceof RangeError){if(_0x51d87d[_0xe2e3('0x19')]){delete _0x51d87d[_0xe2e3('0x19')];}_0x5904af[_0xe2e3('0x1a')](0x194)[_0xe2e3('0x1b')](_0x51d87d);}else{if(_0x51d87d[_0xe2e3('0x19')]){delete _0x51d87d[_0xe2e3('0x19')];}_0x5904af[_0xe2e3('0x1a')](0x1f4)[_0xe2e3('0x1b')](_0x51d87d);}};}function checkError(){return function(_0x242ace){if(!_0x242ace){throw new RangeError(_0xe2e3('0x1c'));}return _0x242ace;};}function respondWithRpcPromise(_0x261e9f,_0x976fb3){return new BPromise(function(_0x266d05,_0x412483){var _0x451f84=amiClient;return _0x451f84[_0xe2e3('0x1d')](_0x261e9f,_0x976fb3)[_0xe2e3('0x1e')](function(_0x104342){if(_0x104342['error']){if(_0x104342[_0xe2e3('0x18')][_0xe2e3('0x1f')]===0x1f4){return _0x412483(_0x104342[_0xe2e3('0x18')][_0xe2e3('0x20')]);}return _0x266d05(_0x104342[_0xe2e3('0x18')][_0xe2e3('0x20')]);}else{_0x266d05(_0x104342[_0xe2e3('0x21')]);}})[_0xe2e3('0x22')](function(_0x112ec3){_0x412483(_0x112ec3);});});}function getAgent(_0x1966f1){return db['User'][_0xe2e3('0x23')]({'where':{'id':_0x1966f1,'role':_0xe2e3('0x24')}})[_0xe2e3('0x1e')](checkError());}function getAgentCheckSession(_0x4736a5,_0x2d0a5c){return new BPromise(function(_0x147ca5,_0x7c77a2){var _0x2979fe=respondWithRpcPromise('VoiceChannels');var _0x1bbb5e=getAgent(_0x4736a5);Promise[_0xe2e3('0x25')]([_0x2979fe,_0x1bbb5e])[_0xe2e3('0x1e')](function(_0x578bd8){var _0x14fa29=_0x578bd8[0x0];var _0x12cca4=_0x578bd8[0x1];var _0x5076a6=_['filter'](_0x14fa29[_0xe2e3('0x26')],function(_0x45e2db){return _0x45e2db[_0xe2e3('0x27')]==_0x12cca4['id']&&_0x45e2db[_0xe2e3('0x28')]==_0x2d0a5c;});if(_0x5076a6[_0xe2e3('0x29')]==0x1){_0x147ca5(_0x12cca4);}else{_0x7c77a2(new RangeError(_0xe2e3('0x2a')+_0x2d0a5c+_0xe2e3('0x2b')));}});});}exports['originate']=function(_0x56e6e8,_0x67a9e3){logger['info']('originate\x20fired:',_0x56e6e8[_0xe2e3('0x2c')]);var _0x537453=originateValidation[_0xe2e3('0xe')](_0x56e6e8[_0xe2e3('0x2c')]);if(_0x537453[_0xe2e3('0x29')]>0x0){return _0x67a9e3[_0xe2e3('0x1a')](0x190)[_0xe2e3('0x2d')](_0x537453);}var _0x2e9001=_0x56e6e8[_0xe2e3('0x2c')][_0xe2e3('0x2e')];var _0x118137=_0x56e6e8[_0xe2e3('0x2c')][_0xe2e3('0x2f')];var _0x26b4b9=_0x56e6e8[_0xe2e3('0x2c')][_0xe2e3('0x30')];var _0x41ad56=_0x56e6e8[_0xe2e3('0x2c')][_0xe2e3('0x31')];return getAgent(_0x2e9001)[_0xe2e3('0x1e')](function(_0x2a1baa){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x2a1baa[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x2a1baa[_0xe2e3('0x19')]),'webbar:originate',{'callNumber':_0x118137,'callerId':_0x26b4b9,'callbackUrl':_0x41ad56});return _0x67a9e3['status'](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':_0xe2e3('0x35')});})[_0xe2e3('0x22')](handleError(_0x67a9e3));};exports[_0xe2e3('0x36')]=function(_0x1e57f2,_0x1a823e){logger['info'](_0xe2e3('0x37'),_0x1e57f2[_0xe2e3('0x2c')]);var _0x5bd17b=hangupValidation[_0xe2e3('0xe')](_0x1e57f2[_0xe2e3('0x2c')]);if(_0x5bd17b['length']>0x0){return _0x1a823e[_0xe2e3('0x1a')](0x190)[_0xe2e3('0x2d')](_0x5bd17b);}var _0x450ee9=_0x1e57f2[_0xe2e3('0x2c')]['userId'];var _0x436b63=_0x1e57f2[_0xe2e3('0x2c')][_0xe2e3('0x28')];return getAgent(_0x450ee9)[_0xe2e3('0x1e')](function(_0x2c4120){logger['info']('entityFound:',_0x2c4120[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x2c4120[_0xe2e3('0x19')]),_0xe2e3('0x38'),{'sessionId':_0x436b63});return _0x1a823e[_0xe2e3('0x1a')](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':_0xe2e3('0x39')});})[_0xe2e3('0x22')](handleError(_0x1a823e));};exports['answer']=function(_0x33e7d3,_0x2df7d5){logger[_0xe2e3('0x14')]('answer\x20fired:',_0x33e7d3[_0xe2e3('0x2c')]);var _0x27781e=answerValidation[_0xe2e3('0xe')](_0x33e7d3['body']);if(_0x27781e['length']>0x0){return _0x2df7d5[_0xe2e3('0x1a')](0x190)['json'](_0x27781e);}var _0x5e8298=_0x33e7d3[_0xe2e3('0x2c')][_0xe2e3('0x2e')];var _0x39cd14=_0x33e7d3[_0xe2e3('0x2c')][_0xe2e3('0x28')];return getAgent(_0x5e8298)[_0xe2e3('0x1e')](function(_0x5696d9){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x5696d9[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x5696d9[_0xe2e3('0x19')]),_0xe2e3('0x3a'),{'sessionId':_0x39cd14});return _0x2df7d5[_0xe2e3('0x1a')](0xc8)['json']({'error':![],'message':_0xe2e3('0x3b')});})[_0xe2e3('0x22')](handleError(_0x2df7d5));};exports[_0xe2e3('0x3c')]=function(_0x13d73d,_0x573d07){logger[_0xe2e3('0x14')](_0xe2e3('0x3d'),_0x13d73d[_0xe2e3('0x2c')]);var _0xa3371f=holdValidation[_0xe2e3('0xe')](_0x13d73d[_0xe2e3('0x2c')]);if(_0xa3371f[_0xe2e3('0x29')]>0x0){return _0x573d07[_0xe2e3('0x1a')](0x190)['json'](_0xa3371f);}var _0x677ae0=_0x13d73d[_0xe2e3('0x2c')]['userId'];var _0x3ee08f=_0x13d73d['body'][_0xe2e3('0x28')];return getAgent(_0x677ae0)[_0xe2e3('0x1e')](function(_0x2b4ddd){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x2b4ddd[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x2b4ddd[_0xe2e3('0x19')]),_0xe2e3('0x3e'),{'sessionId':_0x3ee08f});return _0x573d07[_0xe2e3('0x1a')](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':'hold\x20executed!'});})[_0xe2e3('0x22')](handleError(_0x573d07));};exports['unhold']=function(_0x485bb3,_0x46d994){logger[_0xe2e3('0x14')](_0xe2e3('0x3f'),_0x485bb3[_0xe2e3('0x2c')]);var _0x38802b=unholdValidation[_0xe2e3('0xe')](_0x485bb3['body']);if(_0x38802b[_0xe2e3('0x29')]>0x0){return _0x46d994[_0xe2e3('0x1a')](0x190)[_0xe2e3('0x2d')](_0x38802b);}var _0x13dc06=_0x485bb3[_0xe2e3('0x2c')]['userId'];var _0x1eb1b5=_0x485bb3[_0xe2e3('0x2c')][_0xe2e3('0x28')];return getAgent(_0x13dc06)['then'](function(_0x70144){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x70144['name']);emit(util['format']('user:%s',_0x70144[_0xe2e3('0x19')]),_0xe2e3('0x40'),{'sessionId':_0x1eb1b5});return _0x46d994[_0xe2e3('0x1a')](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':_0xe2e3('0x41')});})[_0xe2e3('0x22')](handleError(_0x46d994));};exports[_0xe2e3('0x42')]=function(_0xfbc148,_0x5342e4){logger['info'](_0xe2e3('0x43'),_0x5342e4['body']);var _0x240cb1=callsValidation['validate'](_0xfbc148['body']);if(_0x240cb1[_0xe2e3('0x29')]>0x0){return _0x5342e4['status'](0x190)[_0xe2e3('0x2d')](_0x240cb1);}var _0x199465=_0xfbc148[_0xe2e3('0x2c')][_0xe2e3('0x2e')];var _0x1f9221=respondWithRpcPromise('VoiceChannels');var _0x2777d3=getAgent(_0x199465);return Promise[_0xe2e3('0x25')]([_0x1f9221,_0x2777d3])[_0xe2e3('0x1e')](function(_0x20712b){var _0x43d4ce=_0x20712b[0x0];var _0x1592d1=_0x20712b[0x1];var _0x29dabd=_[_0xe2e3('0x44')](_0x43d4ce[_0xe2e3('0x26')],function(_0x3833bc){return _0x3833bc[_0xe2e3('0x27')]==_0x1592d1['id'];});return _0x5342e4['status'](0xc8)['json']({'count':_0x29dabd[_0xe2e3('0x29')],'rows':_0x29dabd});})[_0xe2e3('0x22')](handleError(_0x5342e4));};exports['conference']=function(_0x564b55,_0x53dffe){logger[_0xe2e3('0x14')](_0xe2e3('0x45'),_0x564b55['body']);var _0x517f2b=conferenceValidation[_0xe2e3('0xe')](_0x564b55[_0xe2e3('0x2c')]);if(_0x517f2b[_0xe2e3('0x29')]>0x0){return _0x53dffe[_0xe2e3('0x1a')](0x190)[_0xe2e3('0x2d')](_0x517f2b);}var _0x1d3673=_0x564b55['body']['userId'];return getAgent(_0x1d3673)['then'](function(_0x28b858){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x28b858[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x28b858[_0xe2e3('0x19')]),_0xe2e3('0x46'));return _0x53dffe[_0xe2e3('0x1a')](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':_0xe2e3('0x47')});})['catch'](handleError(_0x53dffe));};exports[_0xe2e3('0x48')]=function(_0x25ae98,_0x36f86e){logger['info'](_0xe2e3('0x49'),_0x25ae98[_0xe2e3('0x2c')]);var _0x17616f=transferValidation[_0xe2e3('0xe')](_0x25ae98[_0xe2e3('0x2c')]);if(_0x17616f[_0xe2e3('0x29')]>0x0){return _0x36f86e[_0xe2e3('0x1a')](0x190)[_0xe2e3('0x2d')](_0x17616f);}var _0x1aa8ea=_0x25ae98['body']['userId'];var _0x6b783f=_0x25ae98[_0xe2e3('0x2c')]['sessionId'];var _0x3036ef=_0x25ae98[_0xe2e3('0x2c')][_0xe2e3('0x4a')];return getAgent(_0x1aa8ea)['then'](function(_0x2ecab9){logger[_0xe2e3('0x14')](_0xe2e3('0x32'),_0x2ecab9[_0xe2e3('0x19')]);emit(util[_0xe2e3('0x33')](_0xe2e3('0x34'),_0x2ecab9[_0xe2e3('0x19')]),'webbar:transfer',{'sessionId':_0x6b783f,'transferNumber':_0x3036ef});return _0x36f86e[_0xe2e3('0x1a')](0xc8)[_0xe2e3('0x2d')]({'error':![],'message':_0xe2e3('0x4b')});})['catch'](handleError(_0x36f86e));};