ad41e1cf52924c4a0b1bb457d4395c6cc26a6a97
[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 _0xe6b2=['all','filter','rows','UserId','length','\x20not\x20found!','body','validate','json','userId','callerId','callbackUrl','entityFound:','user:%s','webbar:originate','originate\x20executed!','hangup','sessionId','webbar:hangup','answer','answer\x20fired:','format','webbar:answer','answer\x20executed!','hold','hold\x20fired:','webbar:hold','unhold','unhold\x20fired:','conference\x20fired:','conference\x20executed!','transfer','transfer\x20fired:','webbar:transfer','transfer\x20executed!','path','../../mysqldb','../../config/environment','util','bluebird','http','webbarapi','redis','localhost','socket.io-emitter','number','callNumber\x20is\x20required','string','userId\x20is\x20required','sessionId\x20is\x20required','transferNumber\x20is\x20required','info','stringify','emit','log','handleError:','error','stack','name','status','send','NotFound','request','then','message','result','catch','User','findOne','agent','VoiceChannels'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xe6b2,0xf8));var _0x2e6b=function(_0x27f569,_0x11892a){_0x27f569=_0x27f569-0x0;var _0x3774c4=_0xe6b2[_0x27f569];return _0x3774c4;};'use strict';var path=require(_0x2e6b('0x0'));var fs=require('fs');var _=require('lodash');var db=require(_0x2e6b('0x1'))['db'];var config=require(_0x2e6b('0x2'));var util=require(_0x2e6b('0x3'));var BPromise=require(_0x2e6b('0x4'));var jayson=require('jayson/promise');var amiClient=jayson['client'][_0x2e6b('0x5')]({'port':0x232a});var logger=require('../../config/logger')(_0x2e6b('0x6'));var Redis=require('ioredis');config['redis']=_['defaults'](config[_0x2e6b('0x7')],{'host':_0x2e6b('0x8'),'port':0x18eb});var io=require(_0x2e6b('0x9'))(new Redis(config[_0x2e6b('0x7')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':_0x2e6b('0xa'),'required':[!![],'userId\x20is\x20required']},'callNumber':{'type':'string','required':[!![],_0x2e6b('0xb')]},'callerId':{'type':_0x2e6b('0xc')},'callbackUrl':{'type':_0x2e6b('0xc')}});var hangupValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x2e6b('0xc'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],_0x2e6b('0xd')]},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0x2e6b('0xa'),'required':[!![],_0x2e6b('0xd')]},'sessionId':{'type':_0x2e6b('0xc'),'required':[!![],_0x2e6b('0xe')]},'transferNumber':{'type':'string','required':[!![],_0x2e6b('0xf')]}});var holdValidation=new Schema({'userId':{'type':_0x2e6b('0xa'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x2e6b('0xc'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x2e6b('0xa'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':'string','required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0x2e6b('0xd')]}});var conferenceValidation=new Schema({'userId':{'type':_0x2e6b('0xa'),'required':[!![],_0x2e6b('0xd')]}});function emit(_0x73cce5,_0x100755,_0x4750e4){logger[_0x2e6b('0x10')](_0x73cce5,_0x100755,JSON[_0x2e6b('0x11')](_0x4750e4));io['to'](_0x73cce5)[_0x2e6b('0x12')](_0x100755,_0x4750e4);}function handleError(_0x3bad2f){return function(_0x7236d4){console[_0x2e6b('0x13')](_0x2e6b('0x14'),_0x7236d4,_0x7236d4 instanceof RangeError);logger[_0x2e6b('0x15')](_0x7236d4[_0x2e6b('0x16')]);if(_0x7236d4 instanceof RangeError){if(_0x7236d4[_0x2e6b('0x17')]){delete _0x7236d4[_0x2e6b('0x17')];}_0x3bad2f[_0x2e6b('0x18')](0x194)[_0x2e6b('0x19')](_0x7236d4);}else{if(_0x7236d4[_0x2e6b('0x17')]){delete _0x7236d4[_0x2e6b('0x17')];}_0x3bad2f[_0x2e6b('0x18')](0x1f4)[_0x2e6b('0x19')](_0x7236d4);}};}function checkError(){return function(_0xc412b6){if(!_0xc412b6){throw new RangeError(_0x2e6b('0x1a'));}return _0xc412b6;};}function respondWithRpcPromise(_0x541bef,_0x40dc18){return new BPromise(function(_0x3cf67e,_0x53e2a4){var _0xd74918=amiClient;return _0xd74918[_0x2e6b('0x1b')](_0x541bef,_0x40dc18)[_0x2e6b('0x1c')](function(_0x5a124c){if(_0x5a124c[_0x2e6b('0x15')]){if(_0x5a124c['error']['code']===0x1f4){return _0x53e2a4(_0x5a124c[_0x2e6b('0x15')][_0x2e6b('0x1d')]);}return _0x3cf67e(_0x5a124c[_0x2e6b('0x15')][_0x2e6b('0x1d')]);}else{_0x3cf67e(_0x5a124c[_0x2e6b('0x1e')]);}})[_0x2e6b('0x1f')](function(_0x6e90a5){_0x53e2a4(_0x6e90a5);});});}function getAgent(_0x529351){return db[_0x2e6b('0x20')][_0x2e6b('0x21')]({'where':{'id':_0x529351,'role':_0x2e6b('0x22')}})[_0x2e6b('0x1c')](checkError());}function getAgentCheckSession(_0x22a061,_0xc1679f){return new BPromise(function(_0x48d5db,_0x4283b4){var _0x311661=respondWithRpcPromise(_0x2e6b('0x23'));var _0x46bc61=getAgent(_0x22a061);Promise[_0x2e6b('0x24')]([_0x311661,_0x46bc61])[_0x2e6b('0x1c')](function(_0x10d186){var _0x5b8028=_0x10d186[0x0];var _0x1ba4c2=_0x10d186[0x1];var _0x2da0d7=_[_0x2e6b('0x25')](_0x5b8028[_0x2e6b('0x26')],function(_0x4b4e5c){return _0x4b4e5c[_0x2e6b('0x27')]==_0x1ba4c2['id']&&_0x4b4e5c['sessionId']==_0xc1679f;});if(_0x2da0d7[_0x2e6b('0x28')]==0x1){_0x48d5db(_0x1ba4c2);}else{_0x4283b4(new RangeError('sessionId\x20'+_0xc1679f+_0x2e6b('0x29')));}});});}exports['originate']=function(_0x238f40,_0x4442af){logger['info']('originate\x20fired:',_0x238f40[_0x2e6b('0x2a')]);var _0x1115c4=originateValidation[_0x2e6b('0x2b')](_0x238f40[_0x2e6b('0x2a')]);if(_0x1115c4[_0x2e6b('0x28')]>0x0){return _0x4442af[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x1115c4);}var _0x27b6ac=_0x238f40['body'][_0x2e6b('0x2d')];var _0x1328f0=_0x238f40[_0x2e6b('0x2a')]['callNumber'];var _0x2322d8=_0x238f40[_0x2e6b('0x2a')][_0x2e6b('0x2e')];var _0x5ccf3e=_0x238f40[_0x2e6b('0x2a')][_0x2e6b('0x2f')];return getAgent(_0x27b6ac)[_0x2e6b('0x1c')](function(_0x1677d5){logger[_0x2e6b('0x10')](_0x2e6b('0x30'),_0x1677d5[_0x2e6b('0x17')]);emit(util['format'](_0x2e6b('0x31'),_0x1677d5[_0x2e6b('0x17')]),_0x2e6b('0x32'),{'callNumber':_0x1328f0,'callerId':_0x2322d8,'callbackUrl':_0x5ccf3e});return _0x4442af[_0x2e6b('0x18')](0xc8)['json']({'error':![],'message':_0x2e6b('0x33')});})['catch'](handleError(_0x4442af));};exports[_0x2e6b('0x34')]=function(_0x39dc19,_0x4d4f38){logger[_0x2e6b('0x10')]('hangup\x20fired:',_0x39dc19[_0x2e6b('0x2a')]);var _0x78e6e8=hangupValidation[_0x2e6b('0x2b')](_0x39dc19[_0x2e6b('0x2a')]);if(_0x78e6e8[_0x2e6b('0x28')]>0x0){return _0x4d4f38[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x78e6e8);}var _0x174122=_0x39dc19['body'][_0x2e6b('0x2d')];var _0x203ffe=_0x39dc19['body'][_0x2e6b('0x35')];return getAgent(_0x174122)[_0x2e6b('0x1c')](function(_0x402240){logger[_0x2e6b('0x10')]('entityFound:',_0x402240['name']);emit(util['format'](_0x2e6b('0x31'),_0x402240['name']),_0x2e6b('0x36'),{'sessionId':_0x203ffe});return _0x4d4f38[_0x2e6b('0x18')](0xc8)[_0x2e6b('0x2c')]({'error':![],'message':'hangup\x20executed!'});})['catch'](handleError(_0x4d4f38));};exports[_0x2e6b('0x37')]=function(_0x14c116,_0x2f3a02){logger[_0x2e6b('0x10')](_0x2e6b('0x38'),_0x14c116[_0x2e6b('0x2a')]);var _0x4e36f3=answerValidation[_0x2e6b('0x2b')](_0x14c116['body']);if(_0x4e36f3[_0x2e6b('0x28')]>0x0){return _0x2f3a02[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x4e36f3);}var _0x34d732=_0x14c116['body'][_0x2e6b('0x2d')];var _0x421d00=_0x14c116[_0x2e6b('0x2a')][_0x2e6b('0x35')];return getAgent(_0x34d732)[_0x2e6b('0x1c')](function(_0x2fe1c9){logger['info'](_0x2e6b('0x30'),_0x2fe1c9[_0x2e6b('0x17')]);emit(util[_0x2e6b('0x39')](_0x2e6b('0x31'),_0x2fe1c9['name']),_0x2e6b('0x3a'),{'sessionId':_0x421d00});return _0x2f3a02[_0x2e6b('0x18')](0xc8)['json']({'error':![],'message':_0x2e6b('0x3b')});})[_0x2e6b('0x1f')](handleError(_0x2f3a02));};exports[_0x2e6b('0x3c')]=function(_0x1e4854,_0x5a62dd){logger[_0x2e6b('0x10')](_0x2e6b('0x3d'),_0x1e4854[_0x2e6b('0x2a')]);var _0x43ce36=holdValidation[_0x2e6b('0x2b')](_0x1e4854['body']);if(_0x43ce36[_0x2e6b('0x28')]>0x0){return _0x5a62dd[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x43ce36);}var _0x3d17dc=_0x1e4854[_0x2e6b('0x2a')]['userId'];var _0x4d9e4a=_0x1e4854[_0x2e6b('0x2a')][_0x2e6b('0x35')];return getAgent(_0x3d17dc)[_0x2e6b('0x1c')](function(_0x4446e5){logger['info'](_0x2e6b('0x30'),_0x4446e5[_0x2e6b('0x17')]);emit(util[_0x2e6b('0x39')]('user:%s',_0x4446e5['name']),_0x2e6b('0x3e'),{'sessionId':_0x4d9e4a});return _0x5a62dd['status'](0xc8)[_0x2e6b('0x2c')]({'error':![],'message':'hold\x20executed!'});})[_0x2e6b('0x1f')](handleError(_0x5a62dd));};exports[_0x2e6b('0x3f')]=function(_0x2116b3,_0x2a9cf4){logger[_0x2e6b('0x10')](_0x2e6b('0x40'),_0x2116b3[_0x2e6b('0x2a')]);var _0x3b89c0=unholdValidation['validate'](_0x2116b3[_0x2e6b('0x2a')]);if(_0x3b89c0[_0x2e6b('0x28')]>0x0){return _0x2a9cf4[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x3b89c0);}var _0x42fcb6=_0x2116b3[_0x2e6b('0x2a')][_0x2e6b('0x2d')];var _0x21e2d3=_0x2116b3[_0x2e6b('0x2a')][_0x2e6b('0x35')];return getAgent(_0x42fcb6)[_0x2e6b('0x1c')](function(_0xc3f37){logger[_0x2e6b('0x10')](_0x2e6b('0x30'),_0xc3f37[_0x2e6b('0x17')]);emit(util[_0x2e6b('0x39')](_0x2e6b('0x31'),_0xc3f37[_0x2e6b('0x17')]),'webbar:unhold',{'sessionId':_0x21e2d3});return _0x2a9cf4[_0x2e6b('0x18')](0xc8)['json']({'error':![],'message':'unhold\x20executed!'});})[_0x2e6b('0x1f')](handleError(_0x2a9cf4));};exports['calls']=function(_0x171f5b,_0x3bf473){logger['info']('calls\x20fired:',_0x3bf473[_0x2e6b('0x2a')]);var _0x2bb887=callsValidation[_0x2e6b('0x2b')](_0x171f5b[_0x2e6b('0x2a')]);if(_0x2bb887[_0x2e6b('0x28')]>0x0){return _0x3bf473[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x2bb887);}var _0x46316a=_0x171f5b[_0x2e6b('0x2a')][_0x2e6b('0x2d')];var _0x1b5ec1=respondWithRpcPromise(_0x2e6b('0x23'));var _0x362d6f=getAgent(_0x46316a);return Promise[_0x2e6b('0x24')]([_0x1b5ec1,_0x362d6f])[_0x2e6b('0x1c')](function(_0x57d380){var _0x2e8ab2=_0x57d380[0x0];var _0x3df908=_0x57d380[0x1];var _0x5d4416=_['filter'](_0x2e8ab2[_0x2e6b('0x26')],function(_0x217f8c){return _0x217f8c[_0x2e6b('0x27')]==_0x3df908['id'];});return _0x3bf473['status'](0xc8)[_0x2e6b('0x2c')]({'count':_0x5d4416['length'],'rows':_0x5d4416});})[_0x2e6b('0x1f')](handleError(_0x3bf473));};exports['conference']=function(_0x5c993e,_0x15cd0f){logger['info'](_0x2e6b('0x41'),_0x5c993e[_0x2e6b('0x2a')]);var _0x44960b=conferenceValidation['validate'](_0x5c993e[_0x2e6b('0x2a')]);if(_0x44960b[_0x2e6b('0x28')]>0x0){return _0x15cd0f[_0x2e6b('0x18')](0x190)[_0x2e6b('0x2c')](_0x44960b);}var _0x1a1538=_0x5c993e[_0x2e6b('0x2a')][_0x2e6b('0x2d')];return getAgent(_0x1a1538)['then'](function(_0x138709){logger[_0x2e6b('0x10')](_0x2e6b('0x30'),_0x138709[_0x2e6b('0x17')]);emit(util[_0x2e6b('0x39')](_0x2e6b('0x31'),_0x138709[_0x2e6b('0x17')]),'webbar:conference');return _0x15cd0f[_0x2e6b('0x18')](0xc8)[_0x2e6b('0x2c')]({'error':![],'message':_0x2e6b('0x42')});})[_0x2e6b('0x1f')](handleError(_0x15cd0f));};exports[_0x2e6b('0x43')]=function(_0x369784,_0x477048){logger[_0x2e6b('0x10')](_0x2e6b('0x44'),_0x369784[_0x2e6b('0x2a')]);var _0x2e7793=transferValidation[_0x2e6b('0x2b')](_0x369784[_0x2e6b('0x2a')]);if(_0x2e7793[_0x2e6b('0x28')]>0x0){return _0x477048[_0x2e6b('0x18')](0x190)['json'](_0x2e7793);}var _0x19f3f6=_0x369784[_0x2e6b('0x2a')]['userId'];var _0x436a5c=_0x369784['body'][_0x2e6b('0x35')];var _0x1c20c3=_0x369784[_0x2e6b('0x2a')]['transferNumber'];return getAgent(_0x19f3f6)['then'](function(_0x36457e){logger[_0x2e6b('0x10')]('entityFound:',_0x36457e[_0x2e6b('0x17')]);emit(util[_0x2e6b('0x39')](_0x2e6b('0x31'),_0x36457e[_0x2e6b('0x17')]),_0x2e6b('0x45'),{'sessionId':_0x436a5c,'transferNumber':_0x1c20c3});return _0x477048[_0x2e6b('0x18')](0xc8)[_0x2e6b('0x2c')]({'error':![],'message':_0x2e6b('0x46')});})['catch'](handleError(_0x477048));};