Skip to content

Instantly share code, notes, and snippets.

@NilsBacke
Created August 17, 2018 21:59
Show Gist options
  • Save NilsBacke/0f91781a615e86fec4153ecbcf1c158c to your computer and use it in GitHub Desktop.
Save NilsBacke/0f91781a615e86fec4153ecbcf1c158c to your computer and use it in GitHub Desktop.
/* eslint-disable func-names */
/* eslint-disable no-console */
const Alexa = require('ask-sdk-core');
const axios = require('axios');
const JSON = require('circular-json');
const baseURL = 'https://api.amazonalexa.com';
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
},
handle(handlerInput) {
const speechText = 'Welcome to the Alexa Skills Kit, you can say hello!';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withSimpleCard('Hello World', speechText)
.getResponse();
}
};
const GetMyEmailIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'GetMyEmailIntent'
);
},
handle(handlerInput) {
var apiaccessToken =
handlerInput.requestEnvelope.context.System.apiAccessToken;
return new Promise(resolve => {
getEmail(apiaccessToken, email => {
var speechText = 'Your email is ' + email;
resolve(
handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse()
);
});
});
}
};
function getEmail(apiaccessToken, callback) {
headers = {
Authorization: 'Bearer ' + apiaccessToken,
'content-type': 'application/json'
};
axios
.get(baseURL + '/v2/accounts/~current/settings/Profile.email', {
headers: headers
})
.then(response => {
console.log(JSON.stringify(response));
callback(response.data);
});
}
const HelpIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'
);
},
handle(handlerInput) {
const speechText = 'You can say hello to me!';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.withSimpleCard('Hello World', speechText)
.getResponse();
}
};
const CancelAndStopIntentHandler = {
canHandle(handlerInput) {
return (
handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
(handlerInput.requestEnvelope.request.intent.name ===
'AMAZON.CancelIntent' ||
handlerInput.requestEnvelope.request.intent.name ===
'AMAZON.StopIntent')
);
},
handle(handlerInput) {
const speechText = 'Goodbye!';
return handlerInput.responseBuilder
.speak(speechText)
.withSimpleCard('Hello World', speechText)
.getResponse();
}
};
const SessionEndedRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
},
handle(handlerInput) {
console.log(
`Session ended with reason: ${
handlerInput.requestEnvelope.request.reason
}`
);
return handlerInput.responseBuilder.getResponse();
}
};
const ErrorHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
console.log(`Error handled: ${error.message}`);
return handlerInput.responseBuilder
.speak("Sorry, I can't understand the command. Please say again.")
.reprompt("Sorry, I can't understand the command. Please say again.")
.getResponse();
}
};
const skillBuilder = Alexa.SkillBuilders.custom();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequestHandler,
GetMyEmailIntentHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
SessionEndedRequestHandler
)
.addErrorHandlers(ErrorHandler)
.lambda();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment