web-dev-qa-db-ja.com

Amazon Alexaスキルキット:外部アプリアカウント/ userIdとどのようにリンクしますか

Amazon AlexaスキルリクエストにserIdがあり、これが何であるかを理解しようとしています。自分のアプリのアカウントとAmazon Echoユーザーアカウントをリンクしたいので、それを参照します。これを行うには、何らかの種類が必要になります。使用する静的userId。

リクエストの例:

{
 "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

元の回答が削除された理由はわかりませんが、AmazonではAlexaユーザーをシステム内のユーザーにリンクできるようになりました。これが 発表 です。

エンドユーザーがスキルのアカウントリンクを設定する方法

ユーザーは、AmazonAlexaアプリを使用してアカウントをリンクします。ユーザーはアプリを使用する必要があることに注意してください。音声のみでリンクを確立することはサポートされていません。

ユーザーは通常、アプリでスキルを最初に有効にしたときにプロセスを開始します。

  1. Alexaアプリでは、ユーザーがスキルを有効にします。
  2. アプリは、開発者ポータルでスキルを登録するときに指定した認証URLを使用して、アプリ内にログインページを表示します。コンパニオンアプリがこのURLを呼び出すと、stateclient_id、およびscopeをクエリ文字列パラメータとして使用します。

    • 状態は、アカウントのリンクプロセス中にAlexaサービスによって使用されます。あなたがしなければならないように、あなたのページはこの値を追跡する必要があります
      後で返します。
    • Client_idはユーザーが定義します。ログインページはこれを使用して、リクエストがAlexaスキルからのものであると判断できます。
    • スコープは、要求されたアクセスのレベルを示すアクセススコープのオプションのリストです。スキルのアカウントリンクを有効にするときにサポートするスコープのセットを定義します。
  3. ユーザーは、サイトの通常の資格情報を使用してログインします。

  4. サービスはユーザーを認証してから、システム内のユーザーを一意に識別するアクセストークンを生成します。

  5. サービスはユーザーをAmazon固有のURLにリダイレクトし、URLフラグメントのstate、access_token、token_typeを渡します。

  6. Alexaサービスは、返された情報を検証してから、Alexaユーザーのaccess_tokenを保存します。

この時点で、スキルが有効になり、ユーザーのAlexaアカウントがサービスのアカウントにリンクされ、スキルを使用できるようになります。

11
Lucas

素晴らしい質問です。

簡単な答え:サードパーティユーザーとAlexaユーザーIDの間に独自のペアリングを構築する必要があります。 Alexa UserIDをユーザーIDに関連付けることができるAlexaSkillsSDKの組み込みサポートはありません。 AlexaユーザーIDをユーザーDBに関連付ける特定の音声インテントを作成する必要があります。

長い答え:各リクエストで取得するAlexaユーザーIDについて説明することから始めましょう。取得するAlexaユーザーIDはLWA(Login-With-Amozon)ユーザーIDです。 Alexaスキルが繰り返しユーザーを確実に検出できるようにすることが主な目的です。

では、何が機能しないのですか?発生する問題は、LWAuserIdが常に各Alexaアプリに対して匿名化されることです。これは、ユーザーが追跡されないようにするために重要です。ただし、AlexaユーザーIDを独自のLWAユーザーIDに関連付けることもできなくなります。

" Amazonでログイン-開発者ガイド "(10ページ)から

Login with Amazon用のWebサイトまたはアプリを作成するすべての会社は、顧客に対して同じuser_idを取得します。ただし、顧客が他社のアプリまたはサイトにログインすると、user_idは異なります。これは、user_idを使用してWeb全体の顧客を追跡できないようにするためです。

私が言おうとしているのは、iOS、Android、またはWebアプリでLWAを実装し、Alexaと同じLWAuserIdをアカウントに取得することを期待することはできないということです。 userID。たとえば、 Android app にLWAを実装した場合)had[email protected]ユーザーログイン彼らのAmazonアカウントには、userIDとしてamzn1.account.123456を取得する可能性がありますが、同じ[email protected]ユーザーの場合ペアになっているEchoに話しかけると、amzn1.account.98765またはその他のまったく異なるuserIdが表示されます。実際、このアーキテクチャを構築するのに2日を無駄にしました。仕事。

では、何が機能するのでしょうか?ピン認証の音声中心のバリエーションが最適のようです。

同様の問題を抱えているアプリの別のスペースを見てみましょう:TVアプリ(xbox、Android TVなど)。これらのアプリの多くは、コンテンツにアクセスするためにログインする必要があります(例: hulu、netflixなど)しかし、リモートコントロールを使用してユーザー名とパスワードを入力するのは、昔ながらの悪いUXです。では、TVアプリに対して何をしましたか?ユーザーはmyService.com/tvにアクセスし、アカウントにログインして、彼らがテレビに入力できる特別な短い、数値的で時間に敏感なピンコード。

Alexaスキルを実装していたとき、同様のアプローチを取ることにしました。ユーザーは、当社のWebサイト、iOSアプリ、またはAndroidアプリにログインし、専用のEchoページに移動して、PINコードを取得します。画面上の指示は次のようになります。

エコーに移動して、次のように言います。

「fooを起動」

「私のピンは12、3、4です」

私たちのfooスキルでは、PairingIntentインテントが「my pin is {one two three four | pinCode} "サンプル発話。 PairingIntentを受け取った後、そのPINコードが有効であるかどうかを確認し、有効である場合は、AlexauserIDを独自のユーザーDBに関連付けます。ピンが有効だった場合、エコーは「ああ、こんにちは。ボブです。これで、すべてのすばらしいものにアクセスできるようになりました。」のようになります。 PINコードが有効でない場合、Alexaはユーザーに再試行を促します。

うまくいけば、これは理にかなっています。サードパーティのアカウントをAlexaSkillsに関連付けるオプションは他にもありますが、このボイスピンアプローチが最も簡単です。

27
JustinAngel

Alexaスキルに与えられたユーザーIDは、ユーザーごとに一意であることが保証されています。開発者IDに応じて匿名化されるため、すべてのスキルで同じになりますが、開発者ごとに異なります。それを実際のIDに明示的にリンクする方法はありません。あなたはそれを自分でしなければなりません。私の一般的な推奨事項は、Firefoxsyncのようにすることです。 Alexaスキルとアプリケーションの両方がバックエンドを共有している場合、ユーザーがAlexaから同期する場合は、4文字の同期コードを生成してバックエンドに保存し、ユーザーに読んで、実行するように指示します。 Webサイトにアクセスして入力します。Webサイトで、同期コードが提供されたら、それを一致させて、2つの間のリンクを形成します。これについては 私の本 でもう少し詳しく説明しますが、それがその要点です。

0
Joseph Jaquinta

Amazon Alexaスキルリクエストで、ユーザー名でバインドしようとしています。

実際のユーザー名は取得できませんので。しかし、より完全にするために、あなたがしようとしていることを行うために使用されるさまざまな方法があります。どちらがあなたにとってのアプローチであるかを知るために、あなたのスキルが何を達成しようとしているのかによります。

オプションは次のとおりです。

  1. システム内のユーザー名をAlexaユーザーにリンクします。その場合、ユーザー名は取得されません。トークンを取得し、そのトークンを使用してシステム内でユーザー名をリンクします。読む: https://developer.Amazon.com/public/solutions/Alexa/alexa-skills-kit/docs/linking-an-Alexa-user-with-a-user-in-your-system

  2. あるユーザーを別のユーザーから一意に識別することだけを目的としているが、そのユーザーに関する特定の情報を気にしない、または必要としない場合。リクエストにはユーザー(session.user.userId)が付属しています。これはランダムな文字列であり、送信するすべてのリクエストでそのユーザーを識別しますが、ユーザーについては何も通知しません。読む: https://developer.Amazon.com/public/solutions/Alexa/alexa-skills-kit/docs/Alexa-skills-kit-interface-reference

  3. 「SetUser」のようなインテントを持ち、ユーザーに希望のユーザー名を話させることができます。次に、上記の#2を使用して、どこかのデータストレージでそれらをリンクできます。 Amazonがこのルートをサポートしているかどうかはわかりませんが、それは本当に#1を回避する方法になるからです。だから、それはあなたがやろうとしていることに依存します。ユーザーの個人情報が必要な場合は、#1を使用してください。一部のユーザーと別のユーザーの違いを知る必要がある場合は、#2を使用してください。

0
Abhijit Jagtap