8eb4987691dc76bb4a4449e95232cd1797052ee8
[motion2.git] / server / services / ami / trigger / integration / zendesk.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 _0xb811=['Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','length','end-user','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Caller\x20-\x20%s','Enduser\x20created.','authType','password','username','token','%s/token:%s','Basic\x20%s','debug','[HTTP]','GET','forEach','includes','string','type','nameField','toLowerCase','picklist','idField','customField','custom_fields','push','toString','variable','variableName','Variable','name','queue','serverUrl','stripTrailingSlash','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','[QUEUE]','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','/api/v2','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','recordingFormat','none','destcalleridname','[OUTBOUND]','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','unmanaged','monitor_format','lastevent','toUpperCase','\x20Error\x20running\x20Zendesk\x20integration','lodash','md5','ioredis','./util','../../../../config/environment','zendesk','redis','defaults','localhost','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','getString','Descriptions','Fields','then','validateEmail','%s/search.json','type:user\x20role:agent\x20email:%s','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!'];(function(_0xd099b9,_0x1ae821){var _0x12a5bb=function(_0xf5014d){while(--_0xf5014d){_0xd099b9['push'](_0xd099b9['shift']());}};_0x12a5bb(++_0x1ae821);}(_0xb811,0x1ea));var _0x1b81=function(_0x25e7cb,_0x3579b7){_0x25e7cb=_0x25e7cb-0x0;var _0x375d92=_0xb811[_0x25e7cb];return _0x375d92;};'use strict';var _=require(_0x1b81('0x0'));var rp=require('request-promise');var md5=require(_0x1b81('0x1'));var util=require('util');var Redis=require(_0x1b81('0x2'));var intUtil=require(_0x1b81('0x3'));var config=require(_0x1b81('0x4'));var logger=require('../../../../config/logger')(_0x1b81('0x5'));config[_0x1b81('0x6')]=_[_0x1b81('0x7')](config['redis'],{'host':_0x1b81('0x8'),'port':0x18eb});var io=require(_0x1b81('0x9'))(new Redis(config['redis']));function emit(_0x340d84,_0x9c99a1,_0x43227b){io['to'](_0x340d84)['emit'](_0x9c99a1,_0x43227b);}var headers={'Content-Type':'application/json','Accept':_0x1b81('0xa')};function getTicket(_0x3bd049,_0x2a5ea5,_0x22a54a,_0x38048e,_0x289ad6){logger[_0x1b81('0xb')](_0x1b81('0xc'));return request({'uri':util[_0x1b81('0xd')](_0x1b81('0xe'),_0x3bd049[_0x1b81('0xf')]),'method':_0x1b81('0x10'),'body':{'ticket':_[_0x1b81('0x11')]({'requester_id':_0x22a54a['id'],'submitter_id':_0x2a5ea5?_0x2a5ea5['id']:undefined,'assignee_id':_0x2a5ea5?_0x2a5ea5['id']:undefined,'tags':getTags(_0x38048e['Tags'],'name'),'subject':intUtil[_0x1b81('0x12')](_0x38048e['Subjects'],_0x289ad6,'\x20'),'description':intUtil[_0x1b81('0x12')](_0x38048e[_0x1b81('0x13')],_0x289ad6,'\x0a'),'comment':{'public':![],'body':intUtil[_0x1b81('0x12')](_0x38048e['Descriptions'],_0x289ad6,'\x0a')}},getCustomFields(_0x38048e[_0x1b81('0x14')],_0x289ad6))}})[_0x1b81('0x15')](function(_0x3550f2){logger['info']('Ticket\x20created!');return _0x3550f2['ticket'];});}function getUser(_0x212f85,_0x3bf459){if(intUtil[_0x1b81('0x16')](_0x3bf459)){logger[_0x1b81('0xb')]('Getting\x20agent\x20with\x20email',_0x3bf459);return request({'uri':util['format'](_0x1b81('0x17'),_0x212f85[_0x1b81('0xf')]),'qs':{'query':util[_0x1b81('0xd')](_0x1b81('0x18'),_0x3bf459)}})[_0x1b81('0x15')](function(_0x5e7134){if(_0x5e7134['count']){logger['info'](_0x1b81('0x19'));return _[_0x1b81('0x1a')](_0x5e7134[_0x1b81('0x1b')],{'email':_0x3bf459,'role':_0x1b81('0x1c')});}else{logger[_0x1b81('0xb')](_0x1b81('0x1d'));return request({'uri':util[_0x1b81('0xd')]('%s/users/me.json',_0x212f85[_0x1b81('0xf')])})[_0x1b81('0x15')](function(_0x391776){logger[_0x1b81('0xb')](_0x1b81('0x1e'));return _0x391776[_0x1b81('0x1f')];});}});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x1b81('0xd')]('%s/users/me.json',_0x212f85[_0x1b81('0xf')])})['then'](function(_0xbb255b){logger['info'](_0x1b81('0x1e'));return _0xbb255b['user'];});}}function getEndUser(_0x32bbb7,_0x2c78b6,_0xd75bee){logger['info'](_0x1b81('0x20'),_0xd75bee);return request({'uri':util[_0x1b81('0xd')]('%s/search.json',_0x32bbb7[_0x1b81('0xf')]),'qs':{'query':util[_0x1b81('0xd')]('type:user\x20role:end-user\x20phone:%s',_0xd75bee)}})[_0x1b81('0x15')](function(_0x1b0b9f){var _0x223e6e;if(_0x1b0b9f[_0x1b81('0x1b')][_0x1b81('0x21')]){_0x1b0b9f[_0x1b81('0x1b')]=_['filter'](_0x1b0b9f[_0x1b81('0x1b')],{'suspended':![],'role':_0x1b81('0x22')});if(_0x1b0b9f[_0x1b81('0x1b')]['length']){_0x223e6e=_['first'](_0x1b0b9f[_0x1b81('0x1b')]);}}if(_0x223e6e){logger[_0x1b81('0xb')](_0x1b81('0x23'));return _0x223e6e;}else{logger[_0x1b81('0xb')](_0x1b81('0x24'));return request({'uri':util[_0x1b81('0xd')]('%s/users.json',_0x32bbb7[_0x1b81('0xf')]),'method':_0x1b81('0x10'),'body':{'user':{'role':_0x1b81('0x22'),'name':util[_0x1b81('0xd')](_0x1b81('0x25'),_0x2c78b6||_0xd75bee),'phone':_0xd75bee}}})['then'](function(_0x52488b){logger[_0x1b81('0xb')](_0x1b81('0x26'));return _0x52488b[_0x1b81('0x1f')];});}});}function getAuth(_0x554745){var _0x4cbfe5;if(_0x554745[_0x1b81('0x27')]===_0x1b81('0x28')){_0x4cbfe5=util[_0x1b81('0xd')]('%s:%s',_0x554745[_0x1b81('0x29')],_0x554745['password']);}else if(_0x554745[_0x1b81('0x27')]===_0x1b81('0x2a')){_0x4cbfe5=util[_0x1b81('0xd')](_0x1b81('0x2b'),_0x554745['username'],_0x554745['token']);}return util[_0x1b81('0xd')](_0x1b81('0x2c'),new Buffer(_0x4cbfe5)['toString']('base64'));}function request(_0x2f4c1){logger[_0x1b81('0x2d')](_0x1b81('0x2e'),JSON['stringify'](_0x2f4c1));return rp(_['defaults'](_0x2f4c1,{'method':_0x1b81('0x2f'),'headers':headers,'json':!![]}));}function getTags(_0x4e5ffc,_0x3cd5cd){var _0x402ea0=[];if(_0x4e5ffc&&_0x4e5ffc[_0x1b81('0x21')]>0x0){_0x402ea0=_['map'](_0x4e5ffc,_0x3cd5cd);}return _0x402ea0;}function getCustomFields(_0x4597cf,_0x306ed1){var _0x26ab8f=[];var _0x512b86={'custom_fields':[]};if(_0x4597cf[_0x1b81('0x21')]>0x0){_[_0x1b81('0x30')](_0x4597cf,function(_0x5a2a2e){if(_[_0x1b81('0x31')]([_0x1b81('0x32'),'picklist'],_0x5a2a2e[_0x1b81('0x33')])&&_0x5a2a2e[_0x1b81('0x34')]&&!_0x5a2a2e['customField']){_0x512b86[_0x5a2a2e[_0x1b81('0x34')][_0x1b81('0x35')]()]=_0x5a2a2e['content']['toString']();}else if(_[_0x1b81('0x31')]([_0x1b81('0x32'),_0x1b81('0x36')],_0x5a2a2e[_0x1b81('0x33')])&&_0x5a2a2e[_0x1b81('0x37')]&&_0x5a2a2e[_0x1b81('0x38')]){_0x512b86[_0x1b81('0x39')][_0x1b81('0x3a')]({'id':_0x5a2a2e[_0x1b81('0x37')],'value':_0x5a2a2e['content'][_0x1b81('0x3b')]()});}else if(_0x5a2a2e['type']===_0x1b81('0x3c')&&_0x5a2a2e[_0x1b81('0x3d')]&&_0x5a2a2e[_0x1b81('0x37')]&&_0x5a2a2e['customField']){_0x306ed1[_0x5a2a2e[_0x1b81('0x3d')]]&&_0x512b86[_0x1b81('0x39')][_0x1b81('0x3a')]({'id':_0x5a2a2e[_0x1b81('0x37')],'value':_0x306ed1[_0x5a2a2e['variableName']][_0x1b81('0x3b')]()});}else if(_0x5a2a2e[_0x1b81('0x33')]==='customVariable'&&_0x5a2a2e[_0x1b81('0x3e')]&&_0x5a2a2e[_0x1b81('0x3e')]['name']&&_0x5a2a2e[_0x1b81('0x37')]&&_0x5a2a2e['customField']){_0x306ed1[_0x5a2a2e[_0x1b81('0x3e')][_0x1b81('0x3f')][_0x1b81('0x35')]()]&&_0x512b86[_0x1b81('0x39')]['push']({'id':_0x5a2a2e[_0x1b81('0x37')],'value':_0x306ed1[_0x5a2a2e[_0x1b81('0x3e')][_0x1b81('0x3f')][_0x1b81('0x35')]()]['toString']()});}});}return _0x512b86;}exports[_0x1b81('0x40')]=function(_0x5a2762,_0x49840d,_0x318d67,_0x1da6b1,_0x2785ca,_0x38419a){var _0x443a24,_0x56dbef;_0x38419a[_0x1b81('0xf')]=intUtil['stripTrailingSlash'](_0x38419a[_0x1b81('0xf')]);_0x38419a[_0x1b81('0x41')]=intUtil[_0x1b81('0x42')](_0x38419a[_0x1b81('0x41')]);if(_0x2785ca&&_0x2785ca['monitor_format']){logger[_0x1b81('0xb')]('[QUEUE]',_0x1b81('0x43'));_0x49840d[_0x1b81('0x44')]=util[_0x1b81('0xd')](_0x1b81('0x45'),_0x38419a[_0x1b81('0x41')],_0x49840d[_0x1b81('0x46')],md5(_0x49840d['uniqueid']));}else{_0x49840d[_0x1b81('0x44')]='';}headers[_0x1b81('0x47')]=getAuth(_0x38419a);return getUser(_0x38419a,_0x1da6b1[_0x1b81('0x48')])['then'](function(_0x4b8e26){_0x443a24=_0x4b8e26;logger[_0x1b81('0xb')](_0x1b81('0x49'),_0x443a24['id']);return getEndUser(_0x38419a,_0x49840d[_0x1b81('0x4a')],_0x49840d['calleridnum']);})[_0x1b81('0x15')](function(_0x20432c){_0x56dbef=_0x20432c;logger['info'](_0x1b81('0x4b'),_0x56dbef['id']);return getTicket(_0x38419a,_0x443a24,_0x56dbef,_0x318d67,_0x49840d);})[_0x1b81('0x15')](function(_0x532e07){if(_0x532e07){logger[_0x1b81('0xb')](_0x1b81('0x4c'),_0x532e07['id']);switch(_0x38419a[_0x1b81('0x33')]){case _0x1b81('0x4d'):logger[_0x1b81('0xb')](_0x1b81('0x4e'),_0x1b81('0x4f'));return request({'uri':util['format'](_0x1b81('0x50'),_0x38419a[_0x1b81('0xf')],_0x443a24['id'],_0x532e07['id']),'method':_0x1b81('0x10')});case _0x1b81('0x51'):logger[_0x1b81('0xb')](_0x1b81('0x4e'),_0x1b81('0x52'));emit(util[_0x1b81('0xd')](_0x1b81('0x53'),_0x1da6b1['name']),_0x1b81('0x54'),{'uri':util[_0x1b81('0xd')](_0x1b81('0x55'),_0x38419a[_0x1b81('0xf')][_0x1b81('0x56')](_0x1b81('0x57'),''),_0x532e07['id'])});break;default:logger[_0x1b81('0x58')]('[QUEUE]',_0x1b81('0x59'));}}})[_0x1b81('0x5a')](function(_0x824785){logger[_0x1b81('0x58')](_0x1b81('0x5b'),util[_0x1b81('0x5c')](_0x824785,{'showHidden':!![],'depth':null}));});};exports[_0x1b81('0x5d')]=function(_0x4b5c13,_0x2238ed,_0x5733d6,_0x38e0a7,_0x5952a1,_0xef0a07,_0x4cb351){var _0x409067,_0x3130de;_0xef0a07['remoteUri']=intUtil['stripTrailingSlash'](_0xef0a07['remoteUri']);_0xef0a07['serverUrl']=intUtil['stripTrailingSlash'](_0xef0a07[_0x1b81('0x41')]);if(_0x4cb351&&_0x4cb351[_0x1b81('0x5e')]&&_0x4cb351[_0x1b81('0x5e')]!==_0x1b81('0x5f')){logger[_0x1b81('0xb')]('[OUTBOUND]',_0x1b81('0x43'));_0x2238ed[_0x1b81('0x44')]=util[_0x1b81('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0xef0a07['serverUrl'],_0x2238ed[_0x1b81('0x46')],md5(_0x2238ed[_0x1b81('0x46')]));}headers[_0x1b81('0x47')]=getAuth(_0xef0a07);return getUser(_0xef0a07,_0x38e0a7[_0x1b81('0x48')])[_0x1b81('0x15')](function(_0x52f727){_0x409067=_0x52f727;logger[_0x1b81('0xb')]('The\x20User\x20ID\x20is:',_0x409067['id']);return getEndUser(_0xef0a07,_0x2238ed[_0x1b81('0x60')],_0x2238ed['destcalleridnum']);})[_0x1b81('0x15')](function(_0x5b9831){_0x3130de=_0x5b9831;logger['info'](_0x1b81('0x4b'),_0x3130de['id']);return getTicket(_0xef0a07,_0x409067,_0x3130de,_0x5733d6,_0x2238ed);})[_0x1b81('0x15')](function(_0x2a9219){if(_0x2a9219){logger[_0x1b81('0xb')](_0x1b81('0x4c'),_0x2a9219['id']);switch(_0xef0a07['type']){case'integrationTab':logger[_0x1b81('0xb')]('[OUTBOUND]',_0x1b81('0x4f'));return request({'uri':util[_0x1b81('0xd')](_0x1b81('0x50'),_0xef0a07['remoteUri'],_0x409067['id'],_0x2a9219['id']),'method':'POST'});case _0x1b81('0x51'):logger[_0x1b81('0xb')](_0x1b81('0x61'),_0x1b81('0x52'));emit(util[_0x1b81('0xd')]('user:%s',_0x38e0a7[_0x1b81('0x3f')]),'trigger:browser:url',{'uri':util['format'](_0x1b81('0x55'),_0xef0a07['remoteUri'][_0x1b81('0x56')](_0x1b81('0x57'),''),_0x2a9219['id'])});break;default:logger[_0x1b81('0x58')](_0x1b81('0x61'),_0x1b81('0x59'));}}})[_0x1b81('0x5a')](function(_0x3a8410){logger[_0x1b81('0x58')](_0x1b81('0x62'),util[_0x1b81('0x5c')](_0x3a8410,{'showHidden':!![],'depth':null}));});};exports[_0x1b81('0x63')]=function(_0x36a7a4,_0xdc8fc3,_0x198214,_0xdd7571,_0x3b5e8b,_0x4070c3){var _0x5d9795,_0x5ebb44;_0x4070c3[_0x1b81('0xf')]=intUtil['stripTrailingSlash'](_0x4070c3[_0x1b81('0xf')]);_0x4070c3[_0x1b81('0x41')]=intUtil[_0x1b81('0x42')](_0x4070c3['serverUrl']);if(_0x3b5e8b&&_0x3b5e8b[_0x1b81('0x64')]){logger[_0x1b81('0xb')]('['+_0xdc8fc3[_0x1b81('0x65')]['toUpperCase']()+']','Recording\x20is\x20enabled!');_0xdc8fc3[_0x1b81('0x44')]=util[_0x1b81('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x4070c3[_0x1b81('0x41')],_0xdc8fc3[_0x1b81('0x46')],md5(_0xdc8fc3[_0x1b81('0x46')]));}else{_0xdc8fc3['recordingURL']='';}headers[_0x1b81('0x47')]=getAuth(_0x4070c3);return getUser(_0x4070c3)[_0x1b81('0x15')](function(_0xaf0b0d){_0x5d9795=_0xaf0b0d;logger[_0x1b81('0xb')](_0x1b81('0x49'),_0x5d9795['id']);return getEndUser(_0x4070c3,_0xdc8fc3[_0x1b81('0x4a')],_0xdc8fc3['calleridnum']);})[_0x1b81('0x15')](function(_0x329819){_0x5ebb44=_0x329819;logger[_0x1b81('0xb')](_0x1b81('0x4b'),_0x5ebb44['id']);return getTicket(_0x4070c3,_0x5d9795,_0x5ebb44,_0x198214,_0xdc8fc3);})[_0x1b81('0x15')](function(_0x772150){if(_0x772150){logger['info'](_0x1b81('0x4c'),_0x772150['id']);}})['catch'](function(_0x596e83){logger[_0x1b81('0x58')]('['+_0xdc8fc3['lastevent'][_0x1b81('0x66')]()+']'+_0x1b81('0x67'),util[_0x1b81('0x5c')](_0x596e83,{'showHidden':!![],'depth':null}));});};