02985b20b459d2ba981671bd359717b5de8785f7
[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 _0x24b3=['../../mysqldb','util','http','../../config/logger','ioredis','localhost','socket.io-emitter','redis','string','number','userId\x20is\x20required','sessionId\x20is\x20required','transferNumber\x20is\x20required','info','stringify','emit','log','handleError:','error','stack','name','status','send','then','message','catch','User','findOne','agent','VoiceChannels','rows','UserId','sessionId','sessionId\x20','\x20not\x20found!','originate','originate\x20fired:','body','validate','length','json','userId','callNumber','callerId','entityFound:','format','user:%s','webbar:originate','originate\x20executed!','hangup','webbar:hangup','hangup\x20executed!','answer','answer\x20fired:','webbar:answer','answer\x20executed!','hold','hold\x20fired:','webbar:hold','hold\x20executed!','unhold','unhold\x20fired:','webbar:unhold','unhold\x20executed!','conference\x20fired:','webbar:conference','transferNumber','webbar:transfer','transfer\x20executed!','path','lodash'];(function(_0x29eaaf,_0x18cc33){var _0xd350fc=function(_0x3c6474){while(--_0x3c6474){_0x29eaaf['push'](_0x29eaaf['shift']());}};_0xd350fc(++_0x18cc33);}(_0x24b3,0xd3));var _0x324b=function(_0x28ac11,_0x57ba78){_0x28ac11=_0x28ac11-0x0;var _0x14e3bf=_0x24b3[_0x28ac11];return _0x14e3bf;};'use strict';var path=require(_0x324b('0x0'));var fs=require('fs');var _=require(_0x324b('0x1'));var db=require(_0x324b('0x2'))['db'];var config=require('../../config/environment');var util=require(_0x324b('0x3'));var BPromise=require('bluebird');var jayson=require('jayson/promise');var amiClient=jayson['client'][_0x324b('0x4')]({'port':0x232a});var logger=require(_0x324b('0x5'))('webbarapi');var Redis=require(_0x324b('0x6'));config['redis']=_['defaults'](config['redis'],{'host':_0x324b('0x7'),'port':0x18eb});var io=require(_0x324b('0x8'))(new Redis(config[_0x324b('0x9')]));var Schema=require('validate');var originateValidation=new Schema({'userId':{'type':'number','required':[!![],'userId\x20is\x20required']},'callNumber':{'type':_0x324b('0xa'),'required':[!![],'callNumber\x20is\x20required']},'callerId':{'type':_0x324b('0xa')},'callbackUrl':{'type':_0x324b('0xa')}});var hangupValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],_0x324b('0xc')]},'sessionId':{'type':_0x324b('0xa'),'required':![]}});var answerValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],_0x324b('0xc')]},'sessionId':{'type':_0x324b('0xa'),'required':![]}});var transferValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],_0x324b('0xc')]},'sessionId':{'type':'string','required':[!![],_0x324b('0xd')]},'transferNumber':{'type':_0x324b('0xa'),'required':[!![],_0x324b('0xe')]}});var holdValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],_0x324b('0xc')]},'sessionId':{'type':_0x324b('0xa'),'required':![]}});var unholdValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],_0x324b('0xc')]},'sessionId':{'type':_0x324b('0xa'),'required':![]}});var callsValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],'userId\x20is\x20required']}});var conferenceValidation=new Schema({'userId':{'type':_0x324b('0xb'),'required':[!![],'userId\x20is\x20required']}});function emit(_0x2d65ae,_0x30e7c4,_0x5ebed0){logger[_0x324b('0xf')](_0x2d65ae,_0x30e7c4,JSON[_0x324b('0x10')](_0x5ebed0));io['to'](_0x2d65ae)[_0x324b('0x11')](_0x30e7c4,_0x5ebed0);}function handleError(_0x1f797c){return function(_0x209104){console[_0x324b('0x12')](_0x324b('0x13'),_0x209104,_0x209104 instanceof RangeError);logger[_0x324b('0x14')](_0x209104[_0x324b('0x15')]);if(_0x209104 instanceof RangeError){if(_0x209104[_0x324b('0x16')]){delete _0x209104[_0x324b('0x16')];}_0x1f797c[_0x324b('0x17')](0x194)[_0x324b('0x18')](_0x209104);}else{if(_0x209104['name']){delete _0x209104['name'];}_0x1f797c[_0x324b('0x17')](0x1f4)['send'](_0x209104);}};}function checkError(){return function(_0xb34f7){if(!_0xb34f7){throw new RangeError('NotFound');}return _0xb34f7;};}function respondWithRpcPromise(_0x1fb9ed,_0x49c3f5){return new BPromise(function(_0x1df4b5,_0x397cd3){var _0x30091d=amiClient;return _0x30091d['request'](_0x1fb9ed,_0x49c3f5)[_0x324b('0x19')](function(_0xdc74d2){if(_0xdc74d2[_0x324b('0x14')]){if(_0xdc74d2['error']['code']===0x1f4){return _0x397cd3(_0xdc74d2[_0x324b('0x14')]['message']);}return _0x1df4b5(_0xdc74d2[_0x324b('0x14')][_0x324b('0x1a')]);}else{_0x1df4b5(_0xdc74d2['result']);}})[_0x324b('0x1b')](function(_0x51c3ad){_0x397cd3(_0x51c3ad);});});}function getAgent(_0x38996d){return db[_0x324b('0x1c')][_0x324b('0x1d')]({'where':{'id':_0x38996d,'role':_0x324b('0x1e')}})[_0x324b('0x19')](checkError());}function getAgentCheckSession(_0x12815b,_0x46f79a){return new BPromise(function(_0x48bb79,_0x1b7587){var _0x19241a=respondWithRpcPromise(_0x324b('0x1f'));var _0x3656d0=getAgent(_0x12815b);Promise['all']([_0x19241a,_0x3656d0])[_0x324b('0x19')](function(_0x10fb26){var _0x4cc6b4=_0x10fb26[0x0];var _0x33d541=_0x10fb26[0x1];var _0x573dc1=_['filter'](_0x4cc6b4[_0x324b('0x20')],function(_0xfbe94d){return _0xfbe94d[_0x324b('0x21')]==_0x33d541['id']&&_0xfbe94d[_0x324b('0x22')]==_0x46f79a;});if(_0x573dc1['length']==0x1){_0x48bb79(_0x33d541);}else{_0x1b7587(new RangeError(_0x324b('0x23')+_0x46f79a+_0x324b('0x24')));}});});}exports[_0x324b('0x25')]=function(_0xcf1dc8,_0x2b124c){logger[_0x324b('0xf')](_0x324b('0x26'),_0xcf1dc8[_0x324b('0x27')]);var _0x4b8084=originateValidation[_0x324b('0x28')](_0xcf1dc8['body']);if(_0x4b8084[_0x324b('0x29')]>0x0){return _0x2b124c[_0x324b('0x17')](0x190)[_0x324b('0x2a')](_0x4b8084);}var _0x2c4ca5=_0xcf1dc8[_0x324b('0x27')][_0x324b('0x2b')];var _0x5c2ab7=_0xcf1dc8['body'][_0x324b('0x2c')];var _0x2cb875=_0xcf1dc8[_0x324b('0x27')][_0x324b('0x2d')];var _0x154d16=_0xcf1dc8[_0x324b('0x27')]['callbackUrl'];return getAgent(_0x2c4ca5)[_0x324b('0x19')](function(_0x1e6729){logger[_0x324b('0xf')](_0x324b('0x2e'),_0x1e6729[_0x324b('0x16')]);emit(util[_0x324b('0x2f')](_0x324b('0x30'),_0x1e6729[_0x324b('0x16')]),_0x324b('0x31'),{'callNumber':_0x5c2ab7,'callerId':_0x2cb875,'callbackUrl':_0x154d16});return _0x2b124c[_0x324b('0x17')](0xc8)[_0x324b('0x2a')]({'error':![],'message':_0x324b('0x32')});})['catch'](handleError(_0x2b124c));};exports[_0x324b('0x33')]=function(_0x5eeb18,_0x300c96){logger[_0x324b('0xf')]('hangup\x20fired:',_0x5eeb18[_0x324b('0x27')]);var _0x4b560d=hangupValidation[_0x324b('0x28')](_0x5eeb18['body']);if(_0x4b560d[_0x324b('0x29')]>0x0){return _0x300c96[_0x324b('0x17')](0x190)['json'](_0x4b560d);}var _0x2216d2=_0x5eeb18[_0x324b('0x27')]['userId'];var _0x4e5f5d=_0x5eeb18['body'][_0x324b('0x22')];return getAgent(_0x2216d2)['then'](function(_0x37554d){logger[_0x324b('0xf')](_0x324b('0x2e'),_0x37554d[_0x324b('0x16')]);emit(util[_0x324b('0x2f')]('user:%s',_0x37554d[_0x324b('0x16')]),_0x324b('0x34'),{'sessionId':_0x4e5f5d});return _0x300c96[_0x324b('0x17')](0xc8)['json']({'error':![],'message':_0x324b('0x35')});})[_0x324b('0x1b')](handleError(_0x300c96));};exports[_0x324b('0x36')]=function(_0x228c4f,_0x1a9473){logger[_0x324b('0xf')](_0x324b('0x37'),_0x228c4f[_0x324b('0x27')]);var _0x512ef3=answerValidation[_0x324b('0x28')](_0x228c4f[_0x324b('0x27')]);if(_0x512ef3['length']>0x0){return _0x1a9473[_0x324b('0x17')](0x190)[_0x324b('0x2a')](_0x512ef3);}var _0x484d65=_0x228c4f[_0x324b('0x27')]['userId'];var _0x1f797a=_0x228c4f[_0x324b('0x27')][_0x324b('0x22')];return getAgent(_0x484d65)[_0x324b('0x19')](function(_0x2b517c){logger[_0x324b('0xf')](_0x324b('0x2e'),_0x2b517c[_0x324b('0x16')]);emit(util['format'](_0x324b('0x30'),_0x2b517c['name']),_0x324b('0x38'),{'sessionId':_0x1f797a});return _0x1a9473['status'](0xc8)[_0x324b('0x2a')]({'error':![],'message':_0x324b('0x39')});})['catch'](handleError(_0x1a9473));};exports[_0x324b('0x3a')]=function(_0x5afd22,_0x4a98ed){logger[_0x324b('0xf')](_0x324b('0x3b'),_0x5afd22[_0x324b('0x27')]);var _0x3b123d=holdValidation[_0x324b('0x28')](_0x5afd22[_0x324b('0x27')]);if(_0x3b123d[_0x324b('0x29')]>0x0){return _0x4a98ed[_0x324b('0x17')](0x190)[_0x324b('0x2a')](_0x3b123d);}var _0x453f79=_0x5afd22[_0x324b('0x27')][_0x324b('0x2b')];var _0x43e620=_0x5afd22['body'][_0x324b('0x22')];return getAgent(_0x453f79)['then'](function(_0x2dd2a7){logger[_0x324b('0xf')]('entityFound:',_0x2dd2a7[_0x324b('0x16')]);emit(util['format']('user:%s',_0x2dd2a7['name']),_0x324b('0x3c'),{'sessionId':_0x43e620});return _0x4a98ed[_0x324b('0x17')](0xc8)['json']({'error':![],'message':_0x324b('0x3d')});})[_0x324b('0x1b')](handleError(_0x4a98ed));};exports[_0x324b('0x3e')]=function(_0x11d75e,_0x17023b){logger[_0x324b('0xf')](_0x324b('0x3f'),_0x11d75e[_0x324b('0x27')]);var _0xe196e1=unholdValidation[_0x324b('0x28')](_0x11d75e['body']);if(_0xe196e1[_0x324b('0x29')]>0x0){return _0x17023b[_0x324b('0x17')](0x190)[_0x324b('0x2a')](_0xe196e1);}var _0x1b6b74=_0x11d75e[_0x324b('0x27')]['userId'];var _0x5e9b5e=_0x11d75e[_0x324b('0x27')][_0x324b('0x22')];return getAgent(_0x1b6b74)[_0x324b('0x19')](function(_0x1edfb3){logger[_0x324b('0xf')]('entityFound:',_0x1edfb3[_0x324b('0x16')]);emit(util[_0x324b('0x2f')](_0x324b('0x30'),_0x1edfb3[_0x324b('0x16')]),_0x324b('0x40'),{'sessionId':_0x5e9b5e});return _0x17023b['status'](0xc8)[_0x324b('0x2a')]({'error':![],'message':_0x324b('0x41')});})[_0x324b('0x1b')](handleError(_0x17023b));};exports['calls']=function(_0x259c22,_0x28baea){logger['info']('calls\x20fired:',_0x28baea['body']);var _0x41f286=callsValidation[_0x324b('0x28')](_0x259c22[_0x324b('0x27')]);if(_0x41f286[_0x324b('0x29')]>0x0){return _0x28baea['status'](0x190)['json'](_0x41f286);}var _0x5918e6=_0x259c22[_0x324b('0x27')][_0x324b('0x2b')];var _0x5c5a2a=respondWithRpcPromise(_0x324b('0x1f'));var _0x5be4ee=getAgent(_0x5918e6);return Promise['all']([_0x5c5a2a,_0x5be4ee])[_0x324b('0x19')](function(_0x1d96db){var _0x5223cd=_0x1d96db[0x0];var _0x365ebc=_0x1d96db[0x1];var _0x543ed1=_['filter'](_0x5223cd['rows'],function(_0x1a86a7){return _0x1a86a7[_0x324b('0x21')]==_0x365ebc['id'];});return _0x28baea[_0x324b('0x17')](0xc8)[_0x324b('0x2a')]({'count':_0x543ed1[_0x324b('0x29')],'rows':_0x543ed1});})[_0x324b('0x1b')](handleError(_0x28baea));};exports['conference']=function(_0x59affe,_0x2c10b1){logger[_0x324b('0xf')](_0x324b('0x42'),_0x59affe['body']);var _0x4b6cff=conferenceValidation['validate'](_0x59affe[_0x324b('0x27')]);if(_0x4b6cff[_0x324b('0x29')]>0x0){return _0x2c10b1[_0x324b('0x17')](0x190)['json'](_0x4b6cff);}var _0x1d87bd=_0x59affe[_0x324b('0x27')][_0x324b('0x2b')];return getAgent(_0x1d87bd)[_0x324b('0x19')](function(_0x4f0b04){logger['info'](_0x324b('0x2e'),_0x4f0b04['name']);emit(util[_0x324b('0x2f')](_0x324b('0x30'),_0x4f0b04[_0x324b('0x16')]),_0x324b('0x43'));return _0x2c10b1[_0x324b('0x17')](0xc8)[_0x324b('0x2a')]({'error':![],'message':'conference\x20executed!'});})[_0x324b('0x1b')](handleError(_0x2c10b1));};exports['transfer']=function(_0x4c84ee,_0xb0cd27){logger[_0x324b('0xf')]('transfer\x20fired:',_0x4c84ee[_0x324b('0x27')]);var _0x2cef0c=transferValidation[_0x324b('0x28')](_0x4c84ee[_0x324b('0x27')]);if(_0x2cef0c[_0x324b('0x29')]>0x0){return _0xb0cd27[_0x324b('0x17')](0x190)['json'](_0x2cef0c);}var _0x135151=_0x4c84ee[_0x324b('0x27')][_0x324b('0x2b')];var _0x46869b=_0x4c84ee[_0x324b('0x27')][_0x324b('0x22')];var _0x5198f5=_0x4c84ee[_0x324b('0x27')][_0x324b('0x44')];return getAgent(_0x135151)[_0x324b('0x19')](function(_0x13d571){logger[_0x324b('0xf')](_0x324b('0x2e'),_0x13d571[_0x324b('0x16')]);emit(util[_0x324b('0x2f')](_0x324b('0x30'),_0x13d571[_0x324b('0x16')]),_0x324b('0x45'),{'sessionId':_0x46869b,'transferNumber':_0x5198f5});return _0xb0cd27[_0x324b('0x17')](0xc8)[_0x324b('0x2a')]({'error':![],'message':_0x324b('0x46')});})[_0x324b('0x1b')](handleError(_0xb0cd27));};