Files
old-tellall/backend/helpers/amazon.js
2018-01-11 04:24:16 +01:00

173 lines
3.7 KiB
JavaScript

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 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);
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: [],
},
];
/*
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.Person'
},
{
name: 'Email',
type: 'AMAZON.LITERAL'
},
{
name: 'Message',
type: 'AMAZON.LITERAL'
},
{
name: 'Data',
type: 'AMAZON.LITERAL'
}
],
samples: [
'My name is {Name}',
'I am {Name}',
'{Data}',
'My email is {Email}',
'Send replay to {Email}',
'My message is {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);
});
}
});
},
};