aa9e1bc31793e46f94aca2e0de6599e40fea5e75
[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 _0x400c=['alternatives','transcript','confidence','join','googleASR\x20confidence','catch','[%s]\x20%s:%s','name','message','googleDialogflow','textRequest','result','source','resolvedQuery','action','actionIncomplete','fulfillment','speech','score','status','code','endConversation','metadata','isFallbackIntent','replace','SessionsClient','sessionPath','detectIntent','queryResult','diagnosticInfo','fields','end_conversation','fulfillmentText','intent','isFallback','languageCode','responseId','intentDetectionConfidence','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','polly','awsLex','lex','ispeechTTS','ispeechASR','format','%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','Data','.wav','audiofile','dirName','apiai-promise','dialogflow','request-promise','sox','google-tts-api','url','util','./aws','./google','./sestek','./tilde','agi','protocol','host','path','WHAT_EVER','statusCode','error','\x20failed,\x20status\x20code\x20=\x20','request\x20to\x20','statusMessage','createWriteStream','finish','finish\x20download\x20file','close','download\x20error','pipe','end','https:','get','transcode','error\x20convert','info','finish\x20to\x20convert','start','resolve','tmp','generate','writeFileSync','base64','then','unlink','chmodSync','777','split','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','voice','audioConfig','text:synthesize','from','writeFile','googleCloudTTS\x20path','googleTTS','utf8','POST','application/x-www-form-urlencoded','stringify','jQ1olc','null','generic','slice','length','lang\x20\x22','parse\x20response\x20failed:\x0a','.mp3','goggleTTS\x20path','googleASR','uri','results','map'];(function(_0x4db947,_0x5b5256){var _0x3ec61d=function(_0x3594d5){while(--_0x3594d5){_0x4db947['push'](_0x4db947['shift']());}};_0x3ec61d(++_0x5b5256);}(_0x400c,0x14b));var _0xc400=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x400c[_0x13d07a];return _0x5ee0ee;};'use strict';var apiai=require(_0xc400('0x0'));var BPromise=require('bluebird');var dialogflow=require(_0xc400('0x1'));var fs=require('fs');var http=require('http');var https=require('https');var md5=require('md5');var path=require('path');var querystring=require('querystring');var rp=require(_0xc400('0x2'));var rs=require('randomstring');var sox=require(_0xc400('0x3'));var tts=require(_0xc400('0x4'));var urlParse=require(_0xc400('0x5'))['parse'];var util=require(_0xc400('0x6'));var aws=require(_0xc400('0x7'));var google=require(_0xc400('0x8'));var sestek=require(_0xc400('0x9'));var tilde=require(_0xc400('0xa'));var logger=require('../../../config/logger')(_0xc400('0xb'));var ISPEECH_API='https://api.ispeech.org/api/rest';function downloadFile(_0x2d442a,_0x48a5c2){return new BPromise(function(_0x363b67,_0x59ef9f){var _0x2eb85d=urlParse(_0x2d442a);var _0x40b031=_0x2eb85d[_0xc400('0xc')]==='https:'?https:http;var _0x5054ef={'host':_0x2eb85d[_0xc400('0xd')],'path':_0x2eb85d[_0xc400('0xe')],'headers':{'user-agent':_0xc400('0xf')}};_0x40b031['get'](_0x5054ef,function(_0x312dcb){if(_0x312dcb[_0xc400('0x10')]!==0xc8){logger[_0xc400('0x11')]('request\x20to\x20'+_0x2d442a+_0xc400('0x12')+_0x312dcb[_0xc400('0x10')]+'\x20('+_0x312dcb['statusMessage']+')');_0x59ef9f(new Error(_0xc400('0x13')+_0x2d442a+'\x20failed,\x20status\x20code\x20=\x20'+_0x312dcb[_0xc400('0x10')]+'\x20('+_0x312dcb[_0xc400('0x14')]+')'));return;}var _0x162be5=fs[_0xc400('0x15')](_0x48a5c2);_0x162be5['on'](_0xc400('0x16'),function(){logger['info'](_0xc400('0x17'));_0x162be5[_0xc400('0x18')](_0x363b67);});_0x162be5['on']('error',function(_0x41eb3f){fs['unlink'](_0x48a5c2);logger[_0xc400('0x11')](_0xc400('0x19'),_0x41eb3f);_0x59ef9f(_0x41eb3f);});_0x312dcb[_0xc400('0x1a')](_0x162be5);})['on'](_0xc400('0x11'),function(_0x509ea5){logger[_0xc400('0x11')](_0x509ea5);_0x59ef9f(_0x509ea5);})[_0xc400('0x1b')]();});}function uploadFile(_0x58522d){return new BPromise(function(_0x109fc0,_0x3973cd){var _0x3e4752=urlParse(_0x58522d);var _0x5f2b57=_0x3e4752[_0xc400('0xc')]===_0xc400('0x1c')?https:http;var _0x2ffe49={'host':_0x3e4752[_0xc400('0xd')],'path':_0x3e4752['path'],'headers':{'user-agent':_0xc400('0xf')}};_0x5f2b57[_0xc400('0x1d')](_0x2ffe49,function(_0x6318a1){if(_0x6318a1[_0xc400('0x10')]!==0xc8){_0x3973cd(new Error(_0xc400('0x13')+_0x58522d+_0xc400('0x12')+_0x6318a1['statusCode']+'\x20('+_0x6318a1[_0xc400('0x14')]+')'));return;}var _0x226811='';_0x6318a1['on']('data',function(_0x35f0ec){_0x226811+=_0x35f0ec;});_0x6318a1['on'](_0xc400('0x1b'),function(){_0x109fc0(_0x226811);});})['on']('error',function(_0x5d7238){_0x3973cd(_0x5d7238);})[_0xc400('0x1b')]();});}function convertFile(_0x42eada,_0x2f34a1){return new BPromise(function(_0x324ed7,_0x144725){var _0x4c6c9a=sox[_0xc400('0x1e')](_0x42eada,_0x2f34a1,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x4c6c9a['on'](_0xc400('0x11'),function(_0x4ea297){logger['error'](_0xc400('0x1f'),_0x4ea297);_0x144725(_0x4ea297);});_0x4c6c9a['on'](_0xc400('0x1b'),function(){logger[_0xc400('0x20')](_0xc400('0x21'));_0x324ed7();});_0x4c6c9a[_0xc400('0x22')]();});}function base64Decode(_0x2f18da,_0xf550fb){var _0x2cf2cf=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.wav');fs[_0xc400('0x26')](_0x2cf2cf,_0x2f18da,_0xc400('0x27'));return convertFile(_0x2cf2cf,_0xf550fb)[_0xc400('0x28')](function(){try{fs[_0xc400('0x29')](_0x2cf2cf);fs[_0xc400('0x2a')](_0xf550fb,_0xc400('0x2b'));}catch(_0x5f97e3){logger[_0xc400('0x11')](_0x5f97e3);}return _0xf550fb[_0xc400('0x2c')]('.')[0x0];});}function base64Encode(_0x1f5e16){var _0x2197c2=fs['readFileSync'](_0x1f5e16);return new Buffer(_0x2197c2)['toString']('base64');}exports[_0xc400('0x2d')]=function(_0x18c955,_0x12ed54,_0x46d8f2,_0x18ceff,_0x5a9e27,_0x447567){var _0x51b6bc,_0x4fba0f;var _0x65988c=_0xc400('0x2e');var _0x41d689=_0xc400('0x2f')+_0x18c955;var _0x5d563d={};if(_0x12ed54===_0xc400('0x30')){_0x5d563d['input']={'ssml':_0x46d8f2};}else{_0x5d563d[_0xc400('0x31')]={'text':_0x46d8f2};};_0x5d563d[_0xc400('0x32')]={'languageCode':_0x18ceff,'ssmlGender':_0x5a9e27};_0x5d563d[_0xc400('0x33')]={'audioEncoding':'MP3','sampleRateHertz':0x1f40};var _0x3b904f={'url':_0x65988c+_0xc400('0x34')+_0x41d689,'method':'POST','json':!![],'body':_0x5d563d};return rp(_0x3b904f)[_0xc400('0x28')](function(_0x1f8be4){return new BPromise(function(_0x4359e0,_0x26f7dc){_0x51b6bc=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.mp3');var _0x4113b2=Buffer[_0xc400('0x35')](_0x1f8be4['audioContent'],_0xc400('0x27'));return fs[_0xc400('0x36')](_0x51b6bc,_0x4113b2,function(_0x58ce86){_0x26f7dc(_0x58ce86);},function(_0x482d43){fs[_0xc400('0x2a')](_0x51b6bc,_0xc400('0x2b'));_0x4359e0(_0x482d43);});});})[_0xc400('0x28')](function(_0x1eecfe){_0x4fba0f=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.wav');return convertFile(_0x51b6bc,_0x4fba0f);})[_0xc400('0x28')](function(){try{fs['unlink'](_0x51b6bc);fs[_0xc400('0x2a')](_0x4fba0f,_0xc400('0x2b'));}catch(_0x2ca879){logger[_0xc400('0x11')](_0x2ca879);}logger[_0xc400('0x20')](_0xc400('0x37'),_0x4fba0f[_0xc400('0x2c')]('.')[0x0]);return _0x4fba0f[_0xc400('0x2c')]('.')[0x0];});};exports[_0xc400('0x38')]=function(_0x59d52c,_0x2a4204){var _0x485b34='https://translate.google.com/_/TranslateWebserverUi/data/batchexecute';var _0x179798,_0x3dbfd6;var _0x12c730;var _0x5386dc={'encoding':_0xc400('0x39'),'method':_0xc400('0x3a'),'timeout':0x2710,'url':_0x485b34,'headers':{'Content-Type':_0xc400('0x3b')},'body':'f.req='+encodeURIComponent(JSON[_0xc400('0x3c')]([[[_0xc400('0x3d'),JSON['stringify']([_0x59d52c,_0x2a4204||'en',![],_0xc400('0x3e')]),null,_0xc400('0x3f')]]]))};return rp(_0x5386dc)[_0xc400('0x28')](function(_0x496f7b){try{_0x12c730=eval(_0x496f7b[_0xc400('0x40')](0x5))[0x0][0x2];}catch(_0x1a3981){throw new Error('parse\x20response\x20failed:\x0a'+_0x496f7b['data']);}if(!_0x12c730){if(_0x59d52c[_0xc400('0x41')]>0xc8){throw new Error('text\x20length\x20limit\x20reached');}else{throw new Error(_0xc400('0x42')+_0x2a4204+'\x22\x20might\x20not\x20exist');}}try{_0x12c730=eval(_0x12c730)[0x0];}catch(_0x376223){throw new Error(_0xc400('0x43')+res['data']);}const _0x338a2a=_0x12c730;_0x179798=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+_0xc400('0x44'));fs[_0xc400('0x26')](_0x179798,_0x12c730,{'encoding':'base64'});_0x3dbfd6=path[_0xc400('0x23')](__dirname,'tmp',rs[_0xc400('0x25')](0x4)+'.wav');return convertFile(_0x179798,_0x3dbfd6);})[_0xc400('0x28')](function(){try{fs['unlink'](_0x179798);fs[_0xc400('0x2a')](_0x3dbfd6,_0xc400('0x2b'));}catch(_0x489493){logger[_0xc400('0x11')](_0x489493);}logger['info'](_0xc400('0x45'),_0x3dbfd6[_0xc400('0x2c')]('.')[0x0]);return _0x3dbfd6['split']('.')[0x0];});};exports[_0xc400('0x46')]=function(_0xe263d4,_0x3e1d96,_0x24b73b){return google['asr'](_0xe263d4,_0x3e1d96,_0x24b73b)[_0xc400('0x28')](function(_0x5a46da){logger[_0xc400('0x20')](_0x5a46da[_0xc400('0x47')]);return rp(_0x5a46da);})[_0xc400('0x28')](function(_0x4530ea){var _0x347b71='';var _0x165bde=0x0;try{fs['unlink'](_0xe263d4);}catch(_0x1a65c2){logger[_0xc400('0x11')](_0x1a65c2);}if(_0x4530ea&&_0x4530ea[_0xc400('0x48')]){_0x347b71=_0x4530ea[_0xc400('0x48')][_0xc400('0x49')](function(_0x525f3e){return _0x525f3e&&_0x525f3e['alternatives'][0x0]&&_0x525f3e[_0xc400('0x4a')][0x0][_0xc400('0x4b')]?_0x525f3e[_0xc400('0x4a')][0x0][_0xc400('0x4b')]:'';})['join']('\x0a');_0x165bde=_0x4530ea[_0xc400('0x48')][_0xc400('0x49')](function(_0x125625){return _0x125625&&_0x125625[_0xc400('0x4a')][0x0]&&_0x125625['alternatives'][0x0][_0xc400('0x4c')]?_0x125625[_0xc400('0x4a')][0x0][_0xc400('0x4c')]:0x0;})[_0xc400('0x4d')]('\x0a');}logger[_0xc400('0x20')]('googleASR\x20transcription',_0x347b71);logger[_0xc400('0x20')](_0xc400('0x4e'),_0x165bde);return{'transcript':_0x347b71,'confidence':_0x165bde};})[_0xc400('0x4f')](function(_0x8d88dd){logger['error'](_0xc400('0x50'),_0x8d88dd[_0xc400('0x10')],_0x8d88dd[_0xc400('0x51')],_0x8d88dd[_0xc400('0x52')]);});};exports[_0xc400('0x53')]=function(_0x3b493c,_0xf29434,_0x4045a9,_0x57813c){var _0x10d167=apiai(_0xf29434,{'language':_0x57813c||'en'});return _0x10d167[_0xc400('0x54')](_0x4045a9,{'sessionId':md5(_0x3b493c)})['then'](function(_0x3b0d4b){logger[_0xc400('0x20')](JSON['stringify'](_0x3b0d4b));return{'source':_0x3b0d4b[_0xc400('0x55')][_0xc400('0x56')],'resolvedQuery':_0x3b0d4b['result'][_0xc400('0x57')],'action':_0x3b0d4b[_0xc400('0x55')][_0xc400('0x58')],'actionIncomplete':_0x3b0d4b[_0xc400('0x55')][_0xc400('0x59')],'speech':_0x3b0d4b[_0xc400('0x55')][_0xc400('0x5a')][_0xc400('0x5b')],'score':_0x3b0d4b[_0xc400('0x55')][_0xc400('0x5c')],'statusCode':_0x3b0d4b[_0xc400('0x5d')][_0xc400('0x5e')],'endConversation':_0x3b0d4b['result']['metadata'][_0xc400('0x5f')]||![],'isFallbackIntent':_0x3b0d4b['result'][_0xc400('0x60')][_0xc400('0x61')]};});};exports['googleDialogflowV2']=function(_0x8c7ba2,_0x4bbf78,_0x28ddff,_0x2635c6,_0x485ea9,_0x3e8bd0){var _0x47897e=_0x2635c6[_0xc400('0x62')](/\\n/g,'\x0a');var _0x42e64a={'credentials':{'private_key':_0x47897e,'client_email':_0x28ddff}};var _0x1e1b48=new dialogflow[(_0xc400('0x63'))](_0x42e64a);var _0x20dff1=_0x1e1b48[_0xc400('0x64')](_0x4bbf78,md5(_0x8c7ba2));var _0x5a55cb={'session':_0x20dff1,'queryInput':{'text':{'text':_0x485ea9,'languageCode':_0x3e8bd0}}};return _0x1e1b48[_0xc400('0x65')](_0x5a55cb)[_0xc400('0x28')](function(_0x11ff1f){if(_0x11ff1f&&_0x11ff1f[_0xc400('0x41')]){logger['info']('Dialogflow\x20V2\x20response:',JSON[_0xc400('0x3c')](_0x11ff1f));var _0x3603c3=_0x11ff1f[0x0];if(_0x3603c3){var _0x5079d9={'action':_0x3603c3[_0xc400('0x66')][_0xc400('0x58')],'allRequiredParamsPresent':_0x3603c3[_0xc400('0x66')]['allRequiredParamsPresent'],'endConversation':_0x3603c3['queryResult']['diagnosticInfo']&&_0x3603c3[_0xc400('0x66')][_0xc400('0x67')]['fields']?_0x3603c3[_0xc400('0x66')][_0xc400('0x67')][_0xc400('0x68')][_0xc400('0x69')]['boolValue']:![],'fulfillmentText':_0x3603c3[_0xc400('0x66')][_0xc400('0x6a')],'intentName':_0x3603c3['queryResult'][_0xc400('0x6b')]['name'],'intentDisplayName':_0x3603c3['queryResult']['intent']['displayName'],'isFallbackIntent':_0x3603c3['queryResult'][_0xc400('0x6b')][_0xc400('0x6c')],'languageCode':_0x3603c3[_0xc400('0x66')][_0xc400('0x6d')],'queryText':_0x3603c3[_0xc400('0x66')]['queryText'],'responseId':_0x3603c3[_0xc400('0x6e')],'score':_0x3603c3['queryResult'][_0xc400('0x6f')],'speech':_0x3603c3['queryResult'][_0xc400('0x6a')],'providerResponse':JSON[_0xc400('0x3c')](_0x11ff1f)};return _0x5079d9;}}});};exports[_0xc400('0x70')]=function(_0x49d9f0,_0xe29def,_0x58d3bb,_0x3d15fc){return tilde['asr'](_0x49d9f0,_0xe29def,_0x58d3bb,_0x3d15fc)[_0xc400('0x28')](function(_0x48d288){try{fs[_0xc400('0x29')](_0x49d9f0);}catch(_0xcf73bf){logger[_0xc400('0x11')](_0xcf73bf);}logger[_0xc400('0x20')](_0xc400('0x71'),_0x48d288[_0xc400('0x4b')]);logger[_0xc400('0x20')](_0xc400('0x72'),_0x48d288[_0xc400('0x4c')]);return _0x48d288;});};exports['awsPolly']=function(_0x28e232,_0x48ae9f,_0xab229,_0x54f00c,_0xe19cb7,_0x2eb8c4){var _0x4eac00=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+_0xc400('0x44'));var _0x54655d;return aws[_0xc400('0x73')](_0x28e232,_0x48ae9f,_0xab229,_0x54f00c,_0xe19cb7,_0x2eb8c4,_0x4eac00)['then'](function(){_0x54655d=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.wav');return convertFile(_0x4eac00,_0x54655d);})[_0xc400('0x28')](function(){try{fs['unlink'](_0x4eac00);fs[_0xc400('0x2a')](_0x54655d,_0xc400('0x2b'));}catch(_0x5c45b5){logger[_0xc400('0x11')](_0x5c45b5);}return _0x54655d[_0xc400('0x2c')]('.')[0x0];});};exports[_0xc400('0x74')]=function(_0x14b0e2,_0x3214b1,_0x286515,_0x5b8d6b,_0x2e4f3d,_0x46f1df){return aws[_0xc400('0x75')](_0x14b0e2,_0x3214b1,_0x286515,_0x5b8d6b,_0x2e4f3d,_0x46f1df)[_0xc400('0x28')](function(_0x95b64f){logger['info'](JSON[_0xc400('0x3c')](_0x95b64f));return _0x95b64f;});};exports[_0xc400('0x76')]=function(_0x55ccd5,_0x350dc4,_0x13216f,_0x130fe4){var _0x15a840=util['format']('%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3',ISPEECH_API,_0x55ccd5,encodeURIComponent(_0x350dc4),_0x13216f,_0x130fe4);var _0x33dbee=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.mp3');var _0x545fc4;return downloadFile(_0x15a840,_0x33dbee)[_0xc400('0x28')](function(){_0x545fc4=path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+'.wav');return convertFile(_0x33dbee,_0x545fc4);})[_0xc400('0x28')](function(){try{fs[_0xc400('0x29')](_0x33dbee);fs[_0xc400('0x2a')](_0x545fc4,_0xc400('0x2b'));}catch(_0x54b5c7){logger[_0xc400('0x11')](_0x54b5c7);}return _0x545fc4[_0xc400('0x2c')]('.')[0x0];});};exports[_0xc400('0x77')]=function(_0x4c2952,_0x344818,_0x58293b,_0x5d9086){var _0xd569ce=util[_0xc400('0x78')](_0xc400('0x79'),ISPEECH_API,_0x344818,_0x58293b,base64Encode(_0x4c2952),_0x5d9086?util[_0xc400('0x78')](_0xc400('0x7a'),encodeURIComponent(_0x5d9086)):_0xc400('0x7b'));return uploadFile(_0xd569ce)['then'](function(_0x5109c2){return querystring[_0xc400('0x7c')](_0x5109c2);});};exports[_0xc400('0x7d')]=function(_0x15e796,_0x6228bd){return sestek[_0xc400('0x7e')](_0x15e796,_0x6228bd)[_0xc400('0x28')](function(_0x3a4707){logger[_0xc400('0x20')](JSON['stringify'](_0x3a4707));var _0x149b72={'speech':_0x3a4707['text'],'action':_0x3a4707[_0xc400('0x7f')]?_0x3a4707[_0xc400('0x7f')][_0xc400('0x80')]:undefined,'actiondata':_0x3a4707['channelData']?_0x3a4707[_0xc400('0x7f')][_0xc400('0x81')]:undefined};if(_0x3a4707['channelData']&&_0x3a4707[_0xc400('0x7f')][_0xc400('0x82')]){return base64Decode(_0x3a4707['channelData'][_0xc400('0x82')][_0xc400('0x83')],path[_0xc400('0x23')](__dirname,_0xc400('0x24'),rs[_0xc400('0x25')](0x4)+_0xc400('0x84')))[_0xc400('0x28')](function(_0x550a5a){_0x149b72[_0xc400('0x85')]=_0x550a5a;return _0x149b72;});}return _0x149b72;});};exports[_0xc400('0x86')]=function(){return __dirname;};