5666d7d48b6ec6b3a8b0d838d87ae5cbccac78fe
[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 _0x54b1=['POST','.mp3','from','base64','777','resolve','.wav','googleCloudTTS\x20path','googleTTS','goggleTTS\x20path','googleASR','asr','uri','results','map','alternatives','transcript','join','googleASR\x20transcription','googleASR\x20confidence','[%s]\x20%s:%s','message','textRequest','result','source','resolvedQuery','action','actionIncomplete','fulfillment','speech','score','status','code','metadata','endConversation','isFallbackIntent','googleDialogflowV2','replace','sessionPath','detectIntent','Dialogflow\x20V2\x20response:','stringify','queryResult','diagnosticInfo','fields','boolValue','fulfillmentText','name','intent','displayName','languageCode','queryText','confidence','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','sestekNDA','nda','channelData','CustomAction','CustomActionData','AudioFromTts','bluebird','dialogflow','path','request-promise','sox','google-tts-api','url','util','./aws','./sestek','../../../config/logger','agi','protocol','WHAT_EVER','get','error','statusCode','statusMessage','request\x20to\x20','\x20failed,\x20status\x20code\x20=\x20','createWriteStream','finish','info','close','unlink','download\x20error','pipe','host','data','end','transcode','wav','finish\x20to\x20convert','tmp','generate','writeFileSync','then','chmodSync','split','readFileSync','toString','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','voice','audioConfig','text:synthesize'];(function(_0x559223,_0x32d63e){var _0x1dbbcf=function(_0x262f89){while(--_0x262f89){_0x559223['push'](_0x559223['shift']());}};_0x1dbbcf(++_0x32d63e);}(_0x54b1,0xbb));var _0x154b=function(_0x433ca2,_0x13664b){_0x433ca2=_0x433ca2-0x0;var _0x564639=_0x54b1[_0x433ca2];return _0x564639;};'use strict';var apiai=require('apiai-promise');var BPromise=require(_0x154b('0x0'));var dialogflow=require(_0x154b('0x1'));var fs=require('fs');var http=require('http');var https=require('https');var md5=require('md5');var path=require(_0x154b('0x2'));var querystring=require('querystring');var rp=require(_0x154b('0x3'));var rs=require('randomstring');var sox=require(_0x154b('0x4'));var tts=require(_0x154b('0x5'));var urlParse=require(_0x154b('0x6'))['parse'];var util=require(_0x154b('0x7'));var aws=require(_0x154b('0x8'));var google=require('./google');var sestek=require(_0x154b('0x9'));var tilde=require('./tilde');var logger=require(_0x154b('0xa'))(_0x154b('0xb'));var ISPEECH_API='https://api.ispeech.org/api/rest';function downloadFile(_0x4a6959,_0x5e7955){return new BPromise(function(_0x54093,_0x2168b0){var _0x11cf56=urlParse(_0x4a6959);var _0x10b76a=_0x11cf56[_0x154b('0xc')]==='https:'?https:http;var _0x35bcf3={'host':_0x11cf56['host'],'path':_0x11cf56[_0x154b('0x2')],'headers':{'user-agent':_0x154b('0xd')}};_0x10b76a[_0x154b('0xe')](_0x35bcf3,function(_0x5e0916){if(_0x5e0916['statusCode']!==0xc8){logger[_0x154b('0xf')]('request\x20to\x20'+_0x4a6959+'\x20failed,\x20status\x20code\x20=\x20'+_0x5e0916[_0x154b('0x10')]+'\x20('+_0x5e0916[_0x154b('0x11')]+')');_0x2168b0(new Error(_0x154b('0x12')+_0x4a6959+_0x154b('0x13')+_0x5e0916[_0x154b('0x10')]+'\x20('+_0x5e0916[_0x154b('0x11')]+')'));return;}var _0x5eceb5=fs[_0x154b('0x14')](_0x5e7955);_0x5eceb5['on'](_0x154b('0x15'),function(){logger[_0x154b('0x16')]('finish\x20download\x20file');_0x5eceb5[_0x154b('0x17')](_0x54093);});_0x5eceb5['on'](_0x154b('0xf'),function(_0x45f835){fs[_0x154b('0x18')](_0x5e7955);logger[_0x154b('0xf')](_0x154b('0x19'),_0x45f835);_0x2168b0(_0x45f835);});_0x5e0916[_0x154b('0x1a')](_0x5eceb5);})['on'](_0x154b('0xf'),function(_0x5aebf0){logger['error'](_0x5aebf0);_0x2168b0(_0x5aebf0);})['end']();});}function uploadFile(_0xa02e86){return new BPromise(function(_0x2922b0,_0x4914d8){var _0x25bf8c=urlParse(_0xa02e86);var _0x325d7b=_0x25bf8c['protocol']==='https:'?https:http;var _0x4cb218={'host':_0x25bf8c[_0x154b('0x1b')],'path':_0x25bf8c[_0x154b('0x2')],'headers':{'user-agent':_0x154b('0xd')}};_0x325d7b['get'](_0x4cb218,function(_0x60a64e){if(_0x60a64e[_0x154b('0x10')]!==0xc8){_0x4914d8(new Error(_0x154b('0x12')+_0xa02e86+_0x154b('0x13')+_0x60a64e[_0x154b('0x10')]+'\x20('+_0x60a64e[_0x154b('0x11')]+')'));return;}var _0x1bb673='';_0x60a64e['on'](_0x154b('0x1c'),function(_0x3e97d5){_0x1bb673+=_0x3e97d5;});_0x60a64e['on'](_0x154b('0x1d'),function(){_0x2922b0(_0x1bb673);});})['on'](_0x154b('0xf'),function(_0xcc9285){_0x4914d8(_0xcc9285);})[_0x154b('0x1d')]();});}function convertFile(_0x1e09e0,_0x4ba038){return new BPromise(function(_0x273a58,_0x275b6f){var _0x4c8f07=sox[_0x154b('0x1e')](_0x1e09e0,_0x4ba038,{'sampleRate':0x1f40,'format':_0x154b('0x1f'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x4c8f07['on']('error',function(_0x4eb164){logger[_0x154b('0xf')]('error\x20convert',_0x4eb164);_0x275b6f(_0x4eb164);});_0x4c8f07['on'](_0x154b('0x1d'),function(){logger[_0x154b('0x16')](_0x154b('0x20'));_0x273a58();});_0x4c8f07['start']();});}function base64Decode(_0x5bf918,_0xd921aa){var _0x23fa4d=path['resolve'](__dirname,_0x154b('0x21'),rs[_0x154b('0x22')](0x4)+'.wav');fs[_0x154b('0x23')](_0x23fa4d,_0x5bf918,'base64');return convertFile(_0x23fa4d,_0xd921aa)[_0x154b('0x24')](function(){try{fs[_0x154b('0x18')](_0x23fa4d);fs[_0x154b('0x25')](_0xd921aa,'777');}catch(_0x38fd6c){logger[_0x154b('0xf')](_0x38fd6c);}return _0xd921aa[_0x154b('0x26')]('.')[0x0];});}function base64Encode(_0x4776b4){var _0x1adc75=fs[_0x154b('0x27')](_0x4776b4);return new Buffer(_0x1adc75)[_0x154b('0x28')]('base64');}exports[_0x154b('0x29')]=function(_0x4ac851,_0x161bbc,_0x4c117f,_0x348bfe,_0x4b14b0,_0x248205){var _0x5ba37b,_0x4920ff;var _0x1642de=_0x154b('0x2a');var _0x5c2e78=_0x154b('0x2b')+_0x4ac851;var _0x153ff4={};if(_0x161bbc===_0x154b('0x2c')){_0x153ff4[_0x154b('0x2d')]={'ssml':_0x4c117f};}else{_0x153ff4[_0x154b('0x2d')]={'text':_0x4c117f};};_0x153ff4[_0x154b('0x2e')]={'languageCode':_0x348bfe,'ssmlGender':_0x4b14b0};_0x153ff4[_0x154b('0x2f')]={'audioEncoding':'MP3','sampleRateHertz':0x1f40};var _0x4ad3b0={'url':_0x1642de+_0x154b('0x30')+_0x5c2e78,'method':_0x154b('0x31'),'json':!![],'body':_0x153ff4};return rp(_0x4ad3b0)[_0x154b('0x24')](function(_0x2893c6){return new BPromise(function(_0x1008a6,_0x1dc6a5){_0x5ba37b=path['resolve'](__dirname,'tmp',rs[_0x154b('0x22')](0x4)+_0x154b('0x32'));var _0x47589a=Buffer[_0x154b('0x33')](_0x2893c6['audioContent'],_0x154b('0x34'));return fs['writeFile'](_0x5ba37b,_0x47589a,function(_0x36b18c){_0x1dc6a5(_0x36b18c);},function(_0x5369ee){fs[_0x154b('0x25')](_0x5ba37b,_0x154b('0x35'));_0x1008a6(_0x5369ee);});});})[_0x154b('0x24')](function(_0x141e57){_0x4920ff=path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs[_0x154b('0x22')](0x4)+_0x154b('0x37'));return convertFile(_0x5ba37b,_0x4920ff);})['then'](function(){try{fs['unlink'](_0x5ba37b);fs[_0x154b('0x25')](_0x4920ff,'777');}catch(_0x5ac2f6){logger[_0x154b('0xf')](_0x5ac2f6);}logger[_0x154b('0x16')](_0x154b('0x38'),_0x4920ff[_0x154b('0x26')]('.')[0x0]);return _0x4920ff[_0x154b('0x26')]('.')[0x0];});};exports[_0x154b('0x39')]=function(_0x27b83f,_0x13e14f){var _0x48a703,_0x152191;return tts(_0x27b83f,_0x13e14f||'en',0x1)['then'](function(_0x30f3de){logger['info'](_0x30f3de);_0x48a703=path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs[_0x154b('0x22')](0x4)+'.mp3');return downloadFile(_0x30f3de,_0x48a703);})['then'](function(){_0x152191=path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs[_0x154b('0x22')](0x4)+_0x154b('0x37'));return convertFile(_0x48a703,_0x152191);})['then'](function(){try{fs[_0x154b('0x18')](_0x48a703);fs[_0x154b('0x25')](_0x152191,_0x154b('0x35'));}catch(_0x39d844){logger[_0x154b('0xf')](_0x39d844);}logger[_0x154b('0x16')](_0x154b('0x3a'),_0x152191[_0x154b('0x26')]('.')[0x0]);return _0x152191[_0x154b('0x26')]('.')[0x0];});};exports[_0x154b('0x3b')]=function(_0x544bff,_0x285868,_0x5c3ca5){return google[_0x154b('0x3c')](_0x544bff,_0x285868,_0x5c3ca5)['then'](function(_0x1e2cd2){logger['info'](_0x1e2cd2[_0x154b('0x3d')]);return rp(_0x1e2cd2);})[_0x154b('0x24')](function(_0x11201c){var _0x348041='';var _0x486717=0x0;try{fs[_0x154b('0x18')](_0x544bff);}catch(_0x4de18a){logger[_0x154b('0xf')](_0x4de18a);}if(_0x11201c&&_0x11201c[_0x154b('0x3e')]){_0x348041=_0x11201c[_0x154b('0x3e')][_0x154b('0x3f')](function(_0x127b60){return _0x127b60&&_0x127b60['alternatives'][0x0]&&_0x127b60[_0x154b('0x40')][0x0]['transcript']?_0x127b60[_0x154b('0x40')][0x0][_0x154b('0x41')]:'';})[_0x154b('0x42')]('\x0a');_0x486717=_0x11201c['results'][_0x154b('0x3f')](function(_0x1357c6){return _0x1357c6&&_0x1357c6[_0x154b('0x40')][0x0]&&_0x1357c6[_0x154b('0x40')][0x0]['confidence']?_0x1357c6[_0x154b('0x40')][0x0]['confidence']:0x0;})[_0x154b('0x42')]('\x0a');}logger[_0x154b('0x16')](_0x154b('0x43'),_0x348041);logger[_0x154b('0x16')](_0x154b('0x44'),_0x486717);return{'transcript':_0x348041,'confidence':_0x486717};})['catch'](function(_0x3ae759){logger[_0x154b('0xf')](_0x154b('0x45'),_0x3ae759[_0x154b('0x10')],_0x3ae759['name'],_0x3ae759[_0x154b('0x46')]);});};exports['googleDialogflow']=function(_0x3504bf,_0x149642,_0x1ee70a,_0xda4338){var _0x2c4cba=apiai(_0x149642,{'language':_0xda4338||'en'});return _0x2c4cba[_0x154b('0x47')](_0x1ee70a,{'sessionId':md5(_0x3504bf)})[_0x154b('0x24')](function(_0x328290){logger[_0x154b('0x16')](JSON['stringify'](_0x328290));return{'source':_0x328290[_0x154b('0x48')][_0x154b('0x49')],'resolvedQuery':_0x328290[_0x154b('0x48')][_0x154b('0x4a')],'action':_0x328290[_0x154b('0x48')][_0x154b('0x4b')],'actionIncomplete':_0x328290[_0x154b('0x48')][_0x154b('0x4c')],'speech':_0x328290['result'][_0x154b('0x4d')][_0x154b('0x4e')],'score':_0x328290[_0x154b('0x48')][_0x154b('0x4f')],'statusCode':_0x328290[_0x154b('0x50')][_0x154b('0x51')],'endConversation':_0x328290[_0x154b('0x48')][_0x154b('0x52')][_0x154b('0x53')]||![],'isFallbackIntent':_0x328290['result'][_0x154b('0x52')][_0x154b('0x54')]};});};exports[_0x154b('0x55')]=function(_0x32b07d,_0x5b15d0,_0x53d2fd,_0x22187a,_0x4e8bd2,_0x22523a){var _0x321f79=_0x22187a[_0x154b('0x56')](/\\n/g,'\x0a');var _0xe1b902={'credentials':{'private_key':_0x321f79,'client_email':_0x53d2fd}};var _0x5ee220=new dialogflow['SessionsClient'](_0xe1b902);var _0x2cef72=_0x5ee220[_0x154b('0x57')](_0x5b15d0,md5(_0x32b07d));var _0xd2c50d={'session':_0x2cef72,'queryInput':{'text':{'text':_0x4e8bd2,'languageCode':_0x22523a}}};return _0x5ee220[_0x154b('0x58')](_0xd2c50d)['then'](function(_0x5d3eed){if(_0x5d3eed&&_0x5d3eed['length']){logger[_0x154b('0x16')](_0x154b('0x59'),JSON[_0x154b('0x5a')](_0x5d3eed));var _0x2a1016=_0x5d3eed[0x0];if(_0x2a1016){var _0x26b65d={'action':_0x2a1016['queryResult']['action'],'allRequiredParamsPresent':_0x2a1016[_0x154b('0x5b')]['allRequiredParamsPresent'],'endConversation':_0x2a1016[_0x154b('0x5b')][_0x154b('0x5c')]&&_0x2a1016['queryResult'][_0x154b('0x5c')][_0x154b('0x5d')]?_0x2a1016[_0x154b('0x5b')]['diagnosticInfo'][_0x154b('0x5d')]['end_conversation'][_0x154b('0x5e')]:![],'fulfillmentText':_0x2a1016[_0x154b('0x5b')][_0x154b('0x5f')],'intentName':_0x2a1016['queryResult']['intent'][_0x154b('0x60')],'intentDisplayName':_0x2a1016['queryResult'][_0x154b('0x61')][_0x154b('0x62')],'isFallbackIntent':_0x2a1016[_0x154b('0x5b')]['intent']['isFallback'],'languageCode':_0x2a1016[_0x154b('0x5b')][_0x154b('0x63')],'queryText':_0x2a1016['queryResult'][_0x154b('0x64')],'responseId':_0x2a1016['responseId'],'score':_0x2a1016[_0x154b('0x5b')]['intentDetectionConfidence'],'speech':_0x2a1016[_0x154b('0x5b')][_0x154b('0x5f')],'providerResponse':JSON[_0x154b('0x5a')](_0x5d3eed)};return _0x26b65d;}}});};exports['tildeASR']=function(_0x44e9c3,_0x19d912,_0x3f0121,_0x845985){return tilde[_0x154b('0x3c')](_0x44e9c3,_0x19d912,_0x3f0121,_0x845985)[_0x154b('0x24')](function(_0xd7f9d){try{fs[_0x154b('0x18')](_0x44e9c3);}catch(_0x1d9bf8){logger[_0x154b('0xf')](_0x1d9bf8);}logger['info']('Tilde\x20ASR\x20transcription',_0xd7f9d[_0x154b('0x41')]);logger[_0x154b('0x16')]('Tilde\x20ASR\x20confidence',_0xd7f9d[_0x154b('0x65')]);return _0xd7f9d;});};exports[_0x154b('0x66')]=function(_0x1bdeb5,_0x2b5065,_0x23c50b,_0x5a9a2e,_0x10a245,_0x37ceff){var _0x1bf6e9=path['resolve'](__dirname,'tmp',rs[_0x154b('0x22')](0x4)+'.mp3');var _0x5e8bd6;return aws[_0x154b('0x67')](_0x1bdeb5,_0x2b5065,_0x23c50b,_0x5a9a2e,_0x10a245,_0x37ceff,_0x1bf6e9)['then'](function(){_0x5e8bd6=path[_0x154b('0x36')](__dirname,'tmp',rs[_0x154b('0x22')](0x4)+_0x154b('0x37'));return convertFile(_0x1bf6e9,_0x5e8bd6);})[_0x154b('0x24')](function(){try{fs['unlink'](_0x1bf6e9);fs[_0x154b('0x25')](_0x5e8bd6,'777');}catch(_0x107bd1){logger[_0x154b('0xf')](_0x107bd1);}return _0x5e8bd6[_0x154b('0x26')]('.')[0x0];});};exports[_0x154b('0x68')]=function(_0x586b3a,_0x413520,_0x2c97ef,_0x33b161,_0x2c7f87,_0x2c26ab){return aws[_0x154b('0x69')](_0x586b3a,_0x413520,_0x2c97ef,_0x33b161,_0x2c7f87,_0x2c26ab)[_0x154b('0x24')](function(_0x1a42d2){logger['info'](JSON[_0x154b('0x5a')](_0x1a42d2));return _0x1a42d2;});};exports['ispeechTTS']=function(_0x369205,_0x30faa3,_0x1aecc9,_0x1db735){var _0x291858=util[_0x154b('0x6a')](_0x154b('0x6b'),ISPEECH_API,_0x369205,encodeURIComponent(_0x30faa3),_0x1aecc9,_0x1db735);var _0x270e61=path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs[_0x154b('0x22')](0x4)+'.mp3');var _0xda49d9;return downloadFile(_0x291858,_0x270e61)[_0x154b('0x24')](function(){_0xda49d9=path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs['generate'](0x4)+'.wav');return convertFile(_0x270e61,_0xda49d9);})[_0x154b('0x24')](function(){try{fs[_0x154b('0x18')](_0x270e61);fs[_0x154b('0x25')](_0xda49d9,_0x154b('0x35'));}catch(_0x17c9af){logger[_0x154b('0xf')](_0x17c9af);}return _0xda49d9[_0x154b('0x26')]('.')[0x0];});};exports['ispeechASR']=function(_0x35fdbf,_0x2b4002,_0x47c0a0,_0x196c15){var _0x2388c5=util[_0x154b('0x6a')](_0x154b('0x6c'),ISPEECH_API,_0x2b4002,_0x47c0a0,base64Encode(_0x35fdbf),_0x196c15?util[_0x154b('0x6a')](_0x154b('0x6d'),encodeURIComponent(_0x196c15)):_0x154b('0x6e'));return uploadFile(_0x2388c5)[_0x154b('0x24')](function(_0x5022b7){return querystring[_0x154b('0x6f')](_0x5022b7);});};exports[_0x154b('0x70')]=function(_0x40bcf9,_0x13d704){return sestek[_0x154b('0x71')](_0x40bcf9,_0x13d704)[_0x154b('0x24')](function(_0x1f9a23){logger[_0x154b('0x16')](JSON[_0x154b('0x5a')](_0x1f9a23));var _0x1108ed={'speech':_0x1f9a23['text'],'action':_0x1f9a23[_0x154b('0x72')]?_0x1f9a23[_0x154b('0x72')][_0x154b('0x73')]:undefined,'actiondata':_0x1f9a23[_0x154b('0x72')]?_0x1f9a23[_0x154b('0x72')][_0x154b('0x74')]:undefined};if(_0x1f9a23[_0x154b('0x72')]&&_0x1f9a23[_0x154b('0x72')]['AudioFromTts']){return base64Decode(_0x1f9a23['channelData'][_0x154b('0x75')]['Data'],path[_0x154b('0x36')](__dirname,_0x154b('0x21'),rs['generate'](0x4)+_0x154b('0x37')))[_0x154b('0x24')](function(_0x116096){_0x1108ed['audiofile']=_0x116096;return _0x1108ed;});}return _0x1108ed;});};exports['dirName']=function(){return __dirname;};