cca4a2e29352c660e85fd8625c7da7d782c44473
[motion2.git] / server / services / ami / trigger / integration / servicenow.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 _0x3069=['%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','[QUEUE]','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!','recordingURL','The\x20ticket\x20ID\x20is:\x20%s','call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20ServiceNow\x20integration','lodash','bluebird','request-promise','util','md5','ioredis','./util','../../../../config/environment','../../../../config/logger','servicenow','redis','defaults','localhost','socket.io-emitter','GET','sys_user?sysparm_query=user_name%3Dadmin','then','result','length','adminId','sys_id','info','toUpperCase','],\x20getAdminUser\x20crm','error','message','],\x20getUser\x20input\x20crm','userEmail','sys_user?sysparm_query=email%3D','],\x20getUser\x20rp\x20obj','],\x20getUser\x20entity','active','true','userId','adminEmail','catch',']\x20using\x20admin\x20profile','],\x20createEndUser\x20input\x20crm','POST','sys_user?','endUserNumber','endUserId','],\x20getEndUser\x20input\x20crm','sys_user?sysparm_query=phone%3D','],\x20createEndUser\x20crm','forEach','includes','picklist','nameField','customField','content','toString','string','type','idField','toLowerCase','variable','variableName','customVariable','Variable','name','outbound','incident','getString','Subjects','Descriptions','Fields',']\x20POST\x20incident\x20entity\x20schema','ticketId','ticketNumber','number',']\x20getTicket\x20crm','label','?sysparm_query=name%3D','Incident\x20-\x20','push','all',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','Tags','map','%26sysparm_record_target%3Dincident','%26sysparm_record_list%3Dactive%253Dtrue','%255EORDERBYDESCnumber','format','user:%s','emit','trigger:browser:url','username','sysparm_limit=1','remoteUri','stripTrailingSlash','serverUrl','%s/api/now/table/','isNil','calleridnum','callDirection','queue','unmanaged'];(function(_0x1e3a5c,_0xaea8cd){var _0x45c8b8=function(_0x65dbf8){while(--_0x65dbf8){_0x1e3a5c['push'](_0x1e3a5c['shift']());}};_0x45c8b8(++_0xaea8cd);}(_0x3069,0x7c));var _0x9306=function(_0x4e6e1c,_0x58af90){_0x4e6e1c=_0x4e6e1c-0x0;var _0x197e87=_0x3069[_0x4e6e1c];return _0x197e87;};'use strict';var _=require(_0x9306('0x0'));var Promise=require(_0x9306('0x1'));var rp=require(_0x9306('0x2'));var util=require(_0x9306('0x3'));var md5=require(_0x9306('0x4'));var Redis=require(_0x9306('0x5'));var intUtil=require(_0x9306('0x6'));var config=require(_0x9306('0x7'));var logger=require(_0x9306('0x8'))(_0x9306('0x9'));config[_0x9306('0xa')]=_[_0x9306('0xb')](config[_0x9306('0xa')],{'host':_0x9306('0xc'),'port':0x18eb});var io=require(_0x9306('0xd'))(new Redis(config[_0x9306('0xa')]));function getAdminUser(_0x2dd655,_0x51ae66,_0x2c7aeb,_0x3e0061,_0x45e3f1,_0x2de983){return new Promise(function(_0x734ef7,_0x27bdaf){var _0x5d32b8={'method':_0x9306('0xe'),'uri':_0x3e0061+_0x9306('0xf')+'&'+_0x45e3f1+'&'+_0x2de983,'auth':_0x51ae66,'json':!![]};return rp(_0x5d32b8)[_0x9306('0x10')](function(_0x1e43b0){if(_0x1e43b0[_0x9306('0x11')][_0x9306('0x12')]>0x0){_0x2c7aeb[_0x9306('0x13')]=_0x1e43b0['result'][0x0][_0x9306('0x14')];}logger[_0x9306('0x15')]('['+[_0x2dd655[_0x9306('0x16')]()]+_0x9306('0x17'),_0x2c7aeb);_0x734ef7(_0x2c7aeb);})['catch'](function(_0x570ee1){logger[_0x9306('0x18')]('['+[_0x2dd655['toUpperCase']()]+']',_0x570ee1[_0x9306('0x19')]);_0x27bdaf(_0x570ee1['message']);});});}function getUser(_0x1327d1,_0x590fdf,_0x1a0f37,_0x86b419,_0x12e81f){return function(_0x595ca4){logger[_0x9306('0x15')]('['+[_0x1327d1['toUpperCase']()]+_0x9306('0x1a'),_0x595ca4);return new Promise(function(_0x584856,_0x54a3ec){if(intUtil['validateEmail'](_0x595ca4[_0x9306('0x1b')])){var _0x39ccef={'method':_0x9306('0xe'),'uri':_0x1a0f37+_0x9306('0x1c')+_0x595ca4[_0x9306('0x1b')]+'&'+_0x86b419+'&'+_0x12e81f,'auth':_0x590fdf,'json':!![]};logger[_0x9306('0x15')]('['+[_0x1327d1[_0x9306('0x16')]()]+_0x9306('0x1d'),_0x39ccef);return rp(_0x39ccef)[_0x9306('0x10')](function(_0x5c2ea2){logger['info']('['+[_0x1327d1[_0x9306('0x16')]()]+_0x9306('0x1e'),_0x5c2ea2);if(_0x5c2ea2[_0x9306('0x11')]['length']>0x0&&String(_0x5c2ea2['result'][0x0][_0x9306('0x1f')])===_0x9306('0x20')){_0x595ca4['userId']=_0x5c2ea2['result'][0x0][_0x9306('0x14')];}else{_0x595ca4[_0x9306('0x21')]=_0x595ca4[_0x9306('0x13')];_0x595ca4[_0x9306('0x1b')]=_0x595ca4[_0x9306('0x22')];}logger['info']('['+[_0x1327d1[_0x9306('0x16')]()]+'],\x20getUser\x20crm',_0x595ca4);_0x584856(_0x595ca4);})[_0x9306('0x23')](function(_0x468ea9){logger[_0x9306('0x18')]('['+[_0x1327d1[_0x9306('0x16')]()]+']',_0x468ea9[_0x9306('0x19')]);_0x54a3ec(_0x468ea9['message']);});}else{logger[_0x9306('0x15')]('['+[_0x1327d1[_0x9306('0x16')]()]+_0x9306('0x24'));_0x595ca4[_0x9306('0x21')]=_0x595ca4[_0x9306('0x13')];_0x595ca4[_0x9306('0x1b')]=_0x595ca4[_0x9306('0x22')];_0x584856(_0x595ca4);}});};}function createEndUser(_0x20b6cb,_0x377f3f,_0x279885,_0x3c8882,_0x26adcd){logger[_0x9306('0x15')]('['+[_0x20b6cb[_0x9306('0x16')]()]+_0x9306('0x25'),_0x279885);return new Promise(function(_0x3e742b,_0x448ded){var _0x375ecd={'method':_0x9306('0x26'),'uri':_0x3c8882+_0x9306('0x27')+_0x26adcd,'body':{'user_name':_0x279885[_0x9306('0x28')],'roles':'user','first_name':_0x279885[_0x9306('0x28')],'active':_0x9306('0x20'),'date_format':'System','phone':_0x279885[_0x9306('0x28')]},'auth':_0x377f3f,'json':!![]};return rp(_0x375ecd)[_0x9306('0x10')](function(_0x2d604d){logger[_0x9306('0x15')]('['+[_0x20b6cb['toUpperCase']()]+'],\x20EndUser\x20schema',_0x2d604d[_0x9306('0x11')]);_0x279885[_0x9306('0x29')]=_0x2d604d[_0x9306('0x11')][_0x9306('0x14')];_0x3e742b(_0x279885);})['catch'](function(_0x5b091c){logger[_0x9306('0x18')]('['+[_0x20b6cb['toUpperCase']()]+']',_0x5b091c[_0x9306('0x19')]);_0x448ded(_0x5b091c[_0x9306('0x19')]);});});}function getEndUser(_0x44b61d,_0x337dff,_0x2b348f,_0x43aab5,_0x3ddade){return function(_0x39aee2){logger['info']('['+[_0x44b61d[_0x9306('0x16')]()]+_0x9306('0x2a'),_0x39aee2);return new Promise(function(_0x1c7b4a,_0x54d02d){var _0x3c905f={'method':_0x9306('0xe'),'uri':_0x2b348f+_0x9306('0x2b')+_0x39aee2[_0x9306('0x28')]+'&'+_0x43aab5+'&'+_0x3ddade,'auth':_0x337dff,'json':!![]};return rp(_0x3c905f)['then'](function(_0x449b85){if(_0x449b85[_0x9306('0x11')][_0x9306('0x12')]>0x0){_0x39aee2[_0x9306('0x29')]=_0x449b85[_0x9306('0x11')][0x0][_0x9306('0x14')];logger['info']('['+[_0x44b61d[_0x9306('0x16')]()]+'],\x20getEndUser\x20crm',_0x39aee2);_0x1c7b4a(_0x39aee2);}else{return createEndUser(_0x44b61d,_0x337dff,_0x39aee2,_0x2b348f,_0x43aab5)[_0x9306('0x10')](function(_0xc35101){logger[_0x9306('0x15')]('['+[_0x44b61d[_0x9306('0x16')]()]+_0x9306('0x2c'),_0xc35101);_0x1c7b4a(_0xc35101);});}})[_0x9306('0x23')](function(_0x47642f){logger[_0x9306('0x18')]('['+[_0x44b61d[_0x9306('0x16')]()]+']',_0x47642f['message']);_0x54d02d(_0x47642f[_0x9306('0x19')]);});});};}function getCustomFields(_0x213bd5,_0x2d2af9){var _0x348607={};if(_0x213bd5[_0x9306('0x12')]>0x0){_[_0x9306('0x2d')](_0x213bd5,function(_0x1ece3b){if(_[_0x9306('0x2e')](['string',_0x9306('0x2f')],_0x1ece3b['type'])&&_0x1ece3b[_0x9306('0x30')]&&!_0x1ece3b[_0x9306('0x31')]){_0x348607[_0x1ece3b[_0x9306('0x30')]['toLowerCase']()]=_0x1ece3b[_0x9306('0x32')][_0x9306('0x33')]();}else if(_[_0x9306('0x2e')]([_0x9306('0x34'),'picklist'],_0x1ece3b[_0x9306('0x35')])&&_0x1ece3b['idField']&&_0x1ece3b[_0x9306('0x31')]){_0x348607[_0x1ece3b[_0x9306('0x36')][_0x9306('0x37')]()]=_0x1ece3b[_0x9306('0x32')][_0x9306('0x33')]();}else if(_0x1ece3b[_0x9306('0x35')]===_0x9306('0x38')&&_0x1ece3b[_0x9306('0x39')]&&_0x1ece3b[_0x9306('0x36')]&&_0x1ece3b[_0x9306('0x31')]){_0x348607[_0x1ece3b[_0x9306('0x36')][_0x9306('0x37')]()]=_0x2d2af9[_0x1ece3b[_0x9306('0x39')]]['toString']();}else if(_0x1ece3b[_0x9306('0x35')]===_0x9306('0x3a')&&_0x1ece3b[_0x9306('0x3b')]&&_0x1ece3b['Variable'][_0x9306('0x3c')]&&_0x1ece3b[_0x9306('0x36')]&&_0x1ece3b[_0x9306('0x31')]){_0x348607[_0x1ece3b[_0x9306('0x36')]['toLowerCase']()]=_0x2d2af9[_0x1ece3b[_0x9306('0x3b')][_0x9306('0x3c')][_0x9306('0x37')]()][_0x9306('0x33')]();}});}return _0x348607;}function getTicket(_0x1436b7,_0x20493d,_0x1f7fd4,_0x304ff6,_0x395923,_0x13fea1){return function(_0x598cba){logger[_0x9306('0x15')]('['+[_0x1436b7[_0x9306('0x16')]()]+']\x20getTicket\x20input\x20crm',_0x598cba);return new Promise(function(_0x131deb,_0x40c3e1){var _0x1fd551=_0x1436b7['toLowerCase']()===_0x9306('0x3d')?_0x598cba[_0x9306('0x21')]:_0x598cba['endUserId'];var _0x192ff8={'method':_0x9306('0x26'),'uri':_0x1f7fd4+_0x9306('0x3e')+'?'+_0x13fea1,'body':Object['assign']({},{'active':_0x9306('0x20'),'caller_id':_0x1fd551,'assigned_to':_0x598cba[_0x9306('0x21')],'short_description':intUtil[_0x9306('0x3f')](_0x304ff6[_0x9306('0x40')],_0x395923,'\x20'),'description':intUtil[_0x9306('0x3f')](_0x304ff6[_0x9306('0x41')],_0x395923,'\x0a')},getCustomFields(_0x304ff6[_0x9306('0x42')],_0x395923)),'auth':_0x20493d,'json':!![]};return rp(_0x192ff8)['then'](function(_0x55b4a7){logger[_0x9306('0x15')]('['+[_0x1436b7[_0x9306('0x16')]()]+_0x9306('0x43'),_0x55b4a7['result']);_0x598cba[_0x9306('0x44')]=_0x55b4a7['result'][_0x9306('0x14')];_0x598cba[_0x9306('0x45')]=_0x55b4a7[_0x9306('0x11')][_0x9306('0x46')];logger[_0x9306('0x15')]('['+[_0x1436b7[_0x9306('0x16')]()]+_0x9306('0x47'),_0x598cba);_0x131deb(_0x598cba);})[_0x9306('0x23')](function(_0x4cd713){logger[_0x9306('0x18')]('['+[_0x1436b7[_0x9306('0x16')]()]+']',_0x4cd713[_0x9306('0x19')]);_0x40c3e1(_0x4cd713[_0x9306('0x19')]);});});};}function createRemoteTag(_0x1c67eb,_0x4fdc20,_0x4584e7,_0x2df9f0){return new Promise(function(_0x35a98a,_0x313775){var _0x2a2aa9={'method':'POST','uri':_0x4584e7+_0x9306('0x48')+'?'+_0x2df9f0,'body':{'short_description':_0x1c67eb,'global':!![],'active':!![],'name':_0x1c67eb},'auth':_0x4fdc20,'json':!![]};return rp(_0x2a2aa9)['then'](function(_0x572b1a){var _0x67aa3b=_0x572b1a[_0x9306('0x11')][_0x9306('0x14')];_0x35a98a(_0x67aa3b);});});}function getRemoteTag(_0x5b9186,_0x6f84ad,_0x57c1d3,_0x47204e,_0x1cb5e4){return new Promise(function(_0x1d7752,_0x5559e4){var _0x5090fe={'method':_0x9306('0xe'),'uri':_0x57c1d3+_0x9306('0x48')+_0x9306('0x49')+_0x5b9186+'&'+_0x47204e,'auth':_0x6f84ad,'json':!![]};return rp(_0x5090fe)[_0x9306('0x10')](function(_0x5689cc){if(_0x5689cc['result']['length']>0x0){var _0x297a85=_0x5689cc[_0x9306('0x11')][0x0][_0x9306('0x14')];_0x1d7752(_0x297a85);}else{return createRemoteTag(_0x5b9186,_0x6f84ad,_0x57c1d3,_0x47204e)[_0x9306('0x10')](function(_0x5d8ef4){_0x1d7752(_0x5d8ef4);});}});});}function assignTagToIncident(_0x5edf11,_0x183e8a,_0x286164,_0x3ab2e9,_0x220d82){return new Promise(function(_0xd5ff02,_0x55281d){var _0x17c17b={'method':_0x9306('0x26'),'uri':_0x286164+'label_entry'+'?'+_0x220d82,'body':{'label':_0x5edf11,'table':'incident','id_type':'Incident','table_key':_0x3ab2e9[_0x9306('0x44')],'title':_0x9306('0x4a')+_0x3ab2e9[_0x9306('0x45')],'id_display':_0x3ab2e9[_0x9306('0x45')]},'auth':_0x183e8a,'json':!![]};return rp(_0x17c17b)[_0x9306('0x10')](function(_0x50c68d){_0xd5ff02();})[_0x9306('0x23')](function(){_0xd5ff02();});});}function manageTags(_0x4fe1be,_0x5cd172,_0x1a0403,_0x10df2a,_0x2df787,_0xd0c259,_0x10a77d){return new Promise(function(_0x446ccc,_0x304906){var _0x4ec949=[];_0x5cd172[_0x9306('0x2d')](function(_0x285fda){_0x4ec949[_0x9306('0x4b')](getRemoteTag(_0x285fda,_0x1a0403,_0x10df2a,_0xd0c259,_0x10a77d));});return Promise[_0x9306('0x4c')](_0x4ec949)[_0x9306('0x10')](function(_0x3d5668){if(_0x3d5668[_0x9306('0x12')]){logger[_0x9306('0x15')]('['+[_0x4fe1be[_0x9306('0x16')]()]+_0x9306('0x4d'),_0x3d5668);var _0x583a83=[];_0x3d5668[_0x9306('0x2d')](function(_0x149cdc){_0x583a83[_0x9306('0x4b')](assignTagToIncident(_0x149cdc,_0x1a0403,_0x10df2a,_0x2df787,_0xd0c259));});return Promise[_0x9306('0x4c')](_0x583a83)[_0x9306('0x10')](function(){_0x446ccc();})[_0x9306('0x23')](function(){_0x446ccc();});}else{_0x446ccc();}});});}function getTags(_0x54465e,_0x26c3d6,_0x33fea6,_0x51dfe2,_0x966a2c,_0x1e92f6){return function(_0x42b709){return new Promise(function(_0xd0fb40,_0x73dd66){var _0x14a561=[];var _0x19a73a=_0x51dfe2[_0x9306('0x4e')];if(_0x19a73a&&_0x19a73a[_0x9306('0x12')]>0x0){_0x14a561=_[_0x9306('0x4f')](_0x19a73a,_0x9306('0x3c'));}if(_0x14a561['length']>0x0){return manageTags(_0x54465e,_0x14a561,_0x26c3d6,_0x33fea6,_0x42b709,_0x966a2c,_0x1e92f6)[_0x9306('0x10')](function(){_0xd0fb40(_0x42b709);});}else{_0xd0fb40(_0x42b709);}});};}function emit(_0x1f1858,_0x37f99d,_0x2f6f83){var _0x161639=_0x9306('0x50')+'%26sysparm_record_row%3D1%26sysparm_record_rows%3D39'+_0x9306('0x51')+_0x9306('0x52');var _0xbefaa={'uri':_0x1f1858+'/nav_to.do?uri=incident.do?sys_id%3D'+_0x2f6f83+_0x161639};io['to'](util[_0x9306('0x53')](_0x9306('0x54'),_0x37f99d))[_0x9306('0x55')](_0x9306('0x56'),_0xbefaa);}exports['cs']=function(_0x5d0a60,_0x3198f1,_0x500c8c,_0x4b7ed7,_0x498977,_0x2dc708,_0x48b8e1,_0x376444){var _0x48dfc7={};var _0x15ec81={'user':_0x2dc708[_0x9306('0x57')],'pass':_0x2dc708['password']};var _0x6b8e06=_0x9306('0x58');var _0x319937='sysparm_display_value=true';_0x2dc708[_0x9306('0x59')]=intUtil[_0x9306('0x5a')](_0x2dc708[_0x9306('0x59')]);_0x2dc708[_0x9306('0x5b')]=intUtil['stripTrailingSlash'](_0x2dc708['serverUrl']);var _0x2d1f60=util[_0x9306('0x53')](_0x9306('0x5c'),_0x2dc708['remoteUri']);_0x48dfc7[_0x9306('0x1b')]=!_[_0x9306('0x5d')](_0x4b7ed7)?_0x4b7ed7['email']:null;_0x48dfc7[_0x9306('0x22')]=_0x2dc708['email'];_0x48dfc7[_0x9306('0x28')]=_0x376444[_0x9306('0x37')]()==='outbound'?_0x3198f1['destcalleridnum']:_0x3198f1[_0x9306('0x5e')];_0x48dfc7[_0x9306('0x5f')]=_0x376444===_0x9306('0x60')||_0x376444===_0x9306('0x61')?'queue':_0x9306('0x3d');var _0x2ebd4a=util[_0x9306('0x53')](_0x9306('0x62'),_0x2dc708[_0x9306('0x5b')],_0x3198f1[_0x9306('0x63')],md5(_0x3198f1[_0x9306('0x63')]));if(_0x498977&&_0x498977[_0x9306('0x64')]){logger[_0x9306('0x15')](_0x9306('0x65'),'Recording\x20is\x20enabled!');_0x3198f1['recordingURL']=_0x2ebd4a;}else if(_0x48b8e1&&_0x48b8e1[_0x9306('0x66')]&&_0x48b8e1[_0x9306('0x66')]!==_0x9306('0x67')){logger[_0x9306('0x15')](_0x9306('0x68'),_0x9306('0x69'));_0x3198f1['recordingURL']=_0x2ebd4a;}else{_0x3198f1[_0x9306('0x6a')]='';}return getAdminUser(_0x376444,_0x15ec81,_0x48dfc7,_0x2d1f60,_0x319937,_0x6b8e06)[_0x9306('0x10')](getUser(_0x376444,_0x15ec81,_0x2d1f60,_0x319937,_0x6b8e06))[_0x9306('0x10')](getEndUser(_0x376444,_0x15ec81,_0x2d1f60,_0x319937,_0x6b8e06))[_0x9306('0x10')](getTicket(_0x376444,_0x15ec81,_0x2d1f60,_0x500c8c,_0x3198f1,_0x319937))[_0x9306('0x10')](function(_0x258d20){logger[_0x9306('0x15')](util[_0x9306('0x53')](_0x9306('0x6b'),_0x258d20[_0x9306('0x44')]));logger[_0x9306('0x15')](util[_0x9306('0x53')](_0x9306('0x6c'),_0x376444));if(_0x376444!==_0x9306('0x61')){logger['info']('['+[_0x376444[_0x9306('0x16')]()]+']',_0x9306('0x6d'));emit(_0x2dc708['remoteUri'],_0x4b7ed7[_0x9306('0x3c')],_0x258d20['ticketId']);}})[_0x9306('0x23')](function(_0x503d8a){logger['error']('['+[_0x376444[_0x9306('0x16')]()]+_0x9306('0x6e'),util['inspect'](_0x503d8a,{'showHidden':!![],'depth':null}));});};