Built motion from commit (unavailable).|2.0.71
[motion2.git] / server / services / ami / trigger / integration / zoho.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 _0xe193=['Error\x20on\x20Lead\x20creation:\x20','Error\x20on\x20Lead\x20retrieve:\x20','debug','[HTTP]','forEach','idField','toString','variable','variableName','type','customVariable','Variable','name','toLowerCase','split','queue','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','serverUrl','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Call\x20ID\x20is:','trigger:browser:url','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','catch','error','outbound','recordingFormat','[OUTBOUND]','destcalleridnum','Outbound','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','[ABANDONED]','lodash','md5','entities','moment','zoho','localhost','emit','application/json','info','merge','inbound','starttime','agentcalledAt','format','Subjects','getString','lastevent','called','Called','connect','Call\x20Result','Answered','Rejected','abandoned','talktime','utc','answertime','endtime','Call\x20Duration','YYYY-MM-DD\x20HH:mm:ss','diff','mm:ss','CONTACTID','LEADID','Leads','SEID','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','</row></Calls>','POST','https://crm.%s/crm/private/xml/Calls/insertRecords','host','authToken','crmapi','then','parse','toJson','response','result','recorddetail','Call\x20created!','Error\x20on\x20call\x20creation:\x20','stringify','Getting\x20agent\x20with\x20email','https://crm.%s/crm/private/json/Users/getUsers','users','user','find','Standard','Agent\x20found!','Using\x20the\x20admin\x20account!','The\x20failing\x20result\x20is','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','GET','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Contacts','row','length','val','content','Enduser\x20found\x20in\x20Leads!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','<Leads><row\x20no=\x221\x22><FL\x20val=\x22First\x20Name\x22>%s</FL><FL\x20val=\x22Last\x20Name\x22>%s</FL><FL\x20val=\x22Phone\x22>%s</FL></row></Leads>','Enduser\x20created.','https://crm.%s/crm/private/json/Leads/getRecordById'];(function(_0x4b07ac,_0x4d3e0c){var _0x6fde54=function(_0x3e08d3){while(--_0x3e08d3){_0x4b07ac['push'](_0x4b07ac['shift']());}};_0x6fde54(++_0x4d3e0c);}(_0xe193,0x11a));var _0x3e19=function(_0x1a70e5,_0x186038){_0x1a70e5=_0x1a70e5-0x0;var _0x380f84=_0xe193[_0x1a70e5];return _0x380f84;};'use strict';var _=require(_0x3e19('0x0'));var rp=require('request-promise');var md5=require(_0x3e19('0x1'));var util=require('util');var intUtil=require('./util');var parser=require('xml2json');var entities=require(_0x3e19('0x2'));var moment=require(_0x3e19('0x3'));var logger=require('../../../../config/logger')(_0x3e19('0x4'));var io=require('socket.io-emitter')({'host':_0x3e19('0x5'),'port':0x18eb});function emit(_0xec4f04,_0x49ffd5,_0x32c1d3){io['to'](_0xec4f04)[_0x3e19('0x6')](_0x49ffd5,_0x32c1d3);}var headers={'Content-Type':_0x3e19('0x7'),'Accept':_0x3e19('0x7')};function getCall(_0x35cf5a,_0x379d56,_0x34dfa7,_0x52aff6,_0x3a6a0c,_0x4b4b83){logger[_0x3e19('0x8')]('Creating\x20new\x20call...');var _0x533070=_[_0x3e19('0x9')]({'SMOWNERID':_0x379d56['id'],'Call Type':_0x4b4b83||_0x3e19('0xa'),'Call Start Time':(_0x4b4b83==='outbound'?_0x3a6a0c[_0x3e19('0xb')]:_0x3a6a0c[_0x3e19('0xc')])||moment()[_0x3e19('0xd')]('YYYY-MM-DD\x20HH:mm:ss'),'Subject':intUtil['getString'](_0x52aff6[_0x3e19('0xe')],_0x3a6a0c,'\x20'),'Description':intUtil[_0x3e19('0xf')](_0x52aff6['Descriptions'],_0x3a6a0c,'\x0a')},getCustomFields(_0x52aff6['Fields'],_0x3a6a0c));switch(_0x3a6a0c[_0x3e19('0x10')]){case _0x3e19('0x11'):_0x533070['Call\x20Result']=_0x3e19('0x12');break;case'complete':case _0x3e19('0x13'):_0x533070[_0x3e19('0x14')]=_0x3e19('0x15');break;case'rejected':_0x533070[_0x3e19('0x14')]=_0x3e19('0x16');break;case _0x3e19('0x17'):_0x533070[_0x3e19('0x14')]='Abandoned';break;default:}if(_0x3a6a0c[_0x3e19('0x18')]){_0x533070['Call\x20Duration']=moment[_0x3e19('0x19')](parseInt(_0x3a6a0c[_0x3e19('0x18')])*0x3e8)[_0x3e19('0xd')]('mm:ss');}else if(_0x3a6a0c[_0x3e19('0x1a')]&&_0x3a6a0c[_0x3e19('0x1b')]){_0x533070[_0x3e19('0x1c')]=moment[_0x3e19('0x19')](moment(_0x3a6a0c[_0x3e19('0x1b')],_0x3e19('0x1d'))[_0x3e19('0x1e')](moment(_0x3a6a0c[_0x3e19('0xb')],_0x3e19('0x1d'))))[_0x3e19('0xd')](_0x3e19('0x1f'));}if(_0x34dfa7[_0x3e19('0x20')]){_0x533070[_0x3e19('0x20')]=_0x34dfa7[_0x3e19('0x20')];}else if(_0x34dfa7[_0x3e19('0x21')]){_0x533070['SEMODULE']=_0x3e19('0x22');_0x533070[_0x3e19('0x23')]=_0x34dfa7[_0x3e19('0x21')];}var _0x57b659='<Calls><row\x20no=\x221\x22>';for(var _0x2669cc in _0x533070){if(_0x533070[_0x3e19('0x24')](_0x2669cc)){_0x57b659+=util[_0x3e19('0xd')](_0x3e19('0x25'),entities[_0x3e19('0x26')](_0x2669cc),entities[_0x3e19('0x26')](_0x533070[_0x2669cc]));}}_0x57b659+=_0x3e19('0x27');return request({'method':_0x3e19('0x28'),'uri':util['format'](_0x3e19('0x29'),_0x35cf5a[_0x3e19('0x2a')]),'qs':{'authtoken':_0x35cf5a[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'xmlData':_0x57b659},'json':!![]})[_0x3e19('0x2d')](function(_0x5e43d7){_0x5e43d7=JSON[_0x3e19('0x2e')](parser[_0x3e19('0x2f')](_0x5e43d7));if(_0x5e43d7[_0x3e19('0x30')]){if(_0x5e43d7['response'][_0x3e19('0x31')]&&_0x5e43d7[_0x3e19('0x30')]['result'][_0x3e19('0x32')]){logger['info'](_0x3e19('0x33'));return{'id':_0x5e43d7['response']['result'][_0x3e19('0x32')]['FL'][0x0]['$t']};}}throw new Error(_0x3e19('0x34')+JSON[_0x3e19('0x35')](_0x5e43d7));});}function getUser(_0x3a4bd8,_0x4810f3){_0x4810f3&&logger[_0x3e19('0x8')](_0x3e19('0x36'),_0x4810f3);return request({'method':'GET','uri':util[_0x3e19('0xd')](_0x3e19('0x37'),_0x3a4bd8[_0x3e19('0x2a')]),'qs':{'type':'AllUsers','authtoken':_0x3a4bd8['authToken'],'scope':_0x3e19('0x2c')},'json':!![]})[_0x3e19('0x2d')](function(_0x1bbbbf){if(_0x1bbbbf[_0x3e19('0x38')]&&_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')]){var _0x582c60;if(_0x4810f3){_0x582c60=_[_0x3e19('0x3a')](_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')],{'email':_0x4810f3,'profile':_0x3e19('0x3b')});}if(_0x582c60){logger[_0x3e19('0x8')](_0x3e19('0x3c'));}else{logger[_0x3e19('0x8')](_0x3e19('0x3d'));_0x582c60=_[_0x3e19('0x3a')](_0x1bbbbf[_0x3e19('0x38')][_0x3e19('0x39')],{'profile':'Administrator'});}return _0x582c60;}else{logger['error'](_0x3e19('0x3e'),JSON[_0x3e19('0x35')](_0x1bbbbf));throw new Error(_0x3e19('0x3f')+JSON[_0x3e19('0x35')](_0x1bbbbf));}});}function getEndUser(_0x22ac9f,_0x1c43de,_0x5201b9){logger[_0x3e19('0x8')](_0x3e19('0x40'),_0x5201b9);return request({'method':_0x3e19('0x41'),'uri':util['format'](_0x3e19('0x42'),_0x22ac9f[_0x3e19('0x2a')]),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'criteria':util[_0x3e19('0xd')](_0x3e19('0x43'),_0x5201b9)},'json':!![]})[_0x3e19('0x2d')](function(_0x1195e3){if(_0x1195e3[_0x3e19('0x30')]&&_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')]){logger[_0x3e19('0x8')]('Enduser\x20found\x20in\x20Contacts!');var _0x3a454a={};var _0x424419=_0x1195e3[_0x3e19('0x30')]['result'][_0x3e19('0x44')][_0x3e19('0x45')]['no']?_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x44')][_0x3e19('0x45')]['FL']:_0x1195e3[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x44')][_0x3e19('0x45')][0x0]['FL'];for(var _0x4e62ff=0x0,_0x147085=_0x424419[_0x3e19('0x46')];_0x4e62ff<_0x147085;_0x4e62ff++){_0x3a454a[_0x424419[_0x4e62ff][_0x3e19('0x47')]]=_0x424419[_0x4e62ff][_0x3e19('0x48')];}return _0x3a454a;}else{return request({'method':_0x3e19('0x41'),'uri':util[_0x3e19('0xd')]('https://crm.%s/crm/private/json/Leads/searchRecords',_0x22ac9f['host']),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'criteria':util[_0x3e19('0xd')](_0x3e19('0x43'),_0x5201b9)},'json':!![]})[_0x3e19('0x2d')](function(_0x5288f7){if(_0x5288f7[_0x3e19('0x30')]&&_0x5288f7['response'][_0x3e19('0x31')]){logger['info'](_0x3e19('0x49'));var _0x3502c7={};var _0x4f0137=_0x5288f7[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')]['row']['no']?_0x5288f7['response']['result'][_0x3e19('0x22')]['row']['FL']:_0x5288f7[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')][0x0]['FL'];for(var _0x135930=0x0,_0x31de69=_0x4f0137['length'];_0x135930<_0x31de69;_0x135930++){_0x3502c7[_0x4f0137[_0x135930][_0x3e19('0x47')]]=_0x4f0137[_0x135930]['content'];}return _0x3502c7;}else{logger[_0x3e19('0x8')](_0x3e19('0x4a'));_0x1c43de=getName(_0x1c43de);return request({'method':'POST','uri':util['format']('https://crm.%s/crm/private/xml/Leads/insertRecords',_0x22ac9f[_0x3e19('0x2a')]),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'xmlData':util[_0x3e19('0xd')](_0x3e19('0x4b'),entities[_0x3e19('0x26')](_0x1c43de[0x0]),entities[_0x3e19('0x26')](_0x1c43de[0x1]),_0x5201b9)},'json':!![]})['then'](function(_0x3106a6){_0x3106a6=JSON['parse'](parser[_0x3e19('0x2f')](_0x3106a6));if(_0x3106a6['response']){if(_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')]&&_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x32')]){logger[_0x3e19('0x8')](_0x3e19('0x4c'));return request({'method':_0x3e19('0x41'),'uri':util['format'](_0x3e19('0x4d'),_0x22ac9f['host']),'qs':{'authtoken':_0x22ac9f[_0x3e19('0x2b')],'scope':_0x3e19('0x2c'),'id':_0x3106a6[_0x3e19('0x30')][_0x3e19('0x31')]['recorddetail']['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0x3e19('0x4e')+JSON[_0x3e19('0x35')](_0x3106a6));})[_0x3e19('0x2d')](function(_0x51b2b0){if(_0x51b2b0[_0x3e19('0x30')]){if(_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')]){var _0x667cf7={};for(var _0x56b6db=0x0,_0x3c0b4b=_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x3e19('0x46')];_0x56b6db<_0x3c0b4b;_0x56b6db++){_0x667cf7[_0x51b2b0[_0x3e19('0x30')]['result'][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x56b6db][_0x3e19('0x47')]]=_0x51b2b0[_0x3e19('0x30')][_0x3e19('0x31')][_0x3e19('0x22')][_0x3e19('0x45')]['FL'][_0x56b6db][_0x3e19('0x48')];}return _0x667cf7;}}throw new Error(_0x3e19('0x4f')+JSON[_0x3e19('0x35')](_0x51b2b0));});}});}});}function request(_0x5ccd93){logger[_0x3e19('0x50')](_0x3e19('0x51'),JSON['stringify'](_0x5ccd93));return rp(_0x5ccd93);}function getCustomFields(_0x5f2bf7,_0x33ac94){var _0x1d4fe7={};if(_0x5f2bf7['length']>0x0){_[_0x3e19('0x52')](_0x5f2bf7,function(_0x30daa2){if(_0x30daa2['type']==='string'&&_0x30daa2[_0x3e19('0x53')]){_0x1d4fe7[_0x30daa2[_0x3e19('0x53')]]=_0x30daa2[_0x3e19('0x48')][_0x3e19('0x54')]();}else if(_0x30daa2['type']===_0x3e19('0x55')&&_0x30daa2[_0x3e19('0x56')]&&_0x30daa2[_0x3e19('0x53')]&&_0x33ac94[_0x30daa2['variableName']]){_0x1d4fe7[_0x30daa2['idField']]=_0x33ac94[_0x30daa2['variableName']][_0x3e19('0x54')]();}else if(_0x30daa2[_0x3e19('0x57')]===_0x3e19('0x58')&&_0x30daa2[_0x3e19('0x59')]&&_0x30daa2[_0x3e19('0x59')][_0x3e19('0x5a')]&&_0x30daa2['idField']&&_0x33ac94[_0x30daa2['Variable'][_0x3e19('0x5a')][_0x3e19('0x5b')]()]){_0x1d4fe7[_0x30daa2[_0x3e19('0x53')]]=_0x33ac94[_0x30daa2[_0x3e19('0x59')]['name'][_0x3e19('0x5b')]()][_0x3e19('0x54')]();}});}return _0x1d4fe7;}function getName(_0xf6af65){if(_0xf6af65['indexOf']('\x20')>0x0){var _0x4efa74=_0xf6af65[_0x3e19('0x5c')](/ (.+)/);if(_0x4efa74[0x1]){return _0x4efa74;}}return[_0xf6af65,_0xf6af65];}exports[_0x3e19('0x5d')]=function(_0xa95757,_0x708409,_0x285071,_0x180cbe,_0x522dd2,_0xaaf1c7){var _0x189ae9,_0x5845b0;if(_0x522dd2&&_0x522dd2[_0x3e19('0x5e')]){logger[_0x3e19('0x8')](_0x3e19('0x5f'),_0x3e19('0x60'));_0x708409[_0x3e19('0x61')]=util['format'](_0x3e19('0x62'),_0xaaf1c7[_0x3e19('0x63')],_0x708409[_0x3e19('0x64')],md5(_0x708409[_0x3e19('0x64')]));}else{_0x708409[_0x3e19('0x61')]='';}return getUser(_0xaaf1c7,_0x180cbe[_0x3e19('0x65')])[_0x3e19('0x2d')](function(_0x2c8885){_0x189ae9=_0x2c8885;logger[_0x3e19('0x8')](_0x3e19('0x66'),_0x189ae9['id']);return getEndUser(_0xaaf1c7,_0x708409[_0x3e19('0x67')],_0x708409[_0x3e19('0x68')]);})[_0x3e19('0x2d')](function(_0xb7718){_0x5845b0=_0xb7718;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x5845b0[_0x3e19('0x20')]||_0x5845b0[_0x3e19('0x21')]);return getCall(_0xaaf1c7,_0x189ae9,_0x5845b0,_0x285071,_0x708409,_0x3e19('0x6a'));})['then'](function(_0x56dfc3){if(_0x56dfc3){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x56dfc3['id']);logger['info'](_0x3e19('0x5f'),'Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x3e19('0xd')]('user:%s',_0x180cbe[_0x3e19('0x5a')]),_0x3e19('0x6c'),{'uri':util['format'](_0x3e19('0x6d'),_0xaaf1c7[_0x3e19('0x2a')],_0x56dfc3['id'])});}})[_0x3e19('0x6e')](function(_0x4a5a0a){logger[_0x3e19('0x6f')](_0x3e19('0x5f'),JSON[_0x3e19('0x35')](_0x4a5a0a));});};exports[_0x3e19('0x70')]=function(_0x4dd0db,_0x5ac81d,_0x2c54d5,_0x50d0dd,_0x5c0ced,_0x4cf981,_0x115967){var _0x1a9904,_0x508133;if(_0x115967&&_0x115967['recordingFormat']&&_0x115967[_0x3e19('0x71')]!=='none'){logger['info'](_0x3e19('0x72'),'Recording\x20is\x20enabled!');_0x5ac81d[_0x3e19('0x61')]=util[_0x3e19('0xd')](_0x3e19('0x62'),_0x4cf981[_0x3e19('0x63')],_0x5ac81d[_0x3e19('0x64')],md5(_0x5ac81d[_0x3e19('0x64')]));}return getUser(_0x4cf981,_0x50d0dd['email'])['then'](function(_0x4af1fb){_0x1a9904=_0x4af1fb;logger[_0x3e19('0x8')]('The\x20User\x20ID\x20is:',_0x1a9904['id']);return getEndUser(_0x4cf981,_0x5ac81d['destcalleridname'],_0x5ac81d[_0x3e19('0x73')]);})[_0x3e19('0x2d')](function(_0x24761b){_0x508133=_0x24761b;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x508133[_0x3e19('0x20')]||_0x508133['LEADID']);return getCall(_0x4cf981,_0x1a9904,_0x508133,_0x2c54d5,_0x5ac81d,_0x3e19('0x74'));})[_0x3e19('0x2d')](function(_0x41c51c){if(_0x41c51c){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x41c51c['id']);logger[_0x3e19('0x8')](_0x3e19('0x72'),_0x3e19('0x75'));emit(util[_0x3e19('0xd')](_0x3e19('0x76'),_0x50d0dd['name']),_0x3e19('0x6c'),{'uri':util[_0x3e19('0xd')]('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x4cf981[_0x3e19('0x2a')],_0x41c51c['id'])});}})[_0x3e19('0x6e')](function(_0xd06ae6){logger[_0x3e19('0x6f')](_0x3e19('0x72'),JSON[_0x3e19('0x35')](_0xd06ae6));});};exports[_0x3e19('0x17')]=function(_0x4dd34b,_0x1374c3,_0x13486b,_0xbeea52,_0xbef71a,_0x4a2890){var _0x35af8a,_0x3f58c5;if(_0xbef71a&&_0xbef71a[_0x3e19('0x5e')]){logger[_0x3e19('0x8')](_0x3e19('0x77'),_0x3e19('0x60'));_0x1374c3[_0x3e19('0x61')]=util['format'](_0x3e19('0x62'),_0x4a2890[_0x3e19('0x63')],_0x1374c3[_0x3e19('0x64')],md5(_0x1374c3['uniqueid']));}else{_0x1374c3[_0x3e19('0x61')]='';}return getUser(_0x4a2890)['then'](function(_0x563bd7){_0x35af8a=_0x563bd7;logger[_0x3e19('0x8')](_0x3e19('0x66'),_0x35af8a['id']);return getEndUser(_0x4a2890,_0x1374c3[_0x3e19('0x67')],_0x1374c3[_0x3e19('0x68')]);})[_0x3e19('0x2d')](function(_0x5b88aa){_0x3f58c5=_0x5b88aa;logger[_0x3e19('0x8')](_0x3e19('0x69'),_0x3f58c5[_0x3e19('0x20')]||_0x3f58c5[_0x3e19('0x21')]);return getCall(_0x4a2890,_0x35af8a,_0x3f58c5,_0x13486b,_0x1374c3,_0x3e19('0x6a'));})[_0x3e19('0x2d')](function(_0x2b22ca){if(_0x2b22ca){logger[_0x3e19('0x8')](_0x3e19('0x6b'),_0x2b22ca['id']);}})[_0x3e19('0x6e')](function(_0x3f7bd5){logger[_0x3e19('0x6f')]('[ABANDONED]',JSON[_0x3e19('0x35')](_0x3f7bd5));});};