您可以在動作中使用權限,要求使用者提供個人資料 以完成要求舉例來說 可以使用裝置位置存取權,要求取得使用者的資訊 或 HTTP/HTTPS 位置
當你為動作新增權限時,Google 助理會顯示標準、 要求使用者授予權限 和動作相關的資訊
可用權限
你的動作可能會要求以下權限:
DEVICE_PRECISE_LOCATION
:要求使用者裝置的精確位置資訊 (座標和街道地址)。DEVICE_COARSE_LOCATION
:要求使用者的概略裝置位置資訊 (郵遞區號和城市)。
設定權限
如要設定動作的權限,請在 場景。接著,針對要要求的資料權限設定運算單元。
新增權限運算單元類型
您可以使用
actions.type.Permission
個版位類型。
如要設定這個版位類型,請按照下列步驟操作:
- 前往動作控制台,然後選取或建立 專案。
- 按一下頂端選單中的「開發」。
- 在「Scenes」下方,點選要新增權限流程的場景。
- 在場景的「運算單元填充」部分下方,按一下 + 以新增版位。
在「選取類型」下拉式選單中,選取
actions.type.Permission
版位類型。在「輸入運算單元名稱」欄位中,為版位命名。
啟用「自訂運算單元值寫回」,將結果寫入工作階段 參數。
設定運算單元
您現在可以提供結構定義字串和要授予的權限清單 設定版位內容字串是解釋為何 要求使用者提供資訊,並在使用者 要求授予動作權限。
您可以在「設定運算單元」中設定內容字串和權限。 部分,如以下螢幕截圖所示:
下列程式碼片段為運算單元設定範例:
{
"@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
"context": "Context string",
"permissions": ["DEVICE_PRECISE_LOCATION"]
}
使用者看到的提示格式為 "$context_string, I'll 只需要向 Google 取得你目前的位置即可。請問這樣可以嗎?」
您可以使用權限代碼取得下列使用者資訊:
權限 | 說明 |
---|---|
DEVICE_PRECISE_LOCATION |
裝置的精確位置 (座標和街道地址) |
DEVICE_COARSE_LOCATION |
概略裝置位置 (郵遞區號和城市) |
取得權限結果
以下各節說明如何查看權限狀態及讀取 使用者的資訊。
查看權限狀態
當使用者授予權限時,系統會將產生的狀態寫入工作階段 參數。
如要確認權限狀態,您可以查看
session.params.<slot_name>.permissionStatus
如要查看權限運算單元的狀態,請按照下列步驟操作:
- 前往動作控制台,然後按一下 頂端選單中的「開發」。
- 在「Scenes」下方,按一下含有權限運算單元的場景。
- 在場景的「條件」部分下方,按一下「+」新增 值。
輸入下列條件來檢查權限狀態 (其中 <slot_name> 是您在 版位):
scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
在場景的「條件」部分下方,按一下「+」新增 值。
輸入下列條件來處理使用者未解決的情況 同意分享個人資料:
scene.slots.status == "FINAL"
在場景的「條件」部分下方,按一下「+」新增 值。
輸入下列條件,處理使用者已遇到的情況 已獲準,因此日後不需要再次詢問:
"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.