Como Actualizar tus Skills de Alexa para que hablen Español en Estados Unidos

Carlos Ordonez May 10, 2019
Share:
Spanish Localization
Blog_Header_Post_Img

Hemos anunciado que Amazon Alexa y los dispositivos habilitados con Alexa en Estados Unidos ahora pueden hablar Español. Así es, los desarrolladores pueden usar el Alexa Skills Kit (ASK) para crear skills en Español y publicarlas en los Estados Unidos de América usando el nuevo modelo de lenguaje Español para los Estados Unidos de América: “Spanish (US)”.

Si eres nuevo en el desarrollo de skills, consulta este tutorial detallado para comenzar, o bien, si eres un desarrollador de Alexa con experiencia, podrás mejorar tu habilidad para crear skills de Alexa en múltiples modelos de lenguaje. Este tutorial te mostrará como puedes agregar soporte para el modelo “Spanish (US)” para tus skills existentes y te mostrará como usar el ASK para habilitar a que Alexa responda en función de las configuraciones regionales, es decir, con base en los modelos de lenguaje soportados.

Aprenderás:

  1. Como actualizar una skill de Alexa para clientes hispanoparlantes en Estados Unidos de América agregando el nuevo modelo de lenguaje “Spanish (US)”.
  2. Como actualizar tu función AWS lambda para que tu skill ofrezca el contenido correcto a tus clientes en cada una de las regiones admitidas, todo desde un solo código.

Parte 1: Agregar el nuevo modelo de Lenguaje para tu Skill

1. Navega hasta tu skill existente en Amazon Developer Portal.

2. Haz click en el “dropdown” en la parte superior derecha de la pantalla y selecciona la opción “Language Settings”, en este ejemplo, la skill ya tiene los modelos para inglés, español, alemán y francés. Por sus traducciones al inglés: English (US), Spanish (Spain), German and French, respectivamente

how to use alexa skills

3. Dentro de “language settings” sigue estos pasos para completar la pantalla:

  • Haz click sobre “Add new language”

how to use alexa skills

Selecciona “Spanish (US)

how to use alexa skills

Haz click en “Save” para guardar, localizado en la parte superior de la pantalla. Ahora tendrás “Spanish (US)” como modelo de lenguaje mas en  la lista.

how to use alexa skills

4. Ahora tienes que crear el modelo de interacción para “Spanish (US)”. Esto lo puedes hacer copiando el modelo de interacción de la versión en inglés, y traduciendo los “utterances” de ejemplo junto con los valores de los “slot”, no olvides también actualizar los sinónimos. En este ejemplo, empezamos de la versión en inglés. Para lograrlo, haz click en el “dropdown” de lenguaje y selecciona “Spanish (US)”

how to use alexa skills

5. Ahora solo tienes que ir al editor de JSON. Para conseguirlo, haz click en “JSON Editor” en la barra izquierda. Esto despliega el modelo de interacción completo para la skill en formato JSON (JavaScript Object Notation).

how to use alexa skills

6. Selecciona todo el contenido y cópialo.

7. Ahora en el menú de lenguajes, en la esquina superior izquierda, selecciona “Spanish (US)”, para cambiarte al modelo de Español para Estados Unidos.

8. Haz click en “JSON Editor” en la barra izquierda, selecciona todo el texto y reemplázalo por el contenido que copiaste en el paso 6.

9. Ahora debes traducir y adaptar el contenido en las “utterances”“slots” y sinónimos, para que concuerden y tengan sentido en el lenguaje español.

10. Haz click en “Save Model” para guardar los cambios que has realizado.

11. Haz click en “Build Model” para construir el modelo y dejarlo listo.

Listo, ya tienes un modelo de lenguaje para “Spanish (US)”, pero aun está en inglés, por lo que ahora tienes que traducir el “invocation name”, las “utterances” de ejemplo, los slot y sus sinónimos a español.

Adicionalmente, tienes que traducir los metadatos de la skill, incluyendo el nombre de la skill, la descripción, las palabras clave y los íconos, en caso de que contengan contenido en otro idioma, como texto o símbolos de moneda. Los metadatos de la skill están disponibles en la pestaña "Distribution" de la Consola de desarrollador de Alexa.

Si tu modelo de interacción utiliza algún tipo de “built-in” slot, es posible que tengas que realizar cambios para asegurar que los tipos sean compatibles con el modelo de lenguaje “Spanish (US)”. Para mas información, consulta la referencia de tipos de slots para el modelo de lenguaje. LINK

Una vez que hayas terminado de traducir el modelo de interacción a “Spanish (US)”, debes adaptar las respuestas de tu skill para que sean compatibles con el modelo de lenguaje nuevo. Para hacer esto tienes que modificar tu función Lambda (Parte 2) de este tutorial.

Parte 2: Actualizar tu función AWS Lambda

Ahora que tu skill está lista para soportar múltiples lenguajes, tienes que actualizar tus funciones de AWS Lambda para asegurarte que devuelve respuestas válidas traducidas o adaptadas para cada modelo de lenguaje soportado.

Al menos, tendrás que traducir al español las cadenas de caracteres que la función AWS Lambda está retornando para generar la respuesta de voz. Incluso es posible que uses está técnica para responder de manera distinta a las diferentes variaciones de español e inglés, y así adecuar la respuesta para español de México, español de España y/o español de Estados Unidos, por ejemplo, podrías programar la respuesta para que salude a los usuarios de maneras distintas: “¿Qué onda, cómo estás?”, “¿Qué guay, cómo andas?” , ”¿Aló, cómo te va?” o un simple y formal “¡Hola! ¿qué tal?”, entre otras variantes. Para lograrlo puedes utilizar la librería de localización para identificar cual es el texto adecuado para la región. En este artículo, utilizo un ejemplo que hice con el ASK SDKv2 para Node.js.

Paso 0: Agregar la librería de localización

Para facilitar la localización de tu skill, debes utilizar la librería de internacionalización disponible para el lenguaje que has elegido. Este ejemplo uso i18next en conjunto con un interceptor. Para aprender mas sobre esto, visita: Como localizar tus skills de Alexa

Copied to clipboard
const i18n = require('i18next');
const sprintf = require('i18next-sprintf-postprocessor');

const LocalizationInterceptor = {
  process(handlerInput) {
    // Gets the locale from the request and initializes 
    // i18next.
    const localizationClient = i18n.use(sprintf).init({
      lng: handlerInput.requestEnvelope.request.locale,
      resources: languageStrings,
    });
    // Creates a localize function to support arguments.
    localizationClient.localize = function localize() {
      // gets arguments through and passes them to
      // i18next using sprintf to replace string placeholders
      // with arguments.
      const args = arguments;
      const values = [];
      for (let i = 1; i < args.length; i += 1) {
        values.push(args[i]);
      }
      const value = i18n.t(args[0], {
        returnObjects: true,
        postProcess: 'sprintf',
        sprintf: values,
      });

      // If an array is used then a random value is selected 
      if (Array.isArray(value)) {
        return value[Math.floor(Math.random() * value.length)];
      }
      return value;
    };
    // this gets the request attributes and save the localize function inside 
    // it to be used in a handler by calling requestAttributes.t(STRING_ID, [args...])
    const attributes = handlerInput.attributesManager.getRequestAttributes();
    attributes.t = function translate(...args) {
      return localizationClient.localize(...args);
    };
  },
};
Paso 1: Identifica las cadenas de caracteres (“strings”) que usa tu skill y colócalas en una lista.

Crea todas las “strings” usando la siguiente estructura:

Copied to clipboard
const enData = {
  translation: {
    SKILL_NAME: 'Space Facts',
    GET_FACT_MESSAGE: 'Here\'s your fact: ',
    HELP_MESSAGE: 'You can say tell me a space fact, or, you can say exit... What can I help you with?',
    HELP_REPROMPT: 'What can I help you with?',
    FALLBACK_MESSAGE: 'The Space Facts skill can\'t help you with that.  It can help you discover facts about space if you say tell me a space fact. What can I help you with?',
    FALLBACK_REPROMPT: 'What can I help you with?',
    ERROR_MESSAGE: 'Sorry, an error occurred.',
    STOP_MESSAGE: 'Goodbye!',
    FACTS:
      [
        'A year on Mercury is just 88 days long.',
        'Despite being farther from the Sun, Venus experiences higher temperatures than Mercury.',
        'On Mars, the Sun appears about half the size as it does on Earth.',
        'Jupiter has the shortest day of all the planets.',
        'The Sun is an almost perfect sphere.',
      ],
  },
};

Estoy utilizando las “strings” del modelo en inglés como base para la traducción. La constante “enData” contiene todas las “strings” usadas por mi skill en inglés. Usaremos un interceptor y la librería “i18next”. Esta librería soporta “strings” y listas de “strings”

Paso 2: Localiza las “strings” para “Spanish (US)”

Usando la lista que obtuviste en el paso 1, ahora tienes que traducir a español todos los “strings” que están en inglés, y asignarlos en una constante llamada “esusData”.

Copied to clipboard
const esusData = {
  translation: {
    SKILL_NAME: 'Curiosidades Espaciales',
    GET_FACT_MESSAGE: 'Sabías que ',
    HELP_MESSAGE: 'Puedes decir dime una curiosidad espacial o puedes decir salir... Cómo te puedo ayudar?',
    HELP_REPROMPT: 'Cómo te puedo ayudar?',
    FALLBACK_MESSAGE: 'La skill de Curiosidades Espaciales no te puede ayudar con eso. Puede ayudarte a descubrir curiosidades sobre el espacio si dices, dime una curiosidad espacial. Cómo te puedo ayudar?',
    FALLBACK_REPROMPT: 'Cómo te puedo ayudar?',
    ERROR_MESSAGE: 'Perdona, ha ocurrido un error.',
    STOP_MESSAGE: 'Adios!',
    FACTS:
      [
        'Un año en Mercurio es de solo 88 días.',
        'A pesar de estar más lejos del Sol, Venus tiene temperaturas más altas que Mercurio.',
        'En Marte, el Sol parece de aproximadamente la mitad de tamaño que desde la Tierra.',
        'Jupiter tiene el día más corto de todos los planetas.',
        'El Sol es una esfera casi perfecta.'
      ]
  }
};
Paso 3: Agrega la constante con los “strings” traducidos a la lista de regiones soportadas.

Cuando creaste el interceptor de i18next en el paso 0, es posible que notaste un atributo llamado “languageStrings”, este atributo contiene los locales soportados y su ubicación. Cada lenguaje es referenciado por un código local, i18next busca con base en el idioma y la región, en caso de no encontrar un “string” para esa región, entonces usa el otra región pero del mismo idioma para responder. Por ejemplo, si tienes todas las “strings” disponibles para “en” pero solo un mensaje de bienvenida especifico para “en-AU”, entonces las peticiones que vengan con “en-AU” recibirán un mensaje de bienvenida específico, mientras que todas las demás “strings” serán de la lista correspondiente para “en”.

Copied to clipboard
const languageStrings = {
  'de-DE': deData,
  'en': enData,
  'en-US': enusData,
  'es': esData,
  'es-ES': esesData,
  'es-US': esusData
};

En este ejemplo agregué “es-US” al final de la lista y añadí una referencia al objeto que traduje en el paso 2.

Paso 4: Usando las “strings” en el código

Utilizando el interceptor que creaste en combinación con la librería i18next, ahora puedes hacer referencia a las “strings” usando el ID y de forma automática la skill contestará con la región correcta. La “string” es seleccionada con base en la región (locale) que recibe la función AWS Lambda en el request.

Por ejemplo, en el siguiente código, muestro el método “handle” para un “AMAZON.HelpIntent”. La llamada a la función requestAttrbiutes.t(‘HELP_MESSAGE’) regresa el mensaje de ayuda cuyo ID es “HELP_MESSAGE” para la región configurada.

Copied to clipboard
handle(handlerInput) {
    const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
    return handlerInput.responseBuilder
      .speak(requestAttributes.t('HELP_MESSAGE'))
      .reprompt(requestAttributes.t('HELP_REPROMPT'))
      .getResponse();
  }

Es todo lo que se necesita para crear actualizar una skill existente para que soporte el modelo de lenguaje “Spanish (US)” y hable español de los Estados Unidos de América. Este ejemplo de Curiosidades Espaciales “Space Facts” ha sido traducido y adaptado para soportar múltiples modelos de lenguaje incluido “Spanish (US)”, bájalo, configúralo y diviértete creando Skills Internacionales.

how to use alexa skills

Checa la documentación para aprender mas acerca de como usar ASK para crear skills multilenguaje.

Empieza Aquí