e50cb471fa9ba6ef27f10afc0c26a67a9693d0c0
[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 _0x8720=['Admin\x20account\x20selected.','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','user','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','filter','length','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','end-user','Enduser\x20created.','password','%s:%s','authType','%s/token:%s','token','Basic\x20%s','toString','base64','debug','stringify','GET','map','forEach','includes','picklist','customField','nameField','toLowerCase','content','string','type','custom_fields','push','idField','variable','variableName','customVariable','Variable','queue','serverUrl','monitor_format','[QUEUE]','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','integrationTab','Displaying\x20ticket\x20to\x20agent...','user:%s','trigger:browser:url','%s/agent/tickets/%s','replace','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','outbound','stripTrailingSlash','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','Authorization','email','destcalleridnum','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','/api/v2','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','inspect','unmanaged','lastevent','\x20Error\x20running\x20Zendesk\x20integration','md5','util','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','socket.io-emitter','application/json','info','Creating\x20new\x20ticket...','format','remoteUri','POST','merge','name','getString','Subjects','Descriptions','Fields','then','Ticket\x20created!','ticket','validateEmail','Getting\x20agent\x20with\x20email','%s/search.json','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','find','results','agent','%s/users/me.json'];(function(_0x2fbf31,_0x3a1f95){var _0x1abe93=function(_0x546e8d){while(--_0x546e8d){_0x2fbf31['push'](_0x2fbf31['shift']());}};_0x1abe93(++_0x3a1f95);}(_0x8720,0x134));var _0x0872=function(_0x303210,_0x1944be){_0x303210=_0x303210-0x0;var _0xb43f2f=_0x8720[_0x303210];return _0xb43f2f;};'use strict';var _=require('lodash');var rp=require('request-promise');var md5=require(_0x0872('0x0'));var util=require(_0x0872('0x1'));var Redis=require('ioredis');var intUtil=require(_0x0872('0x2'));var config=require(_0x0872('0x3'));var logger=require(_0x0872('0x4'))(_0x0872('0x5'));config[_0x0872('0x6')]=_[_0x0872('0x7')](config[_0x0872('0x6')],{'host':'localhost','port':0x18eb});var io=require(_0x0872('0x8'))(new Redis(config[_0x0872('0x6')]));function emit(_0x25c223,_0x56203a,_0x14b816){io['to'](_0x25c223)['emit'](_0x56203a,_0x14b816);}var headers={'Content-Type':_0x0872('0x9'),'Accept':_0x0872('0x9')};function getTicket(_0x529e48,_0x463962,_0x807a34,_0x14143c,_0x3f5710){logger[_0x0872('0xa')](_0x0872('0xb'));return request({'uri':util[_0x0872('0xc')]('%s/tickets.json',_0x529e48[_0x0872('0xd')]),'method':_0x0872('0xe'),'body':{'ticket':_[_0x0872('0xf')]({'requester_id':_0x807a34['id'],'submitter_id':_0x463962?_0x463962['id']:undefined,'assignee_id':_0x463962?_0x463962['id']:undefined,'tags':getTags(_0x14143c['Tags'],_0x0872('0x10')),'subject':intUtil[_0x0872('0x11')](_0x14143c[_0x0872('0x12')],_0x3f5710,'\x20'),'description':intUtil[_0x0872('0x11')](_0x14143c[_0x0872('0x13')],_0x3f5710,'\x0a'),'comment':{'public':![],'body':intUtil[_0x0872('0x11')](_0x14143c[_0x0872('0x13')],_0x3f5710,'\x0a')}},getCustomFields(_0x14143c[_0x0872('0x14')],_0x3f5710))}})[_0x0872('0x15')](function(_0x2ab4f7){logger[_0x0872('0xa')](_0x0872('0x16'));return _0x2ab4f7[_0x0872('0x17')];});}function getUser(_0x2ea02f,_0x1fd781){if(intUtil[_0x0872('0x18')](_0x1fd781)){logger[_0x0872('0xa')](_0x0872('0x19'),_0x1fd781);return request({'uri':util[_0x0872('0xc')](_0x0872('0x1a'),_0x2ea02f[_0x0872('0xd')]),'qs':{'query':util[_0x0872('0xc')](_0x0872('0x1b'),_0x1fd781)}})['then'](function(_0x485adf){if(_0x485adf[_0x0872('0x1c')]){logger[_0x0872('0xa')](_0x0872('0x1d'));return _[_0x0872('0x1e')](_0x485adf[_0x0872('0x1f')],{'email':_0x1fd781,'role':_0x0872('0x20')});}else{logger[_0x0872('0xa')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x0872('0xc')](_0x0872('0x21'),_0x2ea02f[_0x0872('0xd')])})[_0x0872('0x15')](function(_0x44cb79){logger['info'](_0x0872('0x22'));return _0x44cb79['user'];});}});}else{logger[_0x0872('0xa')](_0x0872('0x23'));return request({'uri':util[_0x0872('0xc')]('%s/users/me.json',_0x2ea02f[_0x0872('0xd')])})[_0x0872('0x15')](function(_0x3f5871){logger[_0x0872('0xa')](_0x0872('0x22'));return _0x3f5871[_0x0872('0x24')];});}}function getEndUser(_0x3d2c16,_0x374d34,_0x50cb9c){logger[_0x0872('0xa')](_0x0872('0x25'),_0x50cb9c);return request({'uri':util[_0x0872('0xc')](_0x0872('0x1a'),_0x3d2c16[_0x0872('0xd')]),'qs':{'query':util[_0x0872('0xc')](_0x0872('0x26'),_0x50cb9c)}})[_0x0872('0x15')](function(_0x53432d){var _0xed8478;if(_0x53432d[_0x0872('0x1f')]['length']){_0x53432d[_0x0872('0x1f')]=_[_0x0872('0x27')](_0x53432d[_0x0872('0x1f')],{'suspended':![],'role':'end-user'});if(_0x53432d[_0x0872('0x1f')][_0x0872('0x28')]){_0xed8478=_['first'](_0x53432d[_0x0872('0x1f')]);}}if(_0xed8478){logger[_0x0872('0xa')](_0x0872('0x29'));return _0xed8478;}else{logger['info'](_0x0872('0x2a'));return request({'uri':util['format'](_0x0872('0x2b'),_0x3d2c16[_0x0872('0xd')]),'method':'POST','body':{'user':{'role':_0x0872('0x2c'),'name':util[_0x0872('0xc')]('Caller\x20-\x20%s',_0x374d34||_0x50cb9c),'phone':_0x50cb9c}}})['then'](function(_0x175ffd){logger[_0x0872('0xa')](_0x0872('0x2d'));return _0x175ffd['user'];});}});}function getAuth(_0x3be525){var _0x348197;if(_0x3be525['authType']===_0x0872('0x2e')){_0x348197=util[_0x0872('0xc')](_0x0872('0x2f'),_0x3be525['username'],_0x3be525['password']);}else if(_0x3be525[_0x0872('0x30')]==='token'){_0x348197=util[_0x0872('0xc')](_0x0872('0x31'),_0x3be525['username'],_0x3be525[_0x0872('0x32')]);}return util[_0x0872('0xc')](_0x0872('0x33'),new Buffer(_0x348197)[_0x0872('0x34')](_0x0872('0x35')));}function request(_0x71b0de){logger[_0x0872('0x36')]('[HTTP]',JSON[_0x0872('0x37')](_0x71b0de));return rp(_[_0x0872('0x7')](_0x71b0de,{'method':_0x0872('0x38'),'headers':headers,'json':!![]}));}function getTags(_0x2ef450,_0x1040a9){var _0xa06f1a=[];if(_0x2ef450&&_0x2ef450[_0x0872('0x28')]>0x0){_0xa06f1a=_[_0x0872('0x39')](_0x2ef450,_0x1040a9);}return _0xa06f1a;}function getCustomFields(_0x42431a,_0x52237b){var _0x1eb8ec=[];var _0x6dc826={'custom_fields':[]};if(_0x42431a[_0x0872('0x28')]>0x0){_[_0x0872('0x3a')](_0x42431a,function(_0x53b3c6){if(_[_0x0872('0x3b')](['string',_0x0872('0x3c')],_0x53b3c6['type'])&&_0x53b3c6['nameField']&&!_0x53b3c6[_0x0872('0x3d')]){_0x6dc826[_0x53b3c6[_0x0872('0x3e')][_0x0872('0x3f')]()]=_0x53b3c6[_0x0872('0x40')][_0x0872('0x34')]();}else if(_[_0x0872('0x3b')]([_0x0872('0x41'),_0x0872('0x3c')],_0x53b3c6[_0x0872('0x42')])&&_0x53b3c6['idField']&&_0x53b3c6[_0x0872('0x3d')]){_0x6dc826[_0x0872('0x43')][_0x0872('0x44')]({'id':_0x53b3c6[_0x0872('0x45')],'value':_0x53b3c6[_0x0872('0x40')][_0x0872('0x34')]()});}else if(_0x53b3c6['type']===_0x0872('0x46')&&_0x53b3c6[_0x0872('0x47')]&&_0x53b3c6[_0x0872('0x45')]&&_0x53b3c6[_0x0872('0x3d')]){_0x52237b[_0x53b3c6[_0x0872('0x47')]]&&_0x6dc826[_0x0872('0x43')][_0x0872('0x44')]({'id':_0x53b3c6[_0x0872('0x45')],'value':_0x52237b[_0x53b3c6[_0x0872('0x47')]][_0x0872('0x34')]()});}else if(_0x53b3c6[_0x0872('0x42')]===_0x0872('0x48')&&_0x53b3c6['Variable']&&_0x53b3c6[_0x0872('0x49')][_0x0872('0x10')]&&_0x53b3c6[_0x0872('0x45')]&&_0x53b3c6[_0x0872('0x3d')]){_0x52237b[_0x53b3c6[_0x0872('0x49')][_0x0872('0x10')]['toLowerCase']()]&&_0x6dc826[_0x0872('0x43')][_0x0872('0x44')]({'id':_0x53b3c6[_0x0872('0x45')],'value':_0x52237b[_0x53b3c6[_0x0872('0x49')][_0x0872('0x10')]['toLowerCase']()][_0x0872('0x34')]()});}});}return _0x6dc826;}exports[_0x0872('0x4a')]=function(_0x449bdf,_0x10964b,_0x270a9e,_0x1b9688,_0x18637b,_0x3d8a80){var _0x3991dd,_0x535820;_0x3d8a80[_0x0872('0xd')]=intUtil['stripTrailingSlash'](_0x3d8a80[_0x0872('0xd')]);_0x3d8a80[_0x0872('0x4b')]=intUtil['stripTrailingSlash'](_0x3d8a80[_0x0872('0x4b')]);if(_0x18637b&&_0x18637b[_0x0872('0x4c')]){logger[_0x0872('0xa')](_0x0872('0x4d'),'Recording\x20is\x20enabled!');_0x10964b[_0x0872('0x4e')]=util[_0x0872('0xc')](_0x0872('0x4f'),_0x3d8a80[_0x0872('0x4b')],_0x10964b[_0x0872('0x50')],md5(_0x10964b[_0x0872('0x50')]));}else{_0x10964b[_0x0872('0x4e')]='';}headers['Authorization']=getAuth(_0x3d8a80);return getUser(_0x3d8a80,_0x1b9688['email'])['then'](function(_0x492a67){_0x3991dd=_0x492a67;logger[_0x0872('0xa')](_0x0872('0x51'),_0x3991dd['id']);return getEndUser(_0x3d8a80,_0x10964b[_0x0872('0x52')],_0x10964b[_0x0872('0x53')]);})[_0x0872('0x15')](function(_0x3497fb){_0x535820=_0x3497fb;logger[_0x0872('0xa')](_0x0872('0x54'),_0x535820['id']);return getTicket(_0x3d8a80,_0x3991dd,_0x535820,_0x270a9e,_0x10964b);})[_0x0872('0x15')](function(_0x9ca20b){if(_0x9ca20b){logger['info'](_0x0872('0x55'),_0x9ca20b['id']);switch(_0x3d8a80['type']){case _0x0872('0x56'):logger[_0x0872('0xa')](_0x0872('0x4d'),_0x0872('0x57'));return request({'uri':util[_0x0872('0xc')]('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x3d8a80[_0x0872('0xd')],_0x3991dd['id'],_0x9ca20b['id']),'method':_0x0872('0xe')});case'newTab':logger[_0x0872('0xa')](_0x0872('0x4d'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x0872('0xc')](_0x0872('0x58'),_0x1b9688[_0x0872('0x10')]),_0x0872('0x59'),{'uri':util['format'](_0x0872('0x5a'),_0x3d8a80[_0x0872('0xd')][_0x0872('0x5b')]('/api/v2',''),_0x9ca20b['id'])});break;default:logger[_0x0872('0x5c')]('[QUEUE]',_0x0872('0x5d'));}}})[_0x0872('0x5e')](function(_0x24c2af){logger[_0x0872('0x5c')](_0x0872('0x5f'),util['inspect'](_0x24c2af,{'showHidden':!![],'depth':null}));});};exports[_0x0872('0x60')]=function(_0x308b33,_0xcea98a,_0x5e7098,_0x2d87b1,_0x58c07c,_0x1e993f,_0x33f148){var _0x3d5283,_0x3e528b;_0x1e993f[_0x0872('0xd')]=intUtil[_0x0872('0x61')](_0x1e993f[_0x0872('0xd')]);_0x1e993f[_0x0872('0x4b')]=intUtil[_0x0872('0x61')](_0x1e993f[_0x0872('0x4b')]);if(_0x33f148&&_0x33f148[_0x0872('0x62')]&&_0x33f148['recordingFormat']!==_0x0872('0x63')){logger['info'](_0x0872('0x64'),_0x0872('0x65'));_0xcea98a['recordingURL']=util[_0x0872('0xc')](_0x0872('0x4f'),_0x1e993f[_0x0872('0x4b')],_0xcea98a[_0x0872('0x50')],md5(_0xcea98a[_0x0872('0x50')]));}headers[_0x0872('0x66')]=getAuth(_0x1e993f);return getUser(_0x1e993f,_0x2d87b1[_0x0872('0x67')])[_0x0872('0x15')](function(_0x57e7d4){_0x3d5283=_0x57e7d4;logger[_0x0872('0xa')](_0x0872('0x51'),_0x3d5283['id']);return getEndUser(_0x1e993f,_0xcea98a['destcalleridname'],_0xcea98a[_0x0872('0x68')]);})['then'](function(_0x5ba205){_0x3e528b=_0x5ba205;logger['info'](_0x0872('0x54'),_0x3e528b['id']);return getTicket(_0x1e993f,_0x3d5283,_0x3e528b,_0x5e7098,_0xcea98a);})[_0x0872('0x15')](function(_0x59bb5e){if(_0x59bb5e){logger[_0x0872('0xa')](_0x0872('0x55'),_0x59bb5e['id']);switch(_0x1e993f[_0x0872('0x42')]){case _0x0872('0x56'):logger['info'](_0x0872('0x64'),_0x0872('0x57'));return request({'uri':util['format'](_0x0872('0x69'),_0x1e993f[_0x0872('0xd')],_0x3d5283['id'],_0x59bb5e['id']),'method':_0x0872('0xe')});case _0x0872('0x6a'):logger['info']('[OUTBOUND]',_0x0872('0x6b'));emit(util[_0x0872('0xc')]('user:%s',_0x2d87b1['name']),_0x0872('0x59'),{'uri':util[_0x0872('0xc')](_0x0872('0x5a'),_0x1e993f[_0x0872('0xd')]['replace'](_0x0872('0x6c'),''),_0x59bb5e['id'])});break;default:logger['error'](_0x0872('0x64'),_0x0872('0x5d'));}}})['catch'](function(_0x1faadd){logger['error'](_0x0872('0x6d'),util[_0x0872('0x6e')](_0x1faadd,{'showHidden':!![],'depth':null}));});};exports[_0x0872('0x6f')]=function(_0x15056f,_0x222db9,_0x587709,_0xecdd86,_0x436082,_0xdeb65){var _0x34cb23,_0x1f009c;_0xdeb65[_0x0872('0xd')]=intUtil[_0x0872('0x61')](_0xdeb65['remoteUri']);_0xdeb65[_0x0872('0x4b')]=intUtil[_0x0872('0x61')](_0xdeb65[_0x0872('0x4b')]);if(_0x436082&&_0x436082[_0x0872('0x4c')]){logger[_0x0872('0xa')]('['+_0x222db9[_0x0872('0x70')]['toUpperCase']()+']',_0x0872('0x65'));_0x222db9[_0x0872('0x4e')]=util[_0x0872('0xc')](_0x0872('0x4f'),_0xdeb65[_0x0872('0x4b')],_0x222db9[_0x0872('0x50')],md5(_0x222db9[_0x0872('0x50')]));}else{_0x222db9[_0x0872('0x4e')]='';}headers[_0x0872('0x66')]=getAuth(_0xdeb65);return getUser(_0xdeb65)[_0x0872('0x15')](function(_0x408f01){_0x34cb23=_0x408f01;logger['info'](_0x0872('0x51'),_0x34cb23['id']);return getEndUser(_0xdeb65,_0x222db9[_0x0872('0x52')],_0x222db9[_0x0872('0x53')]);})[_0x0872('0x15')](function(_0x1fdd14){_0x1f009c=_0x1fdd14;logger[_0x0872('0xa')](_0x0872('0x54'),_0x1f009c['id']);return getTicket(_0xdeb65,_0x34cb23,_0x1f009c,_0x587709,_0x222db9);})[_0x0872('0x15')](function(_0x2584f2){if(_0x2584f2){logger[_0x0872('0xa')](_0x0872('0x55'),_0x2584f2['id']);}})[_0x0872('0x5e')](function(_0x5a43c0){logger[_0x0872('0x5c')]('['+_0x222db9[_0x0872('0x70')]['toUpperCase']()+']'+_0x0872('0x71'),util[_0x0872('0x6e')](_0x5a43c0,{'showHidden':!![],'depth':null}));});};