151 lines
4.2 KiB
JavaScript
151 lines
4.2 KiB
JavaScript
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 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
|
|
|
|
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.set ('view engine', 'ejs');
|
|
|
|
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).shouldEndSession(false);
|
|
}
|
|
);
|
|
});
|
|
alexaApp.launch ((request, response) => {
|
|
return response.say (skill.invocationAnswer).shouldEndSession(false);
|
|
});
|
|
})
|
|
.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) => {
|
|
const id = req.params.id;
|
|
|
|
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) => {
|
|
databaseHelper
|
|
.deleteSkill (req.params.id)
|
|
.then (result => {
|
|
res.json (result);
|
|
})
|
|
.catch (err => {
|
|
res.json (err);
|
|
});
|
|
});
|
|
|
|
router.post ('/updateSkill/:id', async (req, res, next) => {
|
|
let id = req.params.id;
|
|
let skill = req.body;
|
|
delete skill._id;
|
|
console.log('id = ' + id);
|
|
if (id !== '-1') {
|
|
amazonHelper
|
|
.updateSkill (skill)
|
|
.then (amazonResult => {
|
|
console.log('amazon result : ' + 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 => {
|
|
//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 => {
|
|
databaseHelper.initModule (database);
|
|
|
|
app.listen (config.PORT, () => {
|
|
console.log ('Express server running on port ' + config.PORT);
|
|
updateIntentsJSON ();
|
|
databaseHelper.loadTokens ();
|
|
});
|
|
})
|
|
.catch (e => {
|
|
console.log ('error : ' + e);
|
|
});
|