ユーザー向けにパーソナライズされたあいさつやプロンプトの提供



ユーザー向けにパーソナライズされたあいさつやプロンプトの提供

スキルにパーソナライズ機能を実装し、かつスキルのユーザーがパーソナライズに同意した場合、そのユーザー向けにパーソナライズされたあいさつやプロンプトを提供できます。スキルにパーソナライズ機能を実装する方法について詳しくは、Alexaスキルのパーソナライズを参照してください。

パーソナライズされたあいさつやプロンプトをスキルに実装すると、そのスキルを利用するユーザーに名前で呼びかけることができます。Alexaがユーザーを識別し、パーソナライズが透過的に行われます。音声合成マークアップ言語(SSML)とalexa:nameタグを使用してスキルの応答を構成すると、該当するユーザーの名前が応答に自動的に挿入されます。ユーザーがAlexaアプリでプロフィールの名前を変更した場合は、新しい名前がスキル応答で自動的に使用されます。パーソナライズ機能について最初に同意を得ていれば、パーソナライズされたあいさつやプロンプトを使用するにあたり、改めてユーザーの同意を得る必要はありません。これは、Alexaがユーザーの名前を開発者に共有しないためです。そのためユーザープロフィールAPIを利用するときとは異なり、スキルでユーザーの名前を保存する必要がありません。

識別されたユーザーの名前で呼びかける方法

まず、スキルはリクエストJSONからpersonId値を抽出する必要があります。personIdフィールドはcontext.System.personオブジェクトに含まれています。リクエストの本文全体は、リクエストの形式でご確認ください。

{
  "context": {
    "System": {
      "person": {
        "personId": "amzn1.ask.person.ABCDEF..."
      }
    }
  }
}

personオブジェクトとpersonIdフィールドを取得するNode.jsサンプルコード

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

スキルの応答で音声合成マークアップ言語(SSML)を使用する

応答の際、ユーザーの名前で呼びかけられるようにするには、スキルの応答にSSMLを使用する必要があります。詳しくは、音声合成マークアップ言語(SSML)のリファレンスを参照してください。

alexa:nameタグを使用し、識別したユーザーの名前で話しかける

ユーザーの名前で呼びかけたい場合は、応答にalexa:nameタグを含めます。指定するパラメーターは次のとおりです。

アトリビュート
type必須。呼びかける名前のタイプです。指定可能なタイプは次のとおりです。
  • first: ユーザーの名前。
personId 必須。JSONリクエストのpersonオブジェクトから取得するpersonIdの値です。たとえば、<speak>こんにちは、<alexa:name type="first" personId="amzn1.ask.person.ABCDEF..."/>さん</speak>という応答をAlexaが受け取った場合、ユーザーには「こんにちは、花子さん」のように呼びかけます(ユーザーがAlexaアプリに登録している名前が使用されます)。
スキルの応答ユーザーへの呼びかけ
<speak><alexa:name type="first" personId="amzn1.ask.person.ABCDEF..."/>さん、おはようございます。今日の朝食用にパンケーキのレシピを用意しました。</speak>
Alexa: 太郎さん、おはようございます。今日の朝食用にパンケーキのレシピを用意しました。
<speak>やりましたね、<alexa:name type="first" personId="amzn1.ask.person.ABCDEF..."/>さん。現在、<alexa:name type="first" personId="amzn1.ask.person.GHIJKLM..."/>さんに10ポイント勝っています。次は、<alexa:name type="first" personId="amzn1.ask.person.NOPQRS..."/>さんの番です。サイコロを振ってください。</speak>
Alexa: やりましたね、夏美さん。現在、太郎さんに10ポイント勝っています。次は、秋子さんの番です。サイコロを振ってください。
<speak>了解しました、<alexa:name type="first" personId="amzn1.ask.person.ABCDEF..."/>さん。太郎さんの配車アプリアカウントで車を手配します。</speak>
Alexa: 了解しました、春子さん。太郎さんの配車アプリアカウントで車を手配します。

最後の例で、「太郎さん」はアカウント所有者です。ここでは、太郎さんのサードパーティアカウントを使用して、ユーザー(春子さん)のリクエストが実行されます。

エラー処理

スキル応答に必要な値が含まれていない、無効な値が指定されているなど、何らかのエラーが発生した場合は、スキルのエンドポイントにSessionEndedRequestエラーが渡されます。このSessionEndedRequestオブジェクトにはエラーフィールドが含まれており、このフィールドを使用して問題をデバッグできます。その際、Alexaはユーザーに「スキルからの応答に問題があります」と伝えます。

エラーの例:typeパラメーターが無効、または指定されていない

{
  "reason": "ERROR",
  "error": {
    "type": "INVALID_RESPONSE",
    "message": "Speech with id amzn1.echo-api.request.xxxxx-yyyyy uses tag alexa:name, which requires the type attribute to contain a valid type"
  }
}

スキルのコードでは、personId値が含まれていないケースを適切に処理する必要があります。Alexaスキルのパーソナライズを参照してください。