175 lines
4.0 KiB
JavaScript
175 lines
4.0 KiB
JavaScript
require ('isomorphic-fetch');
|
|
const config = require ('../config/config');
|
|
var request = require ('request');
|
|
var databaseHelper = require ('./database');
|
|
|
|
var getBuildStatus = function (skillID) {
|
|
fetch (
|
|
`https://api.amazonalexa.com/v0/skills/${skillID}/interactionModel/locales/en-US/status`,
|
|
{
|
|
method: 'GET',
|
|
headers: {
|
|
Authorization: config.TOKEN,
|
|
},
|
|
}
|
|
).then (result => {
|
|
return result.text ();
|
|
});
|
|
};
|
|
|
|
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,
|
|
},
|
|
};
|
|
|
|
request (options, function (error, response, body) {
|
|
if (error) {
|
|
reject (error);
|
|
}else{
|
|
parsedResponse = JSON.parse (body);
|
|
if (parsedResponse.refresh_token){
|
|
databaseHelper.updateTokens(parsedResponse.refresh_token, parsedResponse.access_token, parsedResponse.expires_in).then(()=>{
|
|
resolve();
|
|
}).catch(e=>{
|
|
reject(e);
|
|
});
|
|
}else{
|
|
reject (body);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
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});
|
|
});
|
|
|
|
//Special Email Intents :
|
|
allIntents.push ({
|
|
name: 'EmailIntentLaunch',
|
|
slots: [],
|
|
samples: [
|
|
'I want to send a message',
|
|
'I would like to send a message',
|
|
'I would like to leave a message',
|
|
'Leave a message',
|
|
],
|
|
});
|
|
|
|
allIntents.push ({
|
|
name: 'EmailIntent',
|
|
slots: [
|
|
{
|
|
name: 'Name',
|
|
type: 'AMAZON.US_FIRST_NAME',
|
|
},
|
|
{
|
|
name: 'Email',
|
|
type: 'AMAZON.LITERAL',
|
|
},
|
|
{
|
|
name: 'Message',
|
|
type: 'AMAZON.LITERAL',
|
|
},
|
|
{
|
|
name: 'Data',
|
|
type: 'AMAZON.LITERAL',
|
|
},
|
|
],
|
|
|
|
samples: [
|
|
'My name is {Name}',
|
|
'I am {Name}',
|
|
'{exampleww at wwdwdw|Data}',
|
|
'My email is {example at efefegedd|Email}',
|
|
'Send replay to {example at abcdefg|Email}',
|
|
'My message is {The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.The quick brown fox jumps over the lazy dog.|Message}',
|
|
],
|
|
});
|
|
|
|
result.interactionModel = {};
|
|
|
|
result.interactionModel.languageModel = {
|
|
invocationName: skill.invocationName,
|
|
intents: allIntents,
|
|
};
|
|
|
|
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),
|
|
}
|
|
);
|
|
};
|
|
|
|
module.exports = {
|
|
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);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
};
|