initial step 4 for online test

This commit is contained in:
GotPPay
2018-01-11 04:24:16 +01:00
parent 3214a2bea4
commit 7d79c03d15
8 changed files with 328 additions and 71 deletions

View File

@@ -12,8 +12,19 @@ const router = express.Router ();
var app = express ();
//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 :
// 0 : Not sending Message
// 1 : Waiting for name
// 2 : Waiting for email
// 3 : Waiting for message
// 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 ('saburly'); // this means we still work with one skill
alexaApp.express ({
expressApp: app,
@@ -39,6 +50,7 @@ var updateIntentsJSON = function () {
.loadSkill (config.SKILL_DB_ID)
.then (skill => {
skill.intents.map (intent => {
alexaApp.intent (
intent.intentName,
{
@@ -50,9 +62,93 @@ var updateIntentsJSON = function () {
}
);
});
alexaApp.launch ((request, response) => {
return response.say (skill.invocationAnswer).shouldEndSession(false);
});
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.Person',
'Email' : 'AMAZON.LITERAL',
'Message': 'AMAZON.LITERAL',
'Data': 'AMAZON.LITERAL'
},
utterances: [
'My name is {Name}',
'I am {Name}',
'{Data}',
'My email is {Email}',
'Send replay to {Email}',
'My message is {Message}'
]
},
function(request,response){
if (!Name) Name = response.slots['Name'];
if (!Email) Email = response.slots['Email'];
if (!Message) Message = response.slots['Message'];
let Data = reponse.slots['Data'];
//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
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
//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
State = 0;
//TODO : Send email
return response.say('Message sent. Someone will contact you ASAP');
}
}
}
);
})
.catch (err => {
console.log (err);
@@ -92,14 +188,15 @@ router.get ('/deleteSkill/:skillID', async (req, res, next) => {
router.post ('/updateSkill/:id', async (req, res, next) => {
let id = req.params.id;
let skill = req.body;
let dataFromWeb = JSON.stringify(req.body);
let skill = JSON.parse(dataFromWeb);
let updateOnAmazon = skill.updateOnAmazon;
delete skill.updateOnAmazon;
delete skill._id;
console.log('id = ' + id);
if (id !== '-1') {
amazonHelper
.updateSkill (skill)
.then (amazonResult => {
console.log('amazon result : ' + amazonResult);
if (updateOnAmazon){
amazonHelper.updateSkill(skill).then(amazonResult=>{
if (amazonResult === 200 || amazonResult === 202) {
//Skill uploaded, it's ok to update databaseI
databaseHelper
@@ -109,16 +206,24 @@ router.post ('/updateSkill/:id', async (req, res, next) => {
updateIntentsJSON ();
})
.catch (e => {
res.json ({result: -1, message: 'ok'});
res.json ({result: -1, message: 'error'});
});
} else {
res.json ({result: -1, message: 'Amazon result ' + amazonResult});
}
})
.catch (e => {
//skill upload went wrong, don't update database, send error
}).catch(e=>{
res.json ({result: -1, message: e});
});
}else{
databaseHelper
.updateSkill (id, skill)
.then (result => {
res.json ({result: 0, message: 'ok'});
updateIntentsJSON ();
})
.catch (e => {
res.json ({result: -1, message: 'error'});
});
}
} else {
//no new skills for now
}