63877522013d346c653f3fb922b46c448ce73e8a
[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 _0xc737=['\x20not\x20found!','originate','info','originate\x20fired:','body','userId','callNumber','callbackUrl','entityFound:','format','user:%s','webbar:originate','json','originate\x20executed!','hangup\x20fired:','validate','webbar:hangup','hangup\x20executed!','answer','answer\x20fired:','webbar:answer','answer\x20executed!','hold\x20fired:','unhold','unhold\x20fired:','webbar:unhold','unhold\x20executed!','calls\x20fired:','UserId','conference','conference\x20fired:','webbar:conference','conference\x20executed!','transfer','transferNumber','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','bluebird','jayson/promise','client','../../config/logger','webbarapi','defaults','redis','socket.io-emitter','userId\x20is\x20required','string','callNumber\x20is\x20required','number','sessionId\x20is\x20required','transferNumber\x20is\x20required','stringify','emit','log','stack','name','status','send','request','then','error','code','message','catch','User','findOne','VoiceChannels','all','filter','rows','sessionId','length','sessionId\x20'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xc737,0x154));var _0x7c73=function(_0x1d75bd,_0x17c831){_0x1d75bd=_0x1d75bd-0x0;var _0x16028f=_0xc737[_0x1d75bd];return _0x16028f;};'use strict';var path=require(_0x7c73('0x0'));var fs=require('fs');var _=require(_0x7c73('0x1'));var db=require(_0x7c73('0x2'))['db'];var config=require(_0x7c73('0x3'));var util=require('util');var BPromise=require(_0x7c73('0x4'));var jayson=require(_0x7c73('0x5'));var amiClient=jayson[_0x7c73('0x6')]['http']({'port':0x232a});var logger=require(_0x7c73('0x7'))(_0x7c73('0x8'));var Redis=require('ioredis');config['redis']=_[_0x7c73('0x9')](config[_0x7c73('0xa')],{'host':'localhost','port':0x18eb});var io=require(_0x7c73('0xb'))(new Redis(config[_0x7c73('0xa')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0x7c73('0xc')]},'callNumber':{'type':_0x7c73('0xd'),'required':[!![],_0x7c73('0xe')]},'callerId':{'type':'string'},'callbackUrl':{'type':_0x7c73('0xd')}});var hangupValidation=new Schema({'userId':{'type':_0x7c73('0xf'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x7c73('0xd'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],_0x7c73('0xc')]},'sessionId':{'type':_0x7c73('0xd'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x7c73('0xf'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x7c73('0xd'),'required':[!![],_0x7c73('0x10')]},'transferNumber':{'type':_0x7c73('0xd'),'required':[!![],_0x7c73('0x11')]}});var holdValidation=new Schema({'userId':{'type':'number','required':[!![],_0x7c73('0xc')]},'sessionId':{'type':'string','required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x7c73('0xf'),'required':[!![],_0x7c73('0xc')]},'sessionId':{'type':_0x7c73('0xd'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0x7c73('0xf'),'required':[!![],_0x7c73('0xc')]}});var conferenceValidation=new Schema({'userId':{'type':_0x7c73('0xf'),'required':[!![],_0x7c73('0xc')]}});function emit(_0x15be28,_0x5091d6,_0xbf66e){logger['info'](_0x15be28,_0x5091d6,JSON[_0x7c73('0x12')](_0xbf66e));io['to'](_0x15be28)[_0x7c73('0x13')](_0x5091d6,_0xbf66e);}function handleError(_0x4fafb7){return function(_0x534a39){console[_0x7c73('0x14')]('handleError:',_0x534a39,_0x534a39 instanceof RangeError);logger['error'](_0x534a39[_0x7c73('0x15')]);if(_0x534a39 instanceof RangeError){if(_0x534a39[_0x7c73('0x16')]){delete _0x534a39[_0x7c73('0x16')];}_0x4fafb7[_0x7c73('0x17')](0x194)['send'](_0x534a39);}else{if(_0x534a39[_0x7c73('0x16')]){delete _0x534a39[_0x7c73('0x16')];}_0x4fafb7[_0x7c73('0x17')](0x1f4)[_0x7c73('0x18')](_0x534a39);}};}function checkError(){return function(_0x359c26){if(!_0x359c26){throw new RangeError('NotFound');}return _0x359c26;};}function respondWithRpcPromise(_0x2cf4d6,_0x2f9ad7){return new BPromise(function(_0x42867c,_0x1745d9){var _0x3b752c=amiClient;return _0x3b752c[_0x7c73('0x19')](_0x2cf4d6,_0x2f9ad7)[_0x7c73('0x1a')](function(_0x6d5714){if(_0x6d5714[_0x7c73('0x1b')]){if(_0x6d5714['error'][_0x7c73('0x1c')]===0x1f4){return _0x1745d9(_0x6d5714['error'][_0x7c73('0x1d')]);}return _0x42867c(_0x6d5714['error'][_0x7c73('0x1d')]);}else{_0x42867c(_0x6d5714['result']);}})[_0x7c73('0x1e')](function(_0x5c8f9d){_0x1745d9(_0x5c8f9d);});});}function getAgent(_0xd695c6){return db[_0x7c73('0x1f')][_0x7c73('0x20')]({'where':{'id':_0xd695c6,'role':'agent'}})[_0x7c73('0x1a')](checkError());}function getAgentCheckSession(_0x12113d,_0x422094){return new BPromise(function(_0x5ad41e,_0x31f8af){var _0x14c5a0=respondWithRpcPromise(_0x7c73('0x21'));var _0x3c9a44=getAgent(_0x12113d);Promise[_0x7c73('0x22')]([_0x14c5a0,_0x3c9a44])[_0x7c73('0x1a')](function(_0x5800eb){var _0x5909ec=_0x5800eb[0x0];var _0x485f0a=_0x5800eb[0x1];var _0x30fa4f=_[_0x7c73('0x23')](_0x5909ec[_0x7c73('0x24')],function(_0x49b1ad){return _0x49b1ad['UserId']==_0x485f0a['id']&&_0x49b1ad[_0x7c73('0x25')]==_0x422094;});if(_0x30fa4f[_0x7c73('0x26')]==0x1){_0x5ad41e(_0x485f0a);}else{_0x31f8af(new RangeError(_0x7c73('0x27')+_0x422094+_0x7c73('0x28')));}});});}exports[_0x7c73('0x29')]=function(_0x2b924f,_0x353dd0){logger[_0x7c73('0x2a')](_0x7c73('0x2b'),_0x2b924f[_0x7c73('0x2c')]);var _0x50d0ea=originateValidation['validate'](_0x2b924f[_0x7c73('0x2c')]);if(_0x50d0ea[_0x7c73('0x26')]>0x0){return _0x353dd0[_0x7c73('0x17')](0x190)['json'](_0x50d0ea);}var _0x201905=_0x2b924f[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0xdab0d8=_0x2b924f[_0x7c73('0x2c')][_0x7c73('0x2e')];var _0x282366=_0x2b924f[_0x7c73('0x2c')]['callerId'];var _0x34c9e3=_0x2b924f[_0x7c73('0x2c')][_0x7c73('0x2f')];return getAgent(_0x201905)[_0x7c73('0x1a')](function(_0xe670a4){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0xe670a4[_0x7c73('0x16')]);emit(util[_0x7c73('0x31')](_0x7c73('0x32'),_0xe670a4[_0x7c73('0x16')]),_0x7c73('0x33'),{'callNumber':_0xdab0d8,'callerId':_0x282366,'callbackUrl':_0x34c9e3});return _0x353dd0[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x35')});})[_0x7c73('0x1e')](handleError(_0x353dd0));};exports['hangup']=function(_0x30690b,_0x2484b4){logger['info'](_0x7c73('0x36'),_0x30690b[_0x7c73('0x2c')]);var _0x55a86d=hangupValidation[_0x7c73('0x37')](_0x30690b['body']);if(_0x55a86d[_0x7c73('0x26')]>0x0){return _0x2484b4[_0x7c73('0x17')](0x190)[_0x7c73('0x34')](_0x55a86d);}var _0x2bbabd=_0x30690b[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0x35e662=_0x30690b[_0x7c73('0x2c')][_0x7c73('0x25')];return getAgent(_0x2bbabd)['then'](function(_0xbc9094){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0xbc9094[_0x7c73('0x16')]);emit(util[_0x7c73('0x31')]('user:%s',_0xbc9094['name']),_0x7c73('0x38'),{'sessionId':_0x35e662});return _0x2484b4[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x39')});})[_0x7c73('0x1e')](handleError(_0x2484b4));};exports[_0x7c73('0x3a')]=function(_0x3ef9c1,_0x1e9c21){logger['info'](_0x7c73('0x3b'),_0x3ef9c1[_0x7c73('0x2c')]);var _0x36b18e=answerValidation[_0x7c73('0x37')](_0x3ef9c1[_0x7c73('0x2c')]);if(_0x36b18e[_0x7c73('0x26')]>0x0){return _0x1e9c21['status'](0x190)[_0x7c73('0x34')](_0x36b18e);}var _0x1b0a6f=_0x3ef9c1[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0x4ef5c3=_0x3ef9c1['body']['sessionId'];return getAgent(_0x1b0a6f)[_0x7c73('0x1a')](function(_0x208908){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0x208908['name']);emit(util[_0x7c73('0x31')](_0x7c73('0x32'),_0x208908[_0x7c73('0x16')]),_0x7c73('0x3c'),{'sessionId':_0x4ef5c3});return _0x1e9c21[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x3d')});})[_0x7c73('0x1e')](handleError(_0x1e9c21));};exports['hold']=function(_0x1e50ee,_0x5a6fa1){logger['info'](_0x7c73('0x3e'),_0x1e50ee[_0x7c73('0x2c')]);var _0x3c8884=holdValidation[_0x7c73('0x37')](_0x1e50ee['body']);if(_0x3c8884[_0x7c73('0x26')]>0x0){return _0x5a6fa1['status'](0x190)[_0x7c73('0x34')](_0x3c8884);}var _0x51425d=_0x1e50ee['body'][_0x7c73('0x2d')];var _0x9c9369=_0x1e50ee[_0x7c73('0x2c')][_0x7c73('0x25')];return getAgent(_0x51425d)['then'](function(_0x291c15){logger[_0x7c73('0x2a')]('entityFound:',_0x291c15[_0x7c73('0x16')]);emit(util['format'](_0x7c73('0x32'),_0x291c15['name']),'webbar:hold',{'sessionId':_0x9c9369});return _0x5a6fa1[_0x7c73('0x17')](0xc8)['json']({'error':![],'message':'hold\x20executed!'});})[_0x7c73('0x1e')](handleError(_0x5a6fa1));};exports[_0x7c73('0x3f')]=function(_0x400077,_0x488308){logger['info'](_0x7c73('0x40'),_0x400077[_0x7c73('0x2c')]);var _0x181ee0=unholdValidation[_0x7c73('0x37')](_0x400077[_0x7c73('0x2c')]);if(_0x181ee0['length']>0x0){return _0x488308['status'](0x190)[_0x7c73('0x34')](_0x181ee0);}var _0x43fdd3=_0x400077[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0x35bf24=_0x400077[_0x7c73('0x2c')]['sessionId'];return getAgent(_0x43fdd3)['then'](function(_0x213708){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0x213708['name']);emit(util['format'](_0x7c73('0x32'),_0x213708[_0x7c73('0x16')]),_0x7c73('0x41'),{'sessionId':_0x35bf24});return _0x488308[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x42')});})['catch'](handleError(_0x488308));};exports['calls']=function(_0x2fc151,_0x25d61f){logger[_0x7c73('0x2a')](_0x7c73('0x43'),_0x25d61f[_0x7c73('0x2c')]);var _0x2d8461=callsValidation[_0x7c73('0x37')](_0x2fc151[_0x7c73('0x2c')]);if(_0x2d8461[_0x7c73('0x26')]>0x0){return _0x25d61f['status'](0x190)[_0x7c73('0x34')](_0x2d8461);}var _0x1b4967=_0x2fc151[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0xa76b80=respondWithRpcPromise('VoiceChannels');var _0x80b2a5=getAgent(_0x1b4967);return Promise[_0x7c73('0x22')]([_0xa76b80,_0x80b2a5])[_0x7c73('0x1a')](function(_0x403537){var _0x33e8b9=_0x403537[0x0];var _0x542945=_0x403537[0x1];var _0x3d3e69=_[_0x7c73('0x23')](_0x33e8b9['rows'],function(_0x29c8b1){return _0x29c8b1[_0x7c73('0x44')]==_0x542945['id'];});return _0x25d61f['status'](0xc8)['json']({'count':_0x3d3e69[_0x7c73('0x26')],'rows':_0x3d3e69});})[_0x7c73('0x1e')](handleError(_0x25d61f));};exports[_0x7c73('0x45')]=function(_0x23ff58,_0x49756c){logger[_0x7c73('0x2a')](_0x7c73('0x46'),_0x23ff58[_0x7c73('0x2c')]);var _0x5a60c4=conferenceValidation[_0x7c73('0x37')](_0x23ff58[_0x7c73('0x2c')]);if(_0x5a60c4[_0x7c73('0x26')]>0x0){return _0x49756c[_0x7c73('0x17')](0x190)['json'](_0x5a60c4);}var _0x481a37=_0x23ff58[_0x7c73('0x2c')]['userId'];return getAgent(_0x481a37)['then'](function(_0x5f3ec7){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0x5f3ec7[_0x7c73('0x16')]);emit(util[_0x7c73('0x31')](_0x7c73('0x32'),_0x5f3ec7[_0x7c73('0x16')]),_0x7c73('0x47'));return _0x49756c[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x48')});})['catch'](handleError(_0x49756c));};exports[_0x7c73('0x49')]=function(_0x1af980,_0x393326){logger['info']('transfer\x20fired:',_0x1af980[_0x7c73('0x2c')]);var _0x32eca5=transferValidation['validate'](_0x1af980['body']);if(_0x32eca5[_0x7c73('0x26')]>0x0){return _0x393326[_0x7c73('0x17')](0x190)[_0x7c73('0x34')](_0x32eca5);}var _0x1423d7=_0x1af980[_0x7c73('0x2c')][_0x7c73('0x2d')];var _0x426881=_0x1af980['body'][_0x7c73('0x25')];var _0x4433d8=_0x1af980[_0x7c73('0x2c')][_0x7c73('0x4a')];return getAgent(_0x1423d7)['then'](function(_0x5ccfca){logger[_0x7c73('0x2a')](_0x7c73('0x30'),_0x5ccfca['name']);emit(util[_0x7c73('0x31')](_0x7c73('0x32'),_0x5ccfca[_0x7c73('0x16')]),'webbar:transfer',{'sessionId':_0x426881,'transferNumber':_0x4433d8});return _0x393326[_0x7c73('0x17')](0xc8)[_0x7c73('0x34')]({'error':![],'message':_0x7c73('0x4b')});})[_0x7c73('0x1e')](handleError(_0x393326));};