Compare commits
3 Commits
switch-to-
...
dialog-imp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ccc0c6ca2 | ||
|
|
554a16794d | ||
|
|
c731f7597c |
255
backend/components/alexa.js
Normal file
255
backend/components/alexa.js
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
var alexa = require ('alexa-app');
|
||||||
|
const config = require ('../config/config');
|
||||||
|
var databaseHelper = require ('../helpers/database');
|
||||||
|
|
||||||
|
//User data for sending message, this is skill-related and will be in some skill container
|
||||||
|
var Name = null;
|
||||||
|
var Email = null;
|
||||||
|
var Message = null;
|
||||||
|
var State = 0; // states should be defined in seperate file. (Not sending message, Waiting for name, Waiting for email, Waiting for message)
|
||||||
|
//For now (this is not long term solution)
|
||||||
|
// 0 : Not sending Message
|
||||||
|
// 1 : Waiting for name
|
||||||
|
// 2 : Waiting for email
|
||||||
|
// 3 : Waiting for message
|
||||||
|
|
||||||
|
var alexaApp = new alexa.app ('saburly'); // this means we still work with one skill
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
init: function (express) {
|
||||||
|
alexaApp.express ({
|
||||||
|
expressApp: express,
|
||||||
|
|
||||||
|
// 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,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
updateIntentsJSON: function () {
|
||||||
|
databaseHelper
|
||||||
|
.getSkill (config.SKILL_DB_ID)
|
||||||
|
.then (skill => {
|
||||||
|
skill.intents.map (intent => {
|
||||||
|
alexaApp.intent (
|
||||||
|
intent.intentName,
|
||||||
|
{
|
||||||
|
slots: [],
|
||||||
|
utterances: intent.questions,
|
||||||
|
},
|
||||||
|
(request, response) => {
|
||||||
|
return response.say (intent.answer).shouldEndSession (false);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
alexaApp.launch ((request, response) => {
|
||||||
|
return response.say (skill.invocationAnswer).shouldEndSession (false);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
alexaApp.intent (
|
||||||
|
'EmailIntent',
|
||||||
|
{
|
||||||
|
dialog: {
|
||||||
|
'type': 'delegate',
|
||||||
|
},
|
||||||
|
slots: [
|
||||||
|
{
|
||||||
|
name:'Name',
|
||||||
|
type:'AMAZON.US_FIRST_NAME',
|
||||||
|
samples:[
|
||||||
|
'My name is {-|Name}',
|
||||||
|
'I am {-|Name}',
|
||||||
|
'{-|Name}'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Email",
|
||||||
|
"type": "emailSlot",
|
||||||
|
"samples": [
|
||||||
|
"{blablablabla@blablabla.blabla.blabla|Email}",
|
||||||
|
"My email is {blablablabla@blablabla.blabla.blabla|Email}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Message",
|
||||||
|
"type": "emailMessage",
|
||||||
|
"samples": [
|
||||||
|
"{Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog.|Message}",
|
||||||
|
"My message is {Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog.|Message}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
utterances: [
|
||||||
|
'I would like to send a message',
|
||||||
|
'I want to send a message',
|
||||||
|
'Send message',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
(request, response) => {
|
||||||
|
console.log('Name : ' + request.slot('Name'));
|
||||||
|
console.log('Color : ' + request.slot('Color'));
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
alexaApp.intent (
|
||||||
|
'EmailIntentLaunch',
|
||||||
|
{
|
||||||
|
slots: [],
|
||||||
|
utterances: [
|
||||||
|
'I want to send a message',
|
||||||
|
'I would like to send a message',
|
||||||
|
'I would like to leave a message',
|
||||||
|
'Leave a message',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
function (request, response) {
|
||||||
|
Name = null;
|
||||||
|
Email = null;
|
||||||
|
Message = null;
|
||||||
|
State = 1;
|
||||||
|
|
||||||
|
return response
|
||||||
|
.say ('Ok. What is your name')
|
||||||
|
.shouldEndSession (false);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
//TODO : Watch out for this intent. It will make trouble with other regular intents
|
||||||
|
//if other intents have utterance with just one slot like {Data}
|
||||||
|
//It should be taken care somwhere before this, to check if Email Intent is invoked
|
||||||
|
//This is problem only if we introduce slot options for regular intents for users
|
||||||
|
alexaApp.intent (
|
||||||
|
'EmailIntent',
|
||||||
|
{
|
||||||
|
slots: {
|
||||||
|
Name: 'AMAZON.US_FIRST_NAME',
|
||||||
|
Email: 'AMAZON.LITERAL',
|
||||||
|
Message: 'AMAZON.LITERAL',
|
||||||
|
Data: 'AMAZON.LITERAL',
|
||||||
|
},
|
||||||
|
utterances: [
|
||||||
|
'My name is {-|Name}',
|
||||||
|
'I am {-|Name}',
|
||||||
|
'{dawdw at dwd wdw|Data}',
|
||||||
|
'My email is {wadwwdw at wadwwd wdw|Email}',
|
||||||
|
'Send replay to {fkofkeofe at dppfam wd|Email}',
|
||||||
|
'My message is {Quick brown fox jumps over lazy dog|Message}',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
function (request, response) {
|
||||||
|
let Data = undefined;
|
||||||
|
try {
|
||||||
|
if (!Name) Name = request.slot ('Name');
|
||||||
|
} catch (e) {
|
||||||
|
console.log ('Error. No name slot ');
|
||||||
|
Name = undefined;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (!Email) Email = request.slot ('Email');
|
||||||
|
} catch (e) {
|
||||||
|
console.log ('Error. No Email slot');
|
||||||
|
Email = undefined;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (!Message) Message = request.slot ('Message');
|
||||||
|
} catch (e) {
|
||||||
|
console.log ('Error. No Message slot');
|
||||||
|
Message = undefined;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Data = request.slot ('Data');
|
||||||
|
} catch (e) {
|
||||||
|
console.log ('Error. No Data slot');
|
||||||
|
Data = undefined;
|
||||||
|
}
|
||||||
|
console.log ('State : ' + State);
|
||||||
|
|
||||||
|
//TODO : Responses could be configurable for each skill ?
|
||||||
|
|
||||||
|
if (State === 1) {
|
||||||
|
//Was waiting for name, so if Name is null, name is probably in Data
|
||||||
|
if ((!Name && Data) || Name) {
|
||||||
|
//got the name, let's continue for the email
|
||||||
|
if (!Name) Name = Data;
|
||||||
|
State = 2;
|
||||||
|
return response
|
||||||
|
.say ('Ok ' + Name + '. What is your email ?')
|
||||||
|
.shouldEndSession (false);
|
||||||
|
} else {
|
||||||
|
//Something is wrong, ask for name again
|
||||||
|
return response
|
||||||
|
.say (
|
||||||
|
'Sorry, I didnt understand your name. Can you say it again ?'
|
||||||
|
)
|
||||||
|
.shouldEndSession (false);
|
||||||
|
}
|
||||||
|
} else if (State === 2) {
|
||||||
|
//was waiting for email, so if Email is null, email is probably in Data
|
||||||
|
if ((!Email && Data) || Email) {
|
||||||
|
//Got the email, first verify email and than continue to message
|
||||||
|
if (!Email) Email = Data;
|
||||||
|
//TODO : verify email
|
||||||
|
State = 3;
|
||||||
|
return response
|
||||||
|
.say ('Great. Whats the message ?')
|
||||||
|
.shouldEndSession (false);
|
||||||
|
} else {
|
||||||
|
//Something is wrong, ask for the email again
|
||||||
|
return response
|
||||||
|
.say (
|
||||||
|
'Sorry, I didnt understan you email. Can you say it again ?'
|
||||||
|
)
|
||||||
|
.shouldEndSession (false);
|
||||||
|
}
|
||||||
|
} else if (State === 3) {
|
||||||
|
//Was waiting for message, so if Message is null, message is probably in Data
|
||||||
|
if ((!Message && Data) || Message) {
|
||||||
|
//Ok, we got all informations. Exit email intent
|
||||||
|
if (!Message) Message = Data;
|
||||||
|
State = 0;
|
||||||
|
//TODO : Send email
|
||||||
|
console.log (
|
||||||
|
'Name : ' +
|
||||||
|
Name +
|
||||||
|
' | Email : ' +
|
||||||
|
Email +
|
||||||
|
' | Message : ' +
|
||||||
|
Message
|
||||||
|
);
|
||||||
|
return response.say (
|
||||||
|
'Message sent. Someone will contact you ASAP'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
//Something is wrong, ask for the message again
|
||||||
|
return response
|
||||||
|
.say (
|
||||||
|
'Sorry, I didnt understand your message. Can you say it again ?'
|
||||||
|
)
|
||||||
|
.shouldEndSession (false);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log ('State strange ! ' + State);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
})
|
||||||
|
.catch (err => {
|
||||||
|
console.log (err);
|
||||||
|
alexaApp.launch ((request, response) => {
|
||||||
|
return response.say ('Sorry, there was no skill with that name');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -26,11 +26,6 @@ constants.HTTPResultCodes = {
|
|||||||
|
|
||||||
constants.SKILL_ID_LENGTH = 24;
|
constants.SKILL_ID_LENGTH = 24;
|
||||||
|
|
||||||
constants.voiceResponseStrings = {
|
|
||||||
QUESTION_NOT_FOUND : 'Sorry, I didnt understan',
|
|
||||||
GENERIC_CONTINUE : 'Would you like to continue'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = constants;
|
module.exports = constants;
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
var express = require ('express'), router = express.Router ();
|
var express = require ('express'), router = express.Router ();
|
||||||
|
|
||||||
router.use ('/skill', require ('./skill'));
|
router.use ('/skill', require ('./skill'));
|
||||||
router.use ('/saburly', require('./saburlyEntryPoint'));
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
var express = require ('express'), router = express.Router ();
|
|
||||||
var bodyParser = require ('body-parser');
|
|
||||||
var alexa = require ('../models/alexa');
|
|
||||||
|
|
||||||
router.post ('/', bodyParser.json (), async (req, res) => {
|
|
||||||
alexa.run (req, res);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = router;
|
|
||||||
@@ -3,7 +3,7 @@ const constants = require ('../config/constants');
|
|||||||
var databaseHelper = require ('../helpers/database');
|
var databaseHelper = require ('../helpers/database');
|
||||||
var amazonHelper = require ('../helpers/amazon');
|
var amazonHelper = require ('../helpers/amazon');
|
||||||
var bodyParser = require ('body-parser');
|
var bodyParser = require ('body-parser');
|
||||||
var alexa = require ('../models/alexa');
|
var alexa = require ('../components/alexa');
|
||||||
|
|
||||||
router.get ('/:id', async (req, res, next) => {
|
router.get ('/:id', async (req, res, next) => {
|
||||||
const id = req.params.id;
|
const id = req.params.id;
|
||||||
@@ -49,7 +49,7 @@ router.put ('/:id', bodyParser.json (), async (req, res, next) => {
|
|||||||
amazonResult === constants.amazonResultCodes.ACCEPTED
|
amazonResult === constants.amazonResultCodes.ACCEPTED
|
||||||
) {
|
) {
|
||||||
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
||||||
alexa.updateModel ();
|
alexa.updateIntentsJSON ();
|
||||||
} else {
|
} else {
|
||||||
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
res.status(constants.HTTPResultCodes.INTERNAL_SERVER_ERROR).json ({
|
||||||
result: constants.apiResultCodes.AMAZON_ERROR,
|
result: constants.apiResultCodes.AMAZON_ERROR,
|
||||||
@@ -65,7 +65,7 @@ router.put ('/:id', bodyParser.json (), async (req, res, next) => {
|
|||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
res.json ({result: constants.apiResultCodes.OK, message: ''});
|
||||||
alexa.updateModel ();
|
alexa.updateIntentsJSON ();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch (() => {
|
.catch (() => {
|
||||||
|
|||||||
@@ -56,6 +56,10 @@ var refreshTokens = function () {
|
|||||||
var generateInteractionModel = function (skill) {
|
var generateInteractionModel = function (skill) {
|
||||||
let result = {};
|
let result = {};
|
||||||
let allIntents = [];
|
let allIntents = [];
|
||||||
|
let allPrompts = [];
|
||||||
|
let dialogIntents = [];
|
||||||
|
let allTypes = [];
|
||||||
|
|
||||||
let defaultIntents = [
|
let defaultIntents = [
|
||||||
{
|
{
|
||||||
name: 'AMAZON.CancelIntent',
|
name: 'AMAZON.CancelIntent',
|
||||||
@@ -81,6 +85,152 @@ var generateInteractionModel = function (skill) {
|
|||||||
allIntents.push ({name: intent.intentName, samples: intent.questions});
|
allIntents.push ({name: intent.intentName, samples: intent.questions});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
allIntents.push({
|
||||||
|
name:'EmailIntent',
|
||||||
|
samples:['I would like to send a message', 'I want to send a message', 'Send a message'],
|
||||||
|
slots:[
|
||||||
|
{
|
||||||
|
name:'Name',
|
||||||
|
type:'AMAZON.US_FIRST_NAME',
|
||||||
|
samples:[
|
||||||
|
'My name is {Name}',
|
||||||
|
'I am {Name}',
|
||||||
|
'{Name}'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Email",
|
||||||
|
"type": "emailSlot",
|
||||||
|
"samples": [
|
||||||
|
"{Email}",
|
||||||
|
"My email is {Email}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Message",
|
||||||
|
"type": "emailMessage",
|
||||||
|
"samples": [
|
||||||
|
"{Message}",
|
||||||
|
"My message is {Message}"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
allPrompts.push(
|
||||||
|
{
|
||||||
|
"id": "Elicit.Intent-EmailIntent.IntentSlot-Name",
|
||||||
|
"variations": [
|
||||||
|
{
|
||||||
|
"type": "PlainText",
|
||||||
|
"value": "What is your name ?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
allPrompts.push(
|
||||||
|
{
|
||||||
|
"id": "Elicit.Intent-EmailIntent.IntentSlot-Color",
|
||||||
|
"variations": [
|
||||||
|
{
|
||||||
|
"type": "PlainText",
|
||||||
|
"value": "What is your email"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PlainText",
|
||||||
|
"value": "Tell me your email"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
allPrompts.push(
|
||||||
|
{
|
||||||
|
"id": "Elicit.Intent-EmailIntent.IntentSlot-Message",
|
||||||
|
"variations": [
|
||||||
|
{
|
||||||
|
"type": "PlainText",
|
||||||
|
"value": "What is your message ?"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "PlainText",
|
||||||
|
"value": "What is the message ?"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
dialogIntents.push(
|
||||||
|
{
|
||||||
|
"name": "EmailIntent",
|
||||||
|
"confirmationRequired": false,
|
||||||
|
"prompts": {},
|
||||||
|
"slots": [
|
||||||
|
{
|
||||||
|
"name": "Name",
|
||||||
|
"type": "AMAZON.US_FIRST_NAME",
|
||||||
|
"elicitationRequired": true,
|
||||||
|
"confirmationRequired": false,
|
||||||
|
"prompts": {
|
||||||
|
"elicitation": "Elicit.Intent-EmailIntent.IntentSlot-Name"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Email",
|
||||||
|
"type": "emailSlot",
|
||||||
|
"elicitationRequired": true,
|
||||||
|
"confirmationRequired": false,
|
||||||
|
"prompts": {
|
||||||
|
"elicitation": "Elicit.Intent-EmailIntent.IntentSlot-Email"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Message",
|
||||||
|
"type": "emailMessage",
|
||||||
|
"elicitationRequired": true,
|
||||||
|
"confirmationRequired": false,
|
||||||
|
"prompts": {
|
||||||
|
"elicitation": "Elicit.Intent-EmailIntent.IntentSlot-Message"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
allTypes.push(
|
||||||
|
{
|
||||||
|
"name": "emailMessage",
|
||||||
|
"values": [
|
||||||
|
{
|
||||||
|
"id": null,
|
||||||
|
"name": {
|
||||||
|
"value": "Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog. Quick brown fox jumps over lazy dog.",
|
||||||
|
"synonyms": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
allTypes.push(
|
||||||
|
{
|
||||||
|
"name": "emailSlot",
|
||||||
|
"values": [
|
||||||
|
{
|
||||||
|
"id": null,
|
||||||
|
"name": {
|
||||||
|
"value": "blablablabla@blablabla.blabla.blabla",
|
||||||
|
"synonyms": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Special Email Intents :
|
//Special Email Intents :
|
||||||
/*
|
/*
|
||||||
allIntents.push ({
|
allIntents.push ({
|
||||||
@@ -126,6 +276,8 @@ var generateInteractionModel = function (skill) {
|
|||||||
});
|
});
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
result.interactionModel = {};
|
result.interactionModel = {};
|
||||||
|
|
||||||
result.interactionModel.languageModel = {
|
result.interactionModel.languageModel = {
|
||||||
@@ -133,6 +285,11 @@ var generateInteractionModel = function (skill) {
|
|||||||
intents: allIntents,
|
intents: allIntents,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
result.interactionModel.types = allTypes;
|
||||||
|
result.interactionModel.prompts = allPrompts;
|
||||||
|
result.interactionModel.dialog = {};
|
||||||
|
result.interactionModel.dialog.intents = dialogIntents;
|
||||||
|
|
||||||
return JSON.stringify (result);
|
return JSON.stringify (result);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
var Alexa = require ('alexa-sdk');
|
|
||||||
const config = require ('../config/config');
|
|
||||||
var databaseHelper = require ('../helpers/database');
|
|
||||||
const constants = require ('../config/constants');
|
|
||||||
|
|
||||||
var handlers = {};
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
run: function (req, res) {
|
|
||||||
// Build the context manually, because Amazon Lambda is missing
|
|
||||||
var context = {
|
|
||||||
succeed: function (result) {
|
|
||||||
console.log (result);
|
|
||||||
res.json (result);
|
|
||||||
},
|
|
||||||
fail: function (error) {
|
|
||||||
console.log (error);
|
|
||||||
//We could send error json from here
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
var alexa = Alexa.handler (req.body, context);
|
|
||||||
alexa.appId = config.SKILL_ID;
|
|
||||||
alexa.registerHandlers (handlers);
|
|
||||||
alexa.execute ();
|
|
||||||
},
|
|
||||||
updateModel: function () {
|
|
||||||
//Get info from database, and store it for faster response on intent
|
|
||||||
databaseHelper
|
|
||||||
.getSkill (config.SKILL_DB_ID)
|
|
||||||
.then (activeSkill => {
|
|
||||||
handlers = {};
|
|
||||||
|
|
||||||
//Handler for launch request
|
|
||||||
handlers = {
|
|
||||||
LaunchRequest: function () {
|
|
||||||
this.response
|
|
||||||
.speak (activeSkill.invocationAnswer)
|
|
||||||
.listen (constants.voiceResponseStrings.GENERIC_CONTINUE); //Phrase from listen doesn't work !!!
|
|
||||||
//TODO : Maybe to ask user does he want to hear possible intents
|
|
||||||
//For this functionality, we need explanation text for each intent (Question)
|
|
||||||
this.emit (':responseReady');
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
//Handlers for user defined questions
|
|
||||||
activeSkill.intents.map (intent => {
|
|
||||||
handlers[intent.intentName] = function () {
|
|
||||||
this.response
|
|
||||||
.speak (intent.answer)
|
|
||||||
.listen (constants.voiceResponseStrings.GENERIC_CONTINUE); //Phrase from listen doesn't work !!!
|
|
||||||
this.emit (':responseReady');
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
//Default handlers for unknown questions and session close
|
|
||||||
|
|
||||||
handlers.Unhandled = function () {
|
|
||||||
this.response
|
|
||||||
.speak (constants.voiceResponseStrings.QUESTION_NOT_FOUND)
|
|
||||||
.listen (constants.voiceResponseStrings.GENERIC_CONTINUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
handlers.SessionEndedRequest = function(){
|
|
||||||
//We don't care for now
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
})
|
|
||||||
.catch (e => {
|
|
||||||
//Something is wrong, skill is not ready, use catch-all intent to inform user
|
|
||||||
console.log ('Error. Skill doesnt exist');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "test.js",
|
"main": "test.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"alexa-sdk": "^1.0.25",
|
"alexa-app": "4.2.0",
|
||||||
"body-parser": "^1.13.1",
|
"body-parser": "^1.13.1",
|
||||||
"ejs": "^2.5.7",
|
"ejs": "^2.5.7",
|
||||||
"express": "^4.13.0",
|
"express": "^4.13.0",
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
|
var amazonHelper = require ('./helpers/amazon');
|
||||||
var databaseHelper = require ('./helpers/database');
|
var databaseHelper = require ('./helpers/database');
|
||||||
const config = require ('./config/config');
|
const config = require ('./config/config');
|
||||||
|
const constants = require ('./config/constants');
|
||||||
|
require ('isomorphic-fetch');
|
||||||
var express = require ('express');
|
var express = require ('express');
|
||||||
var alexa = require ('./models/alexa');
|
var alexa = require('./components/alexa');
|
||||||
|
|
||||||
|
|
||||||
var MongoClient = require ('mongodb').MongoClient;
|
var MongoClient = require ('mongodb').MongoClient;
|
||||||
var ObjectID = require ('mongodb').ObjectID;
|
var ObjectID = require ('mongodb').ObjectID;
|
||||||
@@ -9,7 +13,10 @@ var ObjectID = require ('mongodb').ObjectID;
|
|||||||
const router = express.Router ();
|
const router = express.Router ();
|
||||||
var app = express ();
|
var app = express ();
|
||||||
|
|
||||||
app.set ('view engine', 'ejs'); // Should be removed
|
// ALWAYS setup the alexa app and attach it to express before anything else.
|
||||||
|
alexa.init (app);
|
||||||
|
|
||||||
|
app.set ('view engine', 'ejs');
|
||||||
app.use (require ('./middleware')); //common middleware for all requests
|
app.use (require ('./middleware')); //common middleware for all requests
|
||||||
app.use (require ('./controllers')); //all routes
|
app.use (require ('./controllers')); //all routes
|
||||||
|
|
||||||
@@ -19,7 +26,7 @@ MongoClient.connect (config.DB_URL)
|
|||||||
|
|
||||||
app.listen (config.PORT, () => {
|
app.listen (config.PORT, () => {
|
||||||
console.log ('Express server running on port ' + config.PORT);
|
console.log ('Express server running on port ' + config.PORT);
|
||||||
alexa.updateModel ();
|
alexa.updateIntentsJSON ();
|
||||||
databaseHelper.loadTokens ();
|
databaseHelper.loadTokens ();
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user