37cd51424ae6421040a042d0def3c1a26c3d09db
[motion2.git] / server / config / schedule / transcribe.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 _0xe9f9=['Mixed','catch','name','[RECORDING:%d]\x20Error\x20running\x20Transcribe\x20&\x20Sentiment\x20Analysis','VoiceRecording','findAll','IN_PROGRESS','No\x20transcribe\x20job\x20to\x20check','Setting','Settings\x20not\x20available','transcribe','Transcribe\x20not\x20configured','transcribeAccountId','forEach','push','all','SequelizeValidationError','lodash','request-promise','util','bluebird','../../mysqldb','../../config/logger','TranscribeService','getTranscriptionJob','Comprehend','detectSentiment','info','transcribeName','data1','data2','transcribeRegion','then','[RECORDING:%d]\x20Status\x20of\x20transcript\x20job\x20(%s):\x20%s','fileText','TranscriptionJob','TranscriptionJobStatus','COMPLETED','TranscriptFileUri','format','[RECORDING:%d]\x20Get\x20transcript','[RECORDING:%d]\x20Transcript\x20downloaded','results','transcripts','length','[RECORDING:%d]\x20Voice\x20Recording\x20entry\x20updated','Sequelize','ValidationError','Sentiment\x20Analysis\x20not\x20requested','sentimentAccountId','sentimentRegion','language','Sentiment\x20Analysis\x20not\x20configured','Transcript\x20not\x20available','CloudProvider','findOne','Cloud\x20Provider\x20not\x20configured','[RECORDING:%d]\x20Requesting\x20sentiment\x20analysis','Positive','SentimentScore','Neutral','FAILED','update','FailureReason','[RECORDING:%d]\x20Transcript\x20Job\x20status\x20not\x20managed','resolve','sentiment','bucket','Cloud\x20Provider\x20not\x20available','[RECORDING:%d]\x20Sentiment\x20Analysis\x20available','Negative'];(function(_0x1f40ff,_0x447764){var _0x5efa13=function(_0x4a34c7){while(--_0x4a34c7){_0x1f40ff['push'](_0x1f40ff['shift']());}};_0x5efa13(++_0x447764);}(_0xe9f9,0x174));var _0x9e9f=function(_0x5c2400,_0x32146e){_0x5c2400=_0x5c2400-0x0;var _0x351583=_0xe9f9[_0x5c2400];return _0x351583;};var _=require(_0x9e9f('0x0'));var AWS=require('aws-sdk');var rp=require(_0x9e9f('0x1'));var util=require(_0x9e9f('0x2'));var BPromise=require(_0x9e9f('0x3'));var db=require(_0x9e9f('0x4'))['db'];var logger=require(_0x9e9f('0x5'))('transcribe');function getTranscriptionJob(_0x2020b3,_0x47f4c7,_0x372526,_0xde96fc){return new Promise(function(_0x549ea5,_0x32da7a){var _0x54f87c=new AWS[(_0x9e9f('0x6'))]({'accessKeyId':_0x47f4c7,'secretAccessKey':_0x2020b3,'region':_0x372526});_0x54f87c[_0x9e9f('0x7')]({'TranscriptionJobName':_0xde96fc},function(_0x10d43b,_0x5256b3){if(_0x10d43b){return _0x32da7a(_0x10d43b);}else{return _0x549ea5(_0x5256b3);}});});}function sentiment(_0x1170bb,_0x3a4291,_0x2e1e8e,_0x29aebc,_0xa837dd){return new Promise(function(_0x140b9b,_0x54a20a){var _0x18faca=new AWS[(_0x9e9f('0x8'))]({'accessKeyId':_0x3a4291,'secretAccessKey':_0x1170bb,'region':_0x2e1e8e});_0x18faca[_0x9e9f('0x9')]({'Text':_0x29aebc,'LanguageCode':_0xa837dd['substring'](0x0,0x2)},function(_0x3db1c7,_0x1997f5){if(_0x3db1c7){return _0x54a20a(_0x3db1c7);}else{return _0x140b9b(_0x1997f5);}});});}function checkTranscribeJob(_0x38aaf8,_0x43603d,_0x1320b2){var _0x35a622;return new BPromise(function(_0x52c423,_0x35e630){logger[_0x9e9f('0xa')](util['format']('[RECORDING:%d]\x20Get\x20status\x20for\x20transcript\x20job\x20(%s)',_0x38aaf8['id'],_0x38aaf8[_0x9e9f('0xb')]));return getTranscriptionJob(_0x1320b2[_0x9e9f('0xc')],_0x1320b2[_0x9e9f('0xd')],_0x43603d[_0x9e9f('0xe')],_0x38aaf8[_0x9e9f('0xb')])[_0x9e9f('0xf')](function(_0x4c5d54){logger[_0x9e9f('0xa')](util['format'](_0x9e9f('0x10'),_0x38aaf8['id'],_0x38aaf8['transcribeName'],_0x4c5d54['TranscriptionJob']['TranscriptionJobStatus']));if(!_0x38aaf8[_0x9e9f('0x11')]){switch(_0x4c5d54[_0x9e9f('0x12')][_0x9e9f('0x13')]){case _0x9e9f('0x14'):var _0x4d3a5f={'transcribeStatus':_0x4c5d54[_0x9e9f('0x12')][_0x9e9f('0x13')],'fileUri':_0x4c5d54[_0x9e9f('0x12')]['Transcript'][_0x9e9f('0x15')]};logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x17'),_0x38aaf8['id']));return rp({'uri':_0x4c5d54['TranscriptionJob']['Transcript'][_0x9e9f('0x15')],'json':!![]})[_0x9e9f('0xf')](function(_0x54f288){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x18'),_0x38aaf8['id']));if(_0x54f288&&_0x54f288[_0x9e9f('0x19')]&&_0x54f288['results'][_0x9e9f('0x1a')]&&_0x54f288[_0x9e9f('0x19')]['transcripts']['length']){_0x4d3a5f[_0x9e9f('0x11')]='';for(var _0x2ea441=0x0;_0x2ea441<_0x54f288['results'][_0x9e9f('0x1a')][_0x9e9f('0x1b')];_0x2ea441++){_0x4d3a5f['fileText']+=_0x54f288[_0x9e9f('0x19')][_0x9e9f('0x1a')][_0x2ea441]['transcript']+'';}}return _0x38aaf8['update'](_0x4d3a5f);})[_0x9e9f('0xf')](function(){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x1c'),_0x38aaf8['id']));if(!_0x38aaf8['tempSentiment']){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x1f'));}if(!_0x43603d['sentiment']||!_0x43603d[_0x9e9f('0x20')]||!_0x43603d[_0x9e9f('0x21')]||!_0x43603d[_0x9e9f('0x22')]||!_0x43603d['bucket']){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x23'));}if(!_0x4d3a5f[_0x9e9f('0x11')]){throw new Error(_0x9e9f('0x24'));}if(_0x43603d[_0x9e9f('0x20')]===_0x1320b2['id']){return _0x1320b2;}else{return db[_0x9e9f('0x25')][_0x9e9f('0x26')]({'where':{'id':_settings['sentimentAccountId']}});}})[_0x9e9f('0xf')](function(_0x1a46d3){if(!_0x1a46d3){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))]('Cloud\x20Provider\x20not\x20available');}if(!_0x1a46d3[_0x9e9f('0xc')]||!_0x1a46d3[_0x9e9f('0xd')]){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x27'));}_0x35a622=_0x1a46d3;logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x28'),_0x38aaf8['id']));return sentiment(_0x35a622[_0x9e9f('0xc')],_0x35a622[_0x9e9f('0xd')],_0x43603d[_0x9e9f('0x21')],_0x4d3a5f[_0x9e9f('0x11')],_0x43603d[_0x9e9f('0x22')]);})[_0x9e9f('0xf')](function(_0x41b153){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')]('[RECORDING:%d]\x20Sentiment\x20Analysis\x20available',_0x38aaf8['id']));return _0x38aaf8['update']({'sentiment':_0x41b153['Sentiment'],'sPositive':_0x41b153['SentimentScore'][_0x9e9f('0x29')],'sNegative':_0x41b153[_0x9e9f('0x2a')]['Negative'],'sMixed':_0x41b153[_0x9e9f('0x2a')]['Mixed'],'sNeutral':_0x41b153[_0x9e9f('0x2a')][_0x9e9f('0x2b')]});})[_0x9e9f('0xf')](function(){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x1c'),_0x38aaf8['id']));_0x52c423();});case _0x9e9f('0x2c'):return _0x38aaf8[_0x9e9f('0x2d')]({'transcribeStatus':_0x9e9f('0x2c'),'failureReason':_0x4c5d54[_0x9e9f('0x12')][_0x9e9f('0x2e')]})[_0x9e9f('0xf')](function(){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x1c'),_0x38aaf8['id']));_0x52c423();});default:logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x2f'),_0x38aaf8['id']));break;}}else{return BPromise[_0x9e9f('0x30')]()[_0x9e9f('0xf')](function(){if(!_0x38aaf8['tempSentiment']){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))]('Sentiment\x20Analysis\x20not\x20requested');}if(!_0x43603d[_0x9e9f('0x31')]||!_0x43603d[_0x9e9f('0x20')]||!_0x43603d[_0x9e9f('0x21')]||!_0x43603d[_0x9e9f('0x22')]||!_0x43603d[_0x9e9f('0x32')]){throw new db['Sequelize']['ValidationError'](_0x9e9f('0x23'));}if(!_0x38aaf8['fileText']){throw new Error(_0x9e9f('0x24'));}if(_0x43603d[_0x9e9f('0x20')]===_0x1320b2['id']){return _0x1320b2;}else{return db[_0x9e9f('0x25')]['findOne']({'where':{'id':_settings[_0x9e9f('0x20')]}});}})['then'](function(_0x3f4fb9){if(!_0x3f4fb9){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x33'));}if(!_0x3f4fb9[_0x9e9f('0xc')]||!_0x3f4fb9[_0x9e9f('0xd')]){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x27'));}_0x35a622=_0x3f4fb9;logger['info'](util[_0x9e9f('0x16')](_0x9e9f('0x28'),_0x38aaf8['id']));return sentiment(_0x35a622[_0x9e9f('0xc')],_0x35a622[_0x9e9f('0xd')],_0x43603d['sentimentRegion'],_0x38aaf8['fileText'],_0x43603d[_0x9e9f('0x22')]);})['then'](function(_0x4ef460){logger[_0x9e9f('0xa')](util['format'](_0x9e9f('0x34'),_0x38aaf8['id']));return _0x38aaf8[_0x9e9f('0x2d')]({'sentiment':_0x4ef460['Sentiment'],'sPositive':_0x4ef460[_0x9e9f('0x2a')]['Positive'],'sNegative':_0x4ef460[_0x9e9f('0x2a')][_0x9e9f('0x35')],'sMixed':_0x4ef460[_0x9e9f('0x2a')][_0x9e9f('0x36')],'sNeutral':_0x4ef460[_0x9e9f('0x2a')]['Neutral'],'transcribeStatus':_0x9e9f('0x14')});})[_0x9e9f('0xf')](function(){logger[_0x9e9f('0xa')](util[_0x9e9f('0x16')](_0x9e9f('0x1c'),_0x38aaf8['id']));_0x52c423();});}})[_0x9e9f('0x37')](function(_0x3889ff){if(_0x3889ff){if(!_0x3889ff[_0x9e9f('0x38')]||_0x3889ff[_0x9e9f('0x38')]!=='SequelizeValidationError'){logger['error'](util[_0x9e9f('0x16')](_0x9e9f('0x39'),_0x38aaf8['id']),util['inspect'](_0x3889ff,{'showHidden':![],'depth':null}));}}_0x52c423();});});}function checkTranscribe(){var _0x2c9ada;var _0x44e631;var _0x22bec9;return db[_0x9e9f('0x3a')][_0x9e9f('0x3b')]({'where':{'transcribeStatus':_0x9e9f('0x3c')}})[_0x9e9f('0xf')](function(_0x304dff){if(!_0x304dff||!_0x304dff[_0x9e9f('0x1b')]){throw new db['Sequelize']['ValidationError'](_0x9e9f('0x3d'));}_0x2c9ada=_0x304dff;return db[_0x9e9f('0x3e')][_0x9e9f('0x26')]({'where':{'id':0x1}});})[_0x9e9f('0xf')](function(_0x37dbd6){if(!_0x37dbd6){throw new db['Sequelize'][(_0x9e9f('0x1e'))](_0x9e9f('0x3f'));}_0x44e631=_0x37dbd6;if(!_0x44e631[_0x9e9f('0x40')]||!_0x44e631['transcribeAccountId']||!_0x44e631[_0x9e9f('0xe')]||!_0x44e631['language']||!_0x44e631[_0x9e9f('0x32')]){throw new db[(_0x9e9f('0x1d'))]['ValidationError'](_0x9e9f('0x41'));}return db['CloudProvider']['findOne']({'where':{'id':_0x44e631[_0x9e9f('0x42')]}});})['then'](function(_0x1b41ef){if(!_0x1b41ef){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))](_0x9e9f('0x33'));}if(!_0x1b41ef['data1']||!_0x1b41ef[_0x9e9f('0xd')]){throw new db[(_0x9e9f('0x1d'))][(_0x9e9f('0x1e'))]('Cloud\x20Provider\x20not\x20configured');}_0x22bec9=_0x1b41ef;var _0x57cba8=[];_0x2c9ada[_0x9e9f('0x43')](function(_0x43592e){_0x57cba8[_0x9e9f('0x44')](checkTranscribeJob(_0x43592e,_0x44e631,_0x22bec9));});return BPromise[_0x9e9f('0x45')](_0x57cba8);})[_0x9e9f('0x37')](function(_0x7fae40){if(_0x7fae40){if(!_0x7fae40[_0x9e9f('0x38')]||_0x7fae40[_0x9e9f('0x38')]!==_0x9e9f('0x46')){logger['error'](util['inspect'](_0x7fae40,{'showHidden':![],'depth':null}));}}});}exports['start']=function(){setInterval(function(){return checkTranscribe();},0x3c*0x3e8);return checkTranscribe();};