75d9d21c7e2f5c5ab519330f2a0a8c20539210ac
[motion2.git] / server / services / agi / scripts / index.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 _0x68f1=['WHAT_EVER','get','statusCode','error','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','finish','info','finish\x20download\x20file','close','unlink','pipe','end','data','transcode','error\x20convert','finish\x20to\x20convert','start','resolve','tmp','generate','.wav','writeFileSync','then','777','readFileSync','toString','base64','googleCloudTTS','?key=','input','voice','audioConfig','MP3','text:synthesize','POST','.mp3','from','audioContent','writeFile','chmodSync','googleCloudTTS\x20path','split','googleTTS','https://translate.google.com/_/TranslateWebserverUi/data/batchexecute','utf8','application/x-www-form-urlencoded','f.req=','jQ1olc','null','generic','slice','parse\x20response\x20failed:\x0a','text\x20length\x20limit\x20reached','googleASR','asr','uri','results','map','alternatives','transcript','confidence','join','googleASR\x20transcription','[%s]\x20%s:%s','message','googleDialogflow','textRequest','result','source','resolvedQuery','actionIncomplete','fulfillment','speech','score','status','code','metadata','isFallbackIntent','replace','SessionsClient','sessionPath','detectIntent','length','queryResult','action','allRequiredParamsPresent','diagnosticInfo','fields','end_conversation','boolValue','fulfillmentText','intent','name','displayName','isFallback','languageCode','queryText','responseId','intentDetectionConfidence','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','awsPolly','polly','awsLex','stringify','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','model=%s','freeform=3','sestekNDA','text','channelData','CustomAction','AudioFromTts','Data','audiofile','dirName','bluebird','dialogflow','https','md5','path','querystring','google-tts-api','url','parse','util','./aws','./google','./sestek','./tilde','../../../config/logger','agi','https://api.ispeech.org/api/rest','protocol','https:','host'];(function(_0x35acee,_0x50f0c9){var _0x1a0ab9=function(_0xcc9117){while(--_0xcc9117){_0x35acee['push'](_0x35acee['shift']());}};_0x1a0ab9(++_0x50f0c9);}(_0x68f1,0x7b));var _0x168f=function(_0x461786,_0x14be54){_0x461786=_0x461786-0x0;var _0x351934=_0x68f1[_0x461786];return _0x351934;};'use strict';var apiai=require('apiai-promise');var BPromise=require(_0x168f('0x0'));var dialogflow=require(_0x168f('0x1'));var fs=require('fs');var http=require('http');var https=require(_0x168f('0x2'));var md5=require(_0x168f('0x3'));var path=require(_0x168f('0x4'));var querystring=require(_0x168f('0x5'));var rp=require('request-promise');var rs=require('randomstring');var sox=require('sox');var tts=require(_0x168f('0x6'));var urlParse=require(_0x168f('0x7'))[_0x168f('0x8')];var util=require(_0x168f('0x9'));var aws=require(_0x168f('0xa'));var google=require(_0x168f('0xb'));var sestek=require(_0x168f('0xc'));var tilde=require(_0x168f('0xd'));var logger=require(_0x168f('0xe'))(_0x168f('0xf'));var ISPEECH_API=_0x168f('0x10');function downloadFile(_0x1e7d45,_0x12631){return new BPromise(function(_0x59c222,_0x59f895){var _0x39b839=urlParse(_0x1e7d45);var _0x2b57f3=_0x39b839[_0x168f('0x11')]===_0x168f('0x12')?https:http;var _0x22a796={'host':_0x39b839[_0x168f('0x13')],'path':_0x39b839[_0x168f('0x4')],'headers':{'user-agent':_0x168f('0x14')}};_0x2b57f3[_0x168f('0x15')](_0x22a796,function(_0x18d69e){if(_0x18d69e[_0x168f('0x16')]!==0xc8){logger[_0x168f('0x17')](_0x168f('0x18')+_0x1e7d45+_0x168f('0x19')+_0x18d69e[_0x168f('0x16')]+'\x20('+_0x18d69e[_0x168f('0x1a')]+')');_0x59f895(new Error(_0x168f('0x18')+_0x1e7d45+_0x168f('0x19')+_0x18d69e[_0x168f('0x16')]+'\x20('+_0x18d69e[_0x168f('0x1a')]+')'));return;}var _0x4c54af=fs[_0x168f('0x1b')](_0x12631);_0x4c54af['on'](_0x168f('0x1c'),function(){logger[_0x168f('0x1d')](_0x168f('0x1e'));_0x4c54af[_0x168f('0x1f')](_0x59c222);});_0x4c54af['on'](_0x168f('0x17'),function(_0x3dccf0){fs[_0x168f('0x20')](_0x12631);logger[_0x168f('0x17')]('download\x20error',_0x3dccf0);_0x59f895(_0x3dccf0);});_0x18d69e[_0x168f('0x21')](_0x4c54af);})['on'](_0x168f('0x17'),function(_0x1cdd36){logger[_0x168f('0x17')](_0x1cdd36);_0x59f895(_0x1cdd36);})[_0x168f('0x22')]();});}function uploadFile(_0x3c38de){return new BPromise(function(_0x58f87b,_0x5e0416){var _0x45e3a0=urlParse(_0x3c38de);var _0x132cba=_0x45e3a0['protocol']===_0x168f('0x12')?https:http;var _0x147175={'host':_0x45e3a0[_0x168f('0x13')],'path':_0x45e3a0['path'],'headers':{'user-agent':_0x168f('0x14')}};_0x132cba[_0x168f('0x15')](_0x147175,function(_0x563a53){if(_0x563a53['statusCode']!==0xc8){_0x5e0416(new Error(_0x168f('0x18')+_0x3c38de+_0x168f('0x19')+_0x563a53['statusCode']+'\x20('+_0x563a53['statusMessage']+')'));return;}var _0x317d0f='';_0x563a53['on'](_0x168f('0x23'),function(_0x4dc62b){_0x317d0f+=_0x4dc62b;});_0x563a53['on'](_0x168f('0x22'),function(){_0x58f87b(_0x317d0f);});})['on'](_0x168f('0x17'),function(_0x553d31){_0x5e0416(_0x553d31);})['end']();});}function convertFile(_0x59b2f1,_0x3367f7){return new BPromise(function(_0x461afe,_0x1d2d79){var _0x40a700=sox[_0x168f('0x24')](_0x59b2f1,_0x3367f7,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x40a700['on'](_0x168f('0x17'),function(_0xe01eb1){logger[_0x168f('0x17')](_0x168f('0x25'),_0xe01eb1);_0x1d2d79(_0xe01eb1);});_0x40a700['on'](_0x168f('0x22'),function(){logger[_0x168f('0x1d')](_0x168f('0x26'));_0x461afe();});_0x40a700[_0x168f('0x27')]();});}function base64Decode(_0x696cb,_0x262ea0){var _0xaa7d9e=path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x2b'));fs[_0x168f('0x2c')](_0xaa7d9e,_0x696cb,'base64');return convertFile(_0xaa7d9e,_0x262ea0)[_0x168f('0x2d')](function(){try{fs[_0x168f('0x20')](_0xaa7d9e);fs['chmodSync'](_0x262ea0,_0x168f('0x2e'));}catch(_0x53e7e9){logger[_0x168f('0x17')](_0x53e7e9);}return _0x262ea0['split']('.')[0x0];});}function base64Encode(_0x3d0395){var _0x5a3bdd=fs[_0x168f('0x2f')](_0x3d0395);return new Buffer(_0x5a3bdd)[_0x168f('0x30')](_0x168f('0x31'));}exports[_0x168f('0x32')]=function(_0x30c744,_0x380bdf,_0x46dde8,_0x55c17c,_0x2dd15b,_0x28992a){var _0x104039,_0x165db4;var _0x394c2a='https://texttospeech.googleapis.com/v1/';var _0xb58c70=_0x168f('0x33')+_0x30c744;var _0x29f714={};if(_0x380bdf==='ssml'){_0x29f714[_0x168f('0x34')]={'ssml':_0x46dde8};}else{_0x29f714[_0x168f('0x34')]={'text':_0x46dde8};};_0x29f714[_0x168f('0x35')]={'languageCode':_0x55c17c,'ssmlGender':_0x2dd15b};_0x29f714[_0x168f('0x36')]={'audioEncoding':_0x168f('0x37'),'sampleRateHertz':0x1f40};var _0x6dce62={'url':_0x394c2a+_0x168f('0x38')+_0xb58c70,'method':_0x168f('0x39'),'json':!![],'body':_0x29f714};return rp(_0x6dce62)['then'](function(_0x1aa57e){return new BPromise(function(_0x3d4fd6,_0x43c934){_0x104039=path[_0x168f('0x28')](__dirname,'tmp',rs[_0x168f('0x2a')](0x4)+_0x168f('0x3a'));var _0x47599c=Buffer[_0x168f('0x3b')](_0x1aa57e[_0x168f('0x3c')],_0x168f('0x31'));return fs[_0x168f('0x3d')](_0x104039,_0x47599c,function(_0x297a70){_0x43c934(_0x297a70);},function(_0x571b80){fs[_0x168f('0x3e')](_0x104039,_0x168f('0x2e'));_0x3d4fd6(_0x571b80);});});})[_0x168f('0x2d')](function(_0x341580){_0x165db4=path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x2b'));return convertFile(_0x104039,_0x165db4);})[_0x168f('0x2d')](function(){try{fs[_0x168f('0x20')](_0x104039);fs[_0x168f('0x3e')](_0x165db4,_0x168f('0x2e'));}catch(_0x58a6d7){logger[_0x168f('0x17')](_0x58a6d7);}logger[_0x168f('0x1d')](_0x168f('0x3f'),_0x165db4[_0x168f('0x40')]('.')[0x0]);return _0x165db4[_0x168f('0x40')]('.')[0x0];});};exports[_0x168f('0x41')]=function(_0x2df8b5,_0x5783dd){var _0x54b04a=_0x168f('0x42');var _0x25efb4,_0x1c562c;var _0x85db27;var _0x304683={'encoding':_0x168f('0x43'),'method':_0x168f('0x39'),'timeout':0x2710,'url':_0x54b04a,'headers':{'Content-Type':_0x168f('0x44')},'body':_0x168f('0x45')+encodeURIComponent(JSON['stringify']([[[_0x168f('0x46'),JSON['stringify']([_0x2df8b5,_0x5783dd||'en',![],_0x168f('0x47')]),null,_0x168f('0x48')]]]))};return rp(_0x304683)[_0x168f('0x2d')](function(_0x5ad656){try{_0x85db27=eval(_0x5ad656[_0x168f('0x49')](0x5))[0x0][0x2];}catch(_0x259453){throw new Error(_0x168f('0x4a')+_0x5ad656['data']);}if(!_0x85db27){if(_0x2df8b5['length']>0xc8){throw new Error(_0x168f('0x4b'));}else{throw new Error('lang\x20\x22'+_0x5783dd+'\x22\x20might\x20not\x20exist');}}try{_0x85db27=eval(_0x85db27)[0x0];}catch(_0x57e86a){throw new Error('parse\x20response\x20failed:\x0a'+res[_0x168f('0x23')]);}const _0x7d4500=_0x85db27;_0x25efb4=path['resolve'](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x3a'));fs[_0x168f('0x2c')](_0x25efb4,_0x85db27,{'encoding':_0x168f('0x31')});_0x1c562c=path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x2b'));return convertFile(_0x25efb4,_0x1c562c);})[_0x168f('0x2d')](function(){try{fs['unlink'](_0x25efb4);fs['chmodSync'](_0x1c562c,'777');}catch(_0x813687){logger[_0x168f('0x17')](_0x813687);}logger['info']('goggleTTS\x20path',_0x1c562c[_0x168f('0x40')]('.')[0x0]);return _0x1c562c[_0x168f('0x40')]('.')[0x0];});};exports[_0x168f('0x4c')]=function(_0xa42ef8,_0x3ee8f6,_0x256125){return google[_0x168f('0x4d')](_0xa42ef8,_0x3ee8f6,_0x256125)['then'](function(_0x5c4971){logger[_0x168f('0x1d')](_0x5c4971[_0x168f('0x4e')]);return rp(_0x5c4971);})[_0x168f('0x2d')](function(_0x5c1fe5){var _0x5598b8='';var _0x667843=0x0;try{fs[_0x168f('0x20')](_0xa42ef8);}catch(_0x4e14f6){logger['error'](_0x4e14f6);}if(_0x5c1fe5&&_0x5c1fe5[_0x168f('0x4f')]){_0x5598b8=_0x5c1fe5[_0x168f('0x4f')][_0x168f('0x50')](function(_0x1d66f5){return _0x1d66f5&&_0x1d66f5[_0x168f('0x51')][0x0]&&_0x1d66f5[_0x168f('0x51')][0x0][_0x168f('0x52')]?_0x1d66f5[_0x168f('0x51')][0x0]['transcript']:'';})['join']('\x0a');_0x667843=_0x5c1fe5['results'][_0x168f('0x50')](function(_0x266f45){return _0x266f45&&_0x266f45[_0x168f('0x51')][0x0]&&_0x266f45['alternatives'][0x0][_0x168f('0x53')]?_0x266f45['alternatives'][0x0][_0x168f('0x53')]:0x0;})[_0x168f('0x54')]('\x0a');}logger[_0x168f('0x1d')](_0x168f('0x55'),_0x5598b8);logger['info']('googleASR\x20confidence',_0x667843);return{'transcript':_0x5598b8,'confidence':_0x667843};})['catch'](function(_0x571ac8){logger[_0x168f('0x17')](_0x168f('0x56'),_0x571ac8['statusCode'],_0x571ac8['name'],_0x571ac8[_0x168f('0x57')]);});};exports[_0x168f('0x58')]=function(_0xa4500b,_0x253177,_0x26a401,_0x6d8c4){var _0x55edc6=apiai(_0x253177,{'language':_0x6d8c4||'en'});return _0x55edc6[_0x168f('0x59')](_0x26a401,{'sessionId':md5(_0xa4500b)})['then'](function(_0x38571b){logger['info'](JSON['stringify'](_0x38571b));return{'source':_0x38571b[_0x168f('0x5a')][_0x168f('0x5b')],'resolvedQuery':_0x38571b[_0x168f('0x5a')][_0x168f('0x5c')],'action':_0x38571b[_0x168f('0x5a')]['action'],'actionIncomplete':_0x38571b[_0x168f('0x5a')][_0x168f('0x5d')],'speech':_0x38571b['result'][_0x168f('0x5e')][_0x168f('0x5f')],'score':_0x38571b['result'][_0x168f('0x60')],'statusCode':_0x38571b[_0x168f('0x61')][_0x168f('0x62')],'endConversation':_0x38571b[_0x168f('0x5a')][_0x168f('0x63')]['endConversation']||![],'isFallbackIntent':_0x38571b[_0x168f('0x5a')][_0x168f('0x63')][_0x168f('0x64')]};});};exports['googleDialogflowV2']=function(_0x1896fe,_0x174015,_0x52cf40,_0x354506,_0x9824c4,_0x3b47bd){var _0x30208a=_0x354506[_0x168f('0x65')](/\\n/g,'\x0a');var _0x2d48ab={'credentials':{'private_key':_0x30208a,'client_email':_0x52cf40}};var _0x269ad7=new dialogflow[(_0x168f('0x66'))](_0x2d48ab);var _0x8af0af=_0x269ad7[_0x168f('0x67')](_0x174015,md5(_0x1896fe));var _0x35491c={'session':_0x8af0af,'queryInput':{'text':{'text':_0x9824c4,'languageCode':_0x3b47bd}}};return _0x269ad7[_0x168f('0x68')](_0x35491c)[_0x168f('0x2d')](function(_0x3f06fe){if(_0x3f06fe&&_0x3f06fe[_0x168f('0x69')]){logger['info']('Dialogflow\x20V2\x20response:',JSON['stringify'](_0x3f06fe));var _0x35be92=_0x3f06fe[0x0];if(_0x35be92){var _0x3b36f7={'action':_0x35be92[_0x168f('0x6a')][_0x168f('0x6b')],'allRequiredParamsPresent':_0x35be92[_0x168f('0x6a')][_0x168f('0x6c')],'endConversation':_0x35be92[_0x168f('0x6a')][_0x168f('0x6d')]&&_0x35be92['queryResult'][_0x168f('0x6d')][_0x168f('0x6e')]?_0x35be92[_0x168f('0x6a')][_0x168f('0x6d')][_0x168f('0x6e')][_0x168f('0x6f')][_0x168f('0x70')]:![],'fulfillmentText':_0x35be92[_0x168f('0x6a')][_0x168f('0x71')],'intentName':_0x35be92[_0x168f('0x6a')][_0x168f('0x72')][_0x168f('0x73')],'intentDisplayName':_0x35be92[_0x168f('0x6a')]['intent'][_0x168f('0x74')],'isFallbackIntent':_0x35be92['queryResult'][_0x168f('0x72')][_0x168f('0x75')],'languageCode':_0x35be92['queryResult'][_0x168f('0x76')],'queryText':_0x35be92[_0x168f('0x6a')][_0x168f('0x77')],'responseId':_0x35be92[_0x168f('0x78')],'score':_0x35be92[_0x168f('0x6a')][_0x168f('0x79')],'speech':_0x35be92['queryResult'][_0x168f('0x71')],'providerResponse':JSON['stringify'](_0x3f06fe)};return _0x3b36f7;}}});};exports[_0x168f('0x7a')]=function(_0x283222,_0x966f75,_0x1d260f,_0x4c61b4){return tilde[_0x168f('0x4d')](_0x283222,_0x966f75,_0x1d260f,_0x4c61b4)['then'](function(_0x4876b3){try{fs[_0x168f('0x20')](_0x283222);}catch(_0x710252){logger[_0x168f('0x17')](_0x710252);}logger[_0x168f('0x1d')](_0x168f('0x7b'),_0x4876b3[_0x168f('0x52')]);logger['info'](_0x168f('0x7c'),_0x4876b3[_0x168f('0x53')]);return _0x4876b3;});};exports[_0x168f('0x7d')]=function(_0x3479ee,_0x474976,_0x5c33f7,_0x181eb8,_0x5aa476,_0x40babe){var _0x5461f7=path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x3a'));var _0x3ad7ae;return aws[_0x168f('0x7e')](_0x3479ee,_0x474976,_0x5c33f7,_0x181eb8,_0x5aa476,_0x40babe,_0x5461f7)[_0x168f('0x2d')](function(){_0x3ad7ae=path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+_0x168f('0x2b'));return convertFile(_0x5461f7,_0x3ad7ae);})['then'](function(){try{fs[_0x168f('0x20')](_0x5461f7);fs[_0x168f('0x3e')](_0x3ad7ae,'777');}catch(_0x5a22cb){logger['error'](_0x5a22cb);}return _0x3ad7ae[_0x168f('0x40')]('.')[0x0];});};exports[_0x168f('0x7f')]=function(_0x5e1427,_0x128f92,_0x167fc7,_0x4039c5,_0x429c00,_0x2ae4c7){return aws['lex'](_0x5e1427,_0x128f92,_0x167fc7,_0x4039c5,_0x429c00,_0x2ae4c7)[_0x168f('0x2d')](function(_0x284adf){logger['info'](JSON[_0x168f('0x80')](_0x284adf));return _0x284adf;});};exports[_0x168f('0x81')]=function(_0x363ba4,_0x39793e,_0x4e14ee,_0x377b54){var _0x345b03=util[_0x168f('0x82')](_0x168f('0x83'),ISPEECH_API,_0x363ba4,encodeURIComponent(_0x39793e),_0x4e14ee,_0x377b54);var _0x1c5522=path['resolve'](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+'.mp3');var _0x27a8fd;return downloadFile(_0x345b03,_0x1c5522)['then'](function(){_0x27a8fd=path['resolve'](__dirname,_0x168f('0x29'),rs['generate'](0x4)+'.wav');return convertFile(_0x1c5522,_0x27a8fd);})['then'](function(){try{fs[_0x168f('0x20')](_0x1c5522);fs[_0x168f('0x3e')](_0x27a8fd,_0x168f('0x2e'));}catch(_0x3b68ba){logger[_0x168f('0x17')](_0x3b68ba);}return _0x27a8fd['split']('.')[0x0];});};exports[_0x168f('0x84')]=function(_0x14acf9,_0x24a822,_0xdce7ef,_0x31d6bd){var _0x24747c=util['format']('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x24a822,_0xdce7ef,base64Encode(_0x14acf9),_0x31d6bd?util[_0x168f('0x82')](_0x168f('0x85'),encodeURIComponent(_0x31d6bd)):_0x168f('0x86'));return uploadFile(_0x24747c)[_0x168f('0x2d')](function(_0x3afb5c){return querystring[_0x168f('0x8')](_0x3afb5c);});};exports[_0x168f('0x87')]=function(_0x335b71,_0x5f189b){return sestek['nda'](_0x335b71,_0x5f189b)[_0x168f('0x2d')](function(_0x499eee){logger[_0x168f('0x1d')](JSON[_0x168f('0x80')](_0x499eee));var _0x501523={'speech':_0x499eee[_0x168f('0x88')],'action':_0x499eee[_0x168f('0x89')]?_0x499eee[_0x168f('0x89')][_0x168f('0x8a')]:undefined,'actiondata':_0x499eee[_0x168f('0x89')]?_0x499eee[_0x168f('0x89')]['CustomActionData']:undefined};if(_0x499eee[_0x168f('0x89')]&&_0x499eee[_0x168f('0x89')][_0x168f('0x8b')]){return base64Decode(_0x499eee['channelData']['AudioFromTts'][_0x168f('0x8c')],path[_0x168f('0x28')](__dirname,_0x168f('0x29'),rs[_0x168f('0x2a')](0x4)+'.wav'))[_0x168f('0x2d')](function(_0x4f1cb6){_0x501523[_0x168f('0x8d')]=_0x4f1cb6;return _0x501523;});}return _0x501523;});};exports[_0x168f('0x8e')]=function(){return __dirname;};