abea9b6217d3e1be5d7b97429fd8e2d0abbe984f
[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 _0x2504=['length','\x20not\x20found!','originate','info','body','json','userId','callNumber','entityFound:','webbar:originate','originate\x20executed!','catch','hangup','format','hangup\x20executed!','answer','answer\x20executed!','hold','user:%s','hold\x20executed!','unhold','unhold\x20executed!','calls','calls\x20fired:','conference','webbar:conference','conference\x20executed!','transfer\x20fired:','transferNumber','webbar:transfer','transfer\x20executed!','path','lodash','../../mysqldb','../../config/environment','util','bluebird','jayson/promise','client','http','../../config/logger','webbarapi','ioredis','defaults','socket.io-emitter','redis','validate','number','userId\x20is\x20required','callNumber\x20is\x20required','string','sessionId\x20is\x20required','transferNumber\x20is\x20required','stringify','emit','log','handleError:','error','name','send','status','NotFound','then','message','result','User','VoiceChannels','all','sessionId'];(function(_0x484b91,_0x3ad43d){var _0x561175=function(_0x2fe335){while(--_0x2fe335){_0x484b91['push'](_0x484b91['shift']());}};_0x561175(++_0x3ad43d);}(_0x2504,0xee));var _0x4250=function(_0x3bc571,_0xc5dfcb){_0x3bc571=_0x3bc571-0x0;var _0x3f6f52=_0x2504[_0x3bc571];return _0x3f6f52;};'use strict';var path=require(_0x4250('0x0'));var fs=require('fs');var _=require(_0x4250('0x1'));var db=require(_0x4250('0x2'))['db'];var config=require(_0x4250('0x3'));var util=require(_0x4250('0x4'));var BPromise=require(_0x4250('0x5'));var jayson=require(_0x4250('0x6'));var amiClient=jayson[_0x4250('0x7')][_0x4250('0x8')]({'port':0x232a});var logger=require(_0x4250('0x9'))(_0x4250('0xa'));var Redis=require(_0x4250('0xb'));config['redis']=_[_0x4250('0xc')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x4250('0xd'))(new Redis(config[_0x4250('0xe')]));var Schema=require(_0x4250('0xf'));var originateValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]},'callNumber':{'type':'string','required':[!![],_0x4250('0x12')]},'callerId':{'type':'string'},'callbackUrl':{'type':_0x4250('0x13')}});var hangupValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x4250('0x13'),'required':![]}});var answerValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'sessionId':{'type':_0x4250('0x13'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]},'sessionId':{'type':_0x4250('0x13'),'required':[!![],_0x4250('0x14')]},'transferNumber':{'type':'string','required':[!![],_0x4250('0x15')]}});var holdValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]},'sessionId':{'type':_0x4250('0x13'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]},'sessionId':{'type':'string','required':![]}});var callsValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]}});var conferenceValidation=new Schema({'userId':{'type':_0x4250('0x10'),'required':[!![],_0x4250('0x11')]}});function emit(_0x2979cd,_0x9907b4,_0x3d9a6d){logger['info'](_0x2979cd,_0x9907b4,JSON[_0x4250('0x16')](_0x3d9a6d));io['to'](_0x2979cd)[_0x4250('0x17')](_0x9907b4,_0x3d9a6d);}function handleError(_0x38bed6){return function(_0x17a8a9){console[_0x4250('0x18')](_0x4250('0x19'),_0x17a8a9,_0x17a8a9 instanceof RangeError);logger[_0x4250('0x1a')](_0x17a8a9['stack']);if(_0x17a8a9 instanceof RangeError){if(_0x17a8a9[_0x4250('0x1b')]){delete _0x17a8a9['name'];}_0x38bed6['status'](0x194)[_0x4250('0x1c')](_0x17a8a9);}else{if(_0x17a8a9[_0x4250('0x1b')]){delete _0x17a8a9[_0x4250('0x1b')];}_0x38bed6[_0x4250('0x1d')](0x1f4)[_0x4250('0x1c')](_0x17a8a9);}};}function checkError(){return function(_0x29ecaf){if(!_0x29ecaf){throw new RangeError(_0x4250('0x1e'));}return _0x29ecaf;};}function respondWithRpcPromise(_0x2985f8,_0x309745){return new BPromise(function(_0x3818c0,_0x728862){var _0x30e2ae=amiClient;return _0x30e2ae['request'](_0x2985f8,_0x309745)[_0x4250('0x1f')](function(_0x171df4){if(_0x171df4[_0x4250('0x1a')]){if(_0x171df4['error']['code']===0x1f4){return _0x728862(_0x171df4[_0x4250('0x1a')][_0x4250('0x20')]);}return _0x3818c0(_0x171df4[_0x4250('0x1a')][_0x4250('0x20')]);}else{_0x3818c0(_0x171df4[_0x4250('0x21')]);}})['catch'](function(_0x431d01){_0x728862(_0x431d01);});});}function getAgent(_0x24169c){return db[_0x4250('0x22')]['findOne']({'where':{'id':_0x24169c,'role':'agent'}})[_0x4250('0x1f')](checkError());}function getAgentCheckSession(_0x5d0fa2,_0x3e8b4d){return new BPromise(function(_0x1c4fa5,_0x105206){var _0x2cdfdf=respondWithRpcPromise(_0x4250('0x23'));var _0x501c5f=getAgent(_0x5d0fa2);Promise[_0x4250('0x24')]([_0x2cdfdf,_0x501c5f])[_0x4250('0x1f')](function(_0x48252b){var _0x2e1c91=_0x48252b[0x0];var _0x5654f5=_0x48252b[0x1];var _0x231cf0=_['filter'](_0x2e1c91['rows'],function(_0xea7ccc){return _0xea7ccc['UserId']==_0x5654f5['id']&&_0xea7ccc[_0x4250('0x25')]==_0x3e8b4d;});if(_0x231cf0[_0x4250('0x26')]==0x1){_0x1c4fa5(_0x5654f5);}else{_0x105206(new RangeError('sessionId\x20'+_0x3e8b4d+_0x4250('0x27')));}});});}exports[_0x4250('0x28')]=function(_0x57ae4b,_0x217188){logger[_0x4250('0x29')]('originate\x20fired:',_0x57ae4b[_0x4250('0x2a')]);var _0x1c2756=originateValidation[_0x4250('0xf')](_0x57ae4b[_0x4250('0x2a')]);if(_0x1c2756[_0x4250('0x26')]>0x0){return _0x217188[_0x4250('0x1d')](0x190)[_0x4250('0x2b')](_0x1c2756);}var _0x99ac9e=_0x57ae4b[_0x4250('0x2a')][_0x4250('0x2c')];var _0x2bf994=_0x57ae4b[_0x4250('0x2a')][_0x4250('0x2d')];var _0x5c94e7=_0x57ae4b[_0x4250('0x2a')]['callerId'];var _0x2a60dc=_0x57ae4b[_0x4250('0x2a')]['callbackUrl'];return getAgent(_0x99ac9e)[_0x4250('0x1f')](function(_0xd4add5){logger[_0x4250('0x29')](_0x4250('0x2e'),_0xd4add5['name']);emit(util['format']('user:%s',_0xd4add5[_0x4250('0x1b')]),_0x4250('0x2f'),{'callNumber':_0x2bf994,'callerId':_0x5c94e7,'callbackUrl':_0x2a60dc});return _0x217188['status'](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x30')});})[_0x4250('0x31')](handleError(_0x217188));};exports[_0x4250('0x32')]=function(_0x1cb78a,_0x56896f){logger[_0x4250('0x29')]('hangup\x20fired:',_0x1cb78a['body']);var _0xb15c48=hangupValidation['validate'](_0x1cb78a[_0x4250('0x2a')]);if(_0xb15c48[_0x4250('0x26')]>0x0){return _0x56896f[_0x4250('0x1d')](0x190)['json'](_0xb15c48);}var _0x344aa9=_0x1cb78a[_0x4250('0x2a')][_0x4250('0x2c')];var _0x2d3d41=_0x1cb78a[_0x4250('0x2a')]['sessionId'];return getAgent(_0x344aa9)[_0x4250('0x1f')](function(_0x1d8459){logger[_0x4250('0x29')](_0x4250('0x2e'),_0x1d8459[_0x4250('0x1b')]);emit(util[_0x4250('0x33')]('user:%s',_0x1d8459[_0x4250('0x1b')]),'webbar:hangup',{'sessionId':_0x2d3d41});return _0x56896f[_0x4250('0x1d')](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x34')});})[_0x4250('0x31')](handleError(_0x56896f));};exports[_0x4250('0x35')]=function(_0x363a13,_0x4f1b8c){logger['info']('answer\x20fired:',_0x363a13[_0x4250('0x2a')]);var _0x2549c1=answerValidation[_0x4250('0xf')](_0x363a13['body']);if(_0x2549c1[_0x4250('0x26')]>0x0){return _0x4f1b8c[_0x4250('0x1d')](0x190)[_0x4250('0x2b')](_0x2549c1);}var _0x53fb93=_0x363a13[_0x4250('0x2a')][_0x4250('0x2c')];var _0x366cb7=_0x363a13[_0x4250('0x2a')]['sessionId'];return getAgent(_0x53fb93)['then'](function(_0xbaad3f){logger[_0x4250('0x29')](_0x4250('0x2e'),_0xbaad3f[_0x4250('0x1b')]);emit(util[_0x4250('0x33')]('user:%s',_0xbaad3f[_0x4250('0x1b')]),'webbar:answer',{'sessionId':_0x366cb7});return _0x4f1b8c[_0x4250('0x1d')](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x36')});})['catch'](handleError(_0x4f1b8c));};exports[_0x4250('0x37')]=function(_0x173efa,_0x458e12){logger['info']('hold\x20fired:',_0x173efa['body']);var _0x222070=holdValidation[_0x4250('0xf')](_0x173efa[_0x4250('0x2a')]);if(_0x222070[_0x4250('0x26')]>0x0){return _0x458e12[_0x4250('0x1d')](0x190)[_0x4250('0x2b')](_0x222070);}var _0x47b5aa=_0x173efa[_0x4250('0x2a')][_0x4250('0x2c')];var _0x462b99=_0x173efa['body'][_0x4250('0x25')];return getAgent(_0x47b5aa)['then'](function(_0x5895ea){logger[_0x4250('0x29')](_0x4250('0x2e'),_0x5895ea[_0x4250('0x1b')]);emit(util[_0x4250('0x33')](_0x4250('0x38'),_0x5895ea[_0x4250('0x1b')]),'webbar:hold',{'sessionId':_0x462b99});return _0x458e12[_0x4250('0x1d')](0xc8)['json']({'error':![],'message':_0x4250('0x39')});})[_0x4250('0x31')](handleError(_0x458e12));};exports[_0x4250('0x3a')]=function(_0x544048,_0x3bc2b0){logger[_0x4250('0x29')]('unhold\x20fired:',_0x544048['body']);var _0x495a0c=unholdValidation[_0x4250('0xf')](_0x544048['body']);if(_0x495a0c['length']>0x0){return _0x3bc2b0[_0x4250('0x1d')](0x190)[_0x4250('0x2b')](_0x495a0c);}var _0x3d9c31=_0x544048[_0x4250('0x2a')][_0x4250('0x2c')];var _0x49324b=_0x544048[_0x4250('0x2a')][_0x4250('0x25')];return getAgent(_0x3d9c31)[_0x4250('0x1f')](function(_0x47607c){logger['info'](_0x4250('0x2e'),_0x47607c[_0x4250('0x1b')]);emit(util['format'](_0x4250('0x38'),_0x47607c[_0x4250('0x1b')]),'webbar:unhold',{'sessionId':_0x49324b});return _0x3bc2b0[_0x4250('0x1d')](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x3b')});})[_0x4250('0x31')](handleError(_0x3bc2b0));};exports[_0x4250('0x3c')]=function(_0x45ff9f,_0x2b7789){logger['info'](_0x4250('0x3d'),_0x2b7789[_0x4250('0x2a')]);var _0x6094fb=callsValidation['validate'](_0x45ff9f['body']);if(_0x6094fb[_0x4250('0x26')]>0x0){return _0x2b7789[_0x4250('0x1d')](0x190)['json'](_0x6094fb);}var _0x1c9b9c=_0x45ff9f[_0x4250('0x2a')][_0x4250('0x2c')];var _0x595719=respondWithRpcPromise(_0x4250('0x23'));var _0x23513f=getAgent(_0x1c9b9c);return Promise['all']([_0x595719,_0x23513f])[_0x4250('0x1f')](function(_0x243f5c){var _0x432a6a=_0x243f5c[0x0];var _0x4b6de1=_0x243f5c[0x1];var _0x525865=_['filter'](_0x432a6a['rows'],function(_0x123bb4){return _0x123bb4['UserId']==_0x4b6de1['id'];});return _0x2b7789[_0x4250('0x1d')](0xc8)[_0x4250('0x2b')]({'count':_0x525865[_0x4250('0x26')],'rows':_0x525865});})['catch'](handleError(_0x2b7789));};exports[_0x4250('0x3e')]=function(_0x72142f,_0x3d8944){logger[_0x4250('0x29')]('conference\x20fired:',_0x72142f[_0x4250('0x2a')]);var _0x273657=conferenceValidation[_0x4250('0xf')](_0x72142f[_0x4250('0x2a')]);if(_0x273657['length']>0x0){return _0x3d8944[_0x4250('0x1d')](0x190)['json'](_0x273657);}var _0x833b39=_0x72142f[_0x4250('0x2a')][_0x4250('0x2c')];return getAgent(_0x833b39)['then'](function(_0x1bcef1){logger[_0x4250('0x29')](_0x4250('0x2e'),_0x1bcef1[_0x4250('0x1b')]);emit(util[_0x4250('0x33')](_0x4250('0x38'),_0x1bcef1[_0x4250('0x1b')]),_0x4250('0x3f'));return _0x3d8944[_0x4250('0x1d')](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x40')});})[_0x4250('0x31')](handleError(_0x3d8944));};exports['transfer']=function(_0xe35dde,_0x291f71){logger[_0x4250('0x29')](_0x4250('0x41'),_0xe35dde[_0x4250('0x2a')]);var _0x57baf7=transferValidation[_0x4250('0xf')](_0xe35dde['body']);if(_0x57baf7[_0x4250('0x26')]>0x0){return _0x291f71[_0x4250('0x1d')](0x190)[_0x4250('0x2b')](_0x57baf7);}var _0x21b527=_0xe35dde[_0x4250('0x2a')]['userId'];var _0x39212f=_0xe35dde[_0x4250('0x2a')][_0x4250('0x25')];var _0x4309c5=_0xe35dde[_0x4250('0x2a')][_0x4250('0x42')];return getAgent(_0x21b527)['then'](function(_0x236efd){logger[_0x4250('0x29')](_0x4250('0x2e'),_0x236efd[_0x4250('0x1b')]);emit(util['format'](_0x4250('0x38'),_0x236efd[_0x4250('0x1b')]),_0x4250('0x43'),{'sessionId':_0x39212f,'transferNumber':_0x4309c5});return _0x291f71['status'](0xc8)[_0x4250('0x2b')]({'error':![],'message':_0x4250('0x44')});})[_0x4250('0x31')](handleError(_0x291f71));};