Skip to content

Instantly share code, notes, and snippets.

@germanviscuso
Last active November 29, 2018 10:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save germanviscuso/9ee3ae42eafe888810d4e2a6dd4c247d to your computer and use it in GitHub Desktop.
Save germanviscuso/9ee3ae42eafe888810d4e2a6dd4c247d to your computer and use it in GitHub Desktop.
Alexa Skills Basics: out-of-domain utterance detection with no Fallback intent
{
"interactionModel": {
"languageModel": {
"invocationName": "curiosidades espaciales",
"intents": [
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": []
},
{
"name": "AMAZON.NavigateHomeIntent",
"samples": []
},
{
"name": "GetNewFactIntent",
"slots": [
{
"name": "dato",
"type": "tipoDato"
},
{
"name": "un",
"type": "tipoUn"
},
{
"name": "quiero",
"type": "tipoQuiero"
}
],
"samples": [
"{un} {dato}",
"{quiero} {un} {dato}",
"{dato}"
]
}
],
"types": [
{
"name": "tipoDato",
"values": [
{
"name": {
"value": "curiosidad"
}
},
{
"name": {
"value": "hecho"
}
},
{
"name": {
"value": "dato"
}
}
]
},
{
"name": "tipoUn",
"values": [
{
"name": {
"value": "una"
}
},
{
"name": {
"value": "un"
}
}
]
},
{
"name": "tipoQuiero",
"values": [
{
"name": {
"value": "di me"
}
},
{
"name": {
"value": "da me"
}
},
{
"name": {
"value": "dime"
}
},
{
"name": {
"value": "dame"
}
},
{
"name": {
"value": "quiero"
}
}
]
}
]
}
}
}
/* eslint-disable func-names */
/* eslint-disable no-console */
const Alexa = require('ask-sdk');
const BIENVENIDO_MSG = 'Bienvenido a la skill curiosidades espaciales';
const AYUDA_MSG = 'Puedes decirme dime un dato o curiosidad';
const LaunchRequestHandler = {
canHandle(handlerInput){
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest'
},
handle(handlerInput){
return handlerInput.responseBuilder
.speak(BIENVENIDO_MSG + ". " + AYUDA_MSG)
.reprompt(AYUDA_MSG)
.getResponse();
}
}
const GetNewFactHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'GetNewFactIntent');
},
handle(handlerInput) {
if(!slotIsMatched(handlerInput)) {
return handlerInput.responseBuilder
.speak("No entiendo eso. " + AYUDA_MSG)
.reprompt(AYUDA_MSG)
.getResponse();
}
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
let speechOutput = GET_FACT_MESSAGE + randomFact;
return handlerInput.responseBuilder
.speak(speechOutput)
.withSimpleCard(SKILL_NAME, randomFact)
.getResponse();
},
};
function slotIsMatched(handlerInput){
let slot = handlerInput.requestEnvelope.request.intent.slots.dato;
if (slot &&
slot.resolutions &&
slot.resolutions.resolutionsPerAuthority[0] &&
slot.resolutions.resolutionsPerAuthority[0].status &&
slot.resolutions.resolutionsPerAuthority[0].status.code &&
slot.resolutions.resolutionsPerAuthority[0].status.code &&
slot.resolutions.resolutionsPerAuthority[0].status.code === 'ER_SUCCESS_MATCH') {
return true;
}
return false;
}
const HelpHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest'
&& request.intent.name === 'AMAZON.HelpIntent';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(HELP_MESSAGE)
.reprompt(HELP_REPROMPT)
.getResponse();
},
};
const ExitHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'IntentRequest'
&& (request.intent.name === 'AMAZON.CancelIntent'
|| request.intent.name === 'AMAZON.StopIntent');
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(STOP_MESSAGE)
.getResponse();
},
};
const SessionEndedRequestHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return 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(ERROR)
.reprompt(ERROR)
.getResponse();
},
};
const ERROR = 'Lo siento, ha ocurrido un error';
const SKILL_NAME = 'Space Facts';
const GET_FACT_MESSAGE = 'Aquí esta tu dato: ';
const HELP_MESSAGE = AYUDA_MSG;
const HELP_REPROMPT = 'Como te puedo ayudar?';
const STOP_MESSAGE = 'Adiós!';
const data = [
'Un año en Mercurio solo dura 88 dias.',
'A pesar de estar mas lejos del Sol, la temperatura en Venus es más alta que en Mercurio. ',
'El sentido de la rotacion de Venus es contra-reloj, possiblemente a causa de una colisión de un asteroide. ',
'Desde Marte la apariencia del Sol es aproximadamente la mitad del tamaño que desde la Tierra.',
'La Tierra es el unico planeta que no fue nombrado como un Dios.',
'Jupiter tiene el dia mas corto de todos los planetas.',
'La Via Lactea hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
'El 99.86% de la masa del sistema solar esta contenida en el Sol.',
'El Sol es una esfera casi perfecta.',
'Los eclipses solares totales pueden suceder una vez cada 1 o 2 años. Esto los hace eventos poco comunes.',
'Saturno irradia al espacio 2.5 veces más energia de la que recibe del sol.',
'La temperatura en el interior del Sol puede alcanzar 15 millones de grados Centigrados.',
'La Luna se esta alejando de la Tierra 3.8 cm al año.',
];
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequestHandler,
GetNewFactHandler,
ExitHandler,
SessionEndedRequestHandler,
)
.addErrorHandlers(ErrorHandler)
.lambda();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment