Built motion from commit (unavailable).|2.5.6
[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 _0x26f9=['./google','./aws','./tilde','./sestek','https:','WHAT_EVER','get','statusCode','\x20failed,\x20status\x20code\x20=\x20','statusMessage','createWriteStream','finish','info','finish\x20download\x20file','close','error','pipe','end','protocol','host','transcode','wav','resolve','tmp','generate','.wav','writeFileSync','base64','unlink','chmodSync','777','toString','googleCloudTTS','https://texttospeech.googleapis.com/v1/','?key=','ssml','input','voice','audioConfig','MP3','POST','then','.mp3','from','audioContent','writeFile','googleCloudTTS\x20path','googleTTS','goggleTTS\x20path','split','googleASR','asr','uri','results','map','alternatives','transcript','join','confidence','googleASR\x20confidence','catch','name','message','textRequest','stringify','result','resolvedQuery','actionIncomplete','fulfillment','speech','score','status','metadata','endConversation','isFallbackIntent','tildeASR','Tilde\x20ASR\x20confidence','awsPolly','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','sestekNDA','nda','text','channelData','CustomAction','CustomActionData','AudioFromTts','Data','dirName','path','https','url','parse','bluebird','randomstring','sox','request-promise','querystring','google-tts-api','apiai-promise','md5'];(function(_0x5805d7,_0x3d584a){var _0x170fe4=function(_0x3b9b73){while(--_0x3b9b73){_0x5805d7['push'](_0x5805d7['shift']());}};_0x170fe4(++_0x3d584a);}(_0x26f9,0xcc));var _0x926f=function(_0x45fb8f,_0x46da98){_0x45fb8f=_0x45fb8f-0x0;var _0x3d906b=_0x26f9[_0x45fb8f];return _0x3d906b;};'use strict';var fs=require('fs');var path=require(_0x926f('0x0'));var http=require('http');var https=require(_0x926f('0x1'));var urlParse=require(_0x926f('0x2'))[_0x926f('0x3')];var BPromise=require(_0x926f('0x4'));var rs=require(_0x926f('0x5'));var sox=require(_0x926f('0x6'));var rp=require(_0x926f('0x7'));var util=require('util');var querystring=require(_0x926f('0x8'));var tts=require(_0x926f('0x9'));var apiai=require(_0x926f('0xa'));var md5=require(_0x926f('0xb'));var google=require(_0x926f('0xc'));var aws=require(_0x926f('0xd'));var tilde=require(_0x926f('0xe'));var sestek=require(_0x926f('0xf'));var logger=require('../../../config/logger')('agi');var ISPEECH_API='https://api.ispeech.org/api/rest';function downloadFile(_0xe5be3b,_0x47bc6b){return new BPromise(function(_0x20de4d,_0x8d7e3){var _0x40fa25=urlParse(_0xe5be3b);var _0x3d8b32=_0x40fa25['protocol']===_0x926f('0x10')?https:http;var _0x4d5a11={'host':_0x40fa25['host'],'path':_0x40fa25[_0x926f('0x0')],'headers':{'user-agent':_0x926f('0x11')}};_0x3d8b32[_0x926f('0x12')](_0x4d5a11,function(_0x56781d){if(_0x56781d[_0x926f('0x13')]!==0xc8){logger['error']('request\x20to\x20'+_0xe5be3b+_0x926f('0x14')+_0x56781d[_0x926f('0x13')]+'\x20('+_0x56781d['statusMessage']+')');_0x8d7e3(new Error('request\x20to\x20'+_0xe5be3b+_0x926f('0x14')+_0x56781d[_0x926f('0x13')]+'\x20('+_0x56781d[_0x926f('0x15')]+')'));return;}var _0x1e2cca=fs[_0x926f('0x16')](_0x47bc6b);_0x1e2cca['on'](_0x926f('0x17'),function(){logger[_0x926f('0x18')](_0x926f('0x19'));_0x1e2cca[_0x926f('0x1a')](_0x20de4d);});_0x1e2cca['on']('error',function(_0x2c05b4){fs['unlink'](_0x47bc6b);logger[_0x926f('0x1b')]('download\x20error',_0x2c05b4);_0x8d7e3(_0x2c05b4);});_0x56781d[_0x926f('0x1c')](_0x1e2cca);})['on'](_0x926f('0x1b'),function(_0x2eb0b1){logger[_0x926f('0x1b')](_0x2eb0b1);_0x8d7e3(_0x2eb0b1);})[_0x926f('0x1d')]();});}function uploadFile(_0x69a0eb){return new BPromise(function(_0x332415,_0x1d5b69){var _0x16087b=urlParse(_0x69a0eb);var _0x410241=_0x16087b[_0x926f('0x1e')]==='https:'?https:http;var _0x253fc8={'host':_0x16087b[_0x926f('0x1f')],'path':_0x16087b[_0x926f('0x0')],'headers':{'user-agent':'WHAT_EVER'}};_0x410241[_0x926f('0x12')](_0x253fc8,function(_0x41debc){if(_0x41debc[_0x926f('0x13')]!==0xc8){_0x1d5b69(new Error('request\x20to\x20'+_0x69a0eb+'\x20failed,\x20status\x20code\x20=\x20'+_0x41debc[_0x926f('0x13')]+'\x20('+_0x41debc[_0x926f('0x15')]+')'));return;}var _0x3b906a='';_0x41debc['on']('data',function(_0x44d273){_0x3b906a+=_0x44d273;});_0x41debc['on'](_0x926f('0x1d'),function(){_0x332415(_0x3b906a);});})['on']('error',function(_0x47bb70){_0x1d5b69(_0x47bb70);})[_0x926f('0x1d')]();});}function convertFile(_0x46d556,_0x493654){return new BPromise(function(_0x513c5e,_0x2fe43e){var _0x383218=sox[_0x926f('0x20')](_0x46d556,_0x493654,{'sampleRate':0x1f40,'format':_0x926f('0x21'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x383218['on']('error',function(_0x11011b){logger['error']('error\x20convert',_0x11011b);_0x2fe43e(_0x11011b);});_0x383218['on'](_0x926f('0x1d'),function(){logger['info']('finish\x20to\x20convert');_0x513c5e();});_0x383218['start']();});}function base64Decode(_0x453423,_0x45ca96){var _0x18a814=path[_0x926f('0x22')](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+_0x926f('0x25'));fs[_0x926f('0x26')](_0x18a814,_0x453423,_0x926f('0x27'));return convertFile(_0x18a814,_0x45ca96)['then'](function(){try{fs[_0x926f('0x28')](_0x18a814);fs[_0x926f('0x29')](_0x45ca96,_0x926f('0x2a'));}catch(_0x5a02f3){logger[_0x926f('0x1b')](_0x5a02f3);}return _0x45ca96['split']('.')[0x0];});}function base64Encode(_0x3d22d6){var _0x3faa77=fs['readFileSync'](_0x3d22d6);return new Buffer(_0x3faa77)[_0x926f('0x2b')](_0x926f('0x27'));}exports[_0x926f('0x2c')]=function(_0x4ba44c,_0x26b388,_0x4e3225,_0x29d7c7,_0x30c1b1,_0x34c8ee){var _0x36fe2c,_0x5698cc;var _0x85ac84=_0x926f('0x2d');var _0x3a525b=_0x926f('0x2e')+_0x4ba44c;var _0x1acbbd={};if(_0x26b388===_0x926f('0x2f')){_0x1acbbd['input']={'ssml':_0x4e3225};}else{_0x1acbbd[_0x926f('0x30')]={'text':_0x4e3225};};_0x1acbbd[_0x926f('0x31')]={'languageCode':_0x29d7c7,'ssmlGender':_0x30c1b1};_0x1acbbd[_0x926f('0x32')]={'audioEncoding':_0x926f('0x33'),'sampleRateHertz':0x1f40};var _0x3763d6={'url':_0x85ac84+'text:synthesize'+_0x3a525b,'method':_0x926f('0x34'),'json':!![],'body':_0x1acbbd};return rp(_0x3763d6)[_0x926f('0x35')](function(_0x315dcd){return new BPromise(function(_0x4992f6,_0x5546fe){_0x36fe2c=path['resolve'](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+_0x926f('0x36'));var _0x24dc1e=Buffer[_0x926f('0x37')](_0x315dcd[_0x926f('0x38')],'base64');return fs[_0x926f('0x39')](_0x36fe2c,_0x24dc1e,function(_0x4359c2){_0x5546fe(_0x4359c2);},function(_0x10d283){fs[_0x926f('0x29')](_0x36fe2c,_0x926f('0x2a'));_0x4992f6(_0x10d283);});});})[_0x926f('0x35')](function(_0x5c80b7){_0x5698cc=path[_0x926f('0x22')](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+'.wav');return convertFile(_0x36fe2c,_0x5698cc);})[_0x926f('0x35')](function(){try{fs['unlink'](_0x36fe2c);fs[_0x926f('0x29')](_0x5698cc,'777');}catch(_0x1cc4b6){logger[_0x926f('0x1b')](_0x1cc4b6);}logger[_0x926f('0x18')](_0x926f('0x3a'),_0x5698cc['split']('.')[0x0]);return _0x5698cc['split']('.')[0x0];});};exports[_0x926f('0x3b')]=function(_0x3088b7,_0xa9344f){var _0x1dc26e,_0x2f651e;return tts(_0x3088b7,_0xa9344f||'en',0x1)[_0x926f('0x35')](function(_0x3b4e3c){logger['info'](_0x3b4e3c);_0x1dc26e=path[_0x926f('0x22')](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+_0x926f('0x36'));return downloadFile(_0x3b4e3c,_0x1dc26e);})[_0x926f('0x35')](function(){_0x2f651e=path['resolve'](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+'.wav');return convertFile(_0x1dc26e,_0x2f651e);})['then'](function(){try{fs[_0x926f('0x28')](_0x1dc26e);fs['chmodSync'](_0x2f651e,_0x926f('0x2a'));}catch(_0x1f07e5){logger['error'](_0x1f07e5);}logger[_0x926f('0x18')](_0x926f('0x3c'),_0x2f651e[_0x926f('0x3d')]('.')[0x0]);return _0x2f651e[_0x926f('0x3d')]('.')[0x0];});};exports[_0x926f('0x3e')]=function(_0x25705a,_0x576785,_0x51090b){return google[_0x926f('0x3f')](_0x25705a,_0x576785,_0x51090b)[_0x926f('0x35')](function(_0x2da23b){logger[_0x926f('0x18')](_0x2da23b[_0x926f('0x40')]);return rp(_0x2da23b);})[_0x926f('0x35')](function(_0x214c33){var _0x3e5f2d='';var _0x2770c4=0x0;try{fs['unlink'](_0x25705a);}catch(_0x5c65dd){logger[_0x926f('0x1b')](_0x5c65dd);}if(_0x214c33&&_0x214c33[_0x926f('0x41')]){_0x3e5f2d=_0x214c33[_0x926f('0x41')][_0x926f('0x42')](function(_0x3206ce){return _0x3206ce&&_0x3206ce[_0x926f('0x43')][0x0]&&_0x3206ce[_0x926f('0x43')][0x0][_0x926f('0x44')]?_0x3206ce['alternatives'][0x0][_0x926f('0x44')]:'';})[_0x926f('0x45')]('\x0a');_0x2770c4=_0x214c33[_0x926f('0x41')]['map'](function(_0x3eb7d6){return _0x3eb7d6&&_0x3eb7d6[_0x926f('0x43')][0x0]&&_0x3eb7d6['alternatives'][0x0][_0x926f('0x46')]?_0x3eb7d6[_0x926f('0x43')][0x0][_0x926f('0x46')]:0x0;})['join']('\x0a');}logger[_0x926f('0x18')]('googleASR\x20transcription',_0x3e5f2d);logger[_0x926f('0x18')](_0x926f('0x47'),_0x2770c4);return{'transcript':_0x3e5f2d,'confidence':_0x2770c4};})[_0x926f('0x48')](function(_0x504cb3){logger['error']('[%s]\x20%s:%s',_0x504cb3[_0x926f('0x13')],_0x504cb3[_0x926f('0x49')],_0x504cb3[_0x926f('0x4a')]);});};exports['googleDialogflow']=function(_0x2411cf,_0x3e6e25,_0x6c9830,_0x386af2){var _0x1c217a=apiai(_0x3e6e25,{'language':_0x386af2||'en'});return _0x1c217a[_0x926f('0x4b')](_0x6c9830,{'sessionId':md5(_0x2411cf)})['then'](function(_0x58b692){logger[_0x926f('0x18')](JSON[_0x926f('0x4c')](_0x58b692));return{'source':_0x58b692[_0x926f('0x4d')]['source'],'resolvedQuery':_0x58b692[_0x926f('0x4d')][_0x926f('0x4e')],'action':_0x58b692[_0x926f('0x4d')]['action'],'actionIncomplete':_0x58b692[_0x926f('0x4d')][_0x926f('0x4f')],'speech':_0x58b692['result'][_0x926f('0x50')][_0x926f('0x51')],'score':_0x58b692[_0x926f('0x4d')][_0x926f('0x52')],'statusCode':_0x58b692[_0x926f('0x53')]['code'],'endConversation':_0x58b692[_0x926f('0x4d')][_0x926f('0x54')][_0x926f('0x55')]||![],'isFallbackIntent':_0x58b692['result']['metadata'][_0x926f('0x56')]};});};exports[_0x926f('0x57')]=function(_0x528636,_0x32be74,_0x1009bd,_0x45c647){return tilde[_0x926f('0x3f')](_0x528636,_0x32be74,_0x1009bd,_0x45c647)['then'](function(_0x4a119c){try{fs[_0x926f('0x28')](_0x528636);}catch(_0xa3c62d){logger['error'](_0xa3c62d);}logger['info']('Tilde\x20ASR\x20transcription',_0x4a119c[_0x926f('0x44')]);logger['info'](_0x926f('0x58'),_0x4a119c[_0x926f('0x46')]);return _0x4a119c;});};exports[_0x926f('0x59')]=function(_0x53e953,_0x4478e3,_0x5b308a,_0x555104,_0x80d7ec,_0xe84514){var _0xbd7f4=path[_0x926f('0x22')](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+_0x926f('0x36'));var _0x525f14;return aws[_0x926f('0x5a')](_0x53e953,_0x4478e3,_0x5b308a,_0x555104,_0x80d7ec,_0xe84514,_0xbd7f4)[_0x926f('0x35')](function(){_0x525f14=path[_0x926f('0x22')](__dirname,'tmp',rs['generate'](0x4)+_0x926f('0x25'));return convertFile(_0xbd7f4,_0x525f14);})[_0x926f('0x35')](function(){try{fs[_0x926f('0x28')](_0xbd7f4);fs[_0x926f('0x29')](_0x525f14,_0x926f('0x2a'));}catch(_0x4bef77){logger[_0x926f('0x1b')](_0x4bef77);}return _0x525f14[_0x926f('0x3d')]('.')[0x0];});};exports[_0x926f('0x5b')]=function(_0x1976bb,_0x51666e,_0x478700,_0x217198,_0x3a1f94,_0x337ec3){return aws[_0x926f('0x5c')](_0x1976bb,_0x51666e,_0x478700,_0x217198,_0x3a1f94,_0x337ec3)[_0x926f('0x35')](function(_0x5a431f){logger[_0x926f('0x18')](JSON[_0x926f('0x4c')](_0x5a431f));return _0x5a431f;});};exports[_0x926f('0x5d')]=function(_0x3b9720,_0x566ffc,_0x4c71ea,_0x388958){var _0x4f90c5=util[_0x926f('0x5e')](_0x926f('0x5f'),ISPEECH_API,_0x3b9720,encodeURIComponent(_0x566ffc),_0x4c71ea,_0x388958);var _0x52e9ce=path['resolve'](__dirname,'tmp',rs[_0x926f('0x24')](0x4)+'.mp3');var _0x770944;return downloadFile(_0x4f90c5,_0x52e9ce)[_0x926f('0x35')](function(){_0x770944=path[_0x926f('0x22')](__dirname,_0x926f('0x23'),rs[_0x926f('0x24')](0x4)+'.wav');return convertFile(_0x52e9ce,_0x770944);})[_0x926f('0x35')](function(){try{fs['unlink'](_0x52e9ce);fs[_0x926f('0x29')](_0x770944,_0x926f('0x2a'));}catch(_0x49ddce){logger[_0x926f('0x1b')](_0x49ddce);}return _0x770944[_0x926f('0x3d')]('.')[0x0];});};exports[_0x926f('0x60')]=function(_0x5d6431,_0x2e2b9e,_0x4e790f,_0x7844a0){var _0x2e59d6=util[_0x926f('0x5e')](_0x926f('0x61'),ISPEECH_API,_0x2e2b9e,_0x4e790f,base64Encode(_0x5d6431),_0x7844a0?util[_0x926f('0x5e')](_0x926f('0x62'),encodeURIComponent(_0x7844a0)):'freeform=3');return uploadFile(_0x2e59d6)['then'](function(_0x40df5a){return querystring[_0x926f('0x3')](_0x40df5a);});};exports[_0x926f('0x63')]=function(_0x167285,_0x958e72){return sestek[_0x926f('0x64')](_0x167285,_0x958e72)['then'](function(_0x34c915){logger[_0x926f('0x18')](JSON['stringify'](_0x34c915));var _0x39d0fe={'speech':_0x34c915[_0x926f('0x65')],'action':_0x34c915[_0x926f('0x66')]?_0x34c915[_0x926f('0x66')][_0x926f('0x67')]:undefined,'actiondata':_0x34c915[_0x926f('0x66')]?_0x34c915[_0x926f('0x66')][_0x926f('0x68')]:undefined};if(_0x34c915[_0x926f('0x66')]&&_0x34c915[_0x926f('0x66')][_0x926f('0x69')]){return base64Decode(_0x34c915[_0x926f('0x66')][_0x926f('0x69')][_0x926f('0x6a')],path['resolve'](__dirname,'tmp',rs[_0x926f('0x24')](0x4)+_0x926f('0x25')))['then'](function(_0x33bcef){_0x39d0fe['audiofile']=_0x33bcef;return _0x39d0fe;});}return _0x39d0fe;});};exports[_0x926f('0x6b')]=function(){return __dirname;};