アクションで権限を使用して、ユーザーの個人データをリクエストできます。 。たとえばフード デリバリー アクションが デバイスの位置情報の利用許可を使って、ユーザーの あります。
アクションに権限を追加すると、アシスタントは標準的な 一貫したインターフェースを使用して、ユーザーに Cloud Identity の 追加することもできます。
使用可能な権限
アクションでリクエストできる権限は次のとおりです。
DEVICE_PRECISE_LOCATION
: ユーザーのデバイスの正確な位置情報をリクエストします。 (座標と住所)。DEVICE_COARSE_LOCATION
: ユーザーのデバイスのおおよその位置情報をリクエストします。 (郵便番号と市区町村)。
権限を設定する
アクションの権限を設定するには、新しいスロットタイプを できます。次に、リクエストするデータ権限のスロットを構成します。
権限スロットタイプを追加
ユーザー情報を取得する機能をアクションに付与するには、
actions.type.Permission
スロットタイプ。
このスロットタイプを構成する手順は次のとおりです。
- Actions Console に移動して、アクションを選択または作成します できます。
- トップメニューで [Develop] をクリックします。
- [Scenes] で、権限フローを追加するシーンをクリックします。
- シーンの [スロット充填] セクションで、[+] をクリックして新しいスロットを追加します。
[Select type] プルダウンで、
actions.type.Permission
スロットタイプを選択します。[スロット名を入力] 欄で、スロットに名前を付けます。
結果をセッションに書き込むには、[カスタム スロット値のライトバック] を有効にします。 パラメータを指定します。
スロットの構成
コンテキスト文字列と、付与する権限のリストを指定できるようになりました スロットを設定します。コンテキスト文字列は、 ユーザーに情報を求めるためのもので、ユーザーがログインしたときに表示される アクションへの権限を付与するように求められます。
コンテキスト文字列と権限は [スロットの構成] で構成できます。 セクション内に表示されます。
次のコード スニペットは、スロット構成の例を示しています。
{
"@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
"context": "Context string",
"permissions": ["DEVICE_PRECISE_LOCATION"]
}
ユーザーに表示されるプロンプトは、"$context_string, あとは Google から現在地を取得するだけです。よろしいでしょうか?」
権限コードを使用すると、次のユーザー情報を取得できます。
権限 | 説明 |
---|---|
DEVICE_PRECISE_LOCATION |
デバイスの正確な場所(座標と住所) |
DEVICE_COARSE_LOCATION |
デバイスのおおよその位置情報(郵便番号と都市) |
権限の結果を取得する
以下のセクションでは、権限のステータスを確認する方法と、 ユーザーが権限を付与した場合はそのユーザーの情報にアクセスできます。
権限のステータスを確認する
ユーザーが権限を付与すると、結果のステータスがセッションに書き込まれます。 パラメータも指定できます。
権限のステータスを確認するには、
シーンの状態の session.params.<slot_name>.permissionStatus
。
権限スロットのステータスを確認する手順は次のとおりです。
- Actions Console に移動して、 [Develop] をクリックします。
- [Scenes] で、権限スロットを含むシーンをクリックします。
- シーンの [Condition] セクションで、[+] をクリックして新しい あります。
次の条件を入力して権限のステータスを確認します( <slot_name> は、 スロット):
scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
シーンの [Condition] セクションで、[+] をクリックして新しい あります。
次の条件を入力して、ユーザーが 共有することに同意する必要があります。
scene.slots.status == "FINAL"
シーンの [Condition] セクションで、[+] をクリックして新しい あります。
次の条件を入力して、ユーザーがすでに 許可され、再度要求する必要はありません。
"DEVICE_PRECISE_LOCATION" in user.permissions
ユーザー情報を読み取る
ユーザーが権限を付与すると、ユーザー情報が 必要があります。
以下のスニペットでは、デバイスの位置情報を確認できます。
device.currentLocation
の下にある Webhook へのリクエスト内に含まれています。
リクエスト JSON |
---|
{ "handler": { "name": "handler" }, "intent": { "name": "", "params": { "deviceLoc": { "original": "", "resolved": { "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue", "permissionStatus": "PERMISSION_GRANTED", "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ] } } }, "query": "Yes" }, "scene": { "name": "Scene", "slotFillingStatus": "FINAL", "slots": { "deviceLoc": { "mode": "REQUIRED", "status": "SLOT_UNSPECIFIED", "value": { "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ], "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue", "permissionStatus": "PERMISSION_GRANTED" }, "updated": true } }, "next": { "name": "actions.scene.END_CONVERSATION" } }, "session": { "id": "session_id", "params": { "deviceLoc": { "grantedPermissions": [ "DEVICE_PRECISE_LOCATION" ], "permissionStatus": "PERMISSION_GRANTED", "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValue" } }, "typeOverrides": [], "languageCode": "" }, "user": { "locale": "en-US", "params": {}, "accountLinkingStatus": "ACCOUNT_LINKING_STATUS_UNSPECIFIED", "verificationStatus": "VERIFIED", "packageEntitlements": [], "permissions": [ "DEVICE_PRECISE_LOCATION" ], "lastSeenTime": "2021-02-08T20:43:47Z" }, "home": { "params": {} }, "device": { "capabilities": [ "SPEECH", "RICH_RESPONSE", "LONG_FORM_AUDIO" ], "currentLocation": { "coordinates": { "latitude": 37.422, "longitude": -122.084 }, "postalAddress": { "revision": 0, "regionCode": "US", "languageCode": "en", "postalCode": "94043", "sortingCode": "", "administrativeArea": "California", "locality": "Mountain View", "sublocality": "", "addressLines": ["1600 Amphitheatre Parkway"], "recipients": [], "organization": "" } } } } |
ロケーション タイプのスキーマについて詳しくは、以下をご覧ください。
Location
リファレンス。
次に示すように、Webhook からのリクエストに含まれる情報にアクセスできます。 これを次のスニペットのようになります。
Webhook |
---|
app.handle('handler', (conv) => { let location = conv.device.currentLocation; conv.add(`Your postal code is ${location.postalCode}`); }); |
プロンプトで権限を使用する
静的プロンプトで権限を参照することもできます。たとえば、デバイスの位置情報については、
$device.currentLocation.coordinates.*
と $device.currentLocation.postalAddress.*
を使用できます。
次のコード スニペットは、プロンプトでユーザーの都市を参照する方法を示しています。
candidates:
- first_simple:
variants:
- speech: >-
There are no events scheduled tomorrow in the city of $device.currentLocation.postalAddress.locality.