f3f38a54ad7c250b391915c8bd88b84b7dbe1998
[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 _0x0d77=['info','stringify','emit','log','handleError:','error','name','status','send','NotFound','request','then','code','message','result','User','findOne','agent','VoiceChannels','filter','rows','UserId','sessionId','length','sessionId\x20','\x20not\x20found!','originate','originate\x20fired:','body','validate','json','userId','callNumber','callerId','callbackUrl','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','catch','hangup','hangup\x20fired:','hangup\x20executed!','answer','answer\x20fired:','answer\x20executed!','hold','hold\x20fired:','webbar:hold','hold\x20executed!','webbar:unhold','calls','calls\x20fired:','conference\x20fired:','webbar:conference','conference\x20executed!','transfer','transferNumber','webbar:transfer','transfer\x20executed!','path','lodash','../../mysqldb','util','bluebird','jayson/promise','http','../../config/logger','ioredis','redis','defaults','localhost','number','string','userId\x20is\x20required','sessionId\x20is\x20required','transferNumber\x20is\x20required'];(function(_0x42d134,_0x521b9f){var _0x5bacd4=function(_0x222d18){while(--_0x222d18){_0x42d134['push'](_0x42d134['shift']());}};_0x5bacd4(++_0x521b9f);}(_0x0d77,0x8b));var _0x70d7=function(_0x4b2c5a,_0x43c243){_0x4b2c5a=_0x4b2c5a-0x0;var _0x4b80e6=_0x0d77[_0x4b2c5a];return _0x4b80e6;};'use strict';var path=require(_0x70d7('0x0'));var fs=require('fs');var _=require(_0x70d7('0x1'));var db=require(_0x70d7('0x2'))['db'];var config=require('../../config/environment');var util=require(_0x70d7('0x3'));var BPromise=require(_0x70d7('0x4'));var jayson=require(_0x70d7('0x5'));var amiClient=jayson['client'][_0x70d7('0x6')]({'port':0x232a});var logger=require(_0x70d7('0x7'))('webbarapi');var Redis=require(_0x70d7('0x8'));config[_0x70d7('0x9')]=_[_0x70d7('0xa')](config[_0x70d7('0x9')],{'host':_0x70d7('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x70d7('0x9')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],'userId\x20is\x20required']},'callNumber':{'type':_0x70d7('0xd'),'required':[!![],'callNumber\x20is\x20required']},'callerId':{'type':_0x70d7('0xd')},'callbackUrl':{'type':_0x70d7('0xd')}});var hangupValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x70d7('0xd'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':'string','required':![]}});var transferValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],_0x70d7('0xe')]},'sessionId':{'type':_0x70d7('0xd'),'required':[!![],_0x70d7('0xf')]},'transferNumber':{'type':_0x70d7('0xd'),'required':[!![],_0x70d7('0x10')]}});var holdValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],_0x70d7('0xe')]},'sessionId':{'type':_0x70d7('0xd'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x70d7('0xd'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],'userId\x20is\x20required']}});var conferenceValidation=new Schema({'userId':{'type':_0x70d7('0xc'),'required':[!![],_0x70d7('0xe')]}});function emit(_0x4e9dfd,_0x5e10fc,_0x5dfbc2){logger[_0x70d7('0x11')](_0x4e9dfd,_0x5e10fc,JSON[_0x70d7('0x12')](_0x5dfbc2));io['to'](_0x4e9dfd)[_0x70d7('0x13')](_0x5e10fc,_0x5dfbc2);}function handleError(_0x191191){return function(_0x90afee){console[_0x70d7('0x14')](_0x70d7('0x15'),_0x90afee,_0x90afee instanceof RangeError);logger[_0x70d7('0x16')](_0x90afee['stack']);if(_0x90afee instanceof RangeError){if(_0x90afee[_0x70d7('0x17')]){delete _0x90afee['name'];}_0x191191[_0x70d7('0x18')](0x194)[_0x70d7('0x19')](_0x90afee);}else{if(_0x90afee['name']){delete _0x90afee[_0x70d7('0x17')];}_0x191191['status'](0x1f4)[_0x70d7('0x19')](_0x90afee);}};}function checkError(){return function(_0x49fc68){if(!_0x49fc68){throw new RangeError(_0x70d7('0x1a'));}return _0x49fc68;};}function respondWithRpcPromise(_0x25e20c,_0xdba842){return new BPromise(function(_0x23ae30,_0x334aac){var _0x100238=amiClient;return _0x100238[_0x70d7('0x1b')](_0x25e20c,_0xdba842)[_0x70d7('0x1c')](function(_0x5de06f){if(_0x5de06f['error']){if(_0x5de06f[_0x70d7('0x16')][_0x70d7('0x1d')]===0x1f4){return _0x334aac(_0x5de06f[_0x70d7('0x16')][_0x70d7('0x1e')]);}return _0x23ae30(_0x5de06f['error'][_0x70d7('0x1e')]);}else{_0x23ae30(_0x5de06f[_0x70d7('0x1f')]);}})['catch'](function(_0x57e98c){_0x334aac(_0x57e98c);});});}function getAgent(_0x3d44fa){return db[_0x70d7('0x20')][_0x70d7('0x21')]({'where':{'id':_0x3d44fa,'role':_0x70d7('0x22')}})[_0x70d7('0x1c')](checkError());}function getAgentCheckSession(_0x1c3a9d,_0x2ccce1){return new BPromise(function(_0x2d3bc0,_0x64586a){var _0x586dcc=respondWithRpcPromise(_0x70d7('0x23'));var _0x5e9b43=getAgent(_0x1c3a9d);Promise['all']([_0x586dcc,_0x5e9b43])[_0x70d7('0x1c')](function(_0x3f078d){var _0x1ce4a0=_0x3f078d[0x0];var _0x1159d6=_0x3f078d[0x1];var _0xa83d87=_[_0x70d7('0x24')](_0x1ce4a0[_0x70d7('0x25')],function(_0x405f05){return _0x405f05[_0x70d7('0x26')]==_0x1159d6['id']&&_0x405f05[_0x70d7('0x27')]==_0x2ccce1;});if(_0xa83d87[_0x70d7('0x28')]==0x1){_0x2d3bc0(_0x1159d6);}else{_0x64586a(new RangeError(_0x70d7('0x29')+_0x2ccce1+_0x70d7('0x2a')));}});});}exports[_0x70d7('0x2b')]=function(_0x5550a2,_0x1c84c3){logger[_0x70d7('0x11')](_0x70d7('0x2c'),_0x5550a2[_0x70d7('0x2d')]);var _0x3d0814=originateValidation[_0x70d7('0x2e')](_0x5550a2['body']);if(_0x3d0814[_0x70d7('0x28')]>0x0){return _0x1c84c3[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0x3d0814);}var _0x3257c5=_0x5550a2[_0x70d7('0x2d')][_0x70d7('0x30')];var _0x1b14df=_0x5550a2[_0x70d7('0x2d')][_0x70d7('0x31')];var _0x12aa60=_0x5550a2['body'][_0x70d7('0x32')];var _0xeebec8=_0x5550a2[_0x70d7('0x2d')][_0x70d7('0x33')];return getAgent(_0x3257c5)[_0x70d7('0x1c')](function(_0xe7fd2f){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0xe7fd2f[_0x70d7('0x17')]);emit(util[_0x70d7('0x35')](_0x70d7('0x36'),_0xe7fd2f[_0x70d7('0x17')]),_0x70d7('0x37'),{'callNumber':_0x1b14df,'callerId':_0x12aa60,'callbackUrl':_0xeebec8});return _0x1c84c3[_0x70d7('0x18')](0xc8)[_0x70d7('0x2f')]({'error':![],'message':_0x70d7('0x38')});})[_0x70d7('0x39')](handleError(_0x1c84c3));};exports[_0x70d7('0x3a')]=function(_0x429fc9,_0x77d8b0){logger[_0x70d7('0x11')](_0x70d7('0x3b'),_0x429fc9[_0x70d7('0x2d')]);var _0xb191c5=hangupValidation[_0x70d7('0x2e')](_0x429fc9[_0x70d7('0x2d')]);if(_0xb191c5['length']>0x0){return _0x77d8b0[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0xb191c5);}var _0x343bd6=_0x429fc9[_0x70d7('0x2d')]['userId'];var _0x1e0553=_0x429fc9['body']['sessionId'];return getAgent(_0x343bd6)[_0x70d7('0x1c')](function(_0x552976){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x552976['name']);emit(util[_0x70d7('0x35')]('user:%s',_0x552976[_0x70d7('0x17')]),'webbar:hangup',{'sessionId':_0x1e0553});return _0x77d8b0[_0x70d7('0x18')](0xc8)['json']({'error':![],'message':_0x70d7('0x3c')});})[_0x70d7('0x39')](handleError(_0x77d8b0));};exports[_0x70d7('0x3d')]=function(_0x2a399d,_0x2ccfed){logger['info'](_0x70d7('0x3e'),_0x2a399d[_0x70d7('0x2d')]);var _0x1750f3=answerValidation[_0x70d7('0x2e')](_0x2a399d['body']);if(_0x1750f3[_0x70d7('0x28')]>0x0){return _0x2ccfed['status'](0x190)[_0x70d7('0x2f')](_0x1750f3);}var _0x3812dc=_0x2a399d[_0x70d7('0x2d')][_0x70d7('0x30')];var _0x10817a=_0x2a399d[_0x70d7('0x2d')][_0x70d7('0x27')];return getAgent(_0x3812dc)['then'](function(_0x26df78){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x26df78[_0x70d7('0x17')]);emit(util[_0x70d7('0x35')](_0x70d7('0x36'),_0x26df78[_0x70d7('0x17')]),'webbar:answer',{'sessionId':_0x10817a});return _0x2ccfed['status'](0xc8)[_0x70d7('0x2f')]({'error':![],'message':_0x70d7('0x3f')});})[_0x70d7('0x39')](handleError(_0x2ccfed));};exports[_0x70d7('0x40')]=function(_0x247b20,_0x4c7940){logger[_0x70d7('0x11')](_0x70d7('0x41'),_0x247b20[_0x70d7('0x2d')]);var _0x4cc0f5=holdValidation['validate'](_0x247b20['body']);if(_0x4cc0f5[_0x70d7('0x28')]>0x0){return _0x4c7940[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0x4cc0f5);}var _0x3c94d1=_0x247b20[_0x70d7('0x2d')][_0x70d7('0x30')];var _0x58cc41=_0x247b20['body'][_0x70d7('0x27')];return getAgent(_0x3c94d1)['then'](function(_0x4a9b84){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x4a9b84[_0x70d7('0x17')]);emit(util['format'](_0x70d7('0x36'),_0x4a9b84[_0x70d7('0x17')]),_0x70d7('0x42'),{'sessionId':_0x58cc41});return _0x4c7940[_0x70d7('0x18')](0xc8)['json']({'error':![],'message':_0x70d7('0x43')});})[_0x70d7('0x39')](handleError(_0x4c7940));};exports['unhold']=function(_0x2f94e6,_0x1fbb91){logger[_0x70d7('0x11')]('unhold\x20fired:',_0x2f94e6['body']);var _0x226c83=unholdValidation[_0x70d7('0x2e')](_0x2f94e6[_0x70d7('0x2d')]);if(_0x226c83[_0x70d7('0x28')]>0x0){return _0x1fbb91[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0x226c83);}var _0x4c3bc8=_0x2f94e6['body'][_0x70d7('0x30')];var _0x5a13f0=_0x2f94e6['body'][_0x70d7('0x27')];return getAgent(_0x4c3bc8)[_0x70d7('0x1c')](function(_0x4b6c45){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x4b6c45[_0x70d7('0x17')]);emit(util[_0x70d7('0x35')]('user:%s',_0x4b6c45['name']),_0x70d7('0x44'),{'sessionId':_0x5a13f0});return _0x1fbb91['status'](0xc8)['json']({'error':![],'message':'unhold\x20executed!'});})[_0x70d7('0x39')](handleError(_0x1fbb91));};exports[_0x70d7('0x45')]=function(_0x21db92,_0x27d16e){logger[_0x70d7('0x11')](_0x70d7('0x46'),_0x27d16e[_0x70d7('0x2d')]);var _0xd36207=callsValidation[_0x70d7('0x2e')](_0x21db92['body']);if(_0xd36207[_0x70d7('0x28')]>0x0){return _0x27d16e[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0xd36207);}var _0x362c3d=_0x21db92[_0x70d7('0x2d')][_0x70d7('0x30')];var _0x2a2d83=respondWithRpcPromise(_0x70d7('0x23'));var _0x3b3376=getAgent(_0x362c3d);return Promise['all']([_0x2a2d83,_0x3b3376])[_0x70d7('0x1c')](function(_0x5c9be7){var _0xe442dc=_0x5c9be7[0x0];var _0x3d93c5=_0x5c9be7[0x1];var _0x184b51=_['filter'](_0xe442dc[_0x70d7('0x25')],function(_0x12cf11){return _0x12cf11[_0x70d7('0x26')]==_0x3d93c5['id'];});return _0x27d16e[_0x70d7('0x18')](0xc8)['json']({'count':_0x184b51[_0x70d7('0x28')],'rows':_0x184b51});})['catch'](handleError(_0x27d16e));};exports['conference']=function(_0x45b1fa,_0x3cedaa){logger[_0x70d7('0x11')](_0x70d7('0x47'),_0x45b1fa[_0x70d7('0x2d')]);var _0x4a0c27=conferenceValidation['validate'](_0x45b1fa[_0x70d7('0x2d')]);if(_0x4a0c27['length']>0x0){return _0x3cedaa[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0x4a0c27);}var _0x139aee=_0x45b1fa[_0x70d7('0x2d')][_0x70d7('0x30')];return getAgent(_0x139aee)[_0x70d7('0x1c')](function(_0x1a7481){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x1a7481[_0x70d7('0x17')]);emit(util[_0x70d7('0x35')]('user:%s',_0x1a7481[_0x70d7('0x17')]),_0x70d7('0x48'));return _0x3cedaa[_0x70d7('0x18')](0xc8)[_0x70d7('0x2f')]({'error':![],'message':_0x70d7('0x49')});})['catch'](handleError(_0x3cedaa));};exports[_0x70d7('0x4a')]=function(_0x1c7a2a,_0x5d974e){logger[_0x70d7('0x11')]('transfer\x20fired:',_0x1c7a2a[_0x70d7('0x2d')]);var _0x5d606f=transferValidation[_0x70d7('0x2e')](_0x1c7a2a[_0x70d7('0x2d')]);if(_0x5d606f[_0x70d7('0x28')]>0x0){return _0x5d974e[_0x70d7('0x18')](0x190)[_0x70d7('0x2f')](_0x5d606f);}var _0x1655bf=_0x1c7a2a['body'][_0x70d7('0x30')];var _0x5ad885=_0x1c7a2a[_0x70d7('0x2d')][_0x70d7('0x27')];var _0x38b5ee=_0x1c7a2a[_0x70d7('0x2d')][_0x70d7('0x4b')];return getAgent(_0x1655bf)[_0x70d7('0x1c')](function(_0x5e39c4){logger[_0x70d7('0x11')](_0x70d7('0x34'),_0x5e39c4[_0x70d7('0x17')]);emit(util['format'](_0x70d7('0x36'),_0x5e39c4[_0x70d7('0x17')]),_0x70d7('0x4c'),{'sessionId':_0x5ad885,'transferNumber':_0x38b5ee});return _0x5d974e[_0x70d7('0x18')](0xc8)['json']({'error':![],'message':_0x70d7('0x4d')});})[_0x70d7('0x39')](handleError(_0x5d974e));};