d3cd5586c967889629d31a812c092af5934e709a
[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 _0x6a42=['polly','awsLex','lex','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s','freeform=3','nda','text','channelData','CustomActionData','AudioFromTts','Data','dirName','http','https','url','parse','bluebird','randomstring','sox','util','google-tts-api','apiai-promise','./tilde','./sestek','agi','https://api.ispeech.org/api/rest','protocol','path','error','\x20failed,\x20status\x20code\x20=\x20','statusCode','statusMessage','request\x20to\x20','createWriteStream','info','finish\x20download\x20file','unlink','download\x20error','pipe','end','https:','host','data','error\x20convert','finish\x20to\x20convert','resolve','tmp','generate','.wav','writeFileSync','base64','then','777','readFileSync','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','voice','audioConfig','MP3','POST','.mp3','from','audioContent','writeFile','chmodSync','split','googleTTS','goggleTTS\x20path','asr','uri','results','map','transcript','alternatives','confidence','join','googleASR\x20transcription','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','stringify','result','source','resolvedQuery','actionIncomplete','fulfillment','score','status','endConversation','metadata','tildeASR','Tilde\x20ASR\x20transcription'];(function(_0x447b3f,_0x221e0a){var _0x4bcf27=function(_0x44792a){while(--_0x44792a){_0x447b3f['push'](_0x447b3f['shift']());}};_0x4bcf27(++_0x221e0a);}(_0x6a42,0x1a8));var _0x26a4=function(_0x2cc4e0,_0x593d89){_0x2cc4e0=_0x2cc4e0-0x0;var _0x4fcd48=_0x6a42[_0x2cc4e0];return _0x4fcd48;};'use strict';var fs=require('fs');var path=require('path');var http=require(_0x26a4('0x0'));var https=require(_0x26a4('0x1'));var urlParse=require(_0x26a4('0x2'))[_0x26a4('0x3')];var BPromise=require(_0x26a4('0x4'));var rs=require(_0x26a4('0x5'));var sox=require(_0x26a4('0x6'));var rp=require('request-promise');var util=require(_0x26a4('0x7'));var querystring=require('querystring');var tts=require(_0x26a4('0x8'));var apiai=require(_0x26a4('0x9'));var md5=require('md5');var google=require('./google');var aws=require('./aws');var tilde=require(_0x26a4('0xa'));var sestek=require(_0x26a4('0xb'));var logger=require('../../../config/logger')(_0x26a4('0xc'));var ISPEECH_API=_0x26a4('0xd');function downloadFile(_0x2084f7,_0x2a252f){return new BPromise(function(_0x16c409,_0x2c600e){var _0x3b5449=urlParse(_0x2084f7);var _0x51bccb=_0x3b5449[_0x26a4('0xe')]==='https:'?https:http;var _0x1765d6={'host':_0x3b5449['host'],'path':_0x3b5449[_0x26a4('0xf')],'headers':{'user-agent':'WHAT_EVER'}};_0x51bccb['get'](_0x1765d6,function(_0x452694){if(_0x452694['statusCode']!==0xc8){logger[_0x26a4('0x10')]('request\x20to\x20'+_0x2084f7+_0x26a4('0x11')+_0x452694[_0x26a4('0x12')]+'\x20('+_0x452694[_0x26a4('0x13')]+')');_0x2c600e(new Error(_0x26a4('0x14')+_0x2084f7+_0x26a4('0x11')+_0x452694[_0x26a4('0x12')]+'\x20('+_0x452694[_0x26a4('0x13')]+')'));return;}var _0x4e9dc6=fs[_0x26a4('0x15')](_0x2a252f);_0x4e9dc6['on']('finish',function(){logger[_0x26a4('0x16')](_0x26a4('0x17'));_0x4e9dc6['close'](_0x16c409);});_0x4e9dc6['on'](_0x26a4('0x10'),function(_0xff0d02){fs[_0x26a4('0x18')](_0x2a252f);logger[_0x26a4('0x10')](_0x26a4('0x19'),_0xff0d02);_0x2c600e(_0xff0d02);});_0x452694[_0x26a4('0x1a')](_0x4e9dc6);})['on'](_0x26a4('0x10'),function(_0x535666){logger['error'](_0x535666);_0x2c600e(_0x535666);})[_0x26a4('0x1b')]();});}function uploadFile(_0x1ead50){return new BPromise(function(_0x1b55fd,_0x1e3ac6){var _0x5ba43e=urlParse(_0x1ead50);var _0x458804=_0x5ba43e[_0x26a4('0xe')]===_0x26a4('0x1c')?https:http;var _0x5444c6={'host':_0x5ba43e[_0x26a4('0x1d')],'path':_0x5ba43e[_0x26a4('0xf')],'headers':{'user-agent':'WHAT_EVER'}};_0x458804['get'](_0x5444c6,function(_0x580ff3){if(_0x580ff3['statusCode']!==0xc8){_0x1e3ac6(new Error(_0x26a4('0x14')+_0x1ead50+'\x20failed,\x20status\x20code\x20=\x20'+_0x580ff3[_0x26a4('0x12')]+'\x20('+_0x580ff3[_0x26a4('0x13')]+')'));return;}var _0x5c56fe='';_0x580ff3['on'](_0x26a4('0x1e'),function(_0x5b27d9){_0x5c56fe+=_0x5b27d9;});_0x580ff3['on'](_0x26a4('0x1b'),function(){_0x1b55fd(_0x5c56fe);});})['on'](_0x26a4('0x10'),function(_0x56dbba){_0x1e3ac6(_0x56dbba);})[_0x26a4('0x1b')]();});}function convertFile(_0xe8ec11,_0x4ef134){return new BPromise(function(_0x56bdec,_0x29d7d5){var _0x9b3628=sox['transcode'](_0xe8ec11,_0x4ef134,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x9b3628['on']('error',function(_0x171a0e){logger['error'](_0x26a4('0x1f'),_0x171a0e);_0x29d7d5(_0x171a0e);});_0x9b3628['on'](_0x26a4('0x1b'),function(){logger['info'](_0x26a4('0x20'));_0x56bdec();});_0x9b3628['start']();});}function base64Decode(_0x44c030,_0x8b6e0d){var _0x5c60bc=path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+_0x26a4('0x24'));fs[_0x26a4('0x25')](_0x5c60bc,_0x44c030,_0x26a4('0x26'));return convertFile(_0x5c60bc,_0x8b6e0d)[_0x26a4('0x27')](function(){try{fs[_0x26a4('0x18')](_0x5c60bc);fs['chmodSync'](_0x8b6e0d,_0x26a4('0x28'));}catch(_0x4c8edc){logger[_0x26a4('0x10')](_0x4c8edc);}return _0x8b6e0d['split']('.')[0x0];});}function base64Encode(_0x18ac07){var _0x2fb11b=fs[_0x26a4('0x29')](_0x18ac07);return new Buffer(_0x2fb11b)['toString'](_0x26a4('0x26'));}exports[_0x26a4('0x2a')]=function(_0x411cfb,_0x4e4996,_0x27ad4f,_0x196348,_0x47f2ec,_0x53bc29){var _0x300487,_0x4ac361;var _0x26773d=_0x26a4('0x2b');var _0xd136cf=_0x26a4('0x2c')+_0x411cfb;var _0x1ada7d={};if(_0x4e4996===_0x26a4('0x2d')){_0x1ada7d[_0x26a4('0x2e')]={'ssml':_0x27ad4f};}else{_0x1ada7d[_0x26a4('0x2e')]={'text':_0x27ad4f};};_0x1ada7d[_0x26a4('0x2f')]={'languageCode':_0x196348,'ssmlGender':_0x47f2ec};_0x1ada7d[_0x26a4('0x30')]={'audioEncoding':_0x26a4('0x31'),'sampleRateHertz':0x1f40};var _0x2ab53b={'url':_0x26773d+'text:synthesize'+_0xd136cf,'method':_0x26a4('0x32'),'json':!![],'body':_0x1ada7d};return rp(_0x2ab53b)[_0x26a4('0x27')](function(_0x2be2f7){return new BPromise(function(_0x3bd97b,_0x46ccf0){_0x300487=path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+_0x26a4('0x33'));var _0xa53e6d=Buffer[_0x26a4('0x34')](_0x2be2f7[_0x26a4('0x35')],_0x26a4('0x26'));return fs[_0x26a4('0x36')](_0x300487,_0xa53e6d,function(_0x1bd474){_0x46ccf0(_0x1bd474);},function(_0x6f605a){fs[_0x26a4('0x37')](_0x300487,_0x26a4('0x28'));_0x3bd97b(_0x6f605a);});});})['then'](function(_0x3bc11b){_0x4ac361=path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs['generate'](0x4)+_0x26a4('0x24'));return convertFile(_0x300487,_0x4ac361);})[_0x26a4('0x27')](function(){try{fs['unlink'](_0x300487);fs[_0x26a4('0x37')](_0x4ac361,_0x26a4('0x28'));}catch(_0x27e41c){logger[_0x26a4('0x10')](_0x27e41c);}logger[_0x26a4('0x16')]('googleCloudTTS\x20path',_0x4ac361[_0x26a4('0x38')]('.')[0x0]);return _0x4ac361[_0x26a4('0x38')]('.')[0x0];});};exports[_0x26a4('0x39')]=function(_0x1b8ba2,_0x3a8c20){var _0x1103fe,_0x3c229a;return tts(_0x1b8ba2,_0x3a8c20||'en',0x1)['then'](function(_0x321643){logger['info'](_0x321643);_0x1103fe=path['resolve'](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+'.mp3');return downloadFile(_0x321643,_0x1103fe);})[_0x26a4('0x27')](function(){_0x3c229a=path[_0x26a4('0x21')](__dirname,'tmp',rs[_0x26a4('0x23')](0x4)+_0x26a4('0x24'));return convertFile(_0x1103fe,_0x3c229a);})[_0x26a4('0x27')](function(){try{fs['unlink'](_0x1103fe);fs[_0x26a4('0x37')](_0x3c229a,_0x26a4('0x28'));}catch(_0x625d8c){logger[_0x26a4('0x10')](_0x625d8c);}logger[_0x26a4('0x16')](_0x26a4('0x3a'),_0x3c229a[_0x26a4('0x38')]('.')[0x0]);return _0x3c229a[_0x26a4('0x38')]('.')[0x0];});};exports['googleASR']=function(_0x29b6c4,_0x22e02a,_0x528cf9){return google[_0x26a4('0x3b')](_0x29b6c4,_0x22e02a,_0x528cf9)[_0x26a4('0x27')](function(_0x3113f5){logger['info'](_0x3113f5[_0x26a4('0x3c')]);return rp(_0x3113f5);})['then'](function(_0xb7e895){var _0x16f5d9='';var _0xa314d5=0x0;try{fs[_0x26a4('0x18')](_0x29b6c4);}catch(_0x117d98){logger[_0x26a4('0x10')](_0x117d98);}if(_0xb7e895&&_0xb7e895[_0x26a4('0x3d')]){_0x16f5d9=_0xb7e895['results'][_0x26a4('0x3e')](function(_0x3bcf6e){return _0x3bcf6e&&_0x3bcf6e['alternatives'][0x0]&&_0x3bcf6e['alternatives'][0x0][_0x26a4('0x3f')]?_0x3bcf6e[_0x26a4('0x40')][0x0]['transcript']:'';})['join']('\x0a');_0xa314d5=_0xb7e895[_0x26a4('0x3d')][_0x26a4('0x3e')](function(_0x2d8a82){return _0x2d8a82&&_0x2d8a82[_0x26a4('0x40')][0x0]&&_0x2d8a82['alternatives'][0x0][_0x26a4('0x41')]?_0x2d8a82[_0x26a4('0x40')][0x0][_0x26a4('0x41')]:0x0;})[_0x26a4('0x42')]('\x0a');}logger['info'](_0x26a4('0x43'),_0x16f5d9);logger[_0x26a4('0x16')](_0x26a4('0x44'),_0xa314d5);return{'transcript':_0x16f5d9,'confidence':_0xa314d5};})[_0x26a4('0x45')](function(_0x1c4308){logger[_0x26a4('0x10')](_0x26a4('0x46'),_0x1c4308[_0x26a4('0x12')],_0x1c4308[_0x26a4('0x47')],_0x1c4308[_0x26a4('0x48')]);});};exports[_0x26a4('0x49')]=function(_0x23674b,_0x33347c,_0x589d8a,_0x2b745f){var _0x43e570=apiai(_0x33347c,{'language':_0x2b745f||'en'});return _0x43e570['textRequest'](_0x589d8a,{'sessionId':md5(_0x23674b)})[_0x26a4('0x27')](function(_0x3435ae){logger[_0x26a4('0x16')](JSON[_0x26a4('0x4a')](_0x3435ae));return{'source':_0x3435ae[_0x26a4('0x4b')][_0x26a4('0x4c')],'resolvedQuery':_0x3435ae['result'][_0x26a4('0x4d')],'action':_0x3435ae[_0x26a4('0x4b')]['action'],'actionIncomplete':_0x3435ae['result'][_0x26a4('0x4e')],'speech':_0x3435ae[_0x26a4('0x4b')][_0x26a4('0x4f')]['speech'],'score':_0x3435ae[_0x26a4('0x4b')][_0x26a4('0x50')],'statusCode':_0x3435ae[_0x26a4('0x51')]['code'],'endConversation':_0x3435ae['result']['metadata'][_0x26a4('0x52')]||![],'isFallbackIntent':_0x3435ae[_0x26a4('0x4b')][_0x26a4('0x53')]['isFallbackIntent']};});};exports[_0x26a4('0x54')]=function(_0x380459,_0x155904,_0x3415fc,_0x18181a){return tilde[_0x26a4('0x3b')](_0x380459,_0x155904,_0x3415fc,_0x18181a)['then'](function(_0x32bf84){try{fs[_0x26a4('0x18')](_0x380459);}catch(_0x2390a3){logger[_0x26a4('0x10')](_0x2390a3);}logger['info'](_0x26a4('0x55'),_0x32bf84[_0x26a4('0x3f')]);logger[_0x26a4('0x16')]('Tilde\x20ASR\x20confidence',_0x32bf84[_0x26a4('0x41')]);return _0x32bf84;});};exports['awsPolly']=function(_0x4b759e,_0x59cb4e,_0x544680,_0x580214,_0x229e71,_0x51face){var _0x30d79b=path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+_0x26a4('0x33'));var _0x41eec0;return aws[_0x26a4('0x56')](_0x4b759e,_0x59cb4e,_0x544680,_0x580214,_0x229e71,_0x51face,_0x30d79b)[_0x26a4('0x27')](function(){_0x41eec0=path[_0x26a4('0x21')](__dirname,'tmp',rs['generate'](0x4)+_0x26a4('0x24'));return convertFile(_0x30d79b,_0x41eec0);})[_0x26a4('0x27')](function(){try{fs[_0x26a4('0x18')](_0x30d79b);fs['chmodSync'](_0x41eec0,_0x26a4('0x28'));}catch(_0x47590d){logger[_0x26a4('0x10')](_0x47590d);}return _0x41eec0['split']('.')[0x0];});};exports[_0x26a4('0x57')]=function(_0x19c2be,_0x212d8d,_0x1e538e,_0x3e956b,_0x3304cb,_0x24175c){return aws[_0x26a4('0x58')](_0x19c2be,_0x212d8d,_0x1e538e,_0x3e956b,_0x3304cb,_0x24175c)[_0x26a4('0x27')](function(_0x33512d){logger[_0x26a4('0x16')](JSON[_0x26a4('0x4a')](_0x33512d));return _0x33512d;});};exports[_0x26a4('0x59')]=function(_0x1fc3d0,_0x383a1a,_0x3c1a28,_0x268af6){var _0x3abae2=util[_0x26a4('0x5a')](_0x26a4('0x5b'),ISPEECH_API,_0x1fc3d0,encodeURIComponent(_0x383a1a),_0x3c1a28,_0x268af6);var _0xdc8352=path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+_0x26a4('0x33'));var _0x354b96;return downloadFile(_0x3abae2,_0xdc8352)[_0x26a4('0x27')](function(){_0x354b96=path[_0x26a4('0x21')](__dirname,'tmp',rs['generate'](0x4)+_0x26a4('0x24'));return convertFile(_0xdc8352,_0x354b96);})['then'](function(){try{fs['unlink'](_0xdc8352);fs['chmodSync'](_0x354b96,_0x26a4('0x28'));}catch(_0xec6fed){logger[_0x26a4('0x10')](_0xec6fed);}return _0x354b96[_0x26a4('0x38')]('.')[0x0];});};exports[_0x26a4('0x5c')]=function(_0x5b8ff5,_0x44f578,_0x3d7444,_0x5cf7e5){var _0xf769b4=util[_0x26a4('0x5a')](_0x26a4('0x5d'),ISPEECH_API,_0x44f578,_0x3d7444,base64Encode(_0x5b8ff5),_0x5cf7e5?util['format']('model=%s',encodeURIComponent(_0x5cf7e5)):_0x26a4('0x5e'));return uploadFile(_0xf769b4)['then'](function(_0x526eb8){return querystring['parse'](_0x526eb8);});};exports['sestekNDA']=function(_0x4062bb,_0x31deda){return sestek[_0x26a4('0x5f')](_0x4062bb,_0x31deda)[_0x26a4('0x27')](function(_0x335174){logger['info'](JSON[_0x26a4('0x4a')](_0x335174));var _0x5bc29a={'speech':_0x335174[_0x26a4('0x60')],'action':_0x335174[_0x26a4('0x61')]?_0x335174['channelData']['CustomAction']:undefined,'actiondata':_0x335174[_0x26a4('0x61')]?_0x335174[_0x26a4('0x61')][_0x26a4('0x62')]:undefined};if(_0x335174[_0x26a4('0x61')]&&_0x335174[_0x26a4('0x61')][_0x26a4('0x63')]){return base64Decode(_0x335174[_0x26a4('0x61')][_0x26a4('0x63')][_0x26a4('0x64')],path[_0x26a4('0x21')](__dirname,_0x26a4('0x22'),rs[_0x26a4('0x23')](0x4)+_0x26a4('0x24')))[_0x26a4('0x27')](function(_0x28a15c){_0x5bc29a['audiofile']=_0x28a15c;return _0x5bc29a;});}return _0x5bc29a;});};exports[_0x26a4('0x65')]=function(){return __dirname;};