web-dev-qa-db-fra.com

Amazon Alexa Skills Kit: comment créer des liens avec un compte d'application externe

Dans une demande Amazon Alexa skill, il existe un userId et j'essaie de comprendre ce que c'est et s'il y a une référence pour cela car je veux créer un lien et un compte utilisateur Amazon Echo avec un compte dans ma propre application et pour ce faire, je devrais avoir une sorte d'utilisateur id statique pour travailler avec.

Exemple de demande:

{
 "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"
    }
  }
}
}
}
16
Zigglzworth

Je ne sais pas pourquoi la réponse originale a été supprimée, mais Amazon vous permet désormais de lier un utilisateur Alexa à un utilisateur de votre système. Voici la annonce .

Comment les utilisateurs finaux configurent-ils la liaison de compte pour une compétence

Les utilisateurs associent leurs comptes à l'aide de l'application Amazon Alexa. Notez que les utilisateurs doit utiliser l'application. Il n'y a pas de support pour établir le lien uniquement par la voix.

Les utilisateurs démarrent normalement le processus lorsqu'ils activent initialement votre compétence dans l'application:

  1. Dans l'application Alexa, l'utilisateur active la compétence.
  2. L'application affiche votre page de connexion directement dans l'application, à l'aide de l'URL d'autorisation que vous avez fournie lors de l'enregistrement de votre compétence sur le portail de développeur. Lorsque l'application associée appelle cette URL, elle inclut state, client_id et scope en tant que paramètres de chaîne de requête.

    • L'état est utilisé par le service Alexa lors du processus de liaison de compte. Votre page doit suivre cette valeur, comme vous devez
      le repasser plus tard.
    • Le client_id est défini par vous. Votre page de connexion peut l'utiliser pour déterminer que la demande provient de votre compétence Alexa.
    • L'étendue est une liste facultative d'étendues d'accès indiquant le niveau d'accès demandé. Vous définissez l'ensemble des portées à prendre en charge lorsque permettant la liaison de compte pour votre compétence.
  3. L'utilisateur se connecte à l'aide de ses informations d'identification habituelles pour votre site.

  4. Votre service authentifie l'utilisateur, puis génère un jeton d'accès qui identifie de manière unique l'utilisateur dans votre système.

  5. Votre service redirige l'utilisateur vers une URL spécifique à Amazon et transmet l'état, access_token et token_type dans l'URL fragment.

  6. Le service Alexa valide les informations renvoyées, puis enregistre le code d'accès_token pour l'utilisateur Alexa.

À ce stade, la compétence est activée, le compte Alexa de l’utilisateur est lié au compte à votre service, et la compétence est prête à être utilisé.

11
Lucas

Excellente question. 

Réponse courte: Vous allez devoir créer votre propre paire entre votre utilisateur tiers et l'ID utilisateur Alexa. Alexa Skills Kit SDK ne prend pas en charge de manière intégrée le logiciel, mais vous permet d'associer un ID utilisateur Alexa à votre ID utilisateur. Vous allez devoir créer une intention vocale spécifique associant des identifiants Alexa à votre base de données d’utilisateurs. 

Réponse plus longue: Commençons par parler de l'ID Alexa que vous obtenez dans chaque demande. L'utilisateur Alexa que vous obtenez est un ID utilisateur LWA (Login-With-Amozon). Son objectif principal est de permettre à Alexa Skills de détecter de manière fiable les utilisateurs récurrents.

Alors qu'est-ce qui ne marche pas? Le problème que vous allez rencontrer est que l'ID utilisateur LWA est toujours anonymisé pour chaque application Alexa. C'est important car cela garantit que les utilisateurs ne sont pas suivis; mais cela vous empêche également d'associer l'ID utilisateur Alexa à votre propre ID utilisateur LWA. 

Depuis le " Connexion avec Amazon - Guide du développeur " (page 10)

Chaque entreprise qui crée des sites Web ou des applications pour la connexion avec Amazon obtient le même user_id pour un client. Cependant, lorsqu'un client se connecte à L'application ou le site d'une autre société, le user_id sera différent. C'est donc user_id ne peut pas être utilisé pour suivre les clients sur le Web.

Ce que j'essaie de dire, c'est que vous ne pouvez pas simplement implémenter le LWA dans des applications iOS, Android ou Web et vous attendre à obtenir le même ID utilisateur LWA pour un compte que vous obtiendriez comme un ID d'utilisateur Alexa. Par exemple, si vous implémentiez LWA sur votre application Android an si [email protected] utilisateur se connectait à son compte Amazon, vous pourriez obtenir amzn1.account.123456 comme ID utilisateur, mais quand ce même utilisateur [email protected] parle à son Echo associé, vous obtiendrez un amzn1.account.98765 ou tout autre ID utilisateur totalement différent. En fait, j’ai perdu deux jours à construire cette architecture, c’est ainsi que je sais que cela ne fonctionne pas. 

Alors qu'est-ce que ça marche? Une variante centrée sur la voix de l'authentification par code semble la meilleure. 

Regardons un autre espace d'applications avec un problème similaire: les applications TV (xbox, Android TV, etc.). Un grand nombre de ces applications nécessitent que vous vous connectiez pour pouvoir accéder au contenu (par exemple, hulu, netflix, etc.). Mais utiliser une télécommande pour entrer un nom d'utilisateur et un mot de passe est tout simplement une vieille vieille UX. Alors, qu'avons-nous fait pour les applications de télévision? Les utilisateurs accèdent à myService.com/tv, se connectent à leur compte et obtiennent un code PIN spécial, court, numérique et sensible au facteur temps, qu'ils peuvent saisir sur leur téléviseur. 

Lorsque j'ai mis en place une compétence Alexa, nous avons décidé d'adopter une approche similaire. Les utilisateurs se connecteraient à notre site Web, à notre application iOS ou à notre application Android, accéderaient à une page Echo dédiée, puis recevraient un code PIN. Les instructions à l'écran qui lisent quelque chose comme ceci: 

Allez à votre écho et dites: 

'Lancer foo'

'Mon pin est un deux trois quatre'

Dans notre compétence foo, nous avons une intention PairingIntent écouter "mon pin est {un deux trois quatre | pinCode}", exemple d'énonciation. Après avoir reçu un PairingIntent, nous vérifierions si ce code PIN était valide et, le cas échéant, associé à cet ID utilisateur Alexa avec notre propre base de données d’utilisateurs. Si l'épinglette était valide, Echo dirait quelque chose du type "Oh, salut Bob! Tu as maintenant accès à tous tes trucs géniaux.". Si le code PIN n'était pas valide, Alexa inviterait les utilisateurs à réessayer. 

Espérons que cela a du sens. Il existe d'autres options pour associer des comptes tiers à Alexa Skills, mais cette approche vocale est la plus simple. 

27
JustinAngel

L'identifiant donné à la compétence Alexa est garanti d'être unique par utilisateur. Il est anonymisé en fonction de l'ID de développeur. Ce sera donc la même chose pour toutes vos compétences, mais ce sera différent d'un développeur à l'autre. Il n'y a aucun moyen de le relier explicitement à un identifiant du monde réel. Vous devez le faire vous-même… .. Ma recommandation générale est de le faire comme pour la synchronisation avec Firefox. Si votre compétence Alexa et votre application partagent un serveur principal, lorsqu'un utilisateur souhaite se synchroniser à partir d'Alexa, générez un code de synchronisation à 4 caractères, stockez-le dans le serveur principal, lisez-le à l'utilisateur et dites-lui de se rendre sur le site Web et tapez-le. Sur le site Web, lorsqu’ils donnent un code de synchronisation, le comparent et forment votre lien entre les deux . J'en parle un peu plus en détail dans mon livre , mais c'est l'essentiel.

1
Joseph Jaquinta

Dans une demande de compétence Amazon Alexa, j'essaie de la lier avec un nom d'utilisateur.

Comme vous ne pouvez pas obtenir un nom d'utilisateur réel. Mais pour être plus complet, il existe différentes manières de faire ce que vous essayez de faire. Cela dépend de ce que vous êtes en train d'essayer de faire pour savoir quelle approche vous convient. 

Vos options sont: 

  1. Lier un nom d'utilisateur de votre système à l'utilisateur Alexa. Dans ce cas, vous ne recevez pas de nom d'utilisateur. Vous obtenez un jeton et vous lieriez le nom d'utilisateur dans votre système à l'aide de ce jeton. Lire: https://developer.Amazon.com/public/solutions/Alexa/alexa-skills-kit/docs/linking-an-Alexa-user-with-a-user-in-y-votre-système

  2. Si vous essayez uniquement d'identifier de manière unique un utilisateur sur un autre, vous ne vous souciez pas ou n'avez pas besoin d'informations spécifiques sur cet utilisateur. La demande est fournie avec un utilisateur (session.user.userId). C'est une chaîne de caractères aléatoire qui identifiera cet utilisateur pour toutes les demandes qu'il envoie, mais ne vous dit rien à leur sujet. Lire: https://developer.Amazon.com/public/solutions/Alexa/alexa-skills-kit/docs/Alexa-skills-kit-interface-reference

  3. Vous pourriez avoir une intention qui ressemblerait à "SetUser" et laisser l’utilisateur vous dire le nom d’utilisateur qu’il souhaite. Ensuite, vous pouvez utiliser le numéro 2 ci-dessus pour les lier entre eux quelque part. Je ne sais pas si Amazon prend en charge cette route car ce serait vraiment un moyen de contourner le n ° 1. Donc, cela dépend de ce que vous essayez de faire. Si vous avez besoin d'informations personnelles sur l'utilisateur, utilisez # 1. Si vous avez juste besoin de savoir qu’il s’agit d’un utilisateur vs un autre utilisateur, utilisez le numéro 2.

0
Abhijit Jagtap