ユーザー向けにパーソナライズされたあいさつやプロンプトの提供
スキルにパーソナライズ機能を実装し、かつスキルのユーザーがパーソナライズに同意した場合、そのユーザー向けにパーソナライズされたあいさつやプロンプトを提供できます。スキルにパーソナライズ機能を実装する方法について詳しくは、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 | 必須。呼びかける名前のタイプです。指定可能なタイプは次のとおりです。
|
personId |
必須。JSONリクエストのperson オブジェクトから取得するpersonId の値です。たとえば、<speak>こんにちは、<alexa:name type="first" personId="amzn1.ask.person.ABCDEF..."/>さん</speak> という応答をAlexaが受け取った場合、ユーザーには「こんにちは、花子さん」のように呼びかけます(ユーザーがAlexaアプリに登録している名前が使用されます)。
|
alexa:name
タグはOutputSpeechオブジェクトでのみ使用できます。プロアクティブイベントや通知ではalexa:name
タグを使用できません。スキルの応答 | ユーザーへの呼びかけ |
---|---|
<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スキルのパーソナライズを参照してください。