Alexaスキルのパーソナライズ


Alexaスキルのパーソナライズ

パーソナライズ機能を有効にしており、かつユーザーが同意している場合、スキルはパーソナライズされた応答を返すことができます。さらにAlexaは、識別済みの話者に、パーソナライズされたあいさつやプロンプトを返すこともできます。詳しくは、スキルユーザーへのパーソナライズされたあいさつやプロンプトの提供を参照してください。

現在の制約と実装に関する考慮事項

スキルにパーソナライズ機能を実装する際は、次の点を考慮してください。

  • スキルでパーソナライズ機能を使用する場合、プライバシーポリシーを提示する必要があります。スキルの公開ページにあるプライバシーポリシーのURLフィールドに、適用するプライバシーポリシーへのリンクを入力してください。詳しくは、 スキルストアのメタデータを定義するを参照してください。

  • 現在、家族アカウントをお使いのユーザーについては、スキルのパーソナライズ機能がサポートされていません。家族アカウントを利用しているユーザーは、Alexaアプリでスキルをパーソナライズ機能を使用できません。またスキルは、パーソナライズされた応答をそのユーザーに返すことができません。

  • ユーザーは、iOS版のAlexaアプリでは、Alexaプロフィールのアカウントリンクとパーソナライズ機能を使用できます。Android版のAlexaアプリは、現在のところ、Alexaプロフィールのアカウントリンクとパーソナライズ機能をサポートしていません。開発者は、iOS版のAlexaアプリを使用してスキルをテストする必要があります。

スキルのパーソナライズ機能について

1台のAlexaデバイスが複数のユーザーと対話する場合もあれば、同じAmazonアカウントに複数のデバイスが登録されている場合もあります。Alexaと対話するユーザーは、ニーズや好み、サードパーティアプリのアカウントがそれぞれ異なります。デフォルトでは、スキルが個々のユーザーを識別しないため、アカウントレベル以外では、パーソナライズされた応答を返すことができません。ユーザーは、「アレクサ、アカウントを切り替えて」と声をかければ自分のアカウントにアクセスできますが、すべてのユーザーがそうするとは限らず、自分専用のAmazonアカウントを持っていない可能性もあります。

スキルのパーソナライズ機能を使用しない場合、サードパーティアプリのアカウントにリンクしているスキルは、どのユーザーと対話するかにかかわらず、1つのアカウントにのみリンクされます。スキルのパーソナライズ機能を使用すると、共有アカウントを使用せず、それぞれのスキルユーザーが各自のアカウントにリンクできます。

たとえば、パーソナライズ機能は次のような場合に役立ちます。

  • 乗換案内スキル:ユーザーによって通勤先や通学先が異なる場合、識別済みの各ユーザーの通勤(通学)経路を学習し、そのユーザーに適したコンテンツを提供できます。たとえば、太郎は渋谷駅行きのバスで通勤し、花子は品川駅行きのバスで通勤しているとします。花子が「何時に家を出ればよいか」をスキルにたずねると、品川駅行きのバスに合わせた出発時刻が返されます。

  • エクササイズスキル:識別済みのユーザーごとに、異なるトレーニングメニューを提供できます。たとえば、このスキルに春子がたずねたときは、春子用のトレーニングメニューを返し、太郎がたずねたときは、太郎用のトレーニングメニューを返します。

  • 配車サービススキル:ユーザーが自分のアカウントをサードパーティアプリにリンクしている場合、配車サービススキルが話者を識別し、(Amazonアカウント所有者ではなく)そのユーザーのアカウントに乗車料金を請求できます。

ユーザーごとにコンテンツをパーソナライズし、スキルの利便性をさらに高める方法を検討してください。

スキルのパーソナライズ機能はカスタムスキルでのみ使用できます。

データのプライバシーとユーザー情報の使用について

Alexaには、スキルからアクセスできない(ユーザーや話者の)個人情報が登録されている可能性があります。たとえば、ユーザーが自分の名前や電話番号をAlexaアプリに入力すると、これらの情報はAlexaプロフィールに登録されます。Alexaがこれらの個人情報をサードパーティの開発者に提供することはありません。ユーザーがAlexaアプリに個人情報を入力しない場合、そのユーザーに関する個人情報はAlexaに登録されません。

Amazonアカウント所有者がAlexaアプリで同意すると、スキルはユーザープロフィールAPIを介して、そのユーザーの個人情報を取得できるようになります。ただし、ユーザープロフィールAPIが取得するのは、現在の話者の情報ではなく、Amazonアカウント所有者の情報です。そのため、ユーザープロフィールAPIから取得した情報を使用して応答を話者レベルにパーソナライズすることはできません。

開発者は、生体認証データ等を含む個人情報の取得と使用に関する法的要件を遵守する責任があります。取得した個人情報は、そのユーザーの許可を得たうえで、プライバシーに関する通達および関連法令に則って利用する必要があります。

スキルのパーソナライズ機能の使用制限

パーソナライズ機能の使用を検討する際は、次の点に注意してください。

  • 子ども向けのスキルでは、パーソナライズ機能を使用できません。 子ども向けスキルでパーソナライズ機能を利用している場合は、Amazonの認定プロセスに合格しません。
  • HIPAA(Health Insurance Portability and Accountability Act)で保護されている情報を扱うスキルでは、パーソナライズ機能を使用できません。
  • 機密性の高いユーザー情報を扱う場合は、パーソナライズ機能を使用できません。
  • パーソナライズ機能は認証に代わるものではありません。 この機能を使用して、ユーザー個人を特定することはできません。

スキルのパーソナライズ機能を使用する際の考慮事項

スキルをパーソナライズするには、AlexaユーザーとAlexaスキル開発者の両方が所定の設定を行う必要があります。

開発者は、識別したユーザーとの対話をパーソナライズするようにスキルサービスを設定できます。スキルをパーソナライズすると、アカウントリンクを使用して、各ユーザーのサードパーティアカウントにアクセスできるようになります。これはAlexaデバイスに登録されているAmazonアカウントと異なっていてもかまいません。

たとえば、配車スキルの場合、自分専用のAlexaプロフィールを作成しているユーザーは、サードパーティアプリの各自のアカウントにリンクできます。太郎と花子がAlexaデバイスを共有しており、それぞれ異なる配車アプリアカウントにリンクしているとします。配車スキルがパーソナライズ機能をサポートしていれば、Alexaが適切なユーザーアカウントにリンクし、それを基にパーソナライズされた応答を返すことができます。Alexaは、その他のユーザー情報を使用して応答することもできます。アカウントリンクについて詳しくは、アカウントリンクとはを参照してください。

音質などが原因でAlexaが話者を識別できない場合、その話者は、デバイスが登録されているAmazonアカウントの一般ユーザーとみなされます。同様に、AmazonアカウントでAlexaプロフィールを登録していないユーザーも識別されないため、パーソナライズの権限付与を求めるメッセージが表示されません。

ユーザーがパーソナライズを希望しない場合や、Alexaが音声を識別できない可能性を想定し、こうした状況に対応するためのワークフローを用意する必要があります

スキルでパーソナライズ機能を利用するためのチェックリスト

スキルの応答をユーザーごとにパーソナライズするための条件は次のとおりです。

  • スキルユーザーは、現在使用しているAlexaアカウントに、Alexa音声プロフィールを登録する必要があります。
  • スキル開発者は、ユーザーにパーソナライズの許可を求めて、同意を得る必要があります。
  • ユーザーは、Alexaからの指示に従ってAlexaアプリに移動し、パーソナライズの権限を付与します。
  • Alexaは話者の声を識別し、その話者が既にパーソナライズに同意していることを確認したうえで、該当するpersonオブジェクトをスキルのリクエストに追加します。
  • スキルリクエストのpersonId値に基づいて応答をパーソナライズするためのワークフローを用意します。

パーソナライズするためのユーザー要件

パーソナライズされた応答を返すには、パーソナライズ機能のサポートをスキル側で設定にし、ユーザーがスキルにパーソナライズの権限を付与する必要があります。

パーソナライズ機能をサポートしているスキルをユーザーが呼び出すと、次のような処理が行われます。Amazonアカウント所有者がパーソナライズに同意する方法については、スキルのパーソナライズをユーザーとして管理するを参照してください。

  • スキルをリクエストしたAmazonアカウントがAlexaアプリでスキルをパーソナライズを有効にしている場合、そのスキルはリクエストに含まれているpersonオブジェクトのpersonId値に基づいて、パーソナライズされた応答をユーザーに返します。
  • スキルをリクエストしたAmazonアカウントがスキルをパーソナライズを有効にしていない場合は、Alexaアプリへ移動し、(必要であれば)音声プロフィールを設定して、スキルをパーソナライズを有効にするようユーザーに要求します。
  • ユーザーがAlexaアプリでこの変更を行わない場合は、パーソナライズ機能を使用せずにスキルを実行します。
  • ユーザーがAlexaアプリでこれらの変更を行った場合は、パーソナライズされたコンテンツをユーザーに提供できます。その後、同じユーザーからスキルリクエストがあり、Alexaがそのユーザーを話者と識別してpersonオブジェクトを追加すると、スキルサービスはリクエストのpersonIdを識別して処理します。

Amazonアカウント所有者は、いつでもAlexaアプリでパーソナライズの権限を取り消すことができます。権限を取り消したユーザーのスキルリクエストにはpersonオブジェクトが追加されないため、スキルはそのユーザーに、パーソナライズされた応答を返せなくなります。

ユーザーがパーソナライズの権限を付与しない、または権限を取り消した場合の対応を用意してください。スキルがパーソナライズ機能の使用を前提としており、それ以外ではサービスを提供できない場合は、セッションを正常に終了できるようにしておく必要があります。

パーソナライズ機能を使用できるようにスキルを設定する

パーソナライズ機能を使用できるようにスキルを設定する手順は次のとおりです。

  • パーソナライズの権限を求めるようにスキルを設定します。
  • ユーザーが権限を付与した場合は、パーソナライズ機能を使用してスキルが応答するよう設計します。
  • ユーザーを識別できない場合、またはユーザーがパーソナライズの権限を付与しない場合を想定し、これらの状況を適切に処理できるようにしてください。

パーソナライズの権限をリクエストする

カスタムスキルを作成または編集する際、スキルのパーソナライズの権限を有効にできます。これによってスキルは、識別したユーザーに対し、個人のIDを取得して、それを使用する権限をリクエストできます。この設定だけでは、パーソナライズの権限はスキルに付与されません。ユーザー側でも、Alexaアプリでスキルをパーソナライズを有効にする必要があります。

  1. 開発者コンソールで、目的のスキルを開きます(スキルを作成していない場合は作成します)。
  2. ビルドタブをクリックし、左下のアクセス権限をクリックします。
  3. アクセス権限セクションで、スキルのパーソナライズを有効にします。

スキルリクエストに含まれる「user」と「person」の違い

Alexaから渡される各スキルリクエストにはuserオブジェクトが含まれ、さらにこのオブジェクトにはuserId値が含まれます。userId値は、ユーザーがリクエストに使用したAlexaデバイスに紐づいたAmazonアカウントを表します。ユーザーがAlexaデバイスでスキルを有効にすると、このuserIdが自動的に生成されます。同じアカウントに登録されているスキルをユーザーが無効にして、再度有効にした場合、通常はuserId値が変更されます。

Alexaに話しかける人は、デバイスが登録されているアカウント所有者であるとは限りません。したがってuserId値は、話者ではなく、そのスキルを有効化するときに使用したAmazonアカウントを表します。Alexaでは、userId値に基づいて現在の話者向けにパーソナライズされたコンテンツを提供することはできません。

スキルでパーソナライズ機能を使用すると、Amazonアカウントの所有者と、そのアカウントでの個々の話者を識別できるようになります。スキル開発者とユーザーの両方がスキルのパーソナライズ要件をすべて満たしている場合、userオブジェクトに加え、personオブジェクトも各スキルリクエストに追加されます。

スキルはpersonオブジェクトのpersonId値を使用して、そのユーザー向けにパーソナライズされた応答を提供できます。つまり、userオブジェクトは特定のAmazonアカウントを表し、personオブジェクトは、そのアカウントからAlexaに話しかけているユーザーを表します。Amazonアカウント所有者や現在の話者に関する識別情報は送信されません。スキルは異なるpersonId値を区別し、同じpersonId値を含むスキルリクエストを互いにリンクできますが、personId値で表される個人に関する情報は提供しません。

何らかの理由でAlexaが話者を識別しない場合、そのユーザーのスキルリクエストにはpersonオブジェクトが含まれません。

つまり、パーソナライズとは、ユーザーが音声プロフィールを登録済みで権限を付与している場合において、personオブジェクトに含まれる一意のpersonId値をスキルが確認し、その値に基づいて、個々のスキルユーザーを識別する機能です。

アカウントリンクされていないpersonオブジェクトを含むスキルリクエストの形式

スキルリクエストの、context.System.person.personIdフィールドを確認することでAlexaプロフィールを識別できます。Alexaが話者を識別しない場合、パーソナライズの権限がスキルに与えられていない場合、またはユーザーがパーソナライズ機能を有効にしていない場合は、スキルリクエストにpersonオブジェクトが含まれません。

この例では、リクエストにpersonオブジェクトは含まれていますが、サードパーティアプリケーションへのアカウントリンクは含まれていません。

{
    "version": "1.0",
    "session": {...},
    "context": {
      ...
      "System": {
        ...
       "user": {
          "userId":  "amzn1.ask.account.ABC123..."
        },
        "person":  {          
          "personId":  "amzn1.ask.person.DEF456..."  
        }
      }
    },
  },
    "request": {...}
 }

personオブジェクトとアカウントリンクを含むスキルリクエストの形式

ユーザーはアカウントリンクを使用して、サードパーティアプリケーションのアカウントをAlexaデバイスに紐づいたAmazonアカウント、アカウントに登録されているユーザー自身のAlexaプロフィール、またはこれら両方にリンクできます。

たとえば、音声プロフィールを登録済みの話者が、配車アプリケーションのアカウントをAlexaプロフィールにリンクし、該当するスキルを呼び出して車を手配すると、リクエストではその話者のアカウントが使用されます。つまり、personオブジェクトにはaccessTokenフィールドも含まれます。デバイスに紐づいたAmazonアカウントが配車アプリケーションのアカウントにリンクされている場合は、userオブジェクトにaccessTokenフィールドも含まれます。この場合、以下のようにリクエストのuserオブジェクトとpersonオブジェクトの両方にaccessToken値が含まれます。スキルリクエストの、context.System.person.personIdフィールドを確認することでAlexaプロフィールを識別できます。

{
    "version": "1.0",
    "session": {...},
    "context": {
      ...
      "System": {
        ...
       "user": {
          "userId":  "amzn1.ask.account.ABC123..."
          "accessToken": "Atza|IOUAOWERUOAUWERHUAHFASDF..."
        },
        "person":  {          
          "personId":  "amzn1.ask.person.DEF456...",     
          "accessToken": "Atza|DSBFHSVDFUSUFEDAANYQWTSA..."
        }
      },
    },
    "request": {...}
  }

userオブジェクトとpersonオブジェクトを取得するコード例

Node.jsでuserオブジェクトを取得するには、次のように記述します。

let user = request.context.System.user;

Node.jsでpersonオブジェクトとpersonIdフィールドを取得するには、次のように記述します。

let person = request.context.System.person;
let personId = person.personId;

personId値は話者ごとに異なります。さらに、そのユーザーがパーソナライズの権限を与えているスキルごとに異なるpersonId値が割り当てられます。また、話者が2台のデバイスで同じスキルを使用する場合、スキルと話者は同じでも、それらのデバイスにはそれぞれ異なるpersonId値が割り当てられます。異なるスキル、アカウント、デバイス間ではpersonId情報が共有されません。

詳しくはSystemオブジェクトを参照してください。

スキルをパーソナライズ機能に対応させる

パーソナライズ機能をサポートするには、スキルが次のケースに対応できる必要があります。

  • スキル応答にpersonオブジェクトが含まれている場合は、このオブジェクトの値を使用して必要に応じてスキル応答をパーソナライズします。
  • personオブジェクトが存在しない場合は、パーソナライズ機能を使用しないワークフローを実行するか、セッションを正常に終了します。
  • 現時点で、サードパーティアプリへのアカウントリンクはAmazonアカウントレベルでのみ利用でき、必ずユーザーの許可を得る必要があります。ユーザーがアカウントリンクを設定していない場合、スキルはアカウントリンクを必要としない一般的なスキルサービスを提供するか、セッションを正常に終了できます。

スキルがパーソナライズ機能を利用するコンテンツを提供しない場合は、パーソナライズの許可を求めないでください。

呼び出しのシナリオ

次のシナリオで、太郎花子は同じ家で暮らすユーザーであり、春子は別の家庭のユーザーです。太郎と花子は同じアカウントでAlexaデバイスを利用しており、そのアカウントに各自のAlexaプロフィールを登録しています。以下の例のaccessToken値はプレースホルダーです。実際の値ではありません。

識別済みユーザーのAlexaプロフィールをサードパーティのアカウントにリンクし、Amazonアカウントをサードパーティのアカウントにリンクする

「Ride Hail」という配車スキルがあり、サードパーティアプリが用意されているとします。この例では、太郎がRide Hailの個人アカウントをAlexaプロフィールにリンクしています。さらに太郎は、AlexaデバイスのAmazonアカウントを自分のRide Hailアカウントにリンクしています。太郎がリクエストすると、Alexaは太郎の声を識別します。その後のスキルリクエストは次のようになります。

{
  "version": "1.0",
  "session": {...},
  "context": {
    ...
    "System": {
      ...
      "user": {
        "userId": "<このスキルが有効になっているアクティブなAmazonアカウントの識別子>",
        "accessToken": "<Amazonアカウントにリンクされているサードパーティのアカウントを表すトークン>" 
      },
      "person": {          
        "personId": "amzn1.ask.person.<太郎の個人ID>",
        "accessToken": "<太郎のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>" 
      }
    }
  },
  "request": {...}
}

識別済みユーザーのサードパーティアカウントをAlexaプロフィールにリンクし、別のサードパーティアカウントをAlexaデバイスのAmazonアカウントにリンクする

この例では、花子は自分のRide HailアカウントをAlexaプロフィールにリンクしています。太郎は自分のRide Hailアカウントを、AlexaデバイスのアクティブなAmazonアカウントにリンクしています。花子がRide Hailスキルを呼び出すと、Alexaは花子の声を識別します。このスキルリクエストは次のとおりです。

{
  "version": "1.0",
  "session": {...},
  "context": {
    ...
    "System": {
      ...
      "user": {
        "userId": "<このスキルが有効になっているアクティブなAmazonアカウントの識別子>",
        "accessToken": "<太郎のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>",
      },
      "person": {          
        "personId": "amzn1.ask.person.<花子の個人ID>",
        "accessToken": "<花子のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>",
      }
    }
  },
  "request": {...}
}

識別できない話者に対応し、デバイスのAmazonアカウントにリンクされたサードバーティのアカウントを使用する

この例では、太郎と花子の家に招かれた春子が、この家のデバイスでRide Hailスキルを呼び出します。Alexaは春子の声を識別しません。太郎のRide HailアカウントはAmazonアカウントにリンクしているため、スキルは太郎のアカウントを使用します。これは、車を予約するuser.accessToken値に反映されています。

{
  "version": "1.0",
  "session": {...},
  "context": {
    ...
    "System": {
      ...
      "user": {
        "userId": "<このスキルが有効になっているアクティブなAmazonアカウントの識別子>",
        "accessToken": "<太郎のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>",
      }
    }
  },
  "request": {...}
}

識別済みの2人のユーザーが別々のサードパーティアカウントを所有

この例では、太郎と花子がスキル(ゲームスキルなど)を一緒に使用しています。このスキルは、別々のpersonIdトークンを使用して太郎と花子の応答をそれぞれ追跡し、スキルのバックエンドシステムでユーザー情報を更新します。このゲームスキルでは、Amazonアカウントレベルでアカウントリンクが設定されています。

最初に、太郎がスキルに応答します。

{
  "version": "1.0",
  "session": {...},
  "context": {
    ...
    "System": {
      ...
      "user": {
        "userId": "<このスキルが有効になっているアクティブなAmazonアカウントの識別子>",
        "accessToken": "<Amazonアカウントにリンクされているサードパーティのアカウント表すトークン>",
      },
      "person": {          
        "personId": "amzn1.ask.person.<太郎の個人ID>",
        "accessToken": "<太郎のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>",
      }
    }
  },
  "request": {...}
}

次は花子がスキルに応答します。現在の話者は花子なので、それに合わせてpersonオブジェクトが変更されます。花子のAlexaプロフィールにリンクされているアカウントのタスクを実行する場合、スキルはリクエストのSystem.person.accessTokenを使用できます。さらにスキルサービスは、初回時に使用した太郎のSystem.user.accessTokenを保存しておき、このトークンをスキルセッション全体で使用できます。

{
  "version": "1.0",
  "session": {...},
  "context": {
    ...
    "System": {
      ...
      "user": {
        "userId": "<このスキルが有効になっているアクティブなAmazonアカウントの識別子>",
        "accessToken": "<Amazonアカウントにリンクされているサードパーティのアカウントを表すトークン>" 
      },
      "person": {          
        "personId": "amzn1.ask.person.<花子の個人ID>",
        "accessToken": "<花子のAlexaプロフィールにリンクされているサードパーティのアカウントを表すトークン>" 
      }
    }
  },
  "request": {...}
}

スキルに実装したパーソナライズ機能をテストする

Alexaスキルストアに認定を申請するときは、事前にスキルを綿密にテストしてください。詳しくは、スキルのパーソナライズのテストとトラブルシューティングを参照してください。