Publicando una Alexa skill en varios países
Tags: alexa, alexaskills, i18n, multiplesidiomas
Published: 2019-11-20 08:43:13

---
title: Publicando una Alexa skill en varios países
published: true
date: 2019-10-21 13:59:08 UTC
tags: alexa,alexaskills,i18n,multiples idiomas
canonical_url: https://www.kinisoftware.com/publicando-nuestra-alexa-skill-en-varios-paises/
---

Uno de los temas que me parece interesante a la hora de crear una skill [es la posibilidad de publicarla en otros países](https://developer.amazon.com/es/docs/custom-skills/develop-skills-in-multiple-languages.html). Y, dependiendo de la skill, puede ser una tarea bastante sencilla.

En mi caso, para la skill de [Estrenos de cine](https://www.amazon.es/Kinisoftware-Estrenos-de-cine/dp/B07MKCLZ62), me llevó apenas unas horas preparar el backend y luego crear los modelos de interacción para español de México y español de Estados Unidos. Además [la API que uso](https://developers.themoviedb.org/3) me ofrece la posibilidad de indicarle tanto la región como el idioma para los resultados.

Mi idea es publicarla también en inglés en distintos países, italiano, francés y portugués. Todos son idiomas que tanto la API como Alexa soportan. Pero, de momento, solo la tengo en español para tres países distintos y es lo que os voy a contar en este post.

## Preparando el backend

En cada petición de un usuario vamos a tener la información del `locale`. Los `locale` soportados por Alexa están en la [documentación oficial](https://developer.amazon.com/es/docs/custom-skills/develop-skills-in-multiple-languages.html#h2-code-changes) y tienen el siguiente formato: `es-ES` o `es-MX` para España o para México respectivamente. Por tanto de ahí podremos sacar las dos cosas que nos hacen falta: idioma y país.

Tenemos que adaptar:

- A la hora de enviar la petición a la API le tenemos que pasar tanto el idioma como la región. 
- A la hora de crear las respuestas para el usuario debemos tener en cuenta, al menos, el idioma. Dependiendo del tipo de lenguaje/frases que usemos puede que no haga falta localizarlas por país también. En mi caso creo que he usado unos textos bastante neutros en ese sentido y no he creado una variante para cada país (España, México y Estados Unidos) pero podría hacer falta.

Ya de paso, todo lo que hagamos ahora no solo debería servir para países con español sino para cualquier otro como el inglés, el francés, etc.

### Pasando a la API el idioma y el país

Según la especificación de la API podemos pasarle:

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-13-at-14.19.23.png)

- El `language` con un formato equivalente a lo que nos viene ya en la request.
- La `region` con un formato equivalente a la "parte final" del `locale` de la request.

Por tanto yo hice un código muy simple que solo serviría con el formato actual:

{% gist https://gist.github.com/kinisoftware/529a257ad012f0e604a4a10d57a78c8b %}

Y a la hora de llamar a la API le paso la info en esos dos campos:

{% gist https://gist.github.com/kinisoftware/ad9178f177b6d26131406699388c941b %}
### Localizando los textos para distintos idiomas

La otra parte a cubrir es tener textos localizados por idioma a la hora de elaborar la respuesta al usuario. Aunque yo solo tengo la skill publicada en español, quise dejar lista una solución para cubrir, al menos, casos de distintos idiomas. Pero, como decía antes, lo que hice no cubre si para un mismo idioma pero de distintos países quisiéramos tener textos distintos.

Hice una solución casera basada en una matriz de textos por idioma. No quise meterme en usar alguna librería ni le di muchas más vueltas pero todo feedback es bien recibido :)

{% gist https://gist.github.com/kinisoftware/d9f32bbbb8817ac83f0ab327c986b5e9 %}

Voy pidiendo los textos donde corresponda de usando las key del mapa que había definido.

{% gist https://gist.github.com/kinisoftware/882a5046a5401468bcc7f78edee02947 %}
## Creando los nuevos modelos de interacción

Añadir un modelo de interacción en nuevo idioma para una skill existente es muy sencillo. Lo podemos hacer todo desde la [Alexa Developer Console](https://developer.amazon.com/alexa/console/ask).

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.16.21.png)

En la pestaña de `Build` tenemos un desplegable con los distintos idiomas que soporta nuestra skill. En mi caso ya veis los tres que os decía al inicio del post.

Para añadir uno nuevo simplemente tenemos que ir a `Language Settings` y usar la opción de `Add new language`.

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.18.22.png)

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.18.33.png)

Seleccionamos el idioma que queremos añadir y se listará en la tabla con el resto.

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.18.43.png)

Imaginemos que añadimos _English (US)._ Una vez aparezca en el listado solo tenemos que pulsar el botón de `Save` y ya lo tendríamos disponible desde la pestaña de `Build`.

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.20.49.png)

Al añadir un nuevo idioma se crea una modelo de interacción vacío pero usando el `JSON Editor` resulta muy sencillo importar el existente en otro idioma.

En mi caso, al ser los tres idiomas que tengo en español, simplemente copié el modelo de interacción de Spanish (Spain) desde el `JSON Editor` y lo pegué en los otros dos (para Spanish US y Spanish MX). De esta forma tenía ya el modelo en los tres idiomas. A partir de ahí ya podemos hacer modificaciones a los utterance si hay palabras o expresiones que son particulares en algunos países.

Una vez tenemos el modelo ya podemos pasar a rellenar la información de `Distribution` para cada nuevo idioma y enviar la skill a certificar :)

Antes de terminar, [es una buena práctica crear varios backend en distintas regiones de AWS](https://developer.amazon.com/es/docs/custom-skills/develop-skills-in-multiple-languages.html#h2-multiple-endpoints) si vamos a publicar nuestra skill en varios países. Desde la pantalla de `Endpoint` vamos a poder indicar la ruta de cada una de las lambdas.

![](https://www.kinisoftware.com/content/images/2019/10/Screenshot-2019-10-14-at-19.27.42.png)

De esta forma la latencia y rendimiento de nuestra skill será mejor para los nuevos países. No es obligatorio pero sí muy recomendado. Solo tenemos que crear lambdas nuevas y desplegar el backend. La pega es que aumenta la gestión de despliegues con cambios en el backend. Aún no tengo muchos conocimientos de AWS pero es posible que haya ya algo inventado para mantener sincronizados los despliegues de distintas lambdas.

* * *

Conseguir crear skills que se puedan publicar en varios países va a aumentar drásticamente el público accesible y el número de usuarios potenciales de la misma.

Los desarrolladores que las estamos creando en español tenemos una gran oportunidad ahora con ya tres países disponibles. Lo mismo si creas alguna en inglés donde ahora mismo hay cinco países disponibles. Además supongo que se irán abriendo más y el esfuerzo necesario es mínimo a veces. Seguro que será un tiempo bien invertido :)