Built motion from commit (unavailable).|2.5.4
[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 _0xd547=['variable','variableName','custom_fields','push','customVariable','Variable','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','calleridname','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','%s/channels/voice/agents/%d/tickets/%d/display.json','user:%s','trigger:browser:url','%s/agent/tickets/%s','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','inspect','outbound','destcalleridname','destcalleridnum','[OUTBOUND]','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','lastevent','calleridnum','The\x20Enduser\x20ID\x20is:','toUpperCase','\x20Error\x20running\x20Zendesk\x20integration','md5','util','ioredis','./util','zendesk','defaults','localhost','socket.io-emitter','redis','emit','application/json','Creating\x20new\x20ticket...','format','merge','Tags','name','Subjects','Descriptions','Fields','info','Ticket\x20created!','validateEmail','Getting\x20agent\x20with\x20email','remoteUri','then','Agent\x20found!','find','results','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','%s/search.json','length','end-user','first','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','POST','Caller\x20-\x20%s','Enduser\x20created.','authType','%s:%s','username','token','%s/token:%s','Basic\x20%s','base64','debug','[HTTP]','stringify','GET','map','forEach','string','customField','nameField','toString','type','idField','content'];(function(_0xbc346f,_0x3db5c0){var _0x9f9260=function(_0x37e6b9){while(--_0x37e6b9){_0xbc346f['push'](_0xbc346f['shift']());}};_0x9f9260(++_0x3db5c0);}(_0xd547,0x1c1));var _0x7d54=function(_0xa84046,_0x456128){_0xa84046=_0xa84046-0x0;var _0x156dae=_0xd547[_0xa84046];return _0x156dae;};'use strict';var _=require('lodash');var rp=require('request-promise');var md5=require(_0x7d54('0x0'));var util=require(_0x7d54('0x1'));var Redis=require(_0x7d54('0x2'));var intUtil=require(_0x7d54('0x3'));var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0x7d54('0x4'));config['redis']=_[_0x7d54('0x5')](config['redis'],{'host':_0x7d54('0x6'),'port':0x18eb});var io=require(_0x7d54('0x7'))(new Redis(config[_0x7d54('0x8')]));function emit(_0x5186ae,_0x5b0b16,_0x478f9b){io['to'](_0x5186ae)[_0x7d54('0x9')](_0x5b0b16,_0x478f9b);}var headers={'Content-Type':_0x7d54('0xa'),'Accept':'application/json'};function getTicket(_0xa5b980,_0x48b250,_0x2bede6,_0x4d9dc3,_0x1d7ff7){logger['info'](_0x7d54('0xb'));return request({'uri':util[_0x7d54('0xc')]('%s/tickets.json',_0xa5b980['remoteUri']),'method':'POST','body':{'ticket':_[_0x7d54('0xd')]({'requester_id':_0x2bede6['id'],'submitter_id':_0x48b250?_0x48b250['id']:undefined,'assignee_id':_0x48b250?_0x48b250['id']:undefined,'tags':getTags(_0x4d9dc3[_0x7d54('0xe')],_0x7d54('0xf')),'subject':intUtil['getString'](_0x4d9dc3[_0x7d54('0x10')],_0x1d7ff7,'\x20'),'description':intUtil['getString'](_0x4d9dc3[_0x7d54('0x11')],_0x1d7ff7,'\x0a'),'comment':{'public':![],'body':intUtil['getString'](_0x4d9dc3[_0x7d54('0x11')],_0x1d7ff7,'\x0a')}},getCustomFields(_0x4d9dc3[_0x7d54('0x12')],_0x1d7ff7))}})['then'](function(_0x268b0c){logger[_0x7d54('0x13')](_0x7d54('0x14'));return _0x268b0c['ticket'];});}function getUser(_0x2b1b0f,_0x33a519){if(intUtil[_0x7d54('0x15')](_0x33a519)){logger[_0x7d54('0x13')](_0x7d54('0x16'),_0x33a519);return request({'uri':util[_0x7d54('0xc')]('%s/search.json',_0x2b1b0f[_0x7d54('0x17')]),'qs':{'query':util[_0x7d54('0xc')]('type:user\x20role:agent\x20email:%s',_0x33a519)}})[_0x7d54('0x18')](function(_0x4b9caf){if(_0x4b9caf['count']){logger[_0x7d54('0x13')](_0x7d54('0x19'));return _[_0x7d54('0x1a')](_0x4b9caf[_0x7d54('0x1b')],{'email':_0x33a519,'role':'agent'});}else{logger[_0x7d54('0x13')](_0x7d54('0x1c'));return request({'uri':util['format'](_0x7d54('0x1d'),_0x2b1b0f[_0x7d54('0x17')])})[_0x7d54('0x18')](function(_0x6cc88b){logger[_0x7d54('0x13')](_0x7d54('0x1e'));return _0x6cc88b[_0x7d54('0x1f')];});}});}else{logger['info']('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0x7d54('0x1d'),_0x2b1b0f[_0x7d54('0x17')])})['then'](function(_0xbfa233){logger[_0x7d54('0x13')](_0x7d54('0x1e'));return _0xbfa233[_0x7d54('0x1f')];});}}function getEndUser(_0x3b611f,_0x6d0375,_0x3614aa){logger[_0x7d54('0x13')]('Searching\x20enduser\x20with\x20phone',_0x3614aa);return request({'uri':util[_0x7d54('0xc')](_0x7d54('0x20'),_0x3b611f['remoteUri']),'qs':{'query':util['format']('type:user\x20role:end-user\x20phone:%s',_0x3614aa)}})['then'](function(_0x24f2cc){var _0xa4c745;if(_0x24f2cc['results'][_0x7d54('0x21')]){_0x24f2cc[_0x7d54('0x1b')]=_['filter'](_0x24f2cc[_0x7d54('0x1b')],{'suspended':![],'role':_0x7d54('0x22')});if(_0x24f2cc[_0x7d54('0x1b')][_0x7d54('0x21')]){_0xa4c745=_[_0x7d54('0x23')](_0x24f2cc[_0x7d54('0x1b')]);}}if(_0xa4c745){logger[_0x7d54('0x13')](_0x7d54('0x24'));return _0xa4c745;}else{logger['info'](_0x7d54('0x25'));return request({'uri':util['format']('%s/users.json',_0x3b611f[_0x7d54('0x17')]),'method':_0x7d54('0x26'),'body':{'user':{'role':'end-user','name':util[_0x7d54('0xc')](_0x7d54('0x27'),_0x6d0375||_0x3614aa),'phone':_0x3614aa}}})[_0x7d54('0x18')](function(_0x21a01b){logger[_0x7d54('0x13')](_0x7d54('0x28'));return _0x21a01b[_0x7d54('0x1f')];});}});}function getAuth(_0x546604){var _0xa322a1;if(_0x546604[_0x7d54('0x29')]==='password'){_0xa322a1=util[_0x7d54('0xc')](_0x7d54('0x2a'),_0x546604[_0x7d54('0x2b')],_0x546604['password']);}else if(_0x546604[_0x7d54('0x29')]===_0x7d54('0x2c')){_0xa322a1=util[_0x7d54('0xc')](_0x7d54('0x2d'),_0x546604[_0x7d54('0x2b')],_0x546604['token']);}return util[_0x7d54('0xc')](_0x7d54('0x2e'),new Buffer(_0xa322a1)['toString'](_0x7d54('0x2f')));}function request(_0x24b935){logger[_0x7d54('0x30')](_0x7d54('0x31'),JSON[_0x7d54('0x32')](_0x24b935));return rp(_[_0x7d54('0x5')](_0x24b935,{'method':_0x7d54('0x33'),'headers':headers,'json':!![]}));}function getTags(_0x22dcbc,_0x125974){var _0x32b5fa=[];if(_0x22dcbc&&_0x22dcbc[_0x7d54('0x21')]>0x0){_0x32b5fa=_[_0x7d54('0x34')](_0x22dcbc,_0x125974);}return _0x32b5fa;}function getCustomFields(_0x4f637b,_0x4f52e9){var _0x319d36=[];var _0x3c1066={'custom_fields':[]};if(_0x4f637b[_0x7d54('0x21')]>0x0){_[_0x7d54('0x35')](_0x4f637b,function(_0x5a59fd){if(_0x5a59fd['type']===_0x7d54('0x36')&&_0x5a59fd['nameField']&&!_0x5a59fd[_0x7d54('0x37')]){_0x3c1066[_0x5a59fd[_0x7d54('0x38')]['toLowerCase']()]=_0x5a59fd['content'][_0x7d54('0x39')]();}else if(_0x5a59fd[_0x7d54('0x3a')]==='string'&&_0x5a59fd[_0x7d54('0x3b')]&&_0x5a59fd[_0x7d54('0x37')]){_0x3c1066['custom_fields']['push']({'id':_0x5a59fd[_0x7d54('0x3b')],'value':_0x5a59fd[_0x7d54('0x3c')][_0x7d54('0x39')]()});}else if(_0x5a59fd[_0x7d54('0x3a')]===_0x7d54('0x3d')&&_0x5a59fd[_0x7d54('0x3e')]&&_0x5a59fd[_0x7d54('0x3b')]&&_0x5a59fd[_0x7d54('0x37')]){_0x4f52e9[_0x5a59fd[_0x7d54('0x3e')]]&&_0x3c1066[_0x7d54('0x3f')][_0x7d54('0x40')]({'id':_0x5a59fd['idField'],'value':_0x4f52e9[_0x5a59fd['variableName']][_0x7d54('0x39')]()});}else if(_0x5a59fd[_0x7d54('0x3a')]===_0x7d54('0x41')&&_0x5a59fd[_0x7d54('0x42')]&&_0x5a59fd[_0x7d54('0x42')][_0x7d54('0xf')]&&_0x5a59fd[_0x7d54('0x3b')]&&_0x5a59fd['customField']){_0x4f52e9[_0x5a59fd[_0x7d54('0x42')]['name']['toLowerCase']()]&&_0x3c1066[_0x7d54('0x3f')][_0x7d54('0x40')]({'id':_0x5a59fd[_0x7d54('0x3b')],'value':_0x4f52e9[_0x5a59fd[_0x7d54('0x42')][_0x7d54('0xf')]['toLowerCase']()][_0x7d54('0x39')]()});}});}return _0x3c1066;}exports[_0x7d54('0x43')]=function(_0x5a16d7,_0x18ea23,_0x793350,_0x22e0a9,_0x3e7187,_0x163d65){var _0x3d6f39,_0x5a2fcb;_0x163d65[_0x7d54('0x17')]=intUtil[_0x7d54('0x44')](_0x163d65[_0x7d54('0x17')]);_0x163d65[_0x7d54('0x45')]=intUtil[_0x7d54('0x44')](_0x163d65[_0x7d54('0x45')]);if(_0x3e7187&&_0x3e7187[_0x7d54('0x46')]){logger['info'](_0x7d54('0x47'),_0x7d54('0x48'));_0x18ea23[_0x7d54('0x49')]=util[_0x7d54('0xc')](_0x7d54('0x4a'),_0x163d65['serverUrl'],_0x18ea23[_0x7d54('0x4b')],md5(_0x18ea23['uniqueid']));}else{_0x18ea23[_0x7d54('0x49')]='';}headers['Authorization']=getAuth(_0x163d65);return getUser(_0x163d65,_0x22e0a9['email'])[_0x7d54('0x18')](function(_0x59585d){_0x3d6f39=_0x59585d;logger['info'](_0x7d54('0x4c'),_0x3d6f39['id']);return getEndUser(_0x163d65,_0x18ea23[_0x7d54('0x4d')],_0x18ea23['calleridnum']);})[_0x7d54('0x18')](function(_0x1af735){_0x5a2fcb=_0x1af735;logger[_0x7d54('0x13')]('The\x20Enduser\x20ID\x20is:',_0x5a2fcb['id']);return getTicket(_0x163d65,_0x3d6f39,_0x5a2fcb,_0x793350,_0x18ea23);})[_0x7d54('0x18')](function(_0x57bb14){if(_0x57bb14){logger[_0x7d54('0x13')](_0x7d54('0x4e'),_0x57bb14['id']);switch(_0x163d65[_0x7d54('0x3a')]){case _0x7d54('0x4f'):logger['info']('[QUEUE]',_0x7d54('0x50'));return request({'uri':util[_0x7d54('0xc')](_0x7d54('0x51'),_0x163d65[_0x7d54('0x17')],_0x3d6f39['id'],_0x57bb14['id']),'method':_0x7d54('0x26')});case'newTab':logger[_0x7d54('0x13')](_0x7d54('0x47'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x7d54('0xc')](_0x7d54('0x52'),_0x22e0a9[_0x7d54('0xf')]),_0x7d54('0x53'),{'uri':util[_0x7d54('0xc')](_0x7d54('0x54'),_0x163d65[_0x7d54('0x17')],_0x57bb14['id'])});break;default:logger[_0x7d54('0x55')]('[QUEUE]',_0x7d54('0x56'));}}})[_0x7d54('0x57')](function(_0x2938ac){logger['error'](_0x7d54('0x58'),util[_0x7d54('0x59')](_0x2938ac,{'showHidden':!![],'depth':null}));});};exports[_0x7d54('0x5a')]=function(_0x1cb1fc,_0x544dd7,_0x3e4d68,_0x238210,_0xe9db27,_0x55ee74,_0x5be8d3){var _0x508c46,_0x5a5bb1;_0x55ee74[_0x7d54('0x17')]=intUtil[_0x7d54('0x44')](_0x55ee74[_0x7d54('0x17')]);_0x55ee74[_0x7d54('0x45')]=intUtil[_0x7d54('0x44')](_0x55ee74['serverUrl']);if(_0x5be8d3&&_0x5be8d3['recordingFormat']&&_0x5be8d3['recordingFormat']!=='none'){logger[_0x7d54('0x13')]('[OUTBOUND]',_0x7d54('0x48'));_0x544dd7['recordingURL']=util[_0x7d54('0xc')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x55ee74[_0x7d54('0x45')],_0x544dd7[_0x7d54('0x4b')],md5(_0x544dd7['uniqueid']));}headers['Authorization']=getAuth(_0x55ee74);return getUser(_0x55ee74,_0x238210['email'])[_0x7d54('0x18')](function(_0x37bf9c){_0x508c46=_0x37bf9c;logger['info']('The\x20User\x20ID\x20is:',_0x508c46['id']);return getEndUser(_0x55ee74,_0x544dd7[_0x7d54('0x5b')],_0x544dd7[_0x7d54('0x5c')]);})[_0x7d54('0x18')](function(_0x450336){_0x5a5bb1=_0x450336;logger[_0x7d54('0x13')]('The\x20Enduser\x20ID\x20is:',_0x5a5bb1['id']);return getTicket(_0x55ee74,_0x508c46,_0x5a5bb1,_0x3e4d68,_0x544dd7);})[_0x7d54('0x18')](function(_0x50e69e){if(_0x50e69e){logger['info'](_0x7d54('0x4e'),_0x50e69e['id']);switch(_0x55ee74[_0x7d54('0x3a')]){case _0x7d54('0x4f'):logger[_0x7d54('0x13')](_0x7d54('0x5d'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util['format']('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x55ee74['remoteUri'],_0x508c46['id'],_0x50e69e['id']),'method':_0x7d54('0x26')});case _0x7d54('0x5e'):logger['info'](_0x7d54('0x5d'),_0x7d54('0x5f'));emit(util['format']('user:%s',_0x238210[_0x7d54('0xf')]),_0x7d54('0x53'),{'uri':util[_0x7d54('0xc')](_0x7d54('0x54'),_0x55ee74['remoteUri'],_0x50e69e['id'])});break;default:logger[_0x7d54('0x55')](_0x7d54('0x5d'),_0x7d54('0x56'));}}})[_0x7d54('0x57')](function(_0x151a47){logger[_0x7d54('0x55')](_0x7d54('0x60'),util['inspect'](_0x151a47,{'showHidden':!![],'depth':null}));});};exports['unmanaged']=function(_0x2e5956,_0x4f32d2,_0x770d4d,_0x37d990,_0xc2b893,_0x1b97da){var _0x3f0bdc,_0x454177;_0x1b97da['remoteUri']=intUtil[_0x7d54('0x44')](_0x1b97da[_0x7d54('0x17')]);_0x1b97da[_0x7d54('0x45')]=intUtil[_0x7d54('0x44')](_0x1b97da[_0x7d54('0x45')]);if(_0xc2b893&&_0xc2b893[_0x7d54('0x46')]){logger[_0x7d54('0x13')]('['+_0x4f32d2[_0x7d54('0x61')]['toUpperCase']()+']',_0x7d54('0x48'));_0x4f32d2[_0x7d54('0x49')]=util['format'](_0x7d54('0x4a'),_0x1b97da[_0x7d54('0x45')],_0x4f32d2['uniqueid'],md5(_0x4f32d2['uniqueid']));}else{_0x4f32d2[_0x7d54('0x49')]='';}headers['Authorization']=getAuth(_0x1b97da);return getUser(_0x1b97da)['then'](function(_0xb70943){_0x3f0bdc=_0xb70943;logger[_0x7d54('0x13')](_0x7d54('0x4c'),_0x3f0bdc['id']);return getEndUser(_0x1b97da,_0x4f32d2[_0x7d54('0x4d')],_0x4f32d2[_0x7d54('0x62')]);})['then'](function(_0x2f8d84){_0x454177=_0x2f8d84;logger[_0x7d54('0x13')](_0x7d54('0x63'),_0x454177['id']);return getTicket(_0x1b97da,_0x3f0bdc,_0x454177,_0x770d4d,_0x4f32d2);})['then'](function(_0x52baf0){if(_0x52baf0){logger['info'](_0x7d54('0x4e'),_0x52baf0['id']);}})['catch'](function(_0x4cd995){logger[_0x7d54('0x55')]('['+_0x4f32d2[_0x7d54('0x61')][_0x7d54('0x64')]()+']'+_0x7d54('0x65'),util[_0x7d54('0x59')](_0x4cd995,{'showHidden':!![],'depth':null}));});};