linking developer consola amazon-web-services amazon userid alexa-skill alexa-skills-kit

amazon web services - developer - Amazon Alexa Skills Kit: ¿Cómo se vincula con una cuenta de aplicación externa/ID de usuario?



amazon alexa consola (4)

En una solicitud de habilidad de Amazon alexa, hay un ID de usuario y estoy tratando de entender qué es esto y si hay alguna referencia al respecto porque quiero vincular una cuenta de usuario de Amazon Echo con una cuenta en mi propia aplicación y para hacer esto, Tendría que tener algún tipo de ID de usuario estático para trabajar.

Ejemplo de solicitud:

{ "version": "1.0", "session": { "new": false, "application": { "applicationId": "amzn1.echo-sdk-ams.app.[unique-value-here]" }, "sessionId": "session1234", "attributes": {}, "user": { "userId": null //IS THERE A DETAILED REFERENCE OF THIS SOMEWHERE? } }, "request": { "type": "IntentRequest", "requestId": "request5678", "intent": { "name": "MyColorIsIntent", "slots": { "Color": { "name": "Color", "value": "blue" } } } } }


En una solicitud de habilidad de Amazon alexa, estoy tratando de enlazarla con el nombre de usuario.

Como no se puede obtener un nombre de usuario real. Pero, para ser más completos, hay diferentes formas en que se utilizan para hacer lo que usted está tratando de hacer. Dependería de lo que tu habilidad esté tratando de lograr para saber cuál es el enfoque para ti.

Sus opciones son:

  1. Vincular un nombre de usuario en su sistema al usuario de Alexa. En ese caso no obtienes un nombre de usuario. Obtienes un token y unirías el nombre de usuario en tu sistema usando ese token. Lea: announcement

  2. Si lo que está tratando de hacer es simplemente identificar a un usuario de otro, pero no le importa o necesita información específica sobre ese usuario. La solicitud viene con un usuario (session.user.userId). Es una cadena de caracteres aleatorios que identificará a ese usuario para todas las solicitudes que envíen, pero no le dice nada sobre ellos. Lea: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference

  3. Podría tener una intención que sería algo así como "SetUser" y dejar que el usuario le diga el nombre de usuario que desee. Luego, podría usar el # 2 de arriba para vincularlos en algún almacenamiento de datos en algún lugar. No sé si Amazon soporta esta ruta, ya que realmente sería una forma de sortear el # 1. Entonces, depende de lo que estés tratando de hacer. Si necesita información personal sobre el usuario use # 1. Si solo necesitas saber que es un usuario contra otro, usa el # 2.


Gran pregunta

Respuesta corta: tendrá que crear su propio emparejamiento entre su usuario tercero y el ID de usuario de Alexa. No hay soporte integrado en el SDK de habilidades de Alexa que le permite asociar una ID de usuario de Alexa con su ID de usuario. Tendrá que crear una intención de voz específica que asocie los ID de usuario de Alexa a su base de datos de usuarios.

Respuesta más larga: comencemos hablando de la identificación de usuario de Alexa que aparece en cada solicitud. El ID de usuario de Alexa que obtiene es un ID de usuario de LWA (Iniciar sesión con Amozon). Su objetivo principal es permitir que Alexa Skills detecte de manera confiable a los usuarios que se repiten.

Entonces, ¿qué no funciona? El problema con el que se encontrará es que el ID de usuario de LWA siempre está anónimo para cada aplicación de Alexa. Eso es importante porque asegura que los usuarios no sean rastreados; pero también le impide asociar el ID de usuario de Alexa con su propio ID de usuario de LWA.

De la sección " Iniciar sesión con Amazon - Guía del desarrollador " (página 10)

Cada compañía que crea sitios web o aplicaciones para iniciar sesión con Amazon obtiene el mismo id de usuario para un cliente. Sin embargo, cuando un cliente inicia sesión en la aplicación o el sitio de otra empresa, el user_id será diferente . Esto es así que user_id no se puede utilizar para rastrear a los clientes en la Web.

Lo que estoy tratando de decir es que no puedes simplemente implementar LWA en aplicaciones iOS, Android o web y esperar obtener el mismo ID de usuario de LWA para una cuenta que obtendrías como un ID de usuario de Alexa. Por ejemplo, si implementó LWA en su aplicación de Android y tuvo un inicio de sesión de usuario de [email protected] en su cuenta de Amazon, podría obtener amzn1.account.123456 como ID de usuario, pero cuando ese mismo usuario de [email protected] hable con su pareja. Echo obtendrá un amzn1.account.98765 o cualquier otro ID de usuario totalmente diferente. De hecho, perdí dos días construyendo esta arquitectura, que es como sé que no funciona.

Entonces, ¿qué funciona? Una variación centrada en la voz de la autenticación Pin parece mejor.

Veamos otro espacio de aplicaciones con un problema similar: aplicaciones de TV (xbox, Android TV, etc.). Muchas de estas aplicaciones requieren que inicie sesión para poder acceder al contenido (por ejemplo, hulu, netflix, etc.). Pero el uso de un control remoto para ingresar un nombre de usuario y contraseña es simplemente una UX mala y antigua. Entonces, ¿qué hicimos para las aplicaciones de televisión? Los usuarios visitan myService.com/tv, inician sesión en su cuenta y obtienen un código PIN especial, corto, numérico y sensible al tiempo que pueden ingresar a su televisor.

Cuando estaba implementando una habilidad de Alexa, decidimos adoptar un enfoque similar. Los usuarios iniciarían sesión en nuestro sitio web, aplicación de iOS o aplicación de Android, irían a una página dedicada de Echo y luego obtendrían un código pin. Las instrucciones en pantalla que leen algo como esto:

Ve a tu eco y di:

''Launch foo''

''Mi pin es uno dos tres cuatro''

En nuestra habilidad foo tenemos un intento de PairingIntent escuchar " mi pin es {uno dos tres cuatro | pinCode} " expresión de ejemplo. Después de recibir un PairingIntent, verificaríamos si ese código PIN era válido y, de ser así, asociaríamos esa identificación de usuario de Alexa con nuestra propia base de datos de usuarios. Si el pin fuera válido, Echo diría algo como " Oh, hola, bob. Ahora tienes acceso a todas tus cosas increíbles ". Si el código pin no fuera válido, alexa solicitaría a los usuarios que intenten nuevamente.

Esperemos que esto tenga sentido. Hay otras opciones para asociar cuentas de terceros con Alexa Skills, pero este enfoque de pin de voz es el más simple.


No sé por qué se ha eliminado la respuesta original, pero Amazon ahora le permite vincular un usuario de Alexa con un usuario en su sistema. Aquí está el announcement .

Cómo los usuarios finales configuran la vinculación de cuentas para una habilidad

Los usuarios vinculan sus cuentas utilizando la aplicación Amazon Alexa. Tenga en cuenta que los usuarios deben utilizar la aplicación. No hay soporte para establecer el enlace únicamente por voz.

Los usuarios normalmente comienzan el proceso cuando inicialmente habilitan su habilidad en la aplicación:

  1. En la aplicación Alexa, el usuario habilita la habilidad.
  2. La aplicación muestra su página de inicio de sesión dentro de la aplicación, utilizando la URL de autorización que proporciona al registrar su habilidad en el portal para desarrolladores. Cuando la aplicación complementaria llama a esta URL, incluye el estado , el ID de cliente y el alcance como parámetros de cadena de consulta.

    • El servicio de Alexa utiliza el estado durante el proceso de vinculación de la cuenta. Su página necesita realizar un seguimiento de este valor, como usted debe
      devuélvelo más tarde.
    • El cliente_id es definido por usted. Su página de inicio de sesión puede usar esto para determinar que la solicitud provino de su habilidad de Alexa.
    • El ámbito es una lista opcional de ámbitos de acceso que indica el nivel de acceso solicitado. Usted define el conjunto de ámbitos a admitir al habilitar el enlace de cuenta para su habilidad.
  3. El usuario inicia sesión con sus credenciales normales para su sitio.

  4. Su servicio autentica al usuario y luego genera un token de acceso que identifica de manera única al usuario en su sistema.

  5. Su servicio redirige al usuario a una URL específica de Amazon y pasa a lo largo del estado, access_token y token_type en el fragmento de la URL.

  6. El servicio de Alexa valida la información devuelta y luego guarda el access_token para el usuario de Alexa.

En este punto, la habilidad está habilitada, la cuenta de Alexa del usuario está vinculada a la cuenta en su servicio y la habilidad está lista para ser utilizada.


Se garantiza que el ID de usuario dado a la habilidad de Alexa es único por usuario. Se anonimiza de acuerdo con el ID de desarrollador, por lo que será el mismo en todas sus habilidades, pero será diferente de un desarrollador a otro. No hay forma de vincularlo explícitamente con ninguna ID del mundo real. Tienes que hacerlo tú mismo. Mi recomendación general es hacerlo como Firefox Sync. Si tanto su habilidad de Alexa como su aplicación comparten un back-end, entonces cuando un usuario desea sincronizar desde Alexa, genere un código de sincronización de 4 caracteres, guárdelo en el back-end, léalo al usuario y dígale que vaya al sitio web y escríbalo. En el sitio web, cuando asignan un código de sincronización, lo comparan y forman su vínculo entre los dos. Hablo de esto con un poco más de detalle en mi libro , pero eso es lo esencial.