542fb043ccd7d23b153ae93c2b414d2fac28d98a
[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 _0x6550=['agent','all','filter','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','info','originate\x20fired:','body','json','callNumber','callerId','entityFound:','format','user:%s','originate\x20executed!','hangup\x20fired:','userId','answer','answer\x20fired:','webbar:answer','answer\x20executed!','hold','webbar:hold','hold\x20executed!','unhold','webbar:unhold','unhold\x20executed!','calls\x20fired:','VoiceChannels','rows','conference','webbar:conference','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','transfer\x20executed!','lodash','../../config/environment','util','bluebird','jayson/promise','http','../../config/logger','ioredis','defaults','redis','localhost','validate','number','userId\x20is\x20required','string','callNumber\x20is\x20required','stringify','emit','log','handleError:','error','name','status','NotFound','request','then','code','message','catch','findOne'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0x6550,0xb4));var _0x0655=function(_0x112d9c,_0x470634){_0x112d9c=_0x112d9c-0x0;var _0x3a7a63=_0x6550[_0x112d9c];return _0x3a7a63;};'use strict';var path=require('path');var fs=require('fs');var _=require(_0x0655('0x0'));var db=require('../../mysqldb')['db'];var config=require(_0x0655('0x1'));var util=require(_0x0655('0x2'));var BPromise=require(_0x0655('0x3'));var jayson=require(_0x0655('0x4'));var amiClient=jayson['client'][_0x0655('0x5')]({'port':0x232a});var logger=require(_0x0655('0x6'))('webbarapi');var Redis=require(_0x0655('0x7'));config['redis']=_[_0x0655('0x8')](config[_0x0655('0x9')],{'host':_0x0655('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x0655('0x9')]));var Schema=require(_0x0655('0xb'));var originateValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]},'callNumber':{'type':_0x0655('0xe'),'required':[!![],_0x0655('0xf')]},'callerId':{'type':_0x0655('0xe')},'callbackUrl':{'type':_0x0655('0xe')}});var hangupValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x0655('0xe'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]},'sessionId':{'type':_0x0655('0xe'),'required':[!![],'sessionId\x20is\x20required']},'transferNumber':{'type':_0x0655('0xe'),'required':[!![],'transferNumber\x20is\x20required']}});var holdValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]},'sessionId':{'type':'string','required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]},'sessionId':{'type':_0x0655('0xe'),'required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0x0655('0xd')]}});var conferenceValidation=new Schema({'userId':{'type':_0x0655('0xc'),'required':[!![],_0x0655('0xd')]}});function emit(_0xc88f69,_0x45832d,_0x29e64e){logger['info'](_0xc88f69,_0x45832d,JSON[_0x0655('0x10')](_0x29e64e));io['to'](_0xc88f69)[_0x0655('0x11')](_0x45832d,_0x29e64e);}function handleError(_0x25e9f9){return function(_0x3f9cb8){console[_0x0655('0x12')](_0x0655('0x13'),_0x3f9cb8,_0x3f9cb8 instanceof RangeError);logger[_0x0655('0x14')](_0x3f9cb8['stack']);if(_0x3f9cb8 instanceof RangeError){if(_0x3f9cb8[_0x0655('0x15')]){delete _0x3f9cb8[_0x0655('0x15')];}_0x25e9f9[_0x0655('0x16')](0x194)['send'](_0x3f9cb8);}else{if(_0x3f9cb8[_0x0655('0x15')]){delete _0x3f9cb8[_0x0655('0x15')];}_0x25e9f9[_0x0655('0x16')](0x1f4)['send'](_0x3f9cb8);}};}function checkError(){return function(_0x3177b0){if(!_0x3177b0){throw new RangeError(_0x0655('0x17'));}return _0x3177b0;};}function respondWithRpcPromise(_0x18e21f,_0xde8dff){return new BPromise(function(_0x57925e,_0x54a85c){var _0x5c1b20=amiClient;return _0x5c1b20[_0x0655('0x18')](_0x18e21f,_0xde8dff)[_0x0655('0x19')](function(_0x1bce27){if(_0x1bce27[_0x0655('0x14')]){if(_0x1bce27[_0x0655('0x14')][_0x0655('0x1a')]===0x1f4){return _0x54a85c(_0x1bce27['error'][_0x0655('0x1b')]);}return _0x57925e(_0x1bce27[_0x0655('0x14')]['message']);}else{_0x57925e(_0x1bce27['result']);}})[_0x0655('0x1c')](function(_0x4ba931){_0x54a85c(_0x4ba931);});});}function getAgent(_0x187e6c){return db['User'][_0x0655('0x1d')]({'where':{'id':_0x187e6c,'role':_0x0655('0x1e')}})['then'](checkError());}function getAgentCheckSession(_0x3bac55,_0x4d22b6){return new BPromise(function(_0x2def5c,_0x26c58f){var _0x4a7212=respondWithRpcPromise('VoiceChannels');var _0x2907de=getAgent(_0x3bac55);Promise[_0x0655('0x1f')]([_0x4a7212,_0x2907de])[_0x0655('0x19')](function(_0x48bf5e){var _0x204db8=_0x48bf5e[0x0];var _0x5c9eff=_0x48bf5e[0x1];var _0x5d0400=_[_0x0655('0x20')](_0x204db8['rows'],function(_0x307f0c){return _0x307f0c[_0x0655('0x21')]==_0x5c9eff['id']&&_0x307f0c[_0x0655('0x22')]==_0x4d22b6;});if(_0x5d0400[_0x0655('0x23')]==0x1){_0x2def5c(_0x5c9eff);}else{_0x26c58f(new RangeError(_0x0655('0x24')+_0x4d22b6+_0x0655('0x25')));}});});}exports['originate']=function(_0x3dcbed,_0x16a987){logger[_0x0655('0x26')](_0x0655('0x27'),_0x3dcbed[_0x0655('0x28')]);var _0x4148c7=originateValidation[_0x0655('0xb')](_0x3dcbed['body']);if(_0x4148c7[_0x0655('0x23')]>0x0){return _0x16a987['status'](0x190)[_0x0655('0x29')](_0x4148c7);}var _0x2da329=_0x3dcbed['body']['userId'];var _0x491250=_0x3dcbed[_0x0655('0x28')][_0x0655('0x2a')];var _0x39839f=_0x3dcbed['body'][_0x0655('0x2b')];var _0xb75def=_0x3dcbed['body']['callbackUrl'];return getAgent(_0x2da329)[_0x0655('0x19')](function(_0x580831){logger['info'](_0x0655('0x2c'),_0x580831[_0x0655('0x15')]);emit(util[_0x0655('0x2d')](_0x0655('0x2e'),_0x580831[_0x0655('0x15')]),'webbar:originate',{'callNumber':_0x491250,'callerId':_0x39839f,'callbackUrl':_0xb75def});return _0x16a987[_0x0655('0x16')](0xc8)['json']({'error':![],'message':_0x0655('0x2f')});})[_0x0655('0x1c')](handleError(_0x16a987));};exports['hangup']=function(_0x547936,_0x267622){logger[_0x0655('0x26')](_0x0655('0x30'),_0x547936[_0x0655('0x28')]);var _0x440d1b=hangupValidation['validate'](_0x547936['body']);if(_0x440d1b['length']>0x0){return _0x267622[_0x0655('0x16')](0x190)[_0x0655('0x29')](_0x440d1b);}var _0x528486=_0x547936[_0x0655('0x28')][_0x0655('0x31')];var _0x258c95=_0x547936[_0x0655('0x28')][_0x0655('0x22')];return getAgent(_0x528486)[_0x0655('0x19')](function(_0x7cccda){logger['info'](_0x0655('0x2c'),_0x7cccda[_0x0655('0x15')]);emit(util[_0x0655('0x2d')]('user:%s',_0x7cccda[_0x0655('0x15')]),'webbar:hangup',{'sessionId':_0x258c95});return _0x267622[_0x0655('0x16')](0xc8)['json']({'error':![],'message':'hangup\x20executed!'});})[_0x0655('0x1c')](handleError(_0x267622));};exports[_0x0655('0x32')]=function(_0x54b344,_0x336dfd){logger[_0x0655('0x26')](_0x0655('0x33'),_0x54b344[_0x0655('0x28')]);var _0x2e37af=answerValidation['validate'](_0x54b344[_0x0655('0x28')]);if(_0x2e37af['length']>0x0){return _0x336dfd[_0x0655('0x16')](0x190)[_0x0655('0x29')](_0x2e37af);}var _0x5efb38=_0x54b344[_0x0655('0x28')][_0x0655('0x31')];var _0x5c9054=_0x54b344['body'][_0x0655('0x22')];return getAgent(_0x5efb38)[_0x0655('0x19')](function(_0x2d0586){logger[_0x0655('0x26')](_0x0655('0x2c'),_0x2d0586[_0x0655('0x15')]);emit(util[_0x0655('0x2d')](_0x0655('0x2e'),_0x2d0586[_0x0655('0x15')]),_0x0655('0x34'),{'sessionId':_0x5c9054});return _0x336dfd[_0x0655('0x16')](0xc8)[_0x0655('0x29')]({'error':![],'message':_0x0655('0x35')});})[_0x0655('0x1c')](handleError(_0x336dfd));};exports[_0x0655('0x36')]=function(_0x3465e9,_0x214e25){logger[_0x0655('0x26')]('hold\x20fired:',_0x3465e9[_0x0655('0x28')]);var _0x1d163a=holdValidation[_0x0655('0xb')](_0x3465e9[_0x0655('0x28')]);if(_0x1d163a['length']>0x0){return _0x214e25[_0x0655('0x16')](0x190)[_0x0655('0x29')](_0x1d163a);}var _0xf33127=_0x3465e9[_0x0655('0x28')][_0x0655('0x31')];var _0x80c036=_0x3465e9[_0x0655('0x28')][_0x0655('0x22')];return getAgent(_0xf33127)[_0x0655('0x19')](function(_0x90b458){logger[_0x0655('0x26')](_0x0655('0x2c'),_0x90b458[_0x0655('0x15')]);emit(util[_0x0655('0x2d')](_0x0655('0x2e'),_0x90b458[_0x0655('0x15')]),_0x0655('0x37'),{'sessionId':_0x80c036});return _0x214e25[_0x0655('0x16')](0xc8)[_0x0655('0x29')]({'error':![],'message':_0x0655('0x38')});})[_0x0655('0x1c')](handleError(_0x214e25));};exports[_0x0655('0x39')]=function(_0x759a51,_0x36434a){logger[_0x0655('0x26')]('unhold\x20fired:',_0x759a51[_0x0655('0x28')]);var _0x4fbb22=unholdValidation[_0x0655('0xb')](_0x759a51['body']);if(_0x4fbb22[_0x0655('0x23')]>0x0){return _0x36434a[_0x0655('0x16')](0x190)[_0x0655('0x29')](_0x4fbb22);}var _0x8f8f19=_0x759a51[_0x0655('0x28')]['userId'];var _0x368be0=_0x759a51[_0x0655('0x28')]['sessionId'];return getAgent(_0x8f8f19)[_0x0655('0x19')](function(_0x27de7b){logger[_0x0655('0x26')]('entityFound:',_0x27de7b[_0x0655('0x15')]);emit(util[_0x0655('0x2d')]('user:%s',_0x27de7b['name']),_0x0655('0x3a'),{'sessionId':_0x368be0});return _0x36434a[_0x0655('0x16')](0xc8)[_0x0655('0x29')]({'error':![],'message':_0x0655('0x3b')});})[_0x0655('0x1c')](handleError(_0x36434a));};exports['calls']=function(_0xf018d6,_0x530276){logger[_0x0655('0x26')](_0x0655('0x3c'),_0x530276[_0x0655('0x28')]);var _0x589fc3=callsValidation[_0x0655('0xb')](_0xf018d6[_0x0655('0x28')]);if(_0x589fc3[_0x0655('0x23')]>0x0){return _0x530276['status'](0x190)[_0x0655('0x29')](_0x589fc3);}var _0x58f7e7=_0xf018d6[_0x0655('0x28')][_0x0655('0x31')];var _0x2416e0=respondWithRpcPromise(_0x0655('0x3d'));var _0x51422a=getAgent(_0x58f7e7);return Promise[_0x0655('0x1f')]([_0x2416e0,_0x51422a])[_0x0655('0x19')](function(_0x36cb69){var _0x3be09d=_0x36cb69[0x0];var _0x343c81=_0x36cb69[0x1];var _0x5c4014=_[_0x0655('0x20')](_0x3be09d[_0x0655('0x3e')],function(_0x8a7db8){return _0x8a7db8[_0x0655('0x21')]==_0x343c81['id'];});return _0x530276[_0x0655('0x16')](0xc8)[_0x0655('0x29')]({'count':_0x5c4014[_0x0655('0x23')],'rows':_0x5c4014});})[_0x0655('0x1c')](handleError(_0x530276));};exports[_0x0655('0x3f')]=function(_0x2abedc,_0x5f3dda){logger[_0x0655('0x26')]('conference\x20fired:',_0x2abedc[_0x0655('0x28')]);var _0x23f666=conferenceValidation[_0x0655('0xb')](_0x2abedc[_0x0655('0x28')]);if(_0x23f666[_0x0655('0x23')]>0x0){return _0x5f3dda[_0x0655('0x16')](0x190)['json'](_0x23f666);}var _0x480a02=_0x2abedc['body']['userId'];return getAgent(_0x480a02)[_0x0655('0x19')](function(_0x487198){logger[_0x0655('0x26')](_0x0655('0x2c'),_0x487198['name']);emit(util[_0x0655('0x2d')](_0x0655('0x2e'),_0x487198['name']),_0x0655('0x40'));return _0x5f3dda['status'](0xc8)[_0x0655('0x29')]({'error':![],'message':_0x0655('0x41')});})[_0x0655('0x1c')](handleError(_0x5f3dda));};exports[_0x0655('0x42')]=function(_0x2f5100,_0x35a1f4){logger[_0x0655('0x26')](_0x0655('0x43'),_0x2f5100['body']);var _0x3865d2=transferValidation[_0x0655('0xb')](_0x2f5100[_0x0655('0x28')]);if(_0x3865d2[_0x0655('0x23')]>0x0){return _0x35a1f4[_0x0655('0x16')](0x190)[_0x0655('0x29')](_0x3865d2);}var _0x16c558=_0x2f5100[_0x0655('0x28')][_0x0655('0x31')];var _0x4b7dc8=_0x2f5100[_0x0655('0x28')][_0x0655('0x22')];var _0x1f280a=_0x2f5100[_0x0655('0x28')][_0x0655('0x44')];return getAgent(_0x16c558)['then'](function(_0x5960d5){logger['info']('entityFound:',_0x5960d5[_0x0655('0x15')]);emit(util[_0x0655('0x2d')](_0x0655('0x2e'),_0x5960d5[_0x0655('0x15')]),'webbar:transfer',{'sessionId':_0x4b7dc8,'transferNumber':_0x1f280a});return _0x35a1f4[_0x0655('0x16')](0xc8)[_0x0655('0x29')]({'error':![],'message':_0x0655('0x45')});})['catch'](handleError(_0x35a1f4));};