Skip to content

Instantly share code, notes, and snippets.

@germanviscuso
Last active December 12, 2018 12:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save germanviscuso/4b8002ac3d6a4668537cf6e4093093b4 to your computer and use it in GitHub Desktop.
Save germanviscuso/4b8002ac3d6a4668537cf6e4093093b4 to your computer and use it in GitHub Desktop.
Workshop Barcelona 20181120
{
"interactionModel": {
"languageModel": {
"invocationName": "curiosidades espaciales",
"intents": [
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": [
"salir"
]
},
{
"name": "AMAZON.NavigateHomeIntent",
"samples": []
},
{
"name": "GetNewFactIntent",
"slots": [],
"samples": [
"una curiosidad",
"dame una curiosidad",
"quiero un dato",
"un dato",
"dame un dato",
"dime un dato"
]
},
{
"name": "GetFactByPlanet",
"slots": [
{
"name": "planeta",
"type": "tipoPlaneta",
"samples": [
"el planeta es {planeta}"
]
}
],
"samples": [
"dame un dato de un planeta",
"dime un dato de un planeta",
"quiero un dato de un planeta",
"dime datos de {planeta}",
"una curiosidad de {planeta}",
"dame una curiosidad de {planeta}",
"quiero un dato de {planeta}",
"un dato de {planeta}",
"dame un dato de {planeta}",
"dime un dato de {planeta}"
]
}
],
"types": [
{
"name": "tipoPlaneta",
"values": [
{
"name": {
"value": "plutón"
}
},
{
"name": {
"value": "venus"
}
},
{
"name": {
"value": "júpiter"
}
},
{
"name": {
"value": "saturno"
}
},
{
"name": {
"value": "la tierra"
}
},
{
"name": {
"value": "marte",
"synonyms": [
"planeta rojo"
]
}
}
]
}
]
},
"dialog": {
"intents": [
{
"name": "GetNewFactIntent",
"confirmationRequired": true,
"prompts": {
"confirmation": "Confirm.Intent.1339141455341"
},
"slots": []
},
{
"name": "GetFactByPlanet",
"confirmationRequired": false,
"prompts": {},
"slots": [
{
"name": "planeta",
"type": "tipoPlaneta",
"confirmationRequired": true,
"elicitationRequired": true,
"prompts": {
"confirmation": "Confirm.Slot.259790494392.392868107546",
"elicitation": "Elicit.Slot.259790494392.392868107546"
}
}
]
}
]
},
"prompts": [
{
"id": "Confirm.Intent.1339141455341",
"variations": [
{
"type": "PlainText",
"value": "¿Confirmas?"
},
{
"type": "PlainText",
"value": "¿Estás seguro?"
}
]
},
{
"id": "Elicit.Slot.259790494392.392868107546",
"variations": [
{
"type": "PlainText",
"value": "Vale, pero no me has dicho el planeta"
}
]
},
{
"id": "Confirm.Slot.259790494392.392868107546",
"variations": [
{
"type": "PlainText",
"value": "¿Estas seguro que quieres {planeta} ?"
}
]
}
]
}
}
/* eslint-disable func-names */
/* eslint-disable no-console */
/* IMPORTANTE: este lambda requiere modificar el rol asignado en IAM para incluir permisos de acceso a dynamodb */
const Alexa = require('ask-sdk');
const BIENVENIDO_MSG = 'Bienvenido a la skill curiosidades espaciales';
const AYUDA_MSG = 'Puedes decirme dime un dato o curiosidad';
// Spanish, European (es-ES): Enrique / Conchita
// Spanish, US (es-US): Miguel / Penelope (not supported yet)
function switchVoice(text, voice_name) {
if (text){
return "<voice name='" + voice_name + "'>" + text + "</voice>"
}
}
const LaunchRequestHandler = {
canHandle(handlerInput){
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest'
},
async handle(handlerInput){
const attributes = await handlerInput.attributesManager.getPersistentAttributes();
console.log("TIMES: " + attributes.aperturas);
if(!attributes.aperturas){
attributes.aperturas = 0;
}
attributes.aperturas = attributes.aperturas + 1;
handlerInput.attributesManager.setPersistentAttributes(attributes);
await handlerInput.attributesManager.savePersistentAttributes();
return handlerInput.responseBuilder
.speak(BIENVENIDO_MSG + ". Has ingresado " + attributes.aperturas + " veces. "+ AYUDA_MSG)
.reprompt(AYUDA_MSG)
.getResponse();
}
}
const GetNewFactHandlerInProgress = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'GetNewFactIntent'
&& request.dialogState !== 'COMPLETED');
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
const intent = request.intent;
return responseBuilder
.addDelegateDirective(intent)
.getResponse();
}
}
const GetNewFactHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'GetNewFactIntent');
},
handle(handlerInput) {
let intent = handlerInput.requestEnvelope.request.intent;
let speechOutput = 'No he entendido tu confirmación, te doy el dato igual. ';
if(intent.confirmationStatus === 'CONFIRMED')
speechOutput = 'Vale! ';
if(intent.confirmationStatus === 'DENIED') {
speechOutput = 'Lo lamento! Adiós';
return handlerInput.responseBuilder
.speak(speechOutput)
.getResponse();
}
const factArr = data;
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
speechOutput = GET_FACT_MESSAGE + randomFact;
return handlerInput.responseBuilder
.speak(speechOutput)
.withSimpleCard(SKILL_NAME, randomFact)
.getResponse();
},
};
function getSlotValue(handlerInput) {
let slotValue;
try {
slotValue = handlerInput.requestEnvelope.request.intent.slots.planeta.value;
} catch (error) {
slotValue = null;
}
return slotValue;
}
const GetFactByPlanetHandlerInProgress = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'GetFactByPlanet'
&& request.dialogState !== 'COMPLETED');
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
const responseBuilder = handlerInput.responseBuilder;
const intent = request.intent;
return responseBuilder
.addDelegateDirective(intent)
.getResponse();
}
}
const GetFactByPlanet = {
canHandle(handlerInput){
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'GetFactByPlanet');
},
handle(handlerInput){
let planeta = getSlotValue(handlerInput);
let fact = getFactByPlanet(planeta);
const speechOutput = GET_FACT_MESSAGE + fact;
return handlerInput.responseBuilder
.speak(speechOutput)
.withSimpleCard(SKILL_NAME, fact)
.getResponse();
}
}
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 sol_data = [,
'Desde Marte la apariencia del Sol es aproximadamente la mitad del tamaño que desde la Tierra.',
'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.',
'La temperatura en el interior del Sol puede alcanzar 15 millones de grados Centigrados.',
];
const mercurio_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. ',
'La Via Lactea hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
const venus_data = [
'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. ',
'La Via Lactea hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
const tierra_data = [
'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.',
'La Via Lactea hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
'Los eclipses solares totales pueden suceder una vez cada 1 o 2 años. Esto los hace eventos poco comunes.',
'La Luna se esta alejando de la Tierra 3.8 cm al año.',
];
const luna_data = [
'La lune hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
'Los eclipses lunares totales pueden suceder una vez cada 1 o 2 años. Esto los hace eventos poco comunes.',
'La Luna se esta alejando de la Tierra 3.8 cm al año.',
];
const marte_data = [
'Desde Marte la apariencia del Sol es aproximadamente la mitad del tamaño que desde la Tierra.',
'Marte hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
const jupiter_data = [
'Jupiter tiene el dia mas corto de todos los planetas.',
'Jupiter hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
const saturno_data = [
'Saturno hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
'Saturno irradia al espacio 2.5 veces más energia de la que recibe del sol.',
];
const urano_data = [
'Urano hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
const neptuno_data = [
'Neptuno hara colisión con la galaxia Andromeda en alrededor de 5 billones de años.',
];
function getFactByPlanet(planet){
let factArr;
switch (planet) {
case 'sol':
factArr = sol_data;
break;
case 'mercurio':
factArr = mercurio_data;
break;
case 'venus':
factArr = venus_data;
break;
case 'tierra':
factArr = tierra_data;
break;
case 'luna':
factArr = luna_data;
break;
case 'marte':
factArr = marte_data;
break;
case 'jupiter':
factArr = jupiter_data;
break;
case 'saturno':
factArr = saturno_data;
break;
case 'urano':
factArr = urano_data;
break;
case 'neptuno':
factArr = neptuno_data;
break;
default:
factArr = data;
break;
}
const factIndex = Math.floor(Math.random() * factArr.length);
const randomFact = factArr[factIndex];
return randomFact;
}
const UnhandledHandler = {
canHandle(handlerInput){
return true;
},
handle(handlerInput){
return handlerInput.responseBuilder
.speak('No se como hacer eso')
//.speak(handlerInput.requestEnvelope.request.intent.name)
.getResponse();
}
}
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequestHandler,
GetNewFactHandlerInProgress,
GetNewFactHandler,
GetFactByPlanetHandlerInProgress,
GetFactByPlanet,
HelpHandler,
ExitHandler,
SessionEndedRequestHandler,
UnhandledHandler
)
.addErrorHandlers(ErrorHandler)
.withAutoCreateTable(true)
.withTableName('CuriosidadesEspaciales')
.lambda();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment