Permissões

É 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:

  1. Acesse o Console do Actions e selecione ou crie de um projeto.
  2. Clique em Desenvolver no menu superior.
  3. Em Cenas, clique na cena a que você quer adicionar o fluxo de permissão.
  4. Na seção Preenchimento de slot da cena, clique em + para adicionar um novo slot.
  5. No menu suspenso Selecionar tipo, escolha o tipo de slot actions.type.Permission.

  6. No campo Inserir nome do slot, dê um nome ao slot.

  7. 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:

  1. Acesse o Console do Actions e clique em Develop no menu superior.
  2. Em Cenas, clique na cena que contém o slot de permissão.
  3. Na seção Condição da cena, clique em + para adicionar uma condição.
  4. Insira a condição a seguir para verificar o status da permissão (em que &lt;slot_name&gt; é 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")
    

  5. Na seção Condição da cena, clique em + para adicionar uma condição.

  6. 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"
    

  7. Na seção Condição da cena, clique em + para adicionar uma condição.

  8. 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.