音声によるリマインダーの権限付与を設定する



音声によるリマインダーの権限付与を設定する

音声によるリマインダーの権限付与を設定すると、スキルは音声で権限付与をユーザーにリクエストすることができます。スキルがリクエストを開始すると、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プロンプトを出し、リマインダーの内容、日時、目的を復唱します。応答のこの部分はスキルが制御します。

AskForConsentRemindersAlexa(Alexaが制御) リマインダーを設定するには、[スキル名]にこのスキルのリマインダーの作成と編集を許可する必要があります。許可しますか?

AskForConsentRetryRemindersAlexa(Alexaが制御) [スキル名]にこのスキルのリマインダーの作成と編集の許可しますか?

DeclineConsentRemindersAlexa(Alexaが制御) わかりました。

AcceptConsentRemindersAlexa(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構文です。この場合、nameAskForです。

{
  "directives": [
    {
      "type": "Connections.SendRequest",
      "name": "AskFor",
      "payload": {
        "@type": "AskForPermissionsConsentRequest",
        "@version": "1",
        "permissionScope": "alexa::alerts:reminders:skill:readwrite"
      },
      "token": "<string>"
    }
  ]
}

リマインダーのユーザーエクスペリエンスのベストプラクティス

Alexaリマインダー使用のガイドラインを参照してください。