7295acdc99db625f8f74d68e6d85e9be21843e5c
[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 _0x6f0d=['log','handleError:','error','stack','name','status','send','NotFound','request','code','message','result','User','findOne','agent','then','VoiceChannels','filter','rows','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','originate','originate\x20fired:','body','validate','userId','callNumber','callbackUrl','format','json','originate\x20executed!','catch','hangup','entityFound:','user:%s','webbar:hangup','answer','answer\x20fired:','webbar:answer','answer\x20executed!','hold','webbar:hold','hold\x20executed!','unhold\x20fired:','webbar:unhold','calls','calls\x20fired:','all','conference\x20fired:','webbar:conference','conference\x20executed!','transfer','webbar:transfer','lodash','../../mysqldb','../../config/environment','util','jayson/promise','client','http','../../config/logger','webbarapi','redis','localhost','socket.io-emitter','userId\x20is\x20required','string','callNumber\x20is\x20required','number','sessionId\x20is\x20required','transferNumber\x20is\x20required','info','stringify','emit'];(function(_0x54bcd8,_0x56fb44){var _0x421707=function(_0x5980b1){while(--_0x5980b1){_0x54bcd8['push'](_0x54bcd8['shift']());}};_0x421707(++_0x56fb44);}(_0x6f0d,0x16c));var _0xd6f0=function(_0x57108b,_0x4aa61b){_0x57108b=_0x57108b-0x0;var _0xe15f4=_0x6f0d[_0x57108b];return _0xe15f4;};'use strict';var path=require('path');var fs=require('fs');var _=require(_0xd6f0('0x0'));var db=require(_0xd6f0('0x1'))['db'];var config=require(_0xd6f0('0x2'));var util=require(_0xd6f0('0x3'));var BPromise=require('bluebird');var jayson=require(_0xd6f0('0x4'));var amiClient=jayson[_0xd6f0('0x5')][_0xd6f0('0x6')]({'port':0x232a});var logger=require(_0xd6f0('0x7'))(_0xd6f0('0x8'));var Redis=require('ioredis');config[_0xd6f0('0x9')]=_['defaults'](config[_0xd6f0('0x9')],{'host':_0xd6f0('0xa'),'port':0x18eb});var io=require(_0xd6f0('0xb'))(new Redis(config[_0xd6f0('0x9')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd6f0('0xc')]},'callNumber':{'type':_0xd6f0('0xd'),'required':[!![],_0xd6f0('0xe')]},'callerId':{'type':_0xd6f0('0xd')},'callbackUrl':{'type':_0xd6f0('0xd')}});var hangupValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd6f0('0xc')]},'sessionId':{'type':_0xd6f0('0xd'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0xd6f0('0xf'),'required':[!![],_0xd6f0('0xc')]},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0xd6f0('0xf'),'required':[!![],_0xd6f0('0xc')]},'sessionId':{'type':_0xd6f0('0xd'),'required':[!![],_0xd6f0('0x10')]},'transferNumber':{'type':_0xd6f0('0xd'),'required':[!![],_0xd6f0('0x11')]}});var holdValidation=new Schema({'userId':{'type':_0xd6f0('0xf'),'required':[!![],_0xd6f0('0xc')]},'sessionId':{'type':_0xd6f0('0xd'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd6f0('0xc')]},'sessionId':{'type':_0xd6f0('0xd'),'required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd6f0('0xc')]}});var conferenceValidation=new Schema({'userId':{'type':'number','required':[!![],_0xd6f0('0xc')]}});function emit(_0x154e3e,_0x41bd99,_0x472156){logger[_0xd6f0('0x12')](_0x154e3e,_0x41bd99,JSON[_0xd6f0('0x13')](_0x472156));io['to'](_0x154e3e)[_0xd6f0('0x14')](_0x41bd99,_0x472156);}function handleError(_0x29fbb9){return function(_0x2e71bd){console[_0xd6f0('0x15')](_0xd6f0('0x16'),_0x2e71bd,_0x2e71bd instanceof RangeError);logger[_0xd6f0('0x17')](_0x2e71bd[_0xd6f0('0x18')]);if(_0x2e71bd instanceof RangeError){if(_0x2e71bd[_0xd6f0('0x19')]){delete _0x2e71bd[_0xd6f0('0x19')];}_0x29fbb9[_0xd6f0('0x1a')](0x194)['send'](_0x2e71bd);}else{if(_0x2e71bd['name']){delete _0x2e71bd[_0xd6f0('0x19')];}_0x29fbb9[_0xd6f0('0x1a')](0x1f4)[_0xd6f0('0x1b')](_0x2e71bd);}};}function checkError(){return function(_0x54300d){if(!_0x54300d){throw new RangeError(_0xd6f0('0x1c'));}return _0x54300d;};}function respondWithRpcPromise(_0x19a545,_0x557c9b){return new BPromise(function(_0x86dde0,_0x515687){var _0x1ee584=amiClient;return _0x1ee584[_0xd6f0('0x1d')](_0x19a545,_0x557c9b)['then'](function(_0xb9e820){if(_0xb9e820[_0xd6f0('0x17')]){if(_0xb9e820['error'][_0xd6f0('0x1e')]===0x1f4){return _0x515687(_0xb9e820[_0xd6f0('0x17')][_0xd6f0('0x1f')]);}return _0x86dde0(_0xb9e820['error'][_0xd6f0('0x1f')]);}else{_0x86dde0(_0xb9e820[_0xd6f0('0x20')]);}})['catch'](function(_0xcea0ae){_0x515687(_0xcea0ae);});});}function getAgent(_0x551be8){return db[_0xd6f0('0x21')][_0xd6f0('0x22')]({'where':{'id':_0x551be8,'role':_0xd6f0('0x23')}})[_0xd6f0('0x24')](checkError());}function getAgentCheckSession(_0x4101bd,_0x715aab){return new BPromise(function(_0x12d6ec,_0x26799c){var _0x48975d=respondWithRpcPromise(_0xd6f0('0x25'));var _0x1982d3=getAgent(_0x4101bd);Promise['all']([_0x48975d,_0x1982d3])[_0xd6f0('0x24')](function(_0x385947){var _0x27db5e=_0x385947[0x0];var _0xb61222=_0x385947[0x1];var _0x1a3967=_[_0xd6f0('0x26')](_0x27db5e[_0xd6f0('0x27')],function(_0x3151f8){return _0x3151f8[_0xd6f0('0x28')]==_0xb61222['id']&&_0x3151f8[_0xd6f0('0x29')]==_0x715aab;});if(_0x1a3967[_0xd6f0('0x2a')]==0x1){_0x12d6ec(_0xb61222);}else{_0x26799c(new RangeError(_0xd6f0('0x2b')+_0x715aab+_0xd6f0('0x2c')));}});});}exports[_0xd6f0('0x2d')]=function(_0xbdd223,_0x2d7c90){logger[_0xd6f0('0x12')](_0xd6f0('0x2e'),_0xbdd223[_0xd6f0('0x2f')]);var _0x180e5f=originateValidation[_0xd6f0('0x30')](_0xbdd223[_0xd6f0('0x2f')]);if(_0x180e5f['length']>0x0){return _0x2d7c90[_0xd6f0('0x1a')](0x190)['json'](_0x180e5f);}var _0x58d2c5=_0xbdd223[_0xd6f0('0x2f')][_0xd6f0('0x31')];var _0x12a6fa=_0xbdd223[_0xd6f0('0x2f')][_0xd6f0('0x32')];var _0x5c482f=_0xbdd223[_0xd6f0('0x2f')]['callerId'];var _0x27b5b0=_0xbdd223[_0xd6f0('0x2f')][_0xd6f0('0x33')];return getAgent(_0x58d2c5)[_0xd6f0('0x24')](function(_0x518751){logger['info']('entityFound:',_0x518751[_0xd6f0('0x19')]);emit(util[_0xd6f0('0x34')]('user:%s',_0x518751[_0xd6f0('0x19')]),'webbar:originate',{'callNumber':_0x12a6fa,'callerId':_0x5c482f,'callbackUrl':_0x27b5b0});return _0x2d7c90[_0xd6f0('0x1a')](0xc8)[_0xd6f0('0x35')]({'error':![],'message':_0xd6f0('0x36')});})[_0xd6f0('0x37')](handleError(_0x2d7c90));};exports[_0xd6f0('0x38')]=function(_0x3d1280,_0x6b44fa){logger['info']('hangup\x20fired:',_0x3d1280[_0xd6f0('0x2f')]);var _0xf879a6=hangupValidation[_0xd6f0('0x30')](_0x3d1280['body']);if(_0xf879a6['length']>0x0){return _0x6b44fa[_0xd6f0('0x1a')](0x190)[_0xd6f0('0x35')](_0xf879a6);}var _0x39fd07=_0x3d1280[_0xd6f0('0x2f')][_0xd6f0('0x31')];var _0x2b5df5=_0x3d1280[_0xd6f0('0x2f')][_0xd6f0('0x29')];return getAgent(_0x39fd07)['then'](function(_0x1af620){logger[_0xd6f0('0x12')](_0xd6f0('0x39'),_0x1af620[_0xd6f0('0x19')]);emit(util['format'](_0xd6f0('0x3a'),_0x1af620[_0xd6f0('0x19')]),_0xd6f0('0x3b'),{'sessionId':_0x2b5df5});return _0x6b44fa[_0xd6f0('0x1a')](0xc8)[_0xd6f0('0x35')]({'error':![],'message':'hangup\x20executed!'});})[_0xd6f0('0x37')](handleError(_0x6b44fa));};exports[_0xd6f0('0x3c')]=function(_0x412f55,_0x5848dc){logger[_0xd6f0('0x12')](_0xd6f0('0x3d'),_0x412f55['body']);var _0x516ffd=answerValidation[_0xd6f0('0x30')](_0x412f55[_0xd6f0('0x2f')]);if(_0x516ffd[_0xd6f0('0x2a')]>0x0){return _0x5848dc['status'](0x190)[_0xd6f0('0x35')](_0x516ffd);}var _0x2d32f0=_0x412f55['body'][_0xd6f0('0x31')];var _0x3080eb=_0x412f55[_0xd6f0('0x2f')][_0xd6f0('0x29')];return getAgent(_0x2d32f0)['then'](function(_0x664096){logger[_0xd6f0('0x12')](_0xd6f0('0x39'),_0x664096[_0xd6f0('0x19')]);emit(util[_0xd6f0('0x34')](_0xd6f0('0x3a'),_0x664096[_0xd6f0('0x19')]),_0xd6f0('0x3e'),{'sessionId':_0x3080eb});return _0x5848dc['status'](0xc8)[_0xd6f0('0x35')]({'error':![],'message':_0xd6f0('0x3f')});})['catch'](handleError(_0x5848dc));};exports[_0xd6f0('0x40')]=function(_0x39ca69,_0x1bcb36){logger[_0xd6f0('0x12')]('hold\x20fired:',_0x39ca69[_0xd6f0('0x2f')]);var _0xe5fd11=holdValidation['validate'](_0x39ca69['body']);if(_0xe5fd11[_0xd6f0('0x2a')]>0x0){return _0x1bcb36['status'](0x190)[_0xd6f0('0x35')](_0xe5fd11);}var _0x61b354=_0x39ca69[_0xd6f0('0x2f')]['userId'];var _0x1ddce2=_0x39ca69[_0xd6f0('0x2f')][_0xd6f0('0x29')];return getAgent(_0x61b354)[_0xd6f0('0x24')](function(_0xc4147e){logger['info'](_0xd6f0('0x39'),_0xc4147e['name']);emit(util[_0xd6f0('0x34')](_0xd6f0('0x3a'),_0xc4147e[_0xd6f0('0x19')]),_0xd6f0('0x41'),{'sessionId':_0x1ddce2});return _0x1bcb36['status'](0xc8)['json']({'error':![],'message':_0xd6f0('0x42')});})[_0xd6f0('0x37')](handleError(_0x1bcb36));};exports['unhold']=function(_0xa68b18,_0x56c448){logger[_0xd6f0('0x12')](_0xd6f0('0x43'),_0xa68b18[_0xd6f0('0x2f')]);var _0x41d115=unholdValidation[_0xd6f0('0x30')](_0xa68b18['body']);if(_0x41d115[_0xd6f0('0x2a')]>0x0){return _0x56c448[_0xd6f0('0x1a')](0x190)[_0xd6f0('0x35')](_0x41d115);}var _0x25d0a9=_0xa68b18[_0xd6f0('0x2f')][_0xd6f0('0x31')];var _0x211773=_0xa68b18[_0xd6f0('0x2f')]['sessionId'];return getAgent(_0x25d0a9)[_0xd6f0('0x24')](function(_0x3eb4dc){logger[_0xd6f0('0x12')](_0xd6f0('0x39'),_0x3eb4dc[_0xd6f0('0x19')]);emit(util[_0xd6f0('0x34')](_0xd6f0('0x3a'),_0x3eb4dc[_0xd6f0('0x19')]),_0xd6f0('0x44'),{'sessionId':_0x211773});return _0x56c448['status'](0xc8)[_0xd6f0('0x35')]({'error':![],'message':'unhold\x20executed!'});})['catch'](handleError(_0x56c448));};exports[_0xd6f0('0x45')]=function(_0x55fd25,_0x539ef1){logger[_0xd6f0('0x12')](_0xd6f0('0x46'),_0x539ef1[_0xd6f0('0x2f')]);var _0x47a159=callsValidation[_0xd6f0('0x30')](_0x55fd25[_0xd6f0('0x2f')]);if(_0x47a159[_0xd6f0('0x2a')]>0x0){return _0x539ef1['status'](0x190)[_0xd6f0('0x35')](_0x47a159);}var _0x357193=_0x55fd25['body'][_0xd6f0('0x31')];var _0x328e0a=respondWithRpcPromise('VoiceChannels');var _0x3558ac=getAgent(_0x357193);return Promise[_0xd6f0('0x47')]([_0x328e0a,_0x3558ac])[_0xd6f0('0x24')](function(_0x1d9972){var _0x3e6533=_0x1d9972[0x0];var _0x48bfb3=_0x1d9972[0x1];var _0x291e7b=_[_0xd6f0('0x26')](_0x3e6533['rows'],function(_0x26d728){return _0x26d728[_0xd6f0('0x28')]==_0x48bfb3['id'];});return _0x539ef1[_0xd6f0('0x1a')](0xc8)['json']({'count':_0x291e7b[_0xd6f0('0x2a')],'rows':_0x291e7b});})['catch'](handleError(_0x539ef1));};exports['conference']=function(_0x4bdedd,_0x5c5aa4){logger[_0xd6f0('0x12')](_0xd6f0('0x48'),_0x4bdedd[_0xd6f0('0x2f')]);var _0x1febb7=conferenceValidation['validate'](_0x4bdedd[_0xd6f0('0x2f')]);if(_0x1febb7['length']>0x0){return _0x5c5aa4[_0xd6f0('0x1a')](0x190)[_0xd6f0('0x35')](_0x1febb7);}var _0x2ba889=_0x4bdedd['body'][_0xd6f0('0x31')];return getAgent(_0x2ba889)[_0xd6f0('0x24')](function(_0x269dd7){logger[_0xd6f0('0x12')]('entityFound:',_0x269dd7[_0xd6f0('0x19')]);emit(util[_0xd6f0('0x34')](_0xd6f0('0x3a'),_0x269dd7['name']),_0xd6f0('0x49'));return _0x5c5aa4[_0xd6f0('0x1a')](0xc8)[_0xd6f0('0x35')]({'error':![],'message':_0xd6f0('0x4a')});})['catch'](handleError(_0x5c5aa4));};exports[_0xd6f0('0x4b')]=function(_0x2082b5,_0x1096e0){logger[_0xd6f0('0x12')]('transfer\x20fired:',_0x2082b5['body']);var _0x490bc4=transferValidation['validate'](_0x2082b5[_0xd6f0('0x2f')]);if(_0x490bc4[_0xd6f0('0x2a')]>0x0){return _0x1096e0[_0xd6f0('0x1a')](0x190)[_0xd6f0('0x35')](_0x490bc4);}var _0x318a64=_0x2082b5[_0xd6f0('0x2f')][_0xd6f0('0x31')];var _0x1b298a=_0x2082b5[_0xd6f0('0x2f')]['sessionId'];var _0x55f96e=_0x2082b5[_0xd6f0('0x2f')]['transferNumber'];return getAgent(_0x318a64)[_0xd6f0('0x24')](function(_0x3a85bd){logger[_0xd6f0('0x12')](_0xd6f0('0x39'),_0x3a85bd[_0xd6f0('0x19')]);emit(util[_0xd6f0('0x34')](_0xd6f0('0x3a'),_0x3a85bd['name']),_0xd6f0('0x4c'),{'sessionId':_0x1b298a,'transferNumber':_0x55f96e});return _0x1096e0[_0xd6f0('0x1a')](0xc8)[_0xd6f0('0x35')]({'error':![],'message':'transfer\x20executed!'});})[_0xd6f0('0x37')](handleError(_0x1096e0));};