f3f2212da98d94daf4603be9a894841b0fe56a5f
[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 _0xb55e=['statusCode','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','finish','info','finish\x20download\x20file','unlink','error','pipe','end','data','wav','finish\x20to\x20convert','resolve','tmp','generate','.wav','writeFileSync','base64','chmodSync','777','split','toString','https://texttospeech.googleapis.com/v1/','ssml','audioConfig','MP3','text:synthesize','POST','then','.mp3','from','audioContent','writeFile','googleTTS','https://translate.google.com/_/TranslateWebserverUi/data/batchexecute','utf8','application/x-www-form-urlencoded','stringify','null','generic','parse\x20response\x20failed:\x0a','length','lang\x20\x22','goggleTTS\x20path','googleASR','asr','results','map','alternatives','transcript','join','confidence','googleASR\x20confidence','catch','message','googleDialogflow','textRequest','result','source','resolvedQuery','action','actionIncomplete','status','code','metadata','isFallbackIntent','googleDialogflowV2','replace','SessionsClient','sessionPath','detectIntent','Dialogflow\x20V2\x20response:','queryResult','allRequiredParamsPresent','diagnosticInfo','fields','end_conversation','fulfillmentText','intent','name','displayName','isFallback','languageCode','queryText','responseId','intentDetectionConfidence','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','awsPolly','polly','awsLex','lex','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s','model=%s','freeform=3','parse','nda','channelData','CustomAction','CustomActionData','AudioFromTts','audiofile','bluebird','dialogflow','http','https','md5','path','querystring','request-promise','google-tts-api','url','util','./google','./sestek','./tilde','../../../config/logger','https://api.ispeech.org/api/rest','protocol','https:','host','WHAT_EVER','get'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0xb55e,0xed));var _0xeb55=function(_0x4be0e2,_0x259c84){_0x4be0e2=_0x4be0e2-0x0;var _0x565fa3=_0xb55e[_0x4be0e2];return _0x565fa3;};'use strict';var apiai=require('apiai-promise');var BPromise=require(_0xeb55('0x0'));var dialogflow=require(_0xeb55('0x1'));var fs=require('fs');var http=require(_0xeb55('0x2'));var https=require(_0xeb55('0x3'));var md5=require(_0xeb55('0x4'));var path=require(_0xeb55('0x5'));var querystring=require(_0xeb55('0x6'));var rp=require(_0xeb55('0x7'));var rs=require('randomstring');var sox=require('sox');var tts=require(_0xeb55('0x8'));var urlParse=require(_0xeb55('0x9'))['parse'];var util=require(_0xeb55('0xa'));var aws=require('./aws');var google=require(_0xeb55('0xb'));var sestek=require(_0xeb55('0xc'));var tilde=require(_0xeb55('0xd'));var logger=require(_0xeb55('0xe'))('agi');var ISPEECH_API=_0xeb55('0xf');function downloadFile(_0x5c034b,_0x1301ca){return new BPromise(function(_0x358c83,_0x3e8a7c){var _0x5907e0=urlParse(_0x5c034b);var _0x132067=_0x5907e0[_0xeb55('0x10')]===_0xeb55('0x11')?https:http;var _0x5b09b3={'host':_0x5907e0[_0xeb55('0x12')],'path':_0x5907e0['path'],'headers':{'user-agent':_0xeb55('0x13')}};_0x132067[_0xeb55('0x14')](_0x5b09b3,function(_0x4d3232){if(_0x4d3232[_0xeb55('0x15')]!==0xc8){logger['error'](_0xeb55('0x16')+_0x5c034b+_0xeb55('0x17')+_0x4d3232['statusCode']+'\x20('+_0x4d3232[_0xeb55('0x18')]+')');_0x3e8a7c(new Error(_0xeb55('0x16')+_0x5c034b+'\x20failed,\x20status\x20code\x20=\x20'+_0x4d3232[_0xeb55('0x15')]+'\x20('+_0x4d3232[_0xeb55('0x18')]+')'));return;}var _0x2b0dbc=fs[_0xeb55('0x19')](_0x1301ca);_0x2b0dbc['on'](_0xeb55('0x1a'),function(){logger[_0xeb55('0x1b')](_0xeb55('0x1c'));_0x2b0dbc['close'](_0x358c83);});_0x2b0dbc['on']('error',function(_0x4981ba){fs[_0xeb55('0x1d')](_0x1301ca);logger[_0xeb55('0x1e')]('download\x20error',_0x4981ba);_0x3e8a7c(_0x4981ba);});_0x4d3232[_0xeb55('0x1f')](_0x2b0dbc);})['on'](_0xeb55('0x1e'),function(_0x4b2f6c){logger[_0xeb55('0x1e')](_0x4b2f6c);_0x3e8a7c(_0x4b2f6c);})[_0xeb55('0x20')]();});}function uploadFile(_0xae9021){return new BPromise(function(_0x18d800,_0xfbcb22){var _0x5e5528=urlParse(_0xae9021);var _0x52080e=_0x5e5528['protocol']===_0xeb55('0x11')?https:http;var _0x529dde={'host':_0x5e5528[_0xeb55('0x12')],'path':_0x5e5528[_0xeb55('0x5')],'headers':{'user-agent':_0xeb55('0x13')}};_0x52080e[_0xeb55('0x14')](_0x529dde,function(_0x36e262){if(_0x36e262[_0xeb55('0x15')]!==0xc8){_0xfbcb22(new Error(_0xeb55('0x16')+_0xae9021+_0xeb55('0x17')+_0x36e262[_0xeb55('0x15')]+'\x20('+_0x36e262[_0xeb55('0x18')]+')'));return;}var _0x256b8f='';_0x36e262['on'](_0xeb55('0x21'),function(_0x194f0d){_0x256b8f+=_0x194f0d;});_0x36e262['on']('end',function(){_0x18d800(_0x256b8f);});})['on']('error',function(_0x439d85){_0xfbcb22(_0x439d85);})[_0xeb55('0x20')]();});}function convertFile(_0x39b59b,_0x921c6f){return new BPromise(function(_0x474ad7,_0x162444){var _0x67320e=sox['transcode'](_0x39b59b,_0x921c6f,{'sampleRate':0x1f40,'format':_0xeb55('0x22'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x67320e['on'](_0xeb55('0x1e'),function(_0x505ed3){logger[_0xeb55('0x1e')]('error\x20convert',_0x505ed3);_0x162444(_0x505ed3);});_0x67320e['on']('end',function(){logger[_0xeb55('0x1b')](_0xeb55('0x23'));_0x474ad7();});_0x67320e['start']();});}function base64Decode(_0x168923,_0x1cf711){var _0x40d9d4=path[_0xeb55('0x24')](__dirname,_0xeb55('0x25'),rs[_0xeb55('0x26')](0x4)+_0xeb55('0x27'));fs[_0xeb55('0x28')](_0x40d9d4,_0x168923,_0xeb55('0x29'));return convertFile(_0x40d9d4,_0x1cf711)['then'](function(){try{fs[_0xeb55('0x1d')](_0x40d9d4);fs[_0xeb55('0x2a')](_0x1cf711,_0xeb55('0x2b'));}catch(_0x28dc7d){logger[_0xeb55('0x1e')](_0x28dc7d);}return _0x1cf711[_0xeb55('0x2c')]('.')[0x0];});}function base64Encode(_0x1e2004){var _0x178690=fs['readFileSync'](_0x1e2004);return new Buffer(_0x178690)[_0xeb55('0x2d')]('base64');}exports['googleCloudTTS']=function(_0x3bceaf,_0x55f0ea,_0x5194fc,_0x58a811,_0x1d1ce7,_0x519254){var _0x26d34c,_0x58b26d;var _0x17db8a=_0xeb55('0x2e');var _0x19f31f='?key='+_0x3bceaf;var _0x34b5aa={};if(_0x55f0ea===_0xeb55('0x2f')){_0x34b5aa['input']={'ssml':_0x5194fc};}else{_0x34b5aa['input']={'text':_0x5194fc};};_0x34b5aa['voice']={'languageCode':_0x58a811,'ssmlGender':_0x1d1ce7};_0x34b5aa[_0xeb55('0x30')]={'audioEncoding':_0xeb55('0x31'),'sampleRateHertz':0x1f40};var _0xd429b5={'url':_0x17db8a+_0xeb55('0x32')+_0x19f31f,'method':_0xeb55('0x33'),'json':!![],'body':_0x34b5aa};return rp(_0xd429b5)[_0xeb55('0x34')](function(_0x49b85e){return new BPromise(function(_0x5f2a7c,_0x45fa3c){_0x26d34c=path[_0xeb55('0x24')](__dirname,'tmp',rs[_0xeb55('0x26')](0x4)+_0xeb55('0x35'));var _0x4c4c0=Buffer[_0xeb55('0x36')](_0x49b85e[_0xeb55('0x37')],'base64');return fs[_0xeb55('0x38')](_0x26d34c,_0x4c4c0,function(_0x171ad5){_0x45fa3c(_0x171ad5);},function(_0x332372){fs[_0xeb55('0x2a')](_0x26d34c,'777');_0x5f2a7c(_0x332372);});});})[_0xeb55('0x34')](function(_0x969eb2){_0x58b26d=path['resolve'](__dirname,'tmp',rs['generate'](0x4)+_0xeb55('0x27'));return convertFile(_0x26d34c,_0x58b26d);})[_0xeb55('0x34')](function(){try{fs[_0xeb55('0x1d')](_0x26d34c);fs[_0xeb55('0x2a')](_0x58b26d,_0xeb55('0x2b'));}catch(_0x380f0d){logger[_0xeb55('0x1e')](_0x380f0d);}logger['info']('googleCloudTTS\x20path',_0x58b26d[_0xeb55('0x2c')]('.')[0x0]);return _0x58b26d[_0xeb55('0x2c')]('.')[0x0];});};exports[_0xeb55('0x39')]=function(_0x3e6e23,_0x17d749){var _0x436ae5=_0xeb55('0x3a');var _0x169a3a,_0x79d69a;var _0x4bd2ed;var _0x41f3b4={'encoding':_0xeb55('0x3b'),'method':_0xeb55('0x33'),'timeout':0x2710,'url':_0x436ae5,'headers':{'Content-Type':_0xeb55('0x3c')},'body':'f.req='+encodeURIComponent(JSON['stringify']([[['jQ1olc',JSON[_0xeb55('0x3d')]([_0x3e6e23,_0x17d749||'en',![],_0xeb55('0x3e')]),null,_0xeb55('0x3f')]]]))};return rp(_0x41f3b4)[_0xeb55('0x34')](function(_0x212f39){try{_0x4bd2ed=eval(_0x212f39['slice'](0x5))[0x0][0x2];}catch(_0x4eebb2){throw new Error(_0xeb55('0x40')+_0x212f39[_0xeb55('0x21')]);}if(!_0x4bd2ed){if(_0x3e6e23[_0xeb55('0x41')]>0xc8){throw new Error('text\x20length\x20limit\x20reached');}else{throw new Error(_0xeb55('0x42')+_0x17d749+'\x22\x20might\x20not\x20exist');}}try{_0x4bd2ed=eval(_0x4bd2ed)[0x0];}catch(_0x48f17f){throw new Error(_0xeb55('0x40')+res['data']);}const _0x452a93=_0x4bd2ed;_0x169a3a=path['resolve'](__dirname,_0xeb55('0x25'),rs['generate'](0x4)+_0xeb55('0x35'));fs[_0xeb55('0x28')](_0x169a3a,_0x4bd2ed,{'encoding':_0xeb55('0x29')});_0x79d69a=path['resolve'](__dirname,'tmp',rs[_0xeb55('0x26')](0x4)+_0xeb55('0x27'));return convertFile(_0x169a3a,_0x79d69a);})[_0xeb55('0x34')](function(){try{fs['unlink'](_0x169a3a);fs[_0xeb55('0x2a')](_0x79d69a,'777');}catch(_0x5e8041){logger[_0xeb55('0x1e')](_0x5e8041);}logger[_0xeb55('0x1b')](_0xeb55('0x43'),_0x79d69a[_0xeb55('0x2c')]('.')[0x0]);return _0x79d69a['split']('.')[0x0];});};exports[_0xeb55('0x44')]=function(_0x3755e6,_0xa96e91,_0x11ffab){return google[_0xeb55('0x45')](_0x3755e6,_0xa96e91,_0x11ffab)[_0xeb55('0x34')](function(_0x40b012){logger[_0xeb55('0x1b')](_0x40b012['uri']);return rp(_0x40b012);})['then'](function(_0x22b4cd){var _0x13d41d='';var _0x3cd9e2=0x0;try{fs[_0xeb55('0x1d')](_0x3755e6);}catch(_0x121b14){logger['error'](_0x121b14);}if(_0x22b4cd&&_0x22b4cd['results']){_0x13d41d=_0x22b4cd[_0xeb55('0x46')][_0xeb55('0x47')](function(_0x2fdedc){return _0x2fdedc&&_0x2fdedc[_0xeb55('0x48')][0x0]&&_0x2fdedc[_0xeb55('0x48')][0x0][_0xeb55('0x49')]?_0x2fdedc['alternatives'][0x0]['transcript']:'';})[_0xeb55('0x4a')]('\x0a');_0x3cd9e2=_0x22b4cd[_0xeb55('0x46')][_0xeb55('0x47')](function(_0x2dcfed){return _0x2dcfed&&_0x2dcfed['alternatives'][0x0]&&_0x2dcfed[_0xeb55('0x48')][0x0][_0xeb55('0x4b')]?_0x2dcfed[_0xeb55('0x48')][0x0]['confidence']:0x0;})[_0xeb55('0x4a')]('\x0a');}logger[_0xeb55('0x1b')]('googleASR\x20transcription',_0x13d41d);logger['info'](_0xeb55('0x4c'),_0x3cd9e2);return{'transcript':_0x13d41d,'confidence':_0x3cd9e2};})[_0xeb55('0x4d')](function(_0x99ebf0){logger[_0xeb55('0x1e')]('[%s]\x20%s:%s',_0x99ebf0[_0xeb55('0x15')],_0x99ebf0['name'],_0x99ebf0[_0xeb55('0x4e')]);});};exports[_0xeb55('0x4f')]=function(_0x4dda4c,_0x44e6db,_0x25536a,_0x30e6e5){var _0x57f0bb=apiai(_0x44e6db,{'language':_0x30e6e5||'en'});return _0x57f0bb[_0xeb55('0x50')](_0x25536a,{'sessionId':md5(_0x4dda4c)})[_0xeb55('0x34')](function(_0x33847e){logger[_0xeb55('0x1b')](JSON[_0xeb55('0x3d')](_0x33847e));return{'source':_0x33847e[_0xeb55('0x51')][_0xeb55('0x52')],'resolvedQuery':_0x33847e['result'][_0xeb55('0x53')],'action':_0x33847e[_0xeb55('0x51')][_0xeb55('0x54')],'actionIncomplete':_0x33847e[_0xeb55('0x51')][_0xeb55('0x55')],'speech':_0x33847e['result']['fulfillment']['speech'],'score':_0x33847e['result']['score'],'statusCode':_0x33847e[_0xeb55('0x56')][_0xeb55('0x57')],'endConversation':_0x33847e['result']['metadata']['endConversation']||![],'isFallbackIntent':_0x33847e[_0xeb55('0x51')][_0xeb55('0x58')][_0xeb55('0x59')]};});};exports[_0xeb55('0x5a')]=function(_0x593ef3,_0x26a28a,_0x45f9e4,_0x187dcb,_0x3f7d29,_0x5b1832){var _0x251f3c=_0x187dcb[_0xeb55('0x5b')](/\\n/g,'\x0a');var _0x2d8b75={'credentials':{'private_key':_0x251f3c,'client_email':_0x45f9e4}};var _0x4b0acd=new dialogflow[(_0xeb55('0x5c'))](_0x2d8b75);var _0x5e57f2=_0x4b0acd[_0xeb55('0x5d')](_0x26a28a,md5(_0x593ef3));var _0x452f48={'session':_0x5e57f2,'queryInput':{'text':{'text':_0x3f7d29,'languageCode':_0x5b1832}}};return _0x4b0acd[_0xeb55('0x5e')](_0x452f48)[_0xeb55('0x34')](function(_0x27fc03){if(_0x27fc03&&_0x27fc03['length']){logger[_0xeb55('0x1b')](_0xeb55('0x5f'),JSON[_0xeb55('0x3d')](_0x27fc03));var _0x1cdaaa=_0x27fc03[0x0];if(_0x1cdaaa){var _0x45d228={'action':_0x1cdaaa[_0xeb55('0x60')]['action'],'allRequiredParamsPresent':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x61')],'endConversation':_0x1cdaaa[_0xeb55('0x60')]['diagnosticInfo']&&_0x1cdaaa['queryResult'][_0xeb55('0x62')][_0xeb55('0x63')]?_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x62')][_0xeb55('0x63')][_0xeb55('0x64')]['boolValue']:![],'fulfillmentText':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x65')],'intentName':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x66')][_0xeb55('0x67')],'intentDisplayName':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x66')][_0xeb55('0x68')],'isFallbackIntent':_0x1cdaaa['queryResult'][_0xeb55('0x66')][_0xeb55('0x69')],'languageCode':_0x1cdaaa['queryResult'][_0xeb55('0x6a')],'queryText':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x6b')],'responseId':_0x1cdaaa[_0xeb55('0x6c')],'score':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x6d')],'speech':_0x1cdaaa[_0xeb55('0x60')][_0xeb55('0x65')],'providerResponse':JSON[_0xeb55('0x3d')](_0x27fc03)};return _0x45d228;}}});};exports[_0xeb55('0x6e')]=function(_0x35cce0,_0x42d858,_0x48111b,_0xc60684){return tilde['asr'](_0x35cce0,_0x42d858,_0x48111b,_0xc60684)[_0xeb55('0x34')](function(_0x47c217){try{fs[_0xeb55('0x1d')](_0x35cce0);}catch(_0x68e7e3){logger[_0xeb55('0x1e')](_0x68e7e3);}logger['info'](_0xeb55('0x6f'),_0x47c217['transcript']);logger[_0xeb55('0x1b')](_0xeb55('0x70'),_0x47c217[_0xeb55('0x4b')]);return _0x47c217;});};exports[_0xeb55('0x71')]=function(_0x2be26f,_0x7fcaef,_0x2843db,_0x32cfe2,_0x321115,_0x69ff7){var _0x1b2108=path[_0xeb55('0x24')](__dirname,_0xeb55('0x25'),rs['generate'](0x4)+_0xeb55('0x35'));var _0x531efc;return aws[_0xeb55('0x72')](_0x2be26f,_0x7fcaef,_0x2843db,_0x32cfe2,_0x321115,_0x69ff7,_0x1b2108)[_0xeb55('0x34')](function(){_0x531efc=path[_0xeb55('0x24')](__dirname,_0xeb55('0x25'),rs[_0xeb55('0x26')](0x4)+'.wav');return convertFile(_0x1b2108,_0x531efc);})[_0xeb55('0x34')](function(){try{fs[_0xeb55('0x1d')](_0x1b2108);fs[_0xeb55('0x2a')](_0x531efc,'777');}catch(_0x234719){logger[_0xeb55('0x1e')](_0x234719);}return _0x531efc[_0xeb55('0x2c')]('.')[0x0];});};exports[_0xeb55('0x73')]=function(_0x3db1fc,_0x47f5c1,_0x524772,_0x1f01e8,_0x218f10,_0x1b9107){return aws[_0xeb55('0x74')](_0x3db1fc,_0x47f5c1,_0x524772,_0x1f01e8,_0x218f10,_0x1b9107)['then'](function(_0x13aa33){logger[_0xeb55('0x1b')](JSON[_0xeb55('0x3d')](_0x13aa33));return _0x13aa33;});};exports['ispeechTTS']=function(_0x2e0139,_0x1a942c,_0xd557ed,_0x423b70){var _0x5163d1=util[_0xeb55('0x75')](_0xeb55('0x76'),ISPEECH_API,_0x2e0139,encodeURIComponent(_0x1a942c),_0xd557ed,_0x423b70);var _0x314dd5=path[_0xeb55('0x24')](__dirname,_0xeb55('0x25'),rs[_0xeb55('0x26')](0x4)+_0xeb55('0x35'));var _0xc0abc6;return downloadFile(_0x5163d1,_0x314dd5)['then'](function(){_0xc0abc6=path[_0xeb55('0x24')](__dirname,_0xeb55('0x25'),rs['generate'](0x4)+_0xeb55('0x27'));return convertFile(_0x314dd5,_0xc0abc6);})[_0xeb55('0x34')](function(){try{fs[_0xeb55('0x1d')](_0x314dd5);fs[_0xeb55('0x2a')](_0xc0abc6,_0xeb55('0x2b'));}catch(_0x3b3d1f){logger['error'](_0x3b3d1f);}return _0xc0abc6[_0xeb55('0x2c')]('.')[0x0];});};exports['ispeechASR']=function(_0x46dc0a,_0x4493e6,_0x308f02,_0x1da65b){var _0x3b672b=util[_0xeb55('0x75')](_0xeb55('0x77'),ISPEECH_API,_0x4493e6,_0x308f02,base64Encode(_0x46dc0a),_0x1da65b?util[_0xeb55('0x75')](_0xeb55('0x78'),encodeURIComponent(_0x1da65b)):_0xeb55('0x79'));return uploadFile(_0x3b672b)['then'](function(_0x3ed4fd){return querystring[_0xeb55('0x7a')](_0x3ed4fd);});};exports['sestekNDA']=function(_0x2f0aef,_0x35db2b){return sestek[_0xeb55('0x7b')](_0x2f0aef,_0x35db2b)['then'](function(_0x1418c2){logger[_0xeb55('0x1b')](JSON['stringify'](_0x1418c2));var _0x1ba2b1={'speech':_0x1418c2['text'],'action':_0x1418c2[_0xeb55('0x7c')]?_0x1418c2['channelData'][_0xeb55('0x7d')]:undefined,'actiondata':_0x1418c2['channelData']?_0x1418c2[_0xeb55('0x7c')][_0xeb55('0x7e')]:undefined};if(_0x1418c2['channelData']&&_0x1418c2[_0xeb55('0x7c')][_0xeb55('0x7f')]){return base64Decode(_0x1418c2['channelData']['AudioFromTts']['Data'],path['resolve'](__dirname,_0xeb55('0x25'),rs['generate'](0x4)+'.wav'))[_0xeb55('0x34')](function(_0x1f21c9){_0x1ba2b1[_0xeb55('0x80')]=_0x1f21c9;return _0x1ba2b1;});}return _0x1ba2b1;});};exports['dirName']=function(){return __dirname;};