43e1e1a25c063f6d5b6ae5a97cdd49bfe3958974
[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 _0x2f0d=['calls\x20fired:','all','rows','conference\x20fired:','webbar:conference','conference\x20executed!','transfer','transferNumber','webbar:transfer','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','http','../../config/logger','webbarapi','ioredis','defaults','redis','localhost','socket.io-emitter','validate','userId\x20is\x20required','string','callNumber\x20is\x20required','number','info','stringify','log','handleError:','error','stack','name','status','send','NotFound','request','then','code','message','result','catch','User','findOne','agent','VoiceChannels','filter','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','originate\x20fired:','body','json','userId','callNumber','callerId','callbackUrl','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','hangup\x20fired:','webbar:hangup','hangup\x20executed!','answer','answer\x20fired:','answer\x20executed!','hold','webbar:hold','webbar:unhold','unhold\x20executed!'];(function(_0x199e13,_0x2db344){var _0x3d3edc=function(_0x1ec004){while(--_0x1ec004){_0x199e13['push'](_0x199e13['shift']());}};_0x3d3edc(++_0x2db344);}(_0x2f0d,0xa8));var _0xd2f0=function(_0x5058fa,_0x47ac78){_0x5058fa=_0x5058fa-0x0;var _0x52df04=_0x2f0d[_0x5058fa];return _0x52df04;};'use strict';var path=require(_0xd2f0('0x0'));var fs=require('fs');var _=require(_0xd2f0('0x1'));var db=require(_0xd2f0('0x2'))['db'];var config=require(_0xd2f0('0x3'));var util=require(_0xd2f0('0x4'));var BPromise=require(_0xd2f0('0x5'));var jayson=require(_0xd2f0('0x6'));var amiClient=jayson['client'][_0xd2f0('0x7')]({'port':0x232a});var logger=require(_0xd2f0('0x8'))(_0xd2f0('0x9'));var Redis=require(_0xd2f0('0xa'));config['redis']=_[_0xd2f0('0xb')](config[_0xd2f0('0xc')],{'host':_0xd2f0('0xd'),'port':0x18eb});var io=require(_0xd2f0('0xe'))(new Redis(config[_0xd2f0('0xc')]));var Schema=require(_0xd2f0('0xf'));var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd2f0('0x10')]},'callNumber':{'type':_0xd2f0('0x11'),'required':[!![],_0xd2f0('0x12')]},'callerId':{'type':_0xd2f0('0x11')},'callbackUrl':{'type':_0xd2f0('0x11')}});var hangupValidation=new Schema({'userId':{'type':_0xd2f0('0x13'),'required':[!![],_0xd2f0('0x10')]},'sessionId':{'type':_0xd2f0('0x11'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0xd2f0('0x13'),'required':[!![],_0xd2f0('0x10')]},'sessionId':{'type':_0xd2f0('0x11'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0xd2f0('0x13'),'required':[!![],_0xd2f0('0x10')]},'sessionId':{'type':_0xd2f0('0x11'),'required':[!![],'sessionId\x20is\x20required']},'transferNumber':{'type':'string','required':[!![],'transferNumber\x20is\x20required']}});var holdValidation=new Schema({'userId':{'type':_0xd2f0('0x13'),'required':[!![],_0xd2f0('0x10')]},'sessionId':{'type':_0xd2f0('0x11'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd2f0('0x10')]},'sessionId':{'type':'string','required':![]}});var callsValidation=new Schema({'userId':{'type':_0xd2f0('0x13'),'required':[!![],_0xd2f0('0x10')]}});var conferenceValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']}});function emit(_0x44c306,_0x438a29,_0x4ee456){logger[_0xd2f0('0x14')](_0x44c306,_0x438a29,JSON[_0xd2f0('0x15')](_0x4ee456));io['to'](_0x44c306)['emit'](_0x438a29,_0x4ee456);}function handleError(_0x1ad52e){return function(_0x4d29ef){console[_0xd2f0('0x16')](_0xd2f0('0x17'),_0x4d29ef,_0x4d29ef instanceof RangeError);logger[_0xd2f0('0x18')](_0x4d29ef[_0xd2f0('0x19')]);if(_0x4d29ef instanceof RangeError){if(_0x4d29ef[_0xd2f0('0x1a')]){delete _0x4d29ef['name'];}_0x1ad52e[_0xd2f0('0x1b')](0x194)[_0xd2f0('0x1c')](_0x4d29ef);}else{if(_0x4d29ef[_0xd2f0('0x1a')]){delete _0x4d29ef[_0xd2f0('0x1a')];}_0x1ad52e[_0xd2f0('0x1b')](0x1f4)[_0xd2f0('0x1c')](_0x4d29ef);}};}function checkError(){return function(_0x38348a){if(!_0x38348a){throw new RangeError(_0xd2f0('0x1d'));}return _0x38348a;};}function respondWithRpcPromise(_0x40d753,_0x27a97a){return new BPromise(function(_0x2bd71a,_0x3d6bf5){var _0x5bbfef=amiClient;return _0x5bbfef[_0xd2f0('0x1e')](_0x40d753,_0x27a97a)[_0xd2f0('0x1f')](function(_0x1b3790){if(_0x1b3790[_0xd2f0('0x18')]){if(_0x1b3790[_0xd2f0('0x18')][_0xd2f0('0x20')]===0x1f4){return _0x3d6bf5(_0x1b3790[_0xd2f0('0x18')][_0xd2f0('0x21')]);}return _0x2bd71a(_0x1b3790['error'][_0xd2f0('0x21')]);}else{_0x2bd71a(_0x1b3790[_0xd2f0('0x22')]);}})[_0xd2f0('0x23')](function(_0x5d22dc){_0x3d6bf5(_0x5d22dc);});});}function getAgent(_0x59036b){return db[_0xd2f0('0x24')][_0xd2f0('0x25')]({'where':{'id':_0x59036b,'role':_0xd2f0('0x26')}})[_0xd2f0('0x1f')](checkError());}function getAgentCheckSession(_0x3009e7,_0x5cae63){return new BPromise(function(_0x423cd4,_0x30369f){var _0xe0c654=respondWithRpcPromise(_0xd2f0('0x27'));var _0x5ae21a=getAgent(_0x3009e7);Promise['all']([_0xe0c654,_0x5ae21a])['then'](function(_0x2440a4){var _0x47ab83=_0x2440a4[0x0];var _0x49e525=_0x2440a4[0x1];var _0x36fbac=_[_0xd2f0('0x28')](_0x47ab83['rows'],function(_0x51dee7){return _0x51dee7[_0xd2f0('0x29')]==_0x49e525['id']&&_0x51dee7[_0xd2f0('0x2a')]==_0x5cae63;});if(_0x36fbac[_0xd2f0('0x2b')]==0x1){_0x423cd4(_0x49e525);}else{_0x30369f(new RangeError(_0xd2f0('0x2c')+_0x5cae63+_0xd2f0('0x2d')));}});});}exports['originate']=function(_0x2b99c0,_0x478c0d){logger[_0xd2f0('0x14')](_0xd2f0('0x2e'),_0x2b99c0[_0xd2f0('0x2f')]);var _0x436fd5=originateValidation[_0xd2f0('0xf')](_0x2b99c0[_0xd2f0('0x2f')]);if(_0x436fd5['length']>0x0){return _0x478c0d[_0xd2f0('0x1b')](0x190)[_0xd2f0('0x30')](_0x436fd5);}var _0xbefcb8=_0x2b99c0[_0xd2f0('0x2f')][_0xd2f0('0x31')];var _0x4d9d5c=_0x2b99c0[_0xd2f0('0x2f')][_0xd2f0('0x32')];var _0x4523fe=_0x2b99c0['body'][_0xd2f0('0x33')];var _0x355161=_0x2b99c0[_0xd2f0('0x2f')][_0xd2f0('0x34')];return getAgent(_0xbefcb8)[_0xd2f0('0x1f')](function(_0x2b279b){logger[_0xd2f0('0x14')](_0xd2f0('0x35'),_0x2b279b[_0xd2f0('0x1a')]);emit(util[_0xd2f0('0x36')](_0xd2f0('0x37'),_0x2b279b[_0xd2f0('0x1a')]),_0xd2f0('0x38'),{'callNumber':_0x4d9d5c,'callerId':_0x4523fe,'callbackUrl':_0x355161});return _0x478c0d[_0xd2f0('0x1b')](0xc8)[_0xd2f0('0x30')]({'error':![],'message':_0xd2f0('0x39')});})[_0xd2f0('0x23')](handleError(_0x478c0d));};exports[_0xd2f0('0x3a')]=function(_0x430353,_0x225629){logger[_0xd2f0('0x14')](_0xd2f0('0x3b'),_0x430353[_0xd2f0('0x2f')]);var _0x18521e=hangupValidation[_0xd2f0('0xf')](_0x430353[_0xd2f0('0x2f')]);if(_0x18521e[_0xd2f0('0x2b')]>0x0){return _0x225629['status'](0x190)[_0xd2f0('0x30')](_0x18521e);}var _0x54ef34=_0x430353['body'][_0xd2f0('0x31')];var _0x3cb04c=_0x430353['body'][_0xd2f0('0x2a')];return getAgent(_0x54ef34)[_0xd2f0('0x1f')](function(_0x55f0dd){logger[_0xd2f0('0x14')]('entityFound:',_0x55f0dd[_0xd2f0('0x1a')]);emit(util['format'](_0xd2f0('0x37'),_0x55f0dd[_0xd2f0('0x1a')]),_0xd2f0('0x3c'),{'sessionId':_0x3cb04c});return _0x225629[_0xd2f0('0x1b')](0xc8)[_0xd2f0('0x30')]({'error':![],'message':_0xd2f0('0x3d')});})[_0xd2f0('0x23')](handleError(_0x225629));};exports[_0xd2f0('0x3e')]=function(_0xe3b47e,_0x568a74){logger[_0xd2f0('0x14')](_0xd2f0('0x3f'),_0xe3b47e['body']);var _0x599e93=answerValidation[_0xd2f0('0xf')](_0xe3b47e['body']);if(_0x599e93[_0xd2f0('0x2b')]>0x0){return _0x568a74[_0xd2f0('0x1b')](0x190)['json'](_0x599e93);}var _0xc84a1a=_0xe3b47e[_0xd2f0('0x2f')][_0xd2f0('0x31')];var _0xde08a5=_0xe3b47e[_0xd2f0('0x2f')][_0xd2f0('0x2a')];return getAgent(_0xc84a1a)[_0xd2f0('0x1f')](function(_0x59315f){logger[_0xd2f0('0x14')]('entityFound:',_0x59315f['name']);emit(util[_0xd2f0('0x36')](_0xd2f0('0x37'),_0x59315f[_0xd2f0('0x1a')]),'webbar:answer',{'sessionId':_0xde08a5});return _0x568a74['status'](0xc8)['json']({'error':![],'message':_0xd2f0('0x40')});})[_0xd2f0('0x23')](handleError(_0x568a74));};exports[_0xd2f0('0x41')]=function(_0x2cb698,_0x25e496){logger[_0xd2f0('0x14')]('hold\x20fired:',_0x2cb698[_0xd2f0('0x2f')]);var _0x3aa888=holdValidation[_0xd2f0('0xf')](_0x2cb698[_0xd2f0('0x2f')]);if(_0x3aa888[_0xd2f0('0x2b')]>0x0){return _0x25e496[_0xd2f0('0x1b')](0x190)[_0xd2f0('0x30')](_0x3aa888);}var _0x2fdc02=_0x2cb698[_0xd2f0('0x2f')]['userId'];var _0x32b836=_0x2cb698[_0xd2f0('0x2f')]['sessionId'];return getAgent(_0x2fdc02)[_0xd2f0('0x1f')](function(_0x3ab3b2){logger[_0xd2f0('0x14')](_0xd2f0('0x35'),_0x3ab3b2['name']);emit(util[_0xd2f0('0x36')](_0xd2f0('0x37'),_0x3ab3b2['name']),_0xd2f0('0x42'),{'sessionId':_0x32b836});return _0x25e496[_0xd2f0('0x1b')](0xc8)[_0xd2f0('0x30')]({'error':![],'message':'hold\x20executed!'});})[_0xd2f0('0x23')](handleError(_0x25e496));};exports['unhold']=function(_0x1b43d6,_0x117821){logger['info']('unhold\x20fired:',_0x1b43d6[_0xd2f0('0x2f')]);var _0x2f9b89=unholdValidation[_0xd2f0('0xf')](_0x1b43d6['body']);if(_0x2f9b89[_0xd2f0('0x2b')]>0x0){return _0x117821['status'](0x190)['json'](_0x2f9b89);}var _0x183f29=_0x1b43d6[_0xd2f0('0x2f')]['userId'];var _0x45dc36=_0x1b43d6[_0xd2f0('0x2f')][_0xd2f0('0x2a')];return getAgent(_0x183f29)['then'](function(_0xf941a6){logger['info'](_0xd2f0('0x35'),_0xf941a6['name']);emit(util[_0xd2f0('0x36')](_0xd2f0('0x37'),_0xf941a6['name']),_0xd2f0('0x43'),{'sessionId':_0x45dc36});return _0x117821[_0xd2f0('0x1b')](0xc8)['json']({'error':![],'message':_0xd2f0('0x44')});})[_0xd2f0('0x23')](handleError(_0x117821));};exports['calls']=function(_0x2ed106,_0x150996){logger['info'](_0xd2f0('0x45'),_0x150996[_0xd2f0('0x2f')]);var _0x5c5700=callsValidation[_0xd2f0('0xf')](_0x2ed106[_0xd2f0('0x2f')]);if(_0x5c5700['length']>0x0){return _0x150996['status'](0x190)['json'](_0x5c5700);}var _0x246e41=_0x2ed106[_0xd2f0('0x2f')][_0xd2f0('0x31')];var _0x1588fa=respondWithRpcPromise('VoiceChannels');var _0xb18dc6=getAgent(_0x246e41);return Promise[_0xd2f0('0x46')]([_0x1588fa,_0xb18dc6])[_0xd2f0('0x1f')](function(_0x2f9e81){var _0x43660d=_0x2f9e81[0x0];var _0x2e7247=_0x2f9e81[0x1];var _0x33987a=_[_0xd2f0('0x28')](_0x43660d[_0xd2f0('0x47')],function(_0x35a112){return _0x35a112[_0xd2f0('0x29')]==_0x2e7247['id'];});return _0x150996[_0xd2f0('0x1b')](0xc8)[_0xd2f0('0x30')]({'count':_0x33987a[_0xd2f0('0x2b')],'rows':_0x33987a});})['catch'](handleError(_0x150996));};exports['conference']=function(_0xf37908,_0x592238){logger['info'](_0xd2f0('0x48'),_0xf37908[_0xd2f0('0x2f')]);var _0x1963e7=conferenceValidation[_0xd2f0('0xf')](_0xf37908[_0xd2f0('0x2f')]);if(_0x1963e7[_0xd2f0('0x2b')]>0x0){return _0x592238[_0xd2f0('0x1b')](0x190)['json'](_0x1963e7);}var _0x1517bc=_0xf37908[_0xd2f0('0x2f')][_0xd2f0('0x31')];return getAgent(_0x1517bc)[_0xd2f0('0x1f')](function(_0x59fb2d){logger[_0xd2f0('0x14')](_0xd2f0('0x35'),_0x59fb2d[_0xd2f0('0x1a')]);emit(util['format'](_0xd2f0('0x37'),_0x59fb2d['name']),_0xd2f0('0x49'));return _0x592238[_0xd2f0('0x1b')](0xc8)[_0xd2f0('0x30')]({'error':![],'message':_0xd2f0('0x4a')});})[_0xd2f0('0x23')](handleError(_0x592238));};exports[_0xd2f0('0x4b')]=function(_0x4337ff,_0xfa96c1){logger[_0xd2f0('0x14')]('transfer\x20fired:',_0x4337ff[_0xd2f0('0x2f')]);var _0x3011c1=transferValidation[_0xd2f0('0xf')](_0x4337ff[_0xd2f0('0x2f')]);if(_0x3011c1['length']>0x0){return _0xfa96c1['status'](0x190)[_0xd2f0('0x30')](_0x3011c1);}var _0x3ce53e=_0x4337ff[_0xd2f0('0x2f')][_0xd2f0('0x31')];var _0x43c829=_0x4337ff[_0xd2f0('0x2f')][_0xd2f0('0x2a')];var _0x39eafd=_0x4337ff[_0xd2f0('0x2f')][_0xd2f0('0x4c')];return getAgent(_0x3ce53e)['then'](function(_0x454fc1){logger['info'](_0xd2f0('0x35'),_0x454fc1[_0xd2f0('0x1a')]);emit(util[_0xd2f0('0x36')]('user:%s',_0x454fc1[_0xd2f0('0x1a')]),_0xd2f0('0x4d'),{'sessionId':_0x43c829,'transferNumber':_0x39eafd});return _0xfa96c1[_0xd2f0('0x1b')](0xc8)['json']({'error':![],'message':_0xd2f0('0x4e')});})[_0xd2f0('0x23')](handleError(_0xfa96c1));};