音声によるリマインダーの権限付与を設定する
音声によるリマインダーの権限付与を設定すると、スキルは音声で権限付与をユーザーにリクエストすることができます。スキルがリクエストを開始すると、Alexaはユーザーに特定のリマインダーを作成する権限を付与するかどうかをたずねます。ユーザーがこの権限を付与すると答えると、スキルはリマインダーを作成できます。ユーザーが付与しないと答えると、スキルはリマインダーを作成できません。ユーザーがリマインダー作成権限を付与しない場合、スキルはフォールバックワークフローを提供する必要があります。
音声でリマインダーの権限を付与できると、ユーザーにとってより便利なスキルになります。リマインダーの権限をリクエストするときに、スキルがAlexaアプリにカードを送信する必要はありません。ユーザーもAlexaアプリを起動することなくスキルに権限を付与できます。
現在、音声による権限付与はリマインダーでのみ可能です。
音声による権限付与の標準ワークフロー
リマインダーをセットするかどうかの最初のプロンプトは、スキルが出します。このタイミングは、スキル側で決めることができます。
ユーザーが音声でリマインダーの権限を付与する
この例では、スキルはサードパーティのスポーツニュースアプリ「スポーツニュースサンプル」にリンクされています。スキルが出力する応答の一部はスキル、一部はAlexaによって制御されています。
ユーザー: アレクサ、オレンジズの次の試合はいつ?
Alexa (スキルの応答): オレンジズは来週木曜日の午後7時にアップルズと対戦します。リマインダーを設定しますか?
ユーザー: はい。
Alexa(Alexaが制御): リマインダーを設定するには、「スポーツニュースサンプル」にこのスキルのリマインダー作成と編集を許可する必要があります。許可しますか?
ユーザー: はい。
Alexa(Alexaが制御): わかりました。この許可を変更したいときは、Alexaアプリの「有効なスキル」セクションで「スポーツニュースサンプル」を選択してください。
Alexa (スキルの応答): 来週木曜日の午後7時にオレンジズとアップルズの試合を観るようリマインダーを送りますね。
この例では、スキルがまずユーザーの質問に答えています。スキルは2つ目の応答のコンテンツを制御します。「スポーツニュースサンプルはお気に入りのチームの試合があるときにリマインダーでお知らせできます」のように変更することもできます。
Alexaは3つ目の応答を制御してユーザーに権限をリクエストします。この内容をスキル開発者が変更することはできません。
最後に連続する2文は同じ応答の一部ですが、はじめの文はAlexaが、次の文はスキルが制御しています。
ユーザーが権限を付与すると、スキルは権限が付与されたことを示すリクエストを受け取り、Alexaがリマインダーをセットします。スキルはリマインダーがセットされたことをユーザーに知らせ、セッションを継続します。
ユーザーが最初に同意したリマインダーの権限付与を拒否する
ユーザーが最初にリマインダーの権限付与に同意しても、後で拒否する場合があります。Alexaは拒否を認識し、スキルはセッションを継続します。ここでは、ユーザーが最初に「はい」と答えたのに、後から「いいえ」と言っていることに注意してください。 ユーザーが最初から「いいえ」と答えた場合、音声による権限付与ワークフローを開始せず、スキルはそれまでのセッションを継続します。
スキルでは、最初のプロンプトを出す以外、Alexaが出す権限付与に関する対話を制御できません。以下のように、Alexaは拒否された後「わかりました」と簡潔に答え、スキルはそこからセッションを継続しています。
ユーザー: アレクサ、オレンジズの次の試合はいつ?
Alexa (スキルの応答): オレンジズは来週木曜日の午後7時にアップルズと対戦します。リマインダーを設定しますか?
ユーザー: はい。
Alexa(Alexaが制御): リマインダーを設定するには、「スポーツニュースサンプル」にこのスキルのリマインダー作成と編集を許可する必要があります。許可しますか?
ユーザー: いいえ。
Alexa(Alexaが制御): わかりました。
ユーザーの応答が不明瞭
Alexaのリマインダー権限付与リクエストに対してユーザーの応答が不明瞭だった場合、Alexaは質問を言い換えて再プロンプトします。再プロンプトの後、ユーザーが権限付与に同意したか拒否したかに応じて、その時点から対応するワークフローを継続します。
ユーザー: アレクサ、オレンジズの次の試合はいつ?
Alexa (スキルの応答): オレンジズは来週木曜日の午後7時にアップルズと対戦します。リマインダーを設定しますか?
ユーザー: はい。
Alexa(Alexaが制御): リマインダーを設定するには、「スポーツニュースサンプル」にこのスキルのリマインダー作成と編集を許可する必要があります。許可しますか?
ユーザー: <不明瞭な応答>
Alexa(Alexaが制御): 「スポーツニュースサンプル」にこのスキルのリマインダー作成と編集を許可しますか?
標準のプロンプト
スキルは音声によるリマインダー権限付与ワークフローを開始し、ユーザーへの最初のプロンプトを制御します。Alexaは音声による権限付与ワークフローの次のプロンプトを制御します。このプロンプトにより、全スキルで一貫したエクスペリエンスを提供できます。わかりやすいよう、各プロンプトにタグを付けています。スキルは続けてAcceptConsentReminders
プロンプトを出し、リマインダーの内容、日時、目的を復唱します。応答のこの部分はスキルが制御します。
AskForConsentReminders: Alexa(Alexaが制御): リマインダーを設定するには、[スキル名]
にこのスキルのリマインダーの作成と編集を許可する必要があります。許可しますか?
AskForConsentRetryReminders: Alexa(Alexaが制御): [スキル名]
にこのスキルのリマインダーの作成と編集の許可しますか?
DeclineConsentReminders: Alexa(Alexaが制御): わかりました。
AcceptConsentReminders: Alexa(Alexaが制御): わかりました。この許可を変更したいときは、Alexaアプリの「有効なスキル」セクションで[スキル名]
を選択してください。
リクエストと応答
AskForConsentRetryRemindersプロンプト後にユーザーが権限付与する場合のリクエスト形式は、次のとおりです。permissionScope
の値は、リマインダーのスコープ、alexa::alerts:reminders:skill:readwrite
になります。
{
"type": "Connections.SendRequest",
"name": "AskFor",
"payload": {
"@type": "AskForPermissionsConsentRequest",
"@version": "1",
"permissionScope": "alexa::alerts:reminders:skill:readwrite"
},
"token": ""
}
このリクエストを受け取ると、Alexaは指定したリマインダーの権限スコープに権限を付与するようユーザーにリクエストします。応答の形式は次のとおりです。body.status
の値は次のいずれかになります。
ACCEPTED
– ユーザーが最後または前回のリクエストに応じて権限を付与しました。DENIED
– ユーザーが権限付与を拒否しました。NOT_ANSWERED
– ユーザーが権限付与のリクエストに応答しなかったか、応答が理解されませんでした。この場合、Alexaはユーザーに再プロンプトを出します。
{
"type": "Connections.Response",
"requestId": "string",
"timestamp": "string",
"locale": "string",
"name": "AskFor",
"status": {
"code": "string",
"message": "string"
}
"token": "string"
"payload": {
"permissionScope" : "alexa::alerts:reminders:skill:readwrite"
"status" : <permission status enum>
}
}
この例からわかるように、スキル開発時に変更できないAlexaの標準プロンプトが含まれます。これらのプロンプトは音声による権限付与の標準ワークフローに含まれているため、コーディングする必要はありません。
音声による権限付与リクエストのコードサンプル
以下は、AWS Lambda関数にコードを追加して音声による権限付与リクエストのConnections.SendRequest
ディレクティブを送信する方法の例です。
このサンプルコードはAlexa Skills Kit SDK for Node.js(v2)を使用しています。
return handlerInput.responseBuilder
.addDirective({
type: "Connections.SendRequest",
name: "AskFor",
payload: {
"@type": "AskForPermissionsConsentRequest",
"@version": "1",
"permissionScope": "alexa::alerts:reminders:skill:readwrite"
},
token: "<string>"
})
.getResponse();
このサンプルコードはAlexa Skills Kit SDK for Node.js(v1)を使用しています。
this.handler.response = {
'version': '1.0',
'response': {
'directives': [{
'type': 'Connections.SendRequest',
'name': 'AskFor',
'payload': {
'@type': 'AskForPermissionsConsentRequest',
'@version': '1',
'permissionScope': 'alexa::alerts:reminders:skill:readwrite'
},
'token': '<string>'
}],
'shouldEndSession': true
}
};
this.emit(':responseReady');
音声による権限付与リクエストのConnections.SendRequest
ディレクティブのJSON構文です。この場合、name
はAskFor
です。
{
"directives": [
{
"type": "Connections.SendRequest",
"name": "AskFor",
"payload": {
"@type": "AskForPermissionsConsentRequest",
"@version": "1",
"permissionScope": "alexa::alerts:reminders:skill:readwrite"
},
"token": "<string>"
}
]
}
リマインダーのユーザーエクスペリエンスのベストプラクティス
Alexaリマインダー使用のガイドラインを参照してください。