87681430199322780e567de5d264b92f3c61b8ab
[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 _0x3e47=['NotFound','request','then','code','message','catch','User','findOne','agent','VoiceChannels','filter','rows','UserId','sessionId','sessionId\x20','\x20not\x20found!','originate','info','originate\x20fired:','body','length','json','userId','callerId','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','hangup\x20executed!','answer','answer\x20fired:','answer\x20executed!','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','calls\x20fired:','conference','webbar:conference','conference\x20executed!','transfer','transfer\x20fired:','transferNumber','transfer\x20executed!','path','lodash','../../config/environment','bluebird','jayson/promise','client','http','webbarapi','ioredis','redis','localhost','socket.io-emitter','validate','number','userId\x20is\x20required','string','callNumber\x20is\x20required','transferNumber\x20is\x20required','stringify','emit','log','handleError:','error','stack','name','status','send'];(function(_0x1beaff,_0x2b9d0e){var _0x1b1734=function(_0x27b541){while(--_0x27b541){_0x1beaff['push'](_0x1beaff['shift']());}};_0x1b1734(++_0x2b9d0e);}(_0x3e47,0x1a7));var _0x73e4=function(_0xec05a,_0xae2200){_0xec05a=_0xec05a-0x0;var _0x5911e2=_0x3e47[_0xec05a];return _0x5911e2;};'use strict';var path=require(_0x73e4('0x0'));var fs=require('fs');var _=require(_0x73e4('0x1'));var db=require('../../mysqldb')['db'];var config=require(_0x73e4('0x2'));var util=require('util');var BPromise=require(_0x73e4('0x3'));var jayson=require(_0x73e4('0x4'));var amiClient=jayson[_0x73e4('0x5')][_0x73e4('0x6')]({'port':0x232a});var logger=require('../../config/logger')(_0x73e4('0x7'));var Redis=require(_0x73e4('0x8'));config[_0x73e4('0x9')]=_['defaults'](config[_0x73e4('0x9')],{'host':_0x73e4('0xa'),'port':0x18eb});var io=require(_0x73e4('0xb'))(new Redis(config[_0x73e4('0x9')]));var Schema=require(_0x73e4('0xc'));var originateValidation=new Schema({'userId':{'type':_0x73e4('0xd'),'required':[!![],_0x73e4('0xe')]},'callNumber':{'type':_0x73e4('0xf'),'required':[!![],_0x73e4('0x10')]},'callerId':{'type':_0x73e4('0xf')},'callbackUrl':{'type':'string'}});var hangupValidation=new Schema({'userId':{'type':'number','required':[!![],_0x73e4('0xe')]},'sessionId':{'type':_0x73e4('0xf'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x73e4('0xf'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x73e4('0xd'),'required':[!![],_0x73e4('0xe')]},'sessionId':{'type':'string','required':[!![],'sessionId\x20is\x20required']},'transferNumber':{'type':_0x73e4('0xf'),'required':[!![],_0x73e4('0x11')]}});var holdValidation=new Schema({'userId':{'type':_0x73e4('0xd'),'required':[!![],_0x73e4('0xe')]},'sessionId':{'type':_0x73e4('0xf'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x73e4('0xd'),'required':[!![],_0x73e4('0xe')]},'sessionId':{'type':'string','required':![]}});var callsValidation=new Schema({'userId':{'type':'number','required':[!![],_0x73e4('0xe')]}});var conferenceValidation=new Schema({'userId':{'type':_0x73e4('0xd'),'required':[!![],_0x73e4('0xe')]}});function emit(_0x3c75fe,_0x1ba3ec,_0xc02123){logger['info'](_0x3c75fe,_0x1ba3ec,JSON[_0x73e4('0x12')](_0xc02123));io['to'](_0x3c75fe)[_0x73e4('0x13')](_0x1ba3ec,_0xc02123);}function handleError(_0x551227){return function(_0x501959){console[_0x73e4('0x14')](_0x73e4('0x15'),_0x501959,_0x501959 instanceof RangeError);logger[_0x73e4('0x16')](_0x501959[_0x73e4('0x17')]);if(_0x501959 instanceof RangeError){if(_0x501959['name']){delete _0x501959[_0x73e4('0x18')];}_0x551227['status'](0x194)['send'](_0x501959);}else{if(_0x501959[_0x73e4('0x18')]){delete _0x501959[_0x73e4('0x18')];}_0x551227[_0x73e4('0x19')](0x1f4)[_0x73e4('0x1a')](_0x501959);}};}function checkError(){return function(_0x2ed336){if(!_0x2ed336){throw new RangeError(_0x73e4('0x1b'));}return _0x2ed336;};}function respondWithRpcPromise(_0x488290,_0x42edc1){return new BPromise(function(_0x4cc68d,_0x6a8a99){var _0x2cf866=amiClient;return _0x2cf866[_0x73e4('0x1c')](_0x488290,_0x42edc1)[_0x73e4('0x1d')](function(_0x56abb8){if(_0x56abb8[_0x73e4('0x16')]){if(_0x56abb8[_0x73e4('0x16')][_0x73e4('0x1e')]===0x1f4){return _0x6a8a99(_0x56abb8['error']['message']);}return _0x4cc68d(_0x56abb8[_0x73e4('0x16')][_0x73e4('0x1f')]);}else{_0x4cc68d(_0x56abb8['result']);}})[_0x73e4('0x20')](function(_0x3a1d91){_0x6a8a99(_0x3a1d91);});});}function getAgent(_0x585880){return db[_0x73e4('0x21')][_0x73e4('0x22')]({'where':{'id':_0x585880,'role':_0x73e4('0x23')}})['then'](checkError());}function getAgentCheckSession(_0x245cfb,_0x58b33e){return new BPromise(function(_0x414d9d,_0xe3e2b5){var _0x4f468e=respondWithRpcPromise(_0x73e4('0x24'));var _0x5c45b5=getAgent(_0x245cfb);Promise['all']([_0x4f468e,_0x5c45b5])[_0x73e4('0x1d')](function(_0x1f4111){var _0x551c0c=_0x1f4111[0x0];var _0x2c0373=_0x1f4111[0x1];var _0x11c174=_[_0x73e4('0x25')](_0x551c0c[_0x73e4('0x26')],function(_0x4096d4){return _0x4096d4[_0x73e4('0x27')]==_0x2c0373['id']&&_0x4096d4[_0x73e4('0x28')]==_0x58b33e;});if(_0x11c174['length']==0x1){_0x414d9d(_0x2c0373);}else{_0xe3e2b5(new RangeError(_0x73e4('0x29')+_0x58b33e+_0x73e4('0x2a')));}});});}exports[_0x73e4('0x2b')]=function(_0x131b29,_0x2f0fff){logger[_0x73e4('0x2c')](_0x73e4('0x2d'),_0x131b29[_0x73e4('0x2e')]);var _0x2b2a35=originateValidation['validate'](_0x131b29[_0x73e4('0x2e')]);if(_0x2b2a35[_0x73e4('0x2f')]>0x0){return _0x2f0fff[_0x73e4('0x19')](0x190)[_0x73e4('0x30')](_0x2b2a35);}var _0x3ea35f=_0x131b29[_0x73e4('0x2e')][_0x73e4('0x31')];var _0x172adb=_0x131b29[_0x73e4('0x2e')]['callNumber'];var _0xb61c83=_0x131b29[_0x73e4('0x2e')][_0x73e4('0x32')];var _0x356f64=_0x131b29['body']['callbackUrl'];return getAgent(_0x3ea35f)[_0x73e4('0x1d')](function(_0x1eb8bc){logger[_0x73e4('0x2c')](_0x73e4('0x33'),_0x1eb8bc[_0x73e4('0x18')]);emit(util[_0x73e4('0x34')](_0x73e4('0x35'),_0x1eb8bc['name']),_0x73e4('0x36'),{'callNumber':_0x172adb,'callerId':_0xb61c83,'callbackUrl':_0x356f64});return _0x2f0fff[_0x73e4('0x19')](0xc8)[_0x73e4('0x30')]({'error':![],'message':_0x73e4('0x37')});})[_0x73e4('0x20')](handleError(_0x2f0fff));};exports[_0x73e4('0x38')]=function(_0x48ecb0,_0x1f9d71){logger[_0x73e4('0x2c')]('hangup\x20fired:',_0x48ecb0[_0x73e4('0x2e')]);var _0x12d3ea=hangupValidation[_0x73e4('0xc')](_0x48ecb0[_0x73e4('0x2e')]);if(_0x12d3ea[_0x73e4('0x2f')]>0x0){return _0x1f9d71[_0x73e4('0x19')](0x190)['json'](_0x12d3ea);}var _0x31266f=_0x48ecb0['body']['userId'];var _0x50ff8c=_0x48ecb0[_0x73e4('0x2e')][_0x73e4('0x28')];return getAgent(_0x31266f)[_0x73e4('0x1d')](function(_0xdc13e1){logger[_0x73e4('0x2c')]('entityFound:',_0xdc13e1[_0x73e4('0x18')]);emit(util[_0x73e4('0x34')](_0x73e4('0x35'),_0xdc13e1[_0x73e4('0x18')]),'webbar:hangup',{'sessionId':_0x50ff8c});return _0x1f9d71[_0x73e4('0x19')](0xc8)[_0x73e4('0x30')]({'error':![],'message':_0x73e4('0x39')});})['catch'](handleError(_0x1f9d71));};exports[_0x73e4('0x3a')]=function(_0x517756,_0x1e3547){logger[_0x73e4('0x2c')](_0x73e4('0x3b'),_0x517756[_0x73e4('0x2e')]);var _0x456ac9=answerValidation[_0x73e4('0xc')](_0x517756[_0x73e4('0x2e')]);if(_0x456ac9[_0x73e4('0x2f')]>0x0){return _0x1e3547[_0x73e4('0x19')](0x190)[_0x73e4('0x30')](_0x456ac9);}var _0x1babc4=_0x517756[_0x73e4('0x2e')][_0x73e4('0x31')];var _0x1cc3c0=_0x517756[_0x73e4('0x2e')][_0x73e4('0x28')];return getAgent(_0x1babc4)[_0x73e4('0x1d')](function(_0x19b9dd){logger['info']('entityFound:',_0x19b9dd[_0x73e4('0x18')]);emit(util[_0x73e4('0x34')](_0x73e4('0x35'),_0x19b9dd[_0x73e4('0x18')]),'webbar:answer',{'sessionId':_0x1cc3c0});return _0x1e3547[_0x73e4('0x19')](0xc8)['json']({'error':![],'message':_0x73e4('0x3c')});})['catch'](handleError(_0x1e3547));};exports['hold']=function(_0x43bbfa,_0x23543a){logger['info'](_0x73e4('0x3d'),_0x43bbfa[_0x73e4('0x2e')]);var _0xb0fb66=holdValidation[_0x73e4('0xc')](_0x43bbfa['body']);if(_0xb0fb66[_0x73e4('0x2f')]>0x0){return _0x23543a['status'](0x190)['json'](_0xb0fb66);}var _0x300959=_0x43bbfa['body'][_0x73e4('0x31')];var _0x48aa33=_0x43bbfa[_0x73e4('0x2e')][_0x73e4('0x28')];return getAgent(_0x300959)[_0x73e4('0x1d')](function(_0x39456c){logger[_0x73e4('0x2c')](_0x73e4('0x33'),_0x39456c[_0x73e4('0x18')]);emit(util['format'](_0x73e4('0x35'),_0x39456c[_0x73e4('0x18')]),_0x73e4('0x3e'),{'sessionId':_0x48aa33});return _0x23543a[_0x73e4('0x19')](0xc8)['json']({'error':![],'message':_0x73e4('0x3f')});})[_0x73e4('0x20')](handleError(_0x23543a));};exports[_0x73e4('0x40')]=function(_0x2597c1,_0x6596a8){logger['info'](_0x73e4('0x41'),_0x2597c1['body']);var _0xa74011=unholdValidation[_0x73e4('0xc')](_0x2597c1[_0x73e4('0x2e')]);if(_0xa74011['length']>0x0){return _0x6596a8[_0x73e4('0x19')](0x190)['json'](_0xa74011);}var _0x54049f=_0x2597c1['body']['userId'];var _0xf8cab9=_0x2597c1[_0x73e4('0x2e')]['sessionId'];return getAgent(_0x54049f)[_0x73e4('0x1d')](function(_0x3015c4){logger['info'](_0x73e4('0x33'),_0x3015c4['name']);emit(util[_0x73e4('0x34')](_0x73e4('0x35'),_0x3015c4['name']),_0x73e4('0x42'),{'sessionId':_0xf8cab9});return _0x6596a8['status'](0xc8)[_0x73e4('0x30')]({'error':![],'message':'unhold\x20executed!'});})['catch'](handleError(_0x6596a8));};exports['calls']=function(_0x537c7b,_0x3bce19){logger[_0x73e4('0x2c')](_0x73e4('0x43'),_0x3bce19[_0x73e4('0x2e')]);var _0x820772=callsValidation['validate'](_0x537c7b['body']);if(_0x820772[_0x73e4('0x2f')]>0x0){return _0x3bce19['status'](0x190)[_0x73e4('0x30')](_0x820772);}var _0x380308=_0x537c7b[_0x73e4('0x2e')][_0x73e4('0x31')];var _0x5c013b=respondWithRpcPromise(_0x73e4('0x24'));var _0xd73936=getAgent(_0x380308);return Promise['all']([_0x5c013b,_0xd73936])['then'](function(_0x8196cd){var _0x3dfabe=_0x8196cd[0x0];var _0x3df763=_0x8196cd[0x1];var _0x5eaa52=_[_0x73e4('0x25')](_0x3dfabe[_0x73e4('0x26')],function(_0x14aad2){return _0x14aad2[_0x73e4('0x27')]==_0x3df763['id'];});return _0x3bce19['status'](0xc8)['json']({'count':_0x5eaa52[_0x73e4('0x2f')],'rows':_0x5eaa52});})[_0x73e4('0x20')](handleError(_0x3bce19));};exports[_0x73e4('0x44')]=function(_0x40ef8b,_0x39abf1){logger[_0x73e4('0x2c')]('conference\x20fired:',_0x40ef8b[_0x73e4('0x2e')]);var _0x1a5a68=conferenceValidation[_0x73e4('0xc')](_0x40ef8b[_0x73e4('0x2e')]);if(_0x1a5a68[_0x73e4('0x2f')]>0x0){return _0x39abf1[_0x73e4('0x19')](0x190)[_0x73e4('0x30')](_0x1a5a68);}var _0x4ae2a9=_0x40ef8b[_0x73e4('0x2e')][_0x73e4('0x31')];return getAgent(_0x4ae2a9)[_0x73e4('0x1d')](function(_0x4fd707){logger[_0x73e4('0x2c')](_0x73e4('0x33'),_0x4fd707[_0x73e4('0x18')]);emit(util[_0x73e4('0x34')](_0x73e4('0x35'),_0x4fd707[_0x73e4('0x18')]),_0x73e4('0x45'));return _0x39abf1[_0x73e4('0x19')](0xc8)[_0x73e4('0x30')]({'error':![],'message':_0x73e4('0x46')});})[_0x73e4('0x20')](handleError(_0x39abf1));};exports[_0x73e4('0x47')]=function(_0x36cd12,_0x2ce8e8){logger['info'](_0x73e4('0x48'),_0x36cd12[_0x73e4('0x2e')]);var _0x2d82b1=transferValidation[_0x73e4('0xc')](_0x36cd12[_0x73e4('0x2e')]);if(_0x2d82b1['length']>0x0){return _0x2ce8e8['status'](0x190)[_0x73e4('0x30')](_0x2d82b1);}var _0x14160b=_0x36cd12['body'][_0x73e4('0x31')];var _0x5bb963=_0x36cd12['body'][_0x73e4('0x28')];var _0x2eceb5=_0x36cd12[_0x73e4('0x2e')][_0x73e4('0x49')];return getAgent(_0x14160b)[_0x73e4('0x1d')](function(_0x131449){logger[_0x73e4('0x2c')](_0x73e4('0x33'),_0x131449[_0x73e4('0x18')]);emit(util['format'](_0x73e4('0x35'),_0x131449[_0x73e4('0x18')]),'webbar:transfer',{'sessionId':_0x5bb963,'transferNumber':_0x2eceb5});return _0x2ce8e8[_0x73e4('0x19')](0xc8)['json']({'error':![],'message':_0x73e4('0x4a')});})[_0x73e4('0x20')](handleError(_0x2ce8e8));};