dbab44440234ec23275f9dda23f44dc1e0317d4a
[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 _0x76ea=['callbackUrl','entityFound:','format','user:%s','originate\x20executed!','catch','hangup\x20executed!','answer','answer\x20fired:','webbar:answer','hold','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','unhold\x20executed!','calls','calls\x20fired:','conference','webbar:conference','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','path','lodash','../../config/environment','bluebird','jayson/promise','client','http','../../config/logger','webbarapi','ioredis','redis','defaults','validate','userId\x20is\x20required','callNumber\x20is\x20required','string','number','sessionId\x20is\x20required','transferNumber\x20is\x20required','info','stringify','emit','log','error','stack','name','status','send','NotFound','request','then','code','message','result','User','findOne','VoiceChannels','all','filter','rows','UserId','sessionId','length','sessionId\x20','originate','body','json','userId','callerId'];(function(_0x23ecfa,_0xa52ceb){var _0xbfb13c=function(_0x42267f){while(--_0x42267f){_0x23ecfa['push'](_0x23ecfa['shift']());}};_0xbfb13c(++_0xa52ceb);}(_0x76ea,0x1dc));var _0xa76e=function(_0x7c8447,_0x3cae4a){_0x7c8447=_0x7c8447-0x0;var _0x413f86=_0x76ea[_0x7c8447];return _0x413f86;};'use strict';var path=require(_0xa76e('0x0'));var fs=require('fs');var _=require(_0xa76e('0x1'));var db=require('../../mysqldb')['db'];var config=require(_0xa76e('0x2'));var util=require('util');var BPromise=require(_0xa76e('0x3'));var jayson=require(_0xa76e('0x4'));var amiClient=jayson[_0xa76e('0x5')][_0xa76e('0x6')]({'port':0x232a});var logger=require(_0xa76e('0x7'))(_0xa76e('0x8'));var Redis=require(_0xa76e('0x9'));config[_0xa76e('0xa')]=_[_0xa76e('0xb')](config[_0xa76e('0xa')],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xa76e('0xa')]));var Schema=require(_0xa76e('0xc'));var originateValidation=new Schema({'userId':{'type':'number','required':[!![],_0xa76e('0xd')]},'callNumber':{'type':'string','required':[!![],_0xa76e('0xe')]},'callerId':{'type':'string'},'callbackUrl':{'type':_0xa76e('0xf')}});var hangupValidation=new Schema({'userId':{'type':_0xa76e('0x10'),'required':[!![],_0xa76e('0xd')]},'sessionId':{'type':'string','required':![]}});var answerValidation=new Schema({'userId':{'type':_0xa76e('0x10'),'required':[!![],_0xa76e('0xd')]},'sessionId':{'type':_0xa76e('0xf'),'required':![]}});var transferValidation=new Schema({'userId':{'type':'number','required':[!![],_0xa76e('0xd')]},'sessionId':{'type':'string','required':[!![],_0xa76e('0x11')]},'transferNumber':{'type':_0xa76e('0xf'),'required':[!![],_0xa76e('0x12')]}});var holdValidation=new Schema({'userId':{'type':'number','required':[!![],_0xa76e('0xd')]},'sessionId':{'type':_0xa76e('0xf'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0xa76e('0xf'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0xa76e('0x10'),'required':[!![],'userId\x20is\x20required']}});var conferenceValidation=new Schema({'userId':{'type':'number','required':[!![],_0xa76e('0xd')]}});function emit(_0x232008,_0x149f96,_0x268922){logger[_0xa76e('0x13')](_0x232008,_0x149f96,JSON[_0xa76e('0x14')](_0x268922));io['to'](_0x232008)[_0xa76e('0x15')](_0x149f96,_0x268922);}function handleError(_0x1bf27f){return function(_0x21c541){console[_0xa76e('0x16')]('handleError:',_0x21c541,_0x21c541 instanceof RangeError);logger[_0xa76e('0x17')](_0x21c541[_0xa76e('0x18')]);if(_0x21c541 instanceof RangeError){if(_0x21c541[_0xa76e('0x19')]){delete _0x21c541[_0xa76e('0x19')];}_0x1bf27f[_0xa76e('0x1a')](0x194)[_0xa76e('0x1b')](_0x21c541);}else{if(_0x21c541['name']){delete _0x21c541[_0xa76e('0x19')];}_0x1bf27f[_0xa76e('0x1a')](0x1f4)[_0xa76e('0x1b')](_0x21c541);}};}function checkError(){return function(_0x52fbbc){if(!_0x52fbbc){throw new RangeError(_0xa76e('0x1c'));}return _0x52fbbc;};}function respondWithRpcPromise(_0x395ca8,_0x457495){return new BPromise(function(_0x312088,_0x13a088){var _0x997beb=amiClient;return _0x997beb[_0xa76e('0x1d')](_0x395ca8,_0x457495)[_0xa76e('0x1e')](function(_0x35733e){if(_0x35733e[_0xa76e('0x17')]){if(_0x35733e[_0xa76e('0x17')][_0xa76e('0x1f')]===0x1f4){return _0x13a088(_0x35733e[_0xa76e('0x17')]['message']);}return _0x312088(_0x35733e[_0xa76e('0x17')][_0xa76e('0x20')]);}else{_0x312088(_0x35733e[_0xa76e('0x21')]);}})['catch'](function(_0x39d697){_0x13a088(_0x39d697);});});}function getAgent(_0x3e455e){return db[_0xa76e('0x22')][_0xa76e('0x23')]({'where':{'id':_0x3e455e,'role':'agent'}})[_0xa76e('0x1e')](checkError());}function getAgentCheckSession(_0x5bb0d9,_0x1de7ce){return new BPromise(function(_0xf04479,_0x320c51){var _0x5adbd5=respondWithRpcPromise(_0xa76e('0x24'));var _0x55cd17=getAgent(_0x5bb0d9);Promise[_0xa76e('0x25')]([_0x5adbd5,_0x55cd17])[_0xa76e('0x1e')](function(_0x1d469e){var _0x5c19f5=_0x1d469e[0x0];var _0xf3c22d=_0x1d469e[0x1];var _0x28a354=_[_0xa76e('0x26')](_0x5c19f5[_0xa76e('0x27')],function(_0x37e24d){return _0x37e24d[_0xa76e('0x28')]==_0xf3c22d['id']&&_0x37e24d[_0xa76e('0x29')]==_0x1de7ce;});if(_0x28a354[_0xa76e('0x2a')]==0x1){_0xf04479(_0xf3c22d);}else{_0x320c51(new RangeError(_0xa76e('0x2b')+_0x1de7ce+'\x20not\x20found!'));}});});}exports[_0xa76e('0x2c')]=function(_0xf2224d,_0x32d4ca){logger['info']('originate\x20fired:',_0xf2224d['body']);var _0x4c810e=originateValidation[_0xa76e('0xc')](_0xf2224d[_0xa76e('0x2d')]);if(_0x4c810e[_0xa76e('0x2a')]>0x0){return _0x32d4ca[_0xa76e('0x1a')](0x190)[_0xa76e('0x2e')](_0x4c810e);}var _0xacefb9=_0xf2224d[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x1c2ac6=_0xf2224d[_0xa76e('0x2d')]['callNumber'];var _0x577bc8=_0xf2224d['body'][_0xa76e('0x30')];var _0x217e7f=_0xf2224d[_0xa76e('0x2d')][_0xa76e('0x31')];return getAgent(_0xacefb9)['then'](function(_0x44a824){logger[_0xa76e('0x13')](_0xa76e('0x32'),_0x44a824['name']);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x44a824[_0xa76e('0x19')]),'webbar:originate',{'callNumber':_0x1c2ac6,'callerId':_0x577bc8,'callbackUrl':_0x217e7f});return _0x32d4ca[_0xa76e('0x1a')](0xc8)[_0xa76e('0x2e')]({'error':![],'message':_0xa76e('0x35')});})[_0xa76e('0x36')](handleError(_0x32d4ca));};exports['hangup']=function(_0x3dcf70,_0x4ff024){logger[_0xa76e('0x13')]('hangup\x20fired:',_0x3dcf70[_0xa76e('0x2d')]);var _0x572377=hangupValidation['validate'](_0x3dcf70['body']);if(_0x572377[_0xa76e('0x2a')]>0x0){return _0x4ff024['status'](0x190)['json'](_0x572377);}var _0x326b11=_0x3dcf70[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x186814=_0x3dcf70[_0xa76e('0x2d')][_0xa76e('0x29')];return getAgent(_0x326b11)[_0xa76e('0x1e')](function(_0x135c8d){logger['info']('entityFound:',_0x135c8d[_0xa76e('0x19')]);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x135c8d[_0xa76e('0x19')]),'webbar:hangup',{'sessionId':_0x186814});return _0x4ff024[_0xa76e('0x1a')](0xc8)['json']({'error':![],'message':_0xa76e('0x37')});})['catch'](handleError(_0x4ff024));};exports[_0xa76e('0x38')]=function(_0x265b99,_0x6039c8){logger['info'](_0xa76e('0x39'),_0x265b99['body']);var _0x4ec561=answerValidation[_0xa76e('0xc')](_0x265b99[_0xa76e('0x2d')]);if(_0x4ec561[_0xa76e('0x2a')]>0x0){return _0x6039c8['status'](0x190)[_0xa76e('0x2e')](_0x4ec561);}var _0x1d2ce9=_0x265b99[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x394b00=_0x265b99[_0xa76e('0x2d')][_0xa76e('0x29')];return getAgent(_0x1d2ce9)['then'](function(_0x48a43e){logger['info'](_0xa76e('0x32'),_0x48a43e[_0xa76e('0x19')]);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x48a43e[_0xa76e('0x19')]),_0xa76e('0x3a'),{'sessionId':_0x394b00});return _0x6039c8[_0xa76e('0x1a')](0xc8)[_0xa76e('0x2e')]({'error':![],'message':'answer\x20executed!'});})[_0xa76e('0x36')](handleError(_0x6039c8));};exports[_0xa76e('0x3b')]=function(_0x5e81ed,_0x1f232d){logger['info'](_0xa76e('0x3c'),_0x5e81ed[_0xa76e('0x2d')]);var _0x28cdd0=holdValidation[_0xa76e('0xc')](_0x5e81ed['body']);if(_0x28cdd0[_0xa76e('0x2a')]>0x0){return _0x1f232d[_0xa76e('0x1a')](0x190)[_0xa76e('0x2e')](_0x28cdd0);}var _0x551371=_0x5e81ed[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x5d80dc=_0x5e81ed['body'][_0xa76e('0x29')];return getAgent(_0x551371)[_0xa76e('0x1e')](function(_0x2bea83){logger['info']('entityFound:',_0x2bea83[_0xa76e('0x19')]);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x2bea83[_0xa76e('0x19')]),_0xa76e('0x3d'),{'sessionId':_0x5d80dc});return _0x1f232d['status'](0xc8)['json']({'error':![],'message':_0xa76e('0x3e')});})[_0xa76e('0x36')](handleError(_0x1f232d));};exports[_0xa76e('0x3f')]=function(_0x491f6c,_0x2503ba){logger[_0xa76e('0x13')](_0xa76e('0x40'),_0x491f6c[_0xa76e('0x2d')]);var _0x1e450a=unholdValidation[_0xa76e('0xc')](_0x491f6c['body']);if(_0x1e450a[_0xa76e('0x2a')]>0x0){return _0x2503ba['status'](0x190)[_0xa76e('0x2e')](_0x1e450a);}var _0x1c145c=_0x491f6c['body'][_0xa76e('0x2f')];var _0x4ed488=_0x491f6c[_0xa76e('0x2d')][_0xa76e('0x29')];return getAgent(_0x1c145c)[_0xa76e('0x1e')](function(_0x5be174){logger[_0xa76e('0x13')]('entityFound:',_0x5be174['name']);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x5be174['name']),_0xa76e('0x41'),{'sessionId':_0x4ed488});return _0x2503ba[_0xa76e('0x1a')](0xc8)[_0xa76e('0x2e')]({'error':![],'message':_0xa76e('0x42')});})[_0xa76e('0x36')](handleError(_0x2503ba));};exports[_0xa76e('0x43')]=function(_0x440663,_0x454c1c){logger[_0xa76e('0x13')](_0xa76e('0x44'),_0x454c1c['body']);var _0x27a7ff=callsValidation['validate'](_0x440663['body']);if(_0x27a7ff[_0xa76e('0x2a')]>0x0){return _0x454c1c['status'](0x190)[_0xa76e('0x2e')](_0x27a7ff);}var _0x359856=_0x440663[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x226cdd=respondWithRpcPromise('VoiceChannels');var _0x167d37=getAgent(_0x359856);return Promise[_0xa76e('0x25')]([_0x226cdd,_0x167d37])[_0xa76e('0x1e')](function(_0x296c1b){var _0x1ee696=_0x296c1b[0x0];var _0x19d706=_0x296c1b[0x1];var _0x32e0df=_['filter'](_0x1ee696[_0xa76e('0x27')],function(_0x100f6b){return _0x100f6b[_0xa76e('0x28')]==_0x19d706['id'];});return _0x454c1c['status'](0xc8)[_0xa76e('0x2e')]({'count':_0x32e0df['length'],'rows':_0x32e0df});})[_0xa76e('0x36')](handleError(_0x454c1c));};exports[_0xa76e('0x45')]=function(_0x1a0a1b,_0x441cb0){logger['info']('conference\x20fired:',_0x1a0a1b[_0xa76e('0x2d')]);var _0x3c6d8a=conferenceValidation[_0xa76e('0xc')](_0x1a0a1b[_0xa76e('0x2d')]);if(_0x3c6d8a[_0xa76e('0x2a')]>0x0){return _0x441cb0[_0xa76e('0x1a')](0x190)[_0xa76e('0x2e')](_0x3c6d8a);}var _0x27925a=_0x1a0a1b['body'][_0xa76e('0x2f')];return getAgent(_0x27925a)['then'](function(_0x48c7cf){logger['info'](_0xa76e('0x32'),_0x48c7cf['name']);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x48c7cf[_0xa76e('0x19')]),_0xa76e('0x46'));return _0x441cb0[_0xa76e('0x1a')](0xc8)[_0xa76e('0x2e')]({'error':![],'message':_0xa76e('0x47')});})['catch'](handleError(_0x441cb0));};exports[_0xa76e('0x48')]=function(_0x42ef55,_0x53656c){logger['info'](_0xa76e('0x49'),_0x42ef55[_0xa76e('0x2d')]);var _0x5a90f0=transferValidation[_0xa76e('0xc')](_0x42ef55[_0xa76e('0x2d')]);if(_0x5a90f0[_0xa76e('0x2a')]>0x0){return _0x53656c[_0xa76e('0x1a')](0x190)['json'](_0x5a90f0);}var _0x59205b=_0x42ef55[_0xa76e('0x2d')][_0xa76e('0x2f')];var _0x482892=_0x42ef55[_0xa76e('0x2d')][_0xa76e('0x29')];var _0xb5419c=_0x42ef55[_0xa76e('0x2d')][_0xa76e('0x4a')];return getAgent(_0x59205b)[_0xa76e('0x1e')](function(_0x3a1197){logger[_0xa76e('0x13')]('entityFound:',_0x3a1197['name']);emit(util[_0xa76e('0x33')](_0xa76e('0x34'),_0x3a1197[_0xa76e('0x19')]),'webbar:transfer',{'sessionId':_0x482892,'transferNumber':_0xb5419c});return _0x53656c['status'](0xc8)[_0xa76e('0x2e')]({'error':![],'message':'transfer\x20executed!'});})[_0xa76e('0x36')](handleError(_0x53656c));};