7c3ab7402f66bf58998926494960f17103c3b215
[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 _0xad36=['number','userId\x20is\x20required','string','callNumber\x20is\x20required','sessionId\x20is\x20required','transferNumber\x20is\x20required','log','error','stack','name','status','send','NotFound','request','then','message','catch','findOne','agent','VoiceChannels','all','filter','rows','UserId','sessionId','length','\x20not\x20found!','originate','info','originate\x20fired:','body','validate','json','userId','callNumber','callerId','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','webbar:hangup','hangup\x20executed!','answer','answer\x20fired:','answer\x20executed!','hold','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','calls','calls\x20fired:','conference','conference\x20fired:','conference\x20executed!','transfer','transferNumber','webbar:transfer','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','client','http','../../config/logger','ioredis','redis','defaults'];(function(_0x1f6e18,_0xc8a42a){var _0x1c60e1=function(_0x16f1d2){while(--_0x16f1d2){_0x1f6e18['push'](_0x1f6e18['shift']());}};_0x1c60e1(++_0xc8a42a);}(_0xad36,0x11c));var _0x6ad3=function(_0x35acd5,_0x532ca6){_0x35acd5=_0x35acd5-0x0;var _0x4dfcab=_0xad36[_0x35acd5];return _0x4dfcab;};'use strict';var path=require('path');var fs=require('fs');var _=require(_0x6ad3('0x0'));var db=require(_0x6ad3('0x1'))['db'];var config=require(_0x6ad3('0x2'));var util=require(_0x6ad3('0x3'));var BPromise=require(_0x6ad3('0x4'));var jayson=require(_0x6ad3('0x5'));var amiClient=jayson[_0x6ad3('0x6')][_0x6ad3('0x7')]({'port':0x232a});var logger=require(_0x6ad3('0x8'))('webbarapi');var Redis=require(_0x6ad3('0x9'));config[_0x6ad3('0xa')]=_[_0x6ad3('0xb')](config[_0x6ad3('0xa')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':_0x6ad3('0xc'),'required':[!![],_0x6ad3('0xd')]},'callNumber':{'type':_0x6ad3('0xe'),'required':[!![],_0x6ad3('0xf')]},'callerId':{'type':_0x6ad3('0xe')},'callbackUrl':{'type':_0x6ad3('0xe')}});var hangupValidation=new Schema({'userId':{'type':_0x6ad3('0xc'),'required':[!![],_0x6ad3('0xd')]},'sessionId':{'type':_0x6ad3('0xe'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],_0x6ad3('0xd')]},'sessionId':{'type':_0x6ad3('0xe'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x6ad3('0xc'),'required':[!![],_0x6ad3('0xd')]},'sessionId':{'type':_0x6ad3('0xe'),'required':[!![],_0x6ad3('0x10')]},'transferNumber':{'type':_0x6ad3('0xe'),'required':[!![],_0x6ad3('0x11')]}});var holdValidation=new Schema({'userId':{'type':'number','required':[!![],_0x6ad3('0xd')]},'sessionId':{'type':'string','required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x6ad3('0xc'),'required':[!![],_0x6ad3('0xd')]},'sessionId':{'type':_0x6ad3('0xe'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0x6ad3('0xc'),'required':[!![],_0x6ad3('0xd')]}});var conferenceValidation=new Schema({'userId':{'type':'number','required':[!![],_0x6ad3('0xd')]}});function emit(_0x45aa65,_0xf81b3,_0x4c52c2){logger['info'](_0x45aa65,_0xf81b3,JSON['stringify'](_0x4c52c2));io['to'](_0x45aa65)['emit'](_0xf81b3,_0x4c52c2);}function handleError(_0x2c6f96){return function(_0x4d031b){console[_0x6ad3('0x12')]('handleError:',_0x4d031b,_0x4d031b instanceof RangeError);logger[_0x6ad3('0x13')](_0x4d031b[_0x6ad3('0x14')]);if(_0x4d031b instanceof RangeError){if(_0x4d031b[_0x6ad3('0x15')]){delete _0x4d031b[_0x6ad3('0x15')];}_0x2c6f96['status'](0x194)['send'](_0x4d031b);}else{if(_0x4d031b[_0x6ad3('0x15')]){delete _0x4d031b[_0x6ad3('0x15')];}_0x2c6f96[_0x6ad3('0x16')](0x1f4)[_0x6ad3('0x17')](_0x4d031b);}};}function checkError(){return function(_0x3b3f8b){if(!_0x3b3f8b){throw new RangeError(_0x6ad3('0x18'));}return _0x3b3f8b;};}function respondWithRpcPromise(_0x19ff5e,_0x3dbfb6){return new BPromise(function(_0xe5b2ad,_0x4cb79d){var _0x33e11b=amiClient;return _0x33e11b[_0x6ad3('0x19')](_0x19ff5e,_0x3dbfb6)[_0x6ad3('0x1a')](function(_0x1fcdf9){if(_0x1fcdf9[_0x6ad3('0x13')]){if(_0x1fcdf9[_0x6ad3('0x13')]['code']===0x1f4){return _0x4cb79d(_0x1fcdf9[_0x6ad3('0x13')][_0x6ad3('0x1b')]);}return _0xe5b2ad(_0x1fcdf9[_0x6ad3('0x13')]['message']);}else{_0xe5b2ad(_0x1fcdf9['result']);}})[_0x6ad3('0x1c')](function(_0x13bff5){_0x4cb79d(_0x13bff5);});});}function getAgent(_0x508bb1){return db['User'][_0x6ad3('0x1d')]({'where':{'id':_0x508bb1,'role':_0x6ad3('0x1e')}})[_0x6ad3('0x1a')](checkError());}function getAgentCheckSession(_0xf857f4,_0x467512){return new BPromise(function(_0x3a8774,_0x4f692d){var _0x4f40ef=respondWithRpcPromise(_0x6ad3('0x1f'));var _0x3e8d2a=getAgent(_0xf857f4);Promise[_0x6ad3('0x20')]([_0x4f40ef,_0x3e8d2a])[_0x6ad3('0x1a')](function(_0x4ee707){var _0x5ca9a4=_0x4ee707[0x0];var _0x2f1d01=_0x4ee707[0x1];var _0x23a0ad=_[_0x6ad3('0x21')](_0x5ca9a4[_0x6ad3('0x22')],function(_0x1602df){return _0x1602df[_0x6ad3('0x23')]==_0x2f1d01['id']&&_0x1602df[_0x6ad3('0x24')]==_0x467512;});if(_0x23a0ad[_0x6ad3('0x25')]==0x1){_0x3a8774(_0x2f1d01);}else{_0x4f692d(new RangeError('sessionId\x20'+_0x467512+_0x6ad3('0x26')));}});});}exports[_0x6ad3('0x27')]=function(_0x4fe3e9,_0x298476){logger[_0x6ad3('0x28')](_0x6ad3('0x29'),_0x4fe3e9[_0x6ad3('0x2a')]);var _0x4be46c=originateValidation[_0x6ad3('0x2b')](_0x4fe3e9['body']);if(_0x4be46c[_0x6ad3('0x25')]>0x0){return _0x298476[_0x6ad3('0x16')](0x190)[_0x6ad3('0x2c')](_0x4be46c);}var _0x148c69=_0x4fe3e9[_0x6ad3('0x2a')][_0x6ad3('0x2d')];var _0x4e12ef=_0x4fe3e9[_0x6ad3('0x2a')][_0x6ad3('0x2e')];var _0x11c4a8=_0x4fe3e9[_0x6ad3('0x2a')][_0x6ad3('0x2f')];var _0x5f08b5=_0x4fe3e9[_0x6ad3('0x2a')]['callbackUrl'];return getAgent(_0x148c69)[_0x6ad3('0x1a')](function(_0x2bdaeb){logger[_0x6ad3('0x28')](_0x6ad3('0x30'),_0x2bdaeb[_0x6ad3('0x15')]);emit(util[_0x6ad3('0x31')](_0x6ad3('0x32'),_0x2bdaeb[_0x6ad3('0x15')]),_0x6ad3('0x33'),{'callNumber':_0x4e12ef,'callerId':_0x11c4a8,'callbackUrl':_0x5f08b5});return _0x298476['status'](0xc8)[_0x6ad3('0x2c')]({'error':![],'message':_0x6ad3('0x34')});})[_0x6ad3('0x1c')](handleError(_0x298476));};exports[_0x6ad3('0x35')]=function(_0x12c5be,_0x3ed7b9){logger[_0x6ad3('0x28')]('hangup\x20fired:',_0x12c5be['body']);var _0x427af8=hangupValidation[_0x6ad3('0x2b')](_0x12c5be[_0x6ad3('0x2a')]);if(_0x427af8[_0x6ad3('0x25')]>0x0){return _0x3ed7b9[_0x6ad3('0x16')](0x190)[_0x6ad3('0x2c')](_0x427af8);}var _0xf52e=_0x12c5be['body'][_0x6ad3('0x2d')];var _0x3518dd=_0x12c5be[_0x6ad3('0x2a')]['sessionId'];return getAgent(_0xf52e)[_0x6ad3('0x1a')](function(_0x4e4599){logger['info'](_0x6ad3('0x30'),_0x4e4599['name']);emit(util[_0x6ad3('0x31')](_0x6ad3('0x32'),_0x4e4599[_0x6ad3('0x15')]),_0x6ad3('0x36'),{'sessionId':_0x3518dd});return _0x3ed7b9[_0x6ad3('0x16')](0xc8)[_0x6ad3('0x2c')]({'error':![],'message':_0x6ad3('0x37')});})['catch'](handleError(_0x3ed7b9));};exports[_0x6ad3('0x38')]=function(_0x23a7a9,_0x162133){logger[_0x6ad3('0x28')](_0x6ad3('0x39'),_0x23a7a9[_0x6ad3('0x2a')]);var _0x209b11=answerValidation['validate'](_0x23a7a9[_0x6ad3('0x2a')]);if(_0x209b11[_0x6ad3('0x25')]>0x0){return _0x162133[_0x6ad3('0x16')](0x190)[_0x6ad3('0x2c')](_0x209b11);}var _0x1d8630=_0x23a7a9[_0x6ad3('0x2a')][_0x6ad3('0x2d')];var _0x3618c4=_0x23a7a9[_0x6ad3('0x2a')][_0x6ad3('0x24')];return getAgent(_0x1d8630)[_0x6ad3('0x1a')](function(_0x4d0df3){logger[_0x6ad3('0x28')](_0x6ad3('0x30'),_0x4d0df3[_0x6ad3('0x15')]);emit(util[_0x6ad3('0x31')](_0x6ad3('0x32'),_0x4d0df3['name']),'webbar:answer',{'sessionId':_0x3618c4});return _0x162133['status'](0xc8)['json']({'error':![],'message':_0x6ad3('0x3a')});})[_0x6ad3('0x1c')](handleError(_0x162133));};exports[_0x6ad3('0x3b')]=function(_0x29dbb6,_0xee8368){logger[_0x6ad3('0x28')](_0x6ad3('0x3c'),_0x29dbb6[_0x6ad3('0x2a')]);var _0x8ebb90=holdValidation['validate'](_0x29dbb6[_0x6ad3('0x2a')]);if(_0x8ebb90[_0x6ad3('0x25')]>0x0){return _0xee8368['status'](0x190)['json'](_0x8ebb90);}var _0x1439fe=_0x29dbb6[_0x6ad3('0x2a')]['userId'];var _0x2849b0=_0x29dbb6[_0x6ad3('0x2a')][_0x6ad3('0x24')];return getAgent(_0x1439fe)[_0x6ad3('0x1a')](function(_0x3b615d){logger['info'](_0x6ad3('0x30'),_0x3b615d['name']);emit(util[_0x6ad3('0x31')]('user:%s',_0x3b615d[_0x6ad3('0x15')]),_0x6ad3('0x3d'),{'sessionId':_0x2849b0});return _0xee8368['status'](0xc8)['json']({'error':![],'message':_0x6ad3('0x3e')});})[_0x6ad3('0x1c')](handleError(_0xee8368));};exports[_0x6ad3('0x3f')]=function(_0x201ee7,_0x253a96){logger[_0x6ad3('0x28')](_0x6ad3('0x40'),_0x201ee7[_0x6ad3('0x2a')]);var _0x449871=unholdValidation[_0x6ad3('0x2b')](_0x201ee7[_0x6ad3('0x2a')]);if(_0x449871[_0x6ad3('0x25')]>0x0){return _0x253a96['status'](0x190)[_0x6ad3('0x2c')](_0x449871);}var _0x34bd5c=_0x201ee7['body']['userId'];var _0x2f71e4=_0x201ee7[_0x6ad3('0x2a')][_0x6ad3('0x24')];return getAgent(_0x34bd5c)[_0x6ad3('0x1a')](function(_0x5990d8){logger[_0x6ad3('0x28')](_0x6ad3('0x30'),_0x5990d8[_0x6ad3('0x15')]);emit(util[_0x6ad3('0x31')]('user:%s',_0x5990d8['name']),_0x6ad3('0x41'),{'sessionId':_0x2f71e4});return _0x253a96[_0x6ad3('0x16')](0xc8)[_0x6ad3('0x2c')]({'error':![],'message':'unhold\x20executed!'});})[_0x6ad3('0x1c')](handleError(_0x253a96));};exports[_0x6ad3('0x42')]=function(_0x52d790,_0x42a98e){logger[_0x6ad3('0x28')](_0x6ad3('0x43'),_0x42a98e[_0x6ad3('0x2a')]);var _0x9e4a24=callsValidation[_0x6ad3('0x2b')](_0x52d790[_0x6ad3('0x2a')]);if(_0x9e4a24['length']>0x0){return _0x42a98e['status'](0x190)['json'](_0x9e4a24);}var _0x1e14ee=_0x52d790['body'][_0x6ad3('0x2d')];var _0x28078a=respondWithRpcPromise(_0x6ad3('0x1f'));var _0x37bd7b=getAgent(_0x1e14ee);return Promise[_0x6ad3('0x20')]([_0x28078a,_0x37bd7b])[_0x6ad3('0x1a')](function(_0x48e2eb){var _0x4bbb84=_0x48e2eb[0x0];var _0x2ae4de=_0x48e2eb[0x1];var _0x48416a=_[_0x6ad3('0x21')](_0x4bbb84[_0x6ad3('0x22')],function(_0x1d8454){return _0x1d8454[_0x6ad3('0x23')]==_0x2ae4de['id'];});return _0x42a98e[_0x6ad3('0x16')](0xc8)[_0x6ad3('0x2c')]({'count':_0x48416a['length'],'rows':_0x48416a});})['catch'](handleError(_0x42a98e));};exports[_0x6ad3('0x44')]=function(_0x28e190,_0x51f821){logger[_0x6ad3('0x28')](_0x6ad3('0x45'),_0x28e190[_0x6ad3('0x2a')]);var _0x5436a6=conferenceValidation['validate'](_0x28e190[_0x6ad3('0x2a')]);if(_0x5436a6['length']>0x0){return _0x51f821[_0x6ad3('0x16')](0x190)[_0x6ad3('0x2c')](_0x5436a6);}var _0x47017d=_0x28e190[_0x6ad3('0x2a')]['userId'];return getAgent(_0x47017d)[_0x6ad3('0x1a')](function(_0x24cad6){logger['info'](_0x6ad3('0x30'),_0x24cad6[_0x6ad3('0x15')]);emit(util[_0x6ad3('0x31')](_0x6ad3('0x32'),_0x24cad6[_0x6ad3('0x15')]),'webbar:conference');return _0x51f821[_0x6ad3('0x16')](0xc8)['json']({'error':![],'message':_0x6ad3('0x46')});})[_0x6ad3('0x1c')](handleError(_0x51f821));};exports[_0x6ad3('0x47')]=function(_0x2e9204,_0x315064){logger[_0x6ad3('0x28')]('transfer\x20fired:',_0x2e9204['body']);var _0x55ba64=transferValidation['validate'](_0x2e9204[_0x6ad3('0x2a')]);if(_0x55ba64[_0x6ad3('0x25')]>0x0){return _0x315064[_0x6ad3('0x16')](0x190)[_0x6ad3('0x2c')](_0x55ba64);}var _0x516372=_0x2e9204[_0x6ad3('0x2a')]['userId'];var _0x3f9a3a=_0x2e9204[_0x6ad3('0x2a')][_0x6ad3('0x24')];var _0x5b8ac2=_0x2e9204['body'][_0x6ad3('0x48')];return getAgent(_0x516372)[_0x6ad3('0x1a')](function(_0x2ed539){logger[_0x6ad3('0x28')]('entityFound:',_0x2ed539[_0x6ad3('0x15')]);emit(util[_0x6ad3('0x31')](_0x6ad3('0x32'),_0x2ed539[_0x6ad3('0x15')]),_0x6ad3('0x49'),{'sessionId':_0x3f9a3a,'transferNumber':_0x5b8ac2});return _0x315064[_0x6ad3('0x16')](0xc8)[_0x6ad3('0x2c')]({'error':![],'message':'transfer\x20executed!'});})[_0x6ad3('0x1c')](handleError(_0x315064));};