Built motion from commit (unavailable).|2.5.11
[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 _0x8b45=['fulfillment','speech','score','code','endConversation','metadata','isFallbackIntent','googleDialogflowV2','SessionsClient','detectIntent','length','Dialogflow\x20V2\x20response:','queryResult','diagnosticInfo','fields','end_conversation','boolValue','fulfillmentText','intent','displayName','isFallback','responseId','intentDetectionConfidence','tildeASR','Tilde\x20ASR\x20transcription','Tilde\x20ASR\x20confidence','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','model=%s','freeform=3','sestekNDA','channelData','CustomAction','CustomActionData','AudioFromTts','audiofile','dirName','apiai-promise','bluebird','dialogflow','http','https','md5','request-promise','parse','./aws','./google','./sestek','./tilde','https://api.ispeech.org/api/rest','protocol','https:','path','WHAT_EVER','get','error','\x20failed,\x20status\x20code\x20=\x20','statusCode','statusMessage','request\x20to\x20','finish','finish\x20download\x20file','close','download\x20error','end','host','data','transcode','error\x20convert','info','finish\x20to\x20convert','start','resolve','tmp','writeFileSync','then','chmodSync','777','split','toString','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','audioConfig','MP3','text:synthesize','POST','.mp3','from','audioContent','writeFile','generate','.wav','unlink','googleTTS','goggleTTS\x20path','googleASR','asr','uri','results','map','alternatives','transcript','join','confidence','googleASR\x20confidence','[%s]\x20%s:%s','name','message','googleDialogflow','stringify','result','source','action','actionIncomplete'];(function(_0xfedf0,_0x5cbcba){var _0x4f35c7=function(_0x4bd6d1){while(--_0x4bd6d1){_0xfedf0['push'](_0xfedf0['shift']());}};_0x4f35c7(++_0x5cbcba);}(_0x8b45,0xa6));var _0x58b4=function(_0x137c43,_0x18b102){_0x137c43=_0x137c43-0x0;var _0x5a38f4=_0x8b45[_0x137c43];return _0x5a38f4;};'use strict';var apiai=require(_0x58b4('0x0'));var BPromise=require(_0x58b4('0x1'));var dialogflow=require(_0x58b4('0x2'));var fs=require('fs');var http=require(_0x58b4('0x3'));var https=require(_0x58b4('0x4'));var md5=require(_0x58b4('0x5'));var path=require('path');var querystring=require('querystring');var rp=require(_0x58b4('0x6'));var rs=require('randomstring');var sox=require('sox');var tts=require('google-tts-api');var urlParse=require('url')[_0x58b4('0x7')];var util=require('util');var aws=require(_0x58b4('0x8'));var google=require(_0x58b4('0x9'));var sestek=require(_0x58b4('0xa'));var tilde=require(_0x58b4('0xb'));var logger=require('../../../config/logger')('agi');var ISPEECH_API=_0x58b4('0xc');function downloadFile(_0x3c135c,_0x2a1dfa){return new BPromise(function(_0x5d6d7f,_0x480bda){var _0x5c81c6=urlParse(_0x3c135c);var _0x4a540e=_0x5c81c6[_0x58b4('0xd')]===_0x58b4('0xe')?https:http;var _0x56908d={'host':_0x5c81c6['host'],'path':_0x5c81c6[_0x58b4('0xf')],'headers':{'user-agent':_0x58b4('0x10')}};_0x4a540e[_0x58b4('0x11')](_0x56908d,function(_0x50ca1f){if(_0x50ca1f['statusCode']!==0xc8){logger[_0x58b4('0x12')]('request\x20to\x20'+_0x3c135c+_0x58b4('0x13')+_0x50ca1f[_0x58b4('0x14')]+'\x20('+_0x50ca1f[_0x58b4('0x15')]+')');_0x480bda(new Error(_0x58b4('0x16')+_0x3c135c+_0x58b4('0x13')+_0x50ca1f['statusCode']+'\x20('+_0x50ca1f[_0x58b4('0x15')]+')'));return;}var _0x488c74=fs['createWriteStream'](_0x2a1dfa);_0x488c74['on'](_0x58b4('0x17'),function(){logger['info'](_0x58b4('0x18'));_0x488c74[_0x58b4('0x19')](_0x5d6d7f);});_0x488c74['on'](_0x58b4('0x12'),function(_0x3bb57e){fs['unlink'](_0x2a1dfa);logger[_0x58b4('0x12')](_0x58b4('0x1a'),_0x3bb57e);_0x480bda(_0x3bb57e);});_0x50ca1f['pipe'](_0x488c74);})['on']('error',function(_0x58fe92){logger[_0x58b4('0x12')](_0x58fe92);_0x480bda(_0x58fe92);})[_0x58b4('0x1b')]();});}function uploadFile(_0x520978){return new BPromise(function(_0x40f33c,_0x28ceef){var _0x346795=urlParse(_0x520978);var _0x2e725c=_0x346795[_0x58b4('0xd')]===_0x58b4('0xe')?https:http;var _0x583833={'host':_0x346795[_0x58b4('0x1c')],'path':_0x346795[_0x58b4('0xf')],'headers':{'user-agent':_0x58b4('0x10')}};_0x2e725c['get'](_0x583833,function(_0x737a9d){if(_0x737a9d[_0x58b4('0x14')]!==0xc8){_0x28ceef(new Error('request\x20to\x20'+_0x520978+'\x20failed,\x20status\x20code\x20=\x20'+_0x737a9d[_0x58b4('0x14')]+'\x20('+_0x737a9d[_0x58b4('0x15')]+')'));return;}var _0x7eb9d6='';_0x737a9d['on'](_0x58b4('0x1d'),function(_0x48e8db){_0x7eb9d6+=_0x48e8db;});_0x737a9d['on'](_0x58b4('0x1b'),function(){_0x40f33c(_0x7eb9d6);});})['on']('error',function(_0x190bb3){_0x28ceef(_0x190bb3);})['end']();});}function convertFile(_0xf99b15,_0x54937d){return new BPromise(function(_0x2fd55f,_0x2ea73d){var _0x4bf7ad=sox[_0x58b4('0x1e')](_0xf99b15,_0x54937d,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x4bf7ad['on'](_0x58b4('0x12'),function(_0x417be6){logger[_0x58b4('0x12')](_0x58b4('0x1f'),_0x417be6);_0x2ea73d(_0x417be6);});_0x4bf7ad['on'](_0x58b4('0x1b'),function(){logger[_0x58b4('0x20')](_0x58b4('0x21'));_0x2fd55f();});_0x4bf7ad[_0x58b4('0x22')]();});}function base64Decode(_0x4afbf1,_0x2cbec1){var _0x3942e6=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs['generate'](0x4)+'.wav');fs[_0x58b4('0x25')](_0x3942e6,_0x4afbf1,'base64');return convertFile(_0x3942e6,_0x2cbec1)[_0x58b4('0x26')](function(){try{fs['unlink'](_0x3942e6);fs[_0x58b4('0x27')](_0x2cbec1,_0x58b4('0x28'));}catch(_0x46a613){logger[_0x58b4('0x12')](_0x46a613);}return _0x2cbec1[_0x58b4('0x29')]('.')[0x0];});}function base64Encode(_0x18ada7){var _0x34ff7d=fs['readFileSync'](_0x18ada7);return new Buffer(_0x34ff7d)[_0x58b4('0x2a')]('base64');}exports[_0x58b4('0x2b')]=function(_0x423e7b,_0x2f1b11,_0x2a90eb,_0x58321d,_0x2cc6b7,_0x538644){var _0x1681d0,_0x3a4186;var _0x4d521a=_0x58b4('0x2c');var _0x2687cc=_0x58b4('0x2d')+_0x423e7b;var _0xfa96d4={};if(_0x2f1b11===_0x58b4('0x2e')){_0xfa96d4['input']={'ssml':_0x2a90eb};}else{_0xfa96d4[_0x58b4('0x2f')]={'text':_0x2a90eb};};_0xfa96d4['voice']={'languageCode':_0x58321d,'ssmlGender':_0x2cc6b7};_0xfa96d4[_0x58b4('0x30')]={'audioEncoding':_0x58b4('0x31'),'sampleRateHertz':0x1f40};var _0x17a024={'url':_0x4d521a+_0x58b4('0x32')+_0x2687cc,'method':_0x58b4('0x33'),'json':!![],'body':_0xfa96d4};return rp(_0x17a024)[_0x58b4('0x26')](function(_0xc2327e){return new BPromise(function(_0x32e10d,_0x5c1c28){_0x1681d0=path[_0x58b4('0x23')](__dirname,'tmp',rs['generate'](0x4)+_0x58b4('0x34'));var _0x5ac122=Buffer[_0x58b4('0x35')](_0xc2327e[_0x58b4('0x36')],'base64');return fs[_0x58b4('0x37')](_0x1681d0,_0x5ac122,function(_0x76736c){_0x5c1c28(_0x76736c);},function(_0x31be91){fs[_0x58b4('0x27')](_0x1681d0,_0x58b4('0x28'));_0x32e10d(_0x31be91);});});})[_0x58b4('0x26')](function(_0xad4bf5){_0x3a4186=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs[_0x58b4('0x38')](0x4)+_0x58b4('0x39'));return convertFile(_0x1681d0,_0x3a4186);})['then'](function(){try{fs[_0x58b4('0x3a')](_0x1681d0);fs['chmodSync'](_0x3a4186,'777');}catch(_0x35c2ed){logger[_0x58b4('0x12')](_0x35c2ed);}logger[_0x58b4('0x20')]('googleCloudTTS\x20path',_0x3a4186[_0x58b4('0x29')]('.')[0x0]);return _0x3a4186[_0x58b4('0x29')]('.')[0x0];});};exports[_0x58b4('0x3b')]=function(_0x50e599,_0x3984b2){var _0x166728,_0x7ab6ae;return tts(_0x50e599,_0x3984b2||'en',0x1)[_0x58b4('0x26')](function(_0x5e537d){logger['info'](_0x5e537d);_0x166728=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs[_0x58b4('0x38')](0x4)+_0x58b4('0x34'));return downloadFile(_0x5e537d,_0x166728);})[_0x58b4('0x26')](function(){_0x7ab6ae=path[_0x58b4('0x23')](__dirname,'tmp',rs[_0x58b4('0x38')](0x4)+_0x58b4('0x39'));return convertFile(_0x166728,_0x7ab6ae);})[_0x58b4('0x26')](function(){try{fs['unlink'](_0x166728);fs[_0x58b4('0x27')](_0x7ab6ae,_0x58b4('0x28'));}catch(_0x76cdf6){logger[_0x58b4('0x12')](_0x76cdf6);}logger[_0x58b4('0x20')](_0x58b4('0x3c'),_0x7ab6ae[_0x58b4('0x29')]('.')[0x0]);return _0x7ab6ae[_0x58b4('0x29')]('.')[0x0];});};exports[_0x58b4('0x3d')]=function(_0x35607d,_0x24a7b7,_0x2fc255){return google[_0x58b4('0x3e')](_0x35607d,_0x24a7b7,_0x2fc255)[_0x58b4('0x26')](function(_0x26c3ad){logger['info'](_0x26c3ad[_0x58b4('0x3f')]);return rp(_0x26c3ad);})[_0x58b4('0x26')](function(_0x15f499){var _0x57abf9='';var _0xf0abda=0x0;try{fs[_0x58b4('0x3a')](_0x35607d);}catch(_0x3c15fd){logger[_0x58b4('0x12')](_0x3c15fd);}if(_0x15f499&&_0x15f499[_0x58b4('0x40')]){_0x57abf9=_0x15f499['results'][_0x58b4('0x41')](function(_0x4a8a4e){return _0x4a8a4e&&_0x4a8a4e[_0x58b4('0x42')][0x0]&&_0x4a8a4e['alternatives'][0x0][_0x58b4('0x43')]?_0x4a8a4e[_0x58b4('0x42')][0x0][_0x58b4('0x43')]:'';})[_0x58b4('0x44')]('\x0a');_0xf0abda=_0x15f499[_0x58b4('0x40')][_0x58b4('0x41')](function(_0x451a3f){return _0x451a3f&&_0x451a3f['alternatives'][0x0]&&_0x451a3f[_0x58b4('0x42')][0x0][_0x58b4('0x45')]?_0x451a3f[_0x58b4('0x42')][0x0]['confidence']:0x0;})[_0x58b4('0x44')]('\x0a');}logger[_0x58b4('0x20')]('googleASR\x20transcription',_0x57abf9);logger['info'](_0x58b4('0x46'),_0xf0abda);return{'transcript':_0x57abf9,'confidence':_0xf0abda};})['catch'](function(_0x3684b6){logger[_0x58b4('0x12')](_0x58b4('0x47'),_0x3684b6[_0x58b4('0x14')],_0x3684b6[_0x58b4('0x48')],_0x3684b6[_0x58b4('0x49')]);});};exports[_0x58b4('0x4a')]=function(_0x3e8794,_0x449c55,_0xe28008,_0x26d7f0){var _0x4bc6bc=apiai(_0x449c55,{'language':_0x26d7f0||'en'});return _0x4bc6bc['textRequest'](_0xe28008,{'sessionId':md5(_0x3e8794)})[_0x58b4('0x26')](function(_0x1f6b48){logger[_0x58b4('0x20')](JSON[_0x58b4('0x4b')](_0x1f6b48));return{'source':_0x1f6b48[_0x58b4('0x4c')][_0x58b4('0x4d')],'resolvedQuery':_0x1f6b48[_0x58b4('0x4c')]['resolvedQuery'],'action':_0x1f6b48[_0x58b4('0x4c')][_0x58b4('0x4e')],'actionIncomplete':_0x1f6b48[_0x58b4('0x4c')][_0x58b4('0x4f')],'speech':_0x1f6b48['result'][_0x58b4('0x50')][_0x58b4('0x51')],'score':_0x1f6b48[_0x58b4('0x4c')][_0x58b4('0x52')],'statusCode':_0x1f6b48['status'][_0x58b4('0x53')],'endConversation':_0x1f6b48['result']['metadata'][_0x58b4('0x54')]||![],'isFallbackIntent':_0x1f6b48[_0x58b4('0x4c')][_0x58b4('0x55')][_0x58b4('0x56')]};});};exports[_0x58b4('0x57')]=function(_0x4ff43e,_0x5bd6ae,_0x473884,_0x3e7ab8,_0x86ef7d,_0x2ab41b){var _0x16fdb3=_0x3e7ab8['replace'](/\\n/g,'\x0a');var _0x314456={'credentials':{'private_key':_0x16fdb3,'client_email':_0x473884}};var _0x3a8690=new dialogflow[(_0x58b4('0x58'))](_0x314456);var _0x17380a=_0x3a8690['sessionPath'](_0x5bd6ae,md5(_0x4ff43e));var _0x30ac7c={'session':_0x17380a,'queryInput':{'text':{'text':_0x86ef7d,'languageCode':_0x2ab41b}}};return _0x3a8690[_0x58b4('0x59')](_0x30ac7c)[_0x58b4('0x26')](function(_0x25609c){if(_0x25609c&&_0x25609c[_0x58b4('0x5a')]){logger[_0x58b4('0x20')](_0x58b4('0x5b'),JSON[_0x58b4('0x4b')](_0x25609c));var _0x5ebaa6=_0x25609c[0x0];if(_0x5ebaa6){var _0x1955e3={'action':_0x5ebaa6['queryResult'][_0x58b4('0x4e')],'allRequiredParamsPresent':_0x5ebaa6[_0x58b4('0x5c')]['allRequiredParamsPresent'],'endConversation':_0x5ebaa6[_0x58b4('0x5c')]['diagnosticInfo']&&_0x5ebaa6[_0x58b4('0x5c')]['diagnosticInfo']['fields']?_0x5ebaa6['queryResult'][_0x58b4('0x5d')][_0x58b4('0x5e')][_0x58b4('0x5f')][_0x58b4('0x60')]:![],'fulfillmentText':_0x5ebaa6[_0x58b4('0x5c')][_0x58b4('0x61')],'intentName':_0x5ebaa6['queryResult'][_0x58b4('0x62')][_0x58b4('0x48')],'intentDisplayName':_0x5ebaa6[_0x58b4('0x5c')][_0x58b4('0x62')][_0x58b4('0x63')],'isFallbackIntent':_0x5ebaa6[_0x58b4('0x5c')][_0x58b4('0x62')][_0x58b4('0x64')],'languageCode':_0x5ebaa6[_0x58b4('0x5c')]['languageCode'],'queryText':_0x5ebaa6[_0x58b4('0x5c')]['queryText'],'responseId':_0x5ebaa6[_0x58b4('0x65')],'score':_0x5ebaa6[_0x58b4('0x5c')][_0x58b4('0x66')],'speech':_0x5ebaa6[_0x58b4('0x5c')][_0x58b4('0x61')],'providerResponse':JSON[_0x58b4('0x4b')](_0x25609c)};return _0x1955e3;}}});};exports[_0x58b4('0x67')]=function(_0x154620,_0x43657e,_0x4ef3a1,_0x489cb0){return tilde[_0x58b4('0x3e')](_0x154620,_0x43657e,_0x4ef3a1,_0x489cb0)[_0x58b4('0x26')](function(_0x1bc133){try{fs[_0x58b4('0x3a')](_0x154620);}catch(_0x1239e){logger[_0x58b4('0x12')](_0x1239e);}logger[_0x58b4('0x20')](_0x58b4('0x68'),_0x1bc133['transcript']);logger[_0x58b4('0x20')](_0x58b4('0x69'),_0x1bc133['confidence']);return _0x1bc133;});};exports['awsPolly']=function(_0x156594,_0x2c5694,_0x5cb00a,_0x7a5e15,_0x122e56,_0x14f396){var _0x36a4b5=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs[_0x58b4('0x38')](0x4)+_0x58b4('0x34'));var _0x5d6bae;return aws[_0x58b4('0x6a')](_0x156594,_0x2c5694,_0x5cb00a,_0x7a5e15,_0x122e56,_0x14f396,_0x36a4b5)[_0x58b4('0x26')](function(){_0x5d6bae=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs['generate'](0x4)+_0x58b4('0x39'));return convertFile(_0x36a4b5,_0x5d6bae);})[_0x58b4('0x26')](function(){try{fs['unlink'](_0x36a4b5);fs[_0x58b4('0x27')](_0x5d6bae,'777');}catch(_0x31c0c1){logger[_0x58b4('0x12')](_0x31c0c1);}return _0x5d6bae['split']('.')[0x0];});};exports[_0x58b4('0x6b')]=function(_0x50619d,_0x500eac,_0x5b95b3,_0xb37118,_0x3ad7ca,_0x337690){return aws[_0x58b4('0x6c')](_0x50619d,_0x500eac,_0x5b95b3,_0xb37118,_0x3ad7ca,_0x337690)[_0x58b4('0x26')](function(_0x3e7098){logger[_0x58b4('0x20')](JSON['stringify'](_0x3e7098));return _0x3e7098;});};exports[_0x58b4('0x6d')]=function(_0x4e4e0c,_0x1abf6a,_0x5bee34,_0x2f6853){var _0x3ed983=util[_0x58b4('0x6e')](_0x58b4('0x6f'),ISPEECH_API,_0x4e4e0c,encodeURIComponent(_0x1abf6a),_0x5bee34,_0x2f6853);var _0x35fa55=path['resolve'](__dirname,_0x58b4('0x24'),rs[_0x58b4('0x38')](0x4)+_0x58b4('0x34'));var _0x454236;return downloadFile(_0x3ed983,_0x35fa55)[_0x58b4('0x26')](function(){_0x454236=path[_0x58b4('0x23')](__dirname,_0x58b4('0x24'),rs[_0x58b4('0x38')](0x4)+_0x58b4('0x39'));return convertFile(_0x35fa55,_0x454236);})[_0x58b4('0x26')](function(){try{fs[_0x58b4('0x3a')](_0x35fa55);fs[_0x58b4('0x27')](_0x454236,_0x58b4('0x28'));}catch(_0x434d2a){logger[_0x58b4('0x12')](_0x434d2a);}return _0x454236[_0x58b4('0x29')]('.')[0x0];});};exports[_0x58b4('0x70')]=function(_0x229b7d,_0x47fe15,_0x24cf21,_0xb568f0){var _0x3d04e1=util[_0x58b4('0x6e')](_0x58b4('0x71'),ISPEECH_API,_0x47fe15,_0x24cf21,base64Encode(_0x229b7d),_0xb568f0?util['format'](_0x58b4('0x72'),encodeURIComponent(_0xb568f0)):_0x58b4('0x73'));return uploadFile(_0x3d04e1)[_0x58b4('0x26')](function(_0x2a5c48){return querystring['parse'](_0x2a5c48);});};exports[_0x58b4('0x74')]=function(_0x221bd2,_0x349a19){return sestek['nda'](_0x221bd2,_0x349a19)[_0x58b4('0x26')](function(_0x53fab3){logger['info'](JSON[_0x58b4('0x4b')](_0x53fab3));var _0x420d1a={'speech':_0x53fab3['text'],'action':_0x53fab3[_0x58b4('0x75')]?_0x53fab3['channelData'][_0x58b4('0x76')]:undefined,'actiondata':_0x53fab3[_0x58b4('0x75')]?_0x53fab3['channelData'][_0x58b4('0x77')]:undefined};if(_0x53fab3[_0x58b4('0x75')]&&_0x53fab3[_0x58b4('0x75')][_0x58b4('0x78')]){return base64Decode(_0x53fab3[_0x58b4('0x75')]['AudioFromTts']['Data'],path['resolve'](__dirname,'tmp',rs['generate'](0x4)+_0x58b4('0x39')))[_0x58b4('0x26')](function(_0x1e44fd){_0x420d1a[_0x58b4('0x79')]=_0x1e44fd;return _0x420d1a;});}return _0x420d1a;});};exports[_0x58b4('0x7a')]=function(){return __dirname;};