From 1a9227e76d0bd198ebf37259225ad3d55f2491f5 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Mon, 8 Jan 2018 21:50:24 +0100 Subject: [PATCH] refactoring --- backend/config.js | 4 +- backend/express.js | 197 ++++++++++++++++----------------- backend/express.js.save | 187 ------------------------------- backend/helpers/amazon.js | 215 +++++++++++++++++++----------------- backend/helpers/database.js | 123 +++++++++++++++++---- backend/helpers/token.js | 19 ---- backend/t_server.js | 144 ------------------------ 7 files changed, 311 insertions(+), 578 deletions(-) delete mode 100644 backend/express.js.save delete mode 100644 backend/helpers/token.js delete mode 100644 backend/t_server.js diff --git a/backend/config.js b/backend/config.js index ad1b06d..3edee7d 100644 --- a/backend/config.js +++ b/backend/config.js @@ -8,8 +8,10 @@ config.REFRESH_TOKEN = 'Atzr|IwEBICA3kDhfSJxlwvnQp9AD1o115AC_KBbFd5GBg8oN_QHWn2o config.TOKEN_EXPIRES_IN = 1515100500; config.SKILL_ID = 'amzn1.ask.skill.efbf0564-a732-4ba9-958f-57939138adae'; +//config.SKILL_DB_ID = '5a5016e775becaef2015da10'; //for server +config.SKILL_DB_ID = '5a232fb86ce046c749739455'; //for local config.CLIENT_ID = 'amzn1.application-oa2-client.c748ca56ded04a95b236979898585ff7'; config.CLIENT_SECRET = '6dea8125cecd049d3c4cff7bb5bdfd3ff17bc6fed246c4c8f6b519d9ed08d0b3'; -module.exports=config; \ No newline at end of file +module.exports = config; diff --git a/backend/express.js b/backend/express.js index c951813..3f027c2 100644 --- a/backend/express.js +++ b/backend/express.js @@ -1,29 +1,21 @@ -var amazonHelper = require('./helpers/amazon'); -var databaseHelper = require('./helpers/database'); - -const config = require('./config'); - -require('isomorphic-fetch'); - -var express = require('express'); -var alexa = require('alexa-app'); - -var bodyParser = require('body-parser'); - +var amazonHelper = require ('./helpers/amazon'); +var databaseHelper = require ('./helpers/database'); +const config = require ('./config'); +require ('isomorphic-fetch'); +var express = require ('express'); +var alexa = require ('alexa-app'); +var bodyParser = require ('body-parser'); var MongoClient = require ('mongodb').MongoClient; var ObjectID = require ('mongodb').ObjectID; const router = express.Router (); -var skillID = 'amzn1.ask.skill.7115bfc9-313e-4728-830b-ebd19ce96cb3'; -var skillDbID = '5a5016e775becaef2015da10'; //_id in database - -var app = express(); +var app = express (); // ALWAYS setup the alexa app and attach it to express before anything else. -var alexaApp = new alexa.app('step3'); // this means we still work with one skill +var alexaApp = new alexa.app ('step3'); // this means we still work with one skill -alexaApp.express({ +alexaApp.express ({ expressApp: app, // verifies requests come from amazon alexa. Must be enabled for production. @@ -34,106 +26,105 @@ alexaApp.express({ // sets up a GET route when set to true. This is handy for testing in // development, but not recommended for production. disabled by default debug: true, - - preRequest: (request, response)=>{ - console.log('Pre req'); - } }); // now POST calls to /test in express will be handled by the app.request() function // from here on you can setup any other express routes or middlewares as nor -app.set("view engine", "ejs"); +app.set ('view engine', 'ejs'); -var updateIntentsJSON = function(){ - db.collection('skill_list').findOne({_id: ObjectID(skillDbID)}, (err, skill)=>{ - if (skill){ - skill.intents.map(intent => { - alexaApp.intent(intent.intentName,{'slots':[], 'utterances':intent.questions}, function(request,response){ return response.say(intent.answer);}); +var updateIntentsJSON = function () { + databaseHelper + .loadSkill (config.SKILL_DB_ID) + .then (skill => { + skill.intents.map (intent => { + alexaApp.intent ( + intent.intentName, + { + slots: [], + utterances: intent.questions, + }, + function (request, response) { + return response.say (intent.answer); + } + ); }); - alexaApp.launch((request,response)=>{ - return response.say(skill.invocationAnswer); + alexaApp.launch ((request, response) => { + return response.say (skill.invocationAnswer); }); - } - }); -} + }) + .catch (err => { + console.log (err); + alexaApp.launch ((request, response) => { + return response.say ('Sorry, there was no skill with that name'); + }); + }); +}; router.get ('/getSkill/:id', async (req, res, next) => { - try { - const id = req.params.id; + const id = req.params.id; - if (id.length !== 24){ - res.json([]); - throw("error"); - } - - db.collection ('skill_list').find({_id: ObjectID(id)}).toArray((err,result)=>{ - if (err){ - throw err; - res.json([]); - }else{ - res.json(result); - } - }); - - } catch (e) { - console.log ('error:', e); - next (e); + if (id.length !== 24) { + res.json ([]); + } else { + databaseHelper + .getSkill (id) + .then (result => { + res.json (result); + }) + .catch (err => { + res.json ([]); + }); } }); router.get ('/deleteSkill/:skillID', async (req, res, next) => { - try { - let id = req.params.id; - let result = db.collection('skill_list').remove({_id: ObjectID(id)},(err,result)=>{ - if (err) throw err; - res.json(result); + databaseHelper + .deleteSkill (req.params.id) + .then (result => { + res.json (result); + }) + .catch (err => { + res.json (err); }); - } catch (e) { - console.log ('error:', e); - next (e); - } }); router.post ('/updateSkill/:id', async (req, res, next) => { - - let id = req.params.id; - let skill = req.body; - delete skill._id; - if (id !== '-1'){ - amazonHelper.updateSkill(skill,db).then(amazonResult=>{ - if (amazonResult===200 || amazonResult===202){ - //Skill uploaded, it's ok to update database - let result = db.collection('skill_list').update({_id: ObjectID(id)}, skill,{upsert:true}, (err, result)=>{ - if (JSON.parse(result).nModified===1){ - //database update ok - res.json({result:0, message:'ok'}); - updateIntentsJSON(); - }else{ - res.json({result:-1, message:'ok'}); - } - }); - }else{ - res.json({result:-1, message:'Amazon result ' + amazonResult}); + let id = req.params.id; + let skill = req.body; + delete skill._id; + if (id !== '-1') { + amazonHelper + .updateSkill (skill) + .then (amazonResult => { + if (amazonResult === 200 || amazonResult === 202) { + //Skill uploaded, it's ok to update databaseI + databaseHelper + .updateSkill (id, skill) + .then (result => { + res.json ({result: 0, message: 'ok'}); + updateIntentsJSON (); + }) + .catch (e => { + res.json ({result: -1, message: 'ok'}); + }); + } else { + res.json ({result: -1, message: 'Amazon result ' + amazonResult}); } - }).catch(e=>{ + }) + .catch (e => { //skill upload went wrong, don't update database, send error - res.json({result:-1, message:e}); + res.json ({result: -1, message: e}); }); - - }else{ - //no new skills for now - } + } else { + //no new skills for now + } }); - app.use (function (req, res, next) { res.header ('Access-Control-Allow-Origin', '*'); - res.header ( - 'Access-Control-Allow-Headers', - 'Origin, Content-Type' - ); + res.header ('Access-Control-Allow-Headers', 'Origin, Content-Type'); res.header ('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.header ('Access-Control-Allow-Credentials', 'true'); next (); @@ -142,18 +133,16 @@ app.use (function (req, res, next) { app.use (bodyParser.json ()); app.use ('/', router); +MongoClient.connect (config.dbURL) + .then (database => { + databaseHelper.initModule (database); -MongoClient.connect (config.dbURL).then (database => { - db = database; - db.collection ('intent_list'); - - databaseHelper.initModule(db); - - app.listen (config.PORT, () =>{ - console.log ('Express server running on port ' + config.PORT); - updateIntentsJSON(); - databaseHelper.loadTokens(); + app.listen (config.PORT, () => { + console.log ('Express server running on port ' + config.PORT); + updateIntentsJSON (); + databaseHelper.loadTokens (); + }); + }) + .catch (e => { + console.log ('error : ' + e); }); -}).catch(e=>{ - console.log("error : " + e); -}); diff --git a/backend/express.js.save b/backend/express.js.save deleted file mode 100644 index afbfd33..0000000 --- a/backend/express.js.save +++ /dev/null @@ -1,187 +0,0 @@ -var amazonHelper = require('./helpers/amazon'); -var databaseHelper = require('./helpers/database'); - -const config = require('./config'); - -require('isomorphic-fetch'); - -var express = require('express'); -var alexa = require('alexa-app'); - -var bodyParser = require('body-parser'); - -var MongoClient = require ('mongodb').MongoClient; -var ObjectID = require ('mongodb').ObjectID; - -const router = express.Router (); - -var skillID = 'amzn1.ask.skill.7115bfc9-313e-4728-830b-ebd19ce96cb3'; -var skillDbID = '5a5016e775becaef2015da10'; //_id in database - -var app = express(); - -// ALWAYS setup the alexa app and attach it to express before anything else. -var alexaApp = new alexa.app('step3', 'step3'); // this means we still work with one skill - -alexaApp.express({ - expressApp: app, - - // verifies requests come from amazon alexa. Must be enabled for production. - // You can disable this if you're running a dev environment and want to POST - // things to test behavior. enabled by default. - checkCert: false, - - // sets up a GET route when set to true. This is handy for testing in - // development, but not recommended for production. disabled by default - debug: true -}); - -// now POST calls to /test in express will be handled by the app.request() function - -// from here on you can setup any other express routes or middlewares as nor - -app.pre = function(request, response, type -}; - -app.set("view engine", "ejs"); - -alexaApp.launch(function(request, response) { - console.log("Alexa launch"); - console.log(request); - const skill = db.collection('skill_list').findOne({_id: ObjectID(skillDbID)}, (err,result)=>{ - if (err){ - response.say("I could not find desired skill") - }else{ - response.say(skill.invocationAnswer); - } - }); -}); - -var findElementByAttr = function (data, attr, val){ - for(var i = 0; i < data.length; i ++) { - if(data[i][attr] === val) { - return i; - } - } - return -1; -} - -alexaApp.request = (jsonRequest) => { - const alexaRequest = new alexa.request(jsonRequest); - if (alexaRequest.type() === "IntentRequest") { - db.collection('skill_list').findOne({_id: ObjectID(skillDbID)}, (err,skill)=>{ - if (skill) { - console.log(alexaRequest.data.request.intent); - let intentId = findElementByAttr(skill.intents, 'intentName', alexaRequest.data.request.intent.name); - const response = new alexa.response(alexaRequest.getSession()); - if (intentId !== -1){ - return response.say(skill.intents[intentId].answer); - }else{ - return response.say('Sorry, I could not find desired intent'); - } - } - }); - } -}; - -alexaApp.error = function(exception, request, response){ - console.log('Error ' + exception); - response.say('Sorry, there was error in Saburly skill'); // TODO : Rephrase this -}; - -router.get ('/getSkill/:id', async (req, res, next) => { - try { - const id = req.params.id; - - if (id.length !== 24){ - res.json([]); - throw("error"); - } - - db.collection ('skill_list').find({_id: ObjectID(id)}).toArray((err,result)=>{ - if (err){ - throw err; - res.json([]); - }else{ - res.json(result); - } - }); - - } catch (e) { - console.log ('error:', e); - next (e); - } -}); - -router.get ('/deleteSkill/:skillID', async (req, res, next) => { - try { - let id = req.params.id; - let result = db.collection('skill_list').remove({_id: ObjectID(id)},(err,result)=>{ - if (err) throw err; - res.json(result); - }); - } catch (e) { - console.log ('error:', e); - next (e); - } -}); - -router.post ('/updateSkill/:id', async (req, res, next) => { - - let id = req.params.id; - let skill = req.body; - delete skill._id; - if (id !== '-1'){ - amazonHelper.updateSkill(skill,db).then(amazonResult=>{ - if (amazonResult===200 || amazonResult===202){ - //Skill uploaded, it's ok to update database - let result = db.collection('skill_list').update({_id: ObjectID(id)}, skill,{upsert:true}, (err, result)=>{ - if (JSON.parse(result).nModified===1){ - //database update ok - res.json({result:0, message:'ok'}); - }else{ - res.json({result:-1, message:'ok'}); - } - }); - }else{ - res.json({result:-1, message:'Amazon result ' + amazonResult}); - } - }).catch(e=>{ - //skill upload went wrong, don't update database, send error - res.json({result:-1, message:e}); - }); - - }else{ - //no new skills for now - } -}); - - -app.use (function (req, res, next) { - res.header ('Access-Control-Allow-Origin', '*'); - res.header ( - 'Access-Control-Allow-Headers', - 'Origin, Content-Type' - ); - res.header ('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); - res.header ('Access-Control-Allow-Credentials', 'true'); - next (); -}); - -app.use (bodyParser.json ()); -app.use ('/', router); - - -MongoClient.connect (config.dbURL).then (database => { - db = database; - db.collection ('intent_list'); - - databaseHelper.initModule(db); - - app.listen (config.PORT, () =>{ - console.log ('Express server running on port ' + config.PORT); - databaseHelper.loadTokens(); - }); -}).catch(e=>{ - console.log("error : " + e); -}); diff --git a/backend/helpers/amazon.js b/backend/helpers/amazon.js index bae5d87..26ee7e2 100644 --- a/backend/helpers/amazon.js +++ b/backend/helpers/amazon.js @@ -1,118 +1,131 @@ -require('isomorphic-fetch'); -const config = require('../config'); -var request = require("request"); -var token = require('./token'); +require ('isomorphic-fetch'); +const config = require ('../config'); +var request = require ('request'); +var databaseHelper = require ('./database'); +var getBuildStatus = function (skillID) { + try { + fetch ( + `https://api.amazonalexa.com/v0/skills/${skillID}/interactionModel/locales/en-US/status`, + { + method: 'GET', + headers: { + Authorization: config.TOKEN, + }, + } + ) + .then (l => l.text ()) + .then (result => { + return result; + }); + } catch (e) { + console.log ('err : ' + e); + } +}; -var getBuildStatus = function(skillID){ - try{ - fetch(`https://api.amazonalexa.com/v0/skills/${skillID}/interactionModel/locales/en-US/status`, { - method: 'GET', - headers: { - Authorization: TOKEN - }, - }).then(l=>l.text()).then(result=>{ - return result; - }); - }catch(e){ - console.log("err : " + e); - } -} +var refreshTokens = function () { + return new Promise ((resolve, reject) => { + var options = { + method: 'POST', + url: 'https://api.amazon.com/auth/o2/token', + headers: { + 'cache-control': 'no-cache', + 'content-type': 'application/x-www-form-urlencoded', + }, + form: { + grant_type: 'refresh_token', + refresh_token: config.REFRESH_TOKEN, + client_id: config.CLIENT_ID, + client_secret: config.CLIENT_SECRET, + }, + }; -var refreshToken = function(db){ - return new Promise((resolve, reject)=>{ - var options = { method: 'POST', - url: 'https://api.amazon.com/auth/o2/token', - headers: - { 'cache-control': 'no-cache', - 'content-type': 'application/x-www-form-urlencoded' }, - form: - { grant_type: 'refresh_token', - refresh_token: config.REFRESH_TOKEN, - client_id: config.CLIENT_ID, - client_secret: config.CLIENT_SECRET } }; - - request(options, function (error, response, body) { - if (error) reject(error); - parsedResponse = JSON.parse(body); - if (parsedResponse.refresh_token){ - try{ - token.updateTokens(parsedResponse.refresh_token, parsedResponse.access_token, parsedResponse.expires_in,db); - resolve(); - }catch(e){ - reject(e); - } - } - }); + request (options, function (error, response, body) { + if (error) reject (error); + parsedResponse = JSON.parse (body); + if (parsedResponse.refresh_token) + return databaseHelper.updateTokens ( + parsedResponse.refresh_token, + parsedResponse.access_token, + parsedResponse.expires_in + ); }); -} + }); +}; -var generateInteractionModel = function(skill){ - let result = {}; - let allIntents = []; - let defaultIntents = [{ - name: "AMAZON.CancelIntent", - samples: [] - }, - { - name: "AMAZON.HelpIntent", - samples: [] - }, - { - name: "AMAZON.StopIntent", - samples: [] - }]; +var generateInteractionModel = function (skill) { + let result = {}; + let allIntents = []; + let defaultIntents = [ + { + name: 'AMAZON.CancelIntent', + samples: [], + }, + { + name: 'AMAZON.HelpIntent', + samples: [], + }, + { + name: 'AMAZON.StopIntent', + samples: [], + }, + ]; - /* + /* defaultIntents.map(intent=>{ allIntents.push(intent); }); */ - skill.intents.map(intent=>{ - allIntents.push({name: intent.intentName, samples: intent.questions}); - }); + skill.intents.map (intent => { + allIntents.push ({name: intent.intentName, samples: intent.questions}); + }); - result.interactionModel = {}; + result.interactionModel = {}; - result.interactionModel.languageModel = { - invocationName: skill.invocationName, - intents: allIntents - }; + result.interactionModel.languageModel = { + invocationName: skill.invocationName, + intents: allIntents, + }; - return JSON.stringify(result); -} + return JSON.stringify (result); +}; -var uploadSkill = function(skill){ - return fetch(`https://api.amazonalexa.com/v0/skills/${skill.skillID}/interactionModel/locales/en-US`, { - method: 'POST', - headers: { - Authorization: config.TOKEN - }, - body: generateInteractionModel(skill) - }); -} +var uploadSkill = function (skill) { + return fetch ( + `https://api.amazonalexa.com/v0/skills/${skill.skillID}/interactionModel/locales/en-US`, + { + method: 'POST', + headers: { + Authorization: config.TOKEN, + }, + body: generateInteractionModel (skill), + } + ); +}; module.exports = { - updateSkill: function(skill, db){ - return new Promise((resolve,reject)=>{ - if (new Date() / 1000 > config.TOKEN_EXPIRES_IN){ - refreshToken(db).then(()=>{ - uploadSkill(skill).then(response=>{ - resolve(response.status); - }); - }).catch(e=>{ - reject(e); - }); - }else{ - uploadSkill(skill).then(response=>{ - resolve(response.status); - }).catch(e=>{ - reject(e); - }) - } - }); - - - } -}; \ No newline at end of file + updateSkill: function (skill) { + return new Promise ((resolve, reject) => { + if (new Date () / 1000 > config.TOKEN_EXPIRES_IN) { + refreshTokens () + .then (() => { + uploadSkill (skill).then (response => { + resolve (response.status); + }); + }) + .catch (e => { + reject (e); + }); + } else { + uploadSkill (skill) + .then (response => { + resolve (response.status); + }) + .catch (e => { + reject (e); + }); + } + }); + }, +}; diff --git a/backend/helpers/database.js b/backend/helpers/database.js index fd32459..0b504a8 100644 --- a/backend/helpers/database.js +++ b/backend/helpers/database.js @@ -1,27 +1,106 @@ -const config = require('../config'); +const config = require ('../config'); +var ObjectID = require ('mongodb').ObjectID; var db = null; - module.exports = { - initModule : function(databaseObject){ - db=databaseObject; - }, + initModule: function (databaseObject) { + db = databaseObject; + db.collection ('intent_list'); + }, - loadTokens : function(){ - db.collection('token_list').findOne().then(tokens=>{ - if (tokens !== null){ - config.TOKEN = tokens.access_token; - config.REFRESH_TOKEN = tokens.refresh_token; - config.TOKEN_EXPIRES_IN = tokens.expires_in; - }else{ - //Cannot continue without tokens - console.log("Cannot continue without tokens in database"); - process.exit(-1); - } - }).catch(e=>{ - console.log("Error loading tokens ! Cannot continue without tokens in database"); - process.exit(-1); - }) - } -} \ No newline at end of file + loadTokens: function () { + db + .collection ('token_list') + .findOne () + .then (tokens => { + if (tokens !== null) { + config.TOKEN = tokens.access_token; + config.REFRESH_TOKEN = tokens.refresh_token; + config.TOKEN_EXPIRES_IN = tokens.expires_in; + } else { + //Cannot continue without tokens + console.log ('Cannot continue without tokens in database'); + process.exit (-1); + } + }) + .catch (e => { + console.log ( + 'Error loading tokens ! Cannot continue without tokens in database' + ); + process.exit (-1); + }); + }, + + updateTokens: function (refresh_token, access_token, expires_in) { + return new Promise ((resolve, reject) => { + let newTokenDocument = { + id: 1, + refresh_token: refresh_token, + access_token: access_token, + expires_in: new Date () / 1000 + expires_in, + }; + db + .collection ('token_list') + .update ({id: 1}, newTokenDocument, {upsert: true}, (err, result) => { + if (err) reject (err); + config.REFRESH_TOKEN = refresh_token; + config.TOKEN = access_token; + config.TOKEN_EXPIRES_IN = newTokenDocument.expires_in; + resolve (); + }); + }); + }, + + loadSkill: function (skillDbID) { + return new Promise ((resolve, reject) => { + db + .collection ('skill_list') + .findOne ({_id: ObjectID (skillDbID)}, (err, skill) => { + if (skill) { + resolve (skill); + } else { + reject (err); + } + }); + }); + }, + + updateSkill: function (id, skill) { + return new Promise ((resolve, reject) => { + db + .collection ('skill_list') + .update ({_id: ObjectID (id)}, skill, {upsert: true}, (err, result) => { + if (JSON.parse (result).nModified === 1) { + //database update ok + resolve (); + } else { + reject (); + } + }); + }); + }, + + deleteSkill: function (id) { + return new Promise ((resolve, reject) => { + db + .collection ('skill_list') + .remove ({_id: ObjectID (id)}, (err, result) => { + if (err) reject (err); + resolve (result); + }); + }); + }, + + getSkill: function (id) { + return new Promise ((resolve, reject) => { + db + .collection ('skill_list') + .find ({_id: ObjectID (id)}) + .toArray ((err, result) => { + if (err) reject (err); + resolve (result); + }); + }); + }, +}; diff --git a/backend/helpers/token.js b/backend/helpers/token.js deleted file mode 100644 index bb95186..0000000 --- a/backend/helpers/token.js +++ /dev/null @@ -1,19 +0,0 @@ -const config = require('../config'); -var ObjectID = require ('mongodb').ObjectID; - -module.exports = { - updateTokens : function (refresh_token, access_token, expires_in, db){ - let newTokenDocument = { - id:1, - refresh_token:refresh_token, - access_token: access_token, - expires_in: (new Date() / 1000) + expires_in - } - let result = db.collection('token_list').update({id:1}, newTokenDocument,{upsert:true}, (err, result)=>{ - if (err) throw new Error(err); - config.REFRESH_TOKEN = refresh_token; - config.TOKEN = access_token; - config.TOKEN_EXPIRES_IN = newTokenDocument.expires_in; - }); - } -}; \ No newline at end of file diff --git a/backend/t_server.js b/backend/t_server.js deleted file mode 100644 index e7e5db8..0000000 --- a/backend/t_server.js +++ /dev/null @@ -1,144 +0,0 @@ -var amazonHelper = require('./helpers/amazon'); -var databaseHelper = require('./helpers/database'); - -const config = require('./config'); - -require('isomorphic-fetch'); - -var express = require('express'); -var alexa = require('alexa-app'); - -var bodyParser = require('body-parser'); - -var MongoClient = require ('mongodb').MongoClient; -var ObjectID = require ('mongodb').ObjectID; - -const router = express.Router (); - -var skillID = 'amzn1.ask.skill.7115bfc9-313e-4728-830b-ebd19ce96cb3'; -var skillDbID = '5a5016e775becaef2015da10'; //_id in database - -//***********/ -//var express = require("express"); -//var alexa = require("alexa-app"); - -var PORT = process.env.port || 5000; -var app = express(); - -// ALWAYS setup the alexa app and attach it to express before anything else. -var alexaApp = new alexa.app("step3"); - -alexaApp.express({ - expressApp: app, - - // verifies requests come from amazon alexa. Must be enabled for production. - // You can disable this if you're running a dev environment and want to POST - // things to test behavior. enabled by default. - checkCert: false, - - // sets up a GET route when set to true. This is handy for testing in - // development, but not recommended for production. disabled by default - debug: true, - - preRequest: function(request,response){ - console.log('pre'); - const alexaRequest = new alexa.request(request); - if (alexaRequest.type() === "IntentRequest") { - db.collection('skill_list').findOne({_id: ObjectID(skillDbID)}, (err,skill)=>{ - if (skill) { - console.log(alexaRequest.data.request.intent); - let intentId = findElementByAttr(skill.intents, 'intentName', alexaRequest.data.request.intent.name); - const response = new alexa.response(alexaRequest.getSession()); - if (intentId !== -1){ - return response.say(skill.intents[intentId].answer); - }else{ - return response.say('Sorry, I could not find desired intent'); - } - } - }); - } - } -}); - -// now POST calls to /test in express will be handled by the app.request() function - -// from here on you can setup any other express routes or middlewares as normal -app.set("view engine", "ejs"); - -alexaApp.launch(function(request, response) { - console.log('launch'); - response.say("You launched the app!"); -}); - -//alexaApp.dictionary = { "names": ["matt", "joe", "bob", "bill", "mary", "jane", "dawn"] }; - -/* -alexaApp.intent("GetFirstQuestion", { - "slots":[], - "utterances": [ - "Tell me about your process", "Give me info about your process" - ] - }, - function(request, response) { - console.log('My name'); - response.say("Success!"); - } -); -*/ - -var findElementByAttr = function (data, attr, val){ - for(var i = 0; i < data.length; i ++) { - if(data[i][attr] === val) { - return i; - } - } - return -1; -} - -/* -alexaApp.request = (jsonRequest) => { -/* - const alexaRequest = new alexa.request(jsonRequest); - if (alexaRequest.type() === "IntentRequest") { - db.collection('skill_list').findOne({_id: ObjectID(skillDbID)}, (err,skill)=>{ - if (skill) { - console.log(alexaRequest.data.request.intent); - let intentId = findElementByAttr(skill.intents, 'intentName', alexaRequest.data.request.intent.name); - const response = new alexa.response(alexaRequest.getSession()); - if (intentId !== -1){ - response.say(skill.intents[intentId].answer); - }else{ - response.say('Sorry, I could not find desired intent'); - } - } - }); - } -}; -*/ - - -alexaApp.intent("SimpleIntent", { - "slots": [], - "utterances": ["Tell me somethin"] - }, - function(request, response) { - response.say("This is sample"); - } -); - -//app.listen(PORT); -//console.log("Listening on port " + PORT + ", try http://localhost:" + PORT + "/test"); - -MongoClient.connect (config.dbURL).then (database => { - db = database; - db.collection ('intent_list'); - - databaseHelper.initModule(db); - - app.listen (config.PORT, () =>{ - console.log ('Express server running on port ' + config.PORT); - databaseHelper.loadTokens(); - }); -}).catch(e=>{ - console.log("error : " + e); -})