16

Amazon alexaスキルリクエストにはuserIdがあり、これが何であるかを理解しようとしています。また、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"
    }
  }
}
}
}
4

4 に答える 4

29

素晴らしい質問です。

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

より長い答え:まず、各リクエストで取得する Alexa UserID について話しましょう。取得する Alexa UserID は、LWA (Login-With-Amozon) ユーザー ID です。Alexa Skills がリピート ユーザーを確実に検出できるようにすることが主な目的です。

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

Login with Amazon - 開発者ガイド」(10ページ)より

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

私が言おうとしているのは、LWA を iOS、Android、または Web アプリに実装するだけでは、Alexa ユーザー ID として取得するのと同じアカウントの LWA ユーザー ID を取得することを期待できないということです。たとえば、Android アプリに LWA を実装し、 foo @bar.comユーザーが Amazon アカウントにログインした場合、ユーザー ID としてamzn1.account.123456を取得する可能性がありますが、同じfoo@bar.comユーザーがペアリングされた相手と話すとエコーすると、amzn1.account.98765またはその他のまったく異なるユーザー ID が返されます。私は実際にこのアーキテクチャを構築するのに 2 日を無駄にしました。

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

同様の問題を持つアプリの別の領域を見てみましょう: TV アプリ (xbox、android TV など)。これらのアプリの多くは、コンテンツにアクセスするためにログインする必要があります (例: hulu、netflix など)。しかし、リモコンを使用してユーザー名とパスワードを入力するのは、昔ながらの悪い UX です。では、TV アプリのために何をしたのでしょうか? ユーザーは myService.com/tv にアクセスし、自分のアカウントにログインして、テレビに入力できる特別な短い数字の時間制限のある PIN コードを取得します。

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

Echo に移動して、次のように言います。

「フーを起動」

「私のピンは 1 2 3 4 です」

私たちのfooスキルには、 「 my pin is {one two three four|pinCode}」というサンプル発話を聞くPairingIntentインテントがあります。PairingIntent を受け取った後、その PIN コードが有効かどうかを確認し、有効である場合は、その Alexa ユーザー ID を独自のユーザー DB に関連付けます。PIN が有効な場合、 Echoは次のように言うでしょう。PIN コードが有効でない場合、Alexa はユーザーに再試行を促します。

うまくいけば、これは理にかなっています。サードパーティのアカウントを Alexa Skills に関連付ける方法は他にもありますが、この音声ピンのアプローチが最も簡単です。

于 2015-06-29T00:03:24.553 に答える
0

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 を使用してください。一部のユーザー対別のユーザーであることを知る必要がある場合は、#2 を使用します。

于 2017-03-07T06:53:36.217 に答える
0

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

于 2015-08-01T03:23:10.043 に答える