29/09/2025

Primeros pasos con Alexa Skills Kit

Alexa Skills Kit

En este tutorial vamos a aprender a crear una Custom Skill de Alexa. Para ello, entraremos en el portal de desarrolladores de Amazon, configuraremos nuestra Skill y desarrollaremos en nuestro equipo una API con un endpoint servido mediante ngrok, de forma que pueda ser invocada desde el portal.

¿Qué es?

Alexa Skills Kit (ASK) es un conjunto de herramientas y servicios de Amazon para crear, probar y desplegar experiencias conversacionales en dispositivos con Alexa. Permite desarrollar skills personalizadas que amplían las capacidades de Alexa, conectándose con servicios externos alojados en AWS Lambda o en cualquier servidor accesible por internet. Soporta comandos de voz, respuestas multimodales y control de dispositivos inteligentes. La página oficial de Alexa Skills Kit se encuentra en:

https://developer.amazon.com/es-ES/alexa/alexa-skills-kit

¿Cómo me registro?

Para poder acceder al portal de desarrolladores, es necesario estar registrado en Amazon.

  1. Crear (si no la tienes) una cuenta de Amazon (puede ser la misma que usas para comprar).
  2. Activar tu cuenta de desarrollador gratuitamente desde https://developer.amazon.com

¿Cómo creo mi primera Custom Skill?

  1. Accedemos a https://developer.amazon.com/alexa/console/ask y creamos una nueva skill: Crear skill
  2. Configuramos el nombre y la localización: Name, locale
  3. Configuramos la experiencia (puedes elegir el que más se adapte a tus necesidades, en mi caso de ejemplo “Other”), el modelo (custom para una Custom Skill) y el servidor (uno propio porque la vamos a probar en nuestro equipo). Experience, model, hosting
  4. En la siguiente página, elegimos crearlo desde cero: Templates
  5. Finalmente, revisamos que todo esté bien y hacemos clic en “Create skill”. Esta operación puede tardar unos segundos: Review

¿Cómo desarrollo mi primera Custom Skill?

En primer lugar, vamos a crear el backend con NodeJS. Se puede desarrollar en varios lenguajes, como Python o Java, pero optaremos por NodeJS por tener más soporte oficial.

  1. Instalar NodeJS.
  2. Crear el proyecto:
    npm init -y
    
  3. Instalar dependencias:
    npm install --save express ask-sdk-core ask-sdk-express-adapter
    
  4. Añadir a scripts del package.json:
    "start": "node index.js",
    
  5. Crear la skill básica en index.js:
     const express = require("express");
     const { ExpressAdapter } = require("ask-sdk-express-adapter");
     const Alexa = require("ask-sdk-core");
    
     const LaunchRequestHandler = {
         canHandle(handlerInput) {
             return Alexa.getRequestType(handlerInput.requestEnvelope) === "LaunchRequest";
         },
         handle(handlerInput) {
             return handlerInput.responseBuilder
                 .speak("¡Hola! ¿En qué puedo ayudarte hoy?")
                 .getResponse();
         }
     };
    
     const HowAreYouIntentHandler = {
         canHandle(handlerInput) {
             return Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
                 Alexa.getIntentName(handlerInput.requestEnvelope) === "HowAreYouIntent";
         },
         handle(handlerInput) {
             return handlerInput.responseBuilder
                 .speak("¡Estoy muy bien, gracias por preguntar! ¿Y tú?")
                 .getResponse();
         }
     };
    
     const FoodIntentHandler = {
         canHandle(handlerInput) {
             return Alexa.getRequestType(handlerInput.requestEnvelope) === "IntentRequest" &&
                 Alexa.getIntentName(handlerInput.requestEnvelope) === "FoodIntent";
         },
         handle(handlerInput) {
             return handlerInput.responseBuilder
                 .speak("Yo no sé qué hay de comer.")
                 .getResponse();
         }
     };
    
     const skillBuilder = Alexa.SkillBuilders.custom();
     const skill = skillBuilder
         .addRequestHandlers(
             LaunchRequestHandler,
             HowAreYouIntentHandler,
             FoodIntentHandler
         )
         .create();
    
     const app = express();
     const adapter = new ExpressAdapter(skill, false, false);
     app.post("/", adapter.getRequestHandlers());
    
     const port = 5000;
     app.listen(port, () => {
         console.log(`Servidor Alexa escuchando en http://localhost:${port}`);
     });
    
  6. Ejecutar servidor de la skill:
    npm start
    
    Aparecerá el mensaje:
    Servidor Alexa escuchando en http://localhost:5000
    

¿Cómo expongo mi servicio?

Para poder probar el código, debemos exponer nuestro servidor en http://localhost:5000 al exterior, para que la Skill de Alexa pueda enviarle órdenes. Para ello, necesitamos configurar ngrok en el puerto donde escuche el servicio, en nuestro caso, el 5000.

  1. Crear un token de ngrok desde su dashboard. Sólo hay que registrarse y copiar el token que aparece dentro de Getting Started / Your Authtoken.
  2. Instalar la dependencia en nuestro servicio:
    npm install ngrok --save-dev
    
  3. Configuramos el token:
    npx ngrok config add-authtoken YOUR_TOKEN
    
  4. Añadir el siguiente script en el archivo package.json, apartado scripts:
     "scripts": {
         "start": "node index.js",
         "test": "echo \"Error: no test specified\" && exit 1",
         "ngrok": "ngrok http 5000"
     },
    
  5. Ahora ejecutamos ngrok en el puerto 5000:
    npm run ngrok
    
  6. Copiamos la URL que nos ha generado en Forwarding, algo así como: https://9acf-83-56-221-171.ngrok-free.app Debería aparecer en la terminal algo así como: Ngrok

¿Cómo configuro mi primera Custom Skill?

Una vez creada y desarrollada, debemos configurar:

El nombre con el que invocar la skill

Es el nombre que usaremos para invocar la skill, es decir, cuando digamos Alexa, quiero hablar con…. En mi ejemplo, utilizaré “test diego” (debe estar en minúsculas). Hacemos clic en Invocation Name:

Invocation name

Escribimos el nombre, hacemos clic en Save y aparecerá el mensaje de que se ha guardado con éxito:

Invocation name saved

Intents, ejemplos y slots

En el código de la skill desarrollado en el paso anterior, hemos definido que la skill puede identificar dos intenciones del usuario, éstas son:

  • HowAreYouIntent
  • FoodIntent Ahora, necesitamos entrenar a la skills con frases de ejemplo para que, al hablar, sea capaz de detectar la intención (tarea que se conoce como Intent Detection).
  1. Entramos en la página de configuración haciendo clic en Intents, Samples and Slots: Intents, Samples and Slots
  2. Creamos nuestro primer intent: Create intent
  3. Metemos frases de ejemplo: Añadir frases de ejemplo
  4. Repetimos los pasos para el intent FoodIntent.
  5. Construimos la skill: Construir la skill
  6. Y evaluamos el modelo para verificar que cumple con nuestras espectativas: Evaluar how are you Evaluar food

Endpoint

A continuación, vamos a configurar el endpoint donde tenemos nuestra skill. Recuerda tener el servidor de Alexa arrancado en local, ngrok y la URL copiada como vimos en los pasos anteriores.

  1. Entramos en la página de configuración haciendo clic en Endpoint: Endpoint
  2. Marcamos la opción HTTPS, puesto que en este ejemplo usaremos un servidor propio (nuestro equipo con ngrok), pegamos la URL de ngrok en Default Region (en este ejemplo no vamos a tener diferentes regiones), seleccionamos la opción de usar un subdomino para que funcione con la URL de ngrok y le damos a SAVE: Add endpoint

¿Cómo testeo la skill?

Desde la página de Test, habilitamos la opción de test, seleccionando Development:

Test

En la caja de texto podemos probar diferentes frases para verificar el funcionamiento de la skill. También podemos probarlo por voz.

En próximas entradas veremos cómo autenticar al usuario para personalizar su experiencia, o cómo desarrollar otros tipos de skills, o incluso cómo utilizar LLMs para generación de respuesta.

Deja una respuesta

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies