Aquí tienes un ejemplo de cómo podrías crear un skill para Amazon Echo utilizando Node.js.
![](https://i0.wp.com/devcodelight.com/wp-content/uploads/2023/01/imagen-17.png?resize=900%2C269&ssl=1)
Este ejemplo muestra cómo crear un skill que te dé el pronóstico del tiempo para una ciudad específica.
Para empezar, necesitarás tener una cuenta de desarrollador de Amazon y un dispositivo Echo o la aplicación Alexa instalada en tu teléfono. También necesitarás una clave API de un servicio de pronóstico del tiempo, como OpenWeatherMap.
Una vez que tengas esto, puedes empezar a crear tu skill siguiendo estos pasos:
- Inicia sesión en la consola de desarrollo de skills de Amazon y selecciona «Crear un nuevo skill» en la página principal.
- Selecciona la opción «Custom» para crear un skill personalizado.
- Asigna un nombre y una palabra clave únicos a tu skill y selecciona el idioma en el que quieres que esté disponible.
- En la siguiente pantalla, selecciona la opción «Crear modelo desde cero» y haz clic en «Crear skill».
- En la consola de desarrollo, haz clic en «Intenciones» y luego en «Crear una intención». Asigna un nombre a tu intención, como «ObtenerPronóstico», y a
- ñade una frase de ejemplo que indique cómo se activará tu skill. Por ejemplo, «Dame el pronóstico del tiempo para {Ciudad}».
- Haz clic en «Crear» para guardar tu intención. Luego, haz clic en «Slots» y selecciona «Crear un slot». Asigna un nombre al slot, como «Ciudad», y selecciona el tipo «AMAZON.City». Esto le indicará a Alexa que espera recibir una ciudad como entrada para tu skill.
- Haz clic en «Crear» para guardar tu slot.
- Ahora, necesitarás escribir el código que controlará tu skill. Puedes hacerlo utilizando el editor de código en la consola de desarrollo de skills de Amazon.
- El código necesitará hacer lo siguiente:
- Realizar una solicitud a la API de pronóstico del tiempo utilizando la ciudad proporcionada por el usuario.
- Procesar la respuesta de la API y extraer la información relevante, como la temperatura y el estado del cielo.
- Devolver una respuesta a Alexa con el pronóstico del tiempo para la ciudad solicitada.
Aquí tienes un ejemplo de código que hace todo lo anterior:
const Alexa = require('ask-sdk-core'); const https = require('https'); const LaunchRequestHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, handle(handlerInput) { const speechText = 'Bienvenido a mi skill de pronóstico del tiempo. Puedes decirme "Dame el pronóstico del tiempo para Madrid" para obtener el pronóstico para una ciudad específica.'; return handlerInput.responseBuilder .speak(speechText) .reprompt(speechText) .withSimpleCard('Bienvenido', speechText) .getResponse(); }, }; const ObtenerPronosticoIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'ObtenerPronostico'; }, handle(handlerInput) { const ciudad = handlerInput.requestEnvelope.request.intent.slots.Ciudad.value; return new Promise((resolve, reject) => { https.get(`https://api.openweathermap.org/data/2.5/weather?q=${ciudad}&appid=YOUR_API_KEY_HERE`, (res) => { let body = ''; res.on('data', (chunk) => { body += chunk; }); res.on('end', () => { const response = JSON.parse(body); const temperature = response.main.temp; const weather = response.weather[0].description; const speechText = `El pronóstico del tiempo para ${ciudad} es de ${temperature} grados y ${weather}.`; resolve(handlerInput.responseBuilder .speak(speechText) .withSimpleCard('Pronóstico del tiempo', speechText) .getResponse()); }); }).on('error', (e) => { reject(e); }); }); }, }; const HelpIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'; }, handle(handlerInput) { const speechText = 'Puedes decirme "Dame el pronóstico del tiempo para Madrid" para obtener el pronóstico para una ciudad específica.'; return handlerInput.responseBuilder .speak(speechText) .reprompt(speechText) .withSimpleCard('Ayuda', 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 = '¡Hasta luego!'; return handlerInput.responseBuilder .speak(speechText) .withSimpleCard('Hasta luego', 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('Lo siento, ha habido un error. Por favor, inténtalo de nuevo.') .reprompt('Lo siento, ha habido un error. Por favor, inténtalo de nuevo.') .getResponse(); }, }; const skillBuilder = Alexa.SkillBuilders.custom(); exports.handler = skillBuilder .addRequestHandlers( LaunchRequestHandler, ObtenerPronosticoIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, SessionEndedRequestHandler ) .addErrorHandlers(ErrorHandler) .lambda();
Este código utiliza el módulo ask-sdk-core
de Node.js para crear una aplicación de skill para Alexa. Utiliza la intención «ObtenerPronostico» y el slot «Ciudad» que configuramos anteriormente y realiza una solicitud a la API de pronóstico del tiempo utilizando la ciudad proporcionada por el usuario. Luego, procesa la respuesta de la API y extrae la información relevante, como la temperatura y el estado del cielo. Finalmente, devuelve una respuesta a Alexa con el pronóstico del tiempo para la ciudad solicitada.
Este es sólo un ejemplo básico de cómo crear un skill para Alexa utilizando Node.js. Puedes añadir más intenciones y slots y utilizar diferentes APIs para expandir las funcionalidades de tu skill.
![](https://i0.wp.com/devcodelight.com/wp-content/uploads/2022/02/img.png?resize=100%2C100&ssl=1)
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.