É possível usar permissões na ação para solicitar dados pessoais do usuário. apenas com a finalidade de concluir uma solicitação. Por exemplo, uma ação de entrega de comida pode usar a permissão de localização do dispositivo para solicitar informações sobre a o local.
Quando você adiciona uma permissão à ação, o Google Assistente apresenta interface consistente para solicitar permissão do usuário para fornecer o informações ao seu Action.
Permissões disponíveis
As seguintes permissões podem ser solicitadas pela sua ação:
DEVICE_PRECISE_LOCATION
: solicita o local exato do dispositivo do usuário. (coordenadas e endereço).DEVICE_COARSE_LOCATION
: solicita a localização aproximada do dispositivo do usuário. (código postal e cidade).
Configurar permissões
Para configurar as permissões da sua ação, adicione um novo tipo de slot à cena Em seguida, você configura o slot da permissão de dados que quer solicitar.
Adicionar tipo de slot de permissão
Você pode conceder à ação a capacidade de acessar informações do usuário com o
actions.type.Permission
tipo de slot.
Para configurar esse tipo de slot, siga estas etapas:
- Acesse o Console do Actions e selecione ou crie de um projeto.
- Clique em Desenvolver no menu superior.
- Em Cenas, clique na cena a que você quer adicionar o fluxo de permissão.
- Na seção Preenchimento de slot da cena, clique em + para adicionar um novo slot.
No menu suspenso Selecionar tipo, escolha o tipo de slot
actions.type.Permission
.No campo Inserir nome do slot, dê um nome ao slot.
Ative Writeback de valor de slot personalizado para gravar o resultado em uma sessão .
Configurar slot
Agora você pode fornecer uma string de contexto e uma lista de permissões a serem concedidas a configure o slot. A string de contexto é a justificativa para você estar solicitando informações do usuário e é exibido aos usuários quando eles estão pediu permissão para sua ação.
Configure a string de contexto e as permissões em Configurar slot conforme mostrado na captura de tela a seguir:
O snippet de código abaixo mostra um exemplo de configuração de slot:
{
"@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
"context": "Context string",
"permissions": ["DEVICE_PRECISE_LOCATION"]
}
O prompt exibido aos usuários estará no formato "$context_string, I'll só precisa saber sua localização atual no Google. Tudo bem?"
Você pode receber as seguintes informações do usuário usando os códigos de permissão:
Permissão | Descrição |
---|---|
DEVICE_PRECISE_LOCATION |
Localização precisa do dispositivo (coordenadas e endereço) |
DEVICE_COARSE_LOCATION |
Localização aproximada do dispositivo (código postal e cidade) |
Receber resultado da permissão
As seções a seguir descrevem como verificar o status de permissão e ler as informações do usuário se ele conceder a permissão.
Verificar o status da permissão
Quando o usuário concede a permissão, o status resultante é gravado na sessão. parâmetro associado ao espaço.
Você pode verificar o status da permissão verificando o valor de
session.params.<slot_name>.permissionStatus
na condição de uma cena.
Para verificar o status do slot de permissão, siga estas etapas:
- Acesse o Console do Actions e clique em Develop no menu superior.
- Em Cenas, clique na cena que contém o slot de permissão.
- Na seção Condição da cena, clique em + para adicionar uma condição.
Insira a condição a seguir para verificar o status da permissão (em que <slot_name> é o nome do parâmetro de sessão que você configurou no entrada):
scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
Na seção Condição da cena, clique em + para adicionar uma condição.
Insira a condição a seguir para casos em que o usuário não consentir em compartilhar suas informações:
scene.slots.status == "FINAL"
Na seção Condição da cena, clique em + para adicionar uma condição.
Insira a condição a seguir para lidar com o caso em que o usuário já recebeu permissão e não precisa ser feita novamente:
"DEVICE_PRECISE_LOCATION" in user.permissions
Ler as informações dos usuários
Se o usuário conceder permissão, as informações dele serão fornecidas solicitações subsequentes.
No snippet abaixo, é possível conferir as informações de local do dispositivo
contido em uma solicitação para o webhook em device.currentLocation
:
Solicitação 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": "" } } } } |
Para mais informações sobre o esquema do tipo de local, consulte
Referência de Location
.
É possível acessar as informações contidas na solicitação do webhook, conforme mostrado no seguinte snippet:
Webhook |
---|
app.handle('handler', (conv) => { let location = conv.device.currentLocation; conv.add(`Your postal code is ${location.postalCode}`); }); |
Usar permissão em comandos
Também é possível fazer referência à permissão em comandos estáticos. Por exemplo, para a localização do dispositivo,
use $device.currentLocation.coordinates.*
e $device.currentLocation.postalAddress.*
.
O snippet de código abaixo mostra como referenciar a cidade do usuário em um comando:
candidates:
- first_simple:
variants:
- speech: >-
There are no events scheduled tomorrow in the city of $device.currentLocation.postalAddress.locality.