素晴らしい質問です。
簡単な回答:サードパーティのユーザーと 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 に関連付ける方法は他にもありますが、この音声ピンのアプローチが最も簡単です。