Permisos

Puedes usar permisos en tu Acción para solicitarle datos personales al usuario. con el fin de completar una solicitud. Por ejemplo, una acción de entrega de comida puede usar un permiso de ubicación del dispositivo para solicitar información sobre ubicación.

Cuando agregas un permiso a tu acción, Asistente presenta interfaz coherente para solicitar permiso al usuario y otorgar el permiso información a tu Action.

Permisos disponibles

Tu acción puede solicitar los siguientes permisos:

  • DEVICE_PRECISE_LOCATION: Solicita la ubicación precisa del dispositivo del usuario. (coordenadas y dirección).
  • DEVICE_COARSE_LOCATION: Solicita la ubicación aproximada del dispositivo del usuario. (código postal y ciudad).

Configura los permisos

Para configurar permisos para tu Acción, agrega un nuevo tipo de ranura al escena. Luego, configurarás la ranura para el permiso de datos que quieres solicitar.

Agrega un tipo de ranura de permiso

Puedes permitir que tu Action obtenga información de usuario mediante el Tipo de ranura: actions.type.Permission.

Para configurar este tipo de espacio, sigue estos pasos:

  1. Ve a la Consola de Actions y selecciona o crea un proyecto.
  2. En el menú de la parte superior, haz clic en Develop.
  3. En Scenes, haz clic en la escena a la que deseas agregar el flujo de permisos.
  4. En la sección Relleno de ranuras de la escena, haz clic en + para agregar un espacio nuevo.
  5. En el menú desplegable Seleccionar tipo, selecciona el tipo de ranura actions.type.Permission.

  6. En el campo Ingresa el nombre del espacio, asígnale un nombre al espacio.

  7. Habilita la reescritura del valor del espacio personalizado para escribir el resultado en una sesión. parámetro.

Configura el horario disponible

Ahora puedes proporcionar una cadena de contexto y una lista de permisos que se otorgarán a configurar la ranura. La cadena de contexto es la justificación del solicita información al usuario y se muestra a los usuarios cuando están que otorgue permiso a tu Acción.

Puedes configurar la cadena de contexto y los permisos en Configure slot. como se muestra en la siguiente captura de pantalla:

En el siguiente fragmento de código, se muestra un ejemplo de configuración de ranuras:

{
  "@type": "type.googleapis.com/google.actions.conversation.v3.PermissionValueSpec",
  "context": "Context string",
  "permissions": ["DEVICE_PRECISE_LOCATION"]
}

La instrucción que se mostrará a los usuarios tendrá el formato "$context_string, le solo necesitamos obtener tu ubicación actual de Google. ¿Te parece bien?".

Puedes obtener la siguiente información del usuario mediante los códigos de permiso:

Permiso Descripción
DEVICE_PRECISE_LOCATION Ubicación precisa del dispositivo (coordenadas y dirección)
DEVICE_COARSE_LOCATION Ubicación aproximada del dispositivo (código postal y ciudad)

Obtén el resultado del permiso

En las siguientes secciones, se describe cómo verificar y leer el estado del permiso la información del usuario si otorga permiso.

Verifica el estado del permiso

Cuando el usuario otorga el permiso, el estado resultante se escribe en la sesión. asociado con la ranura.

Para comprobar el estado del permiso, revisa el valor de session.params.<slot_name>.permissionStatus en la condición de una escena.

Para verificar el estado del espacio de permiso, sigue estos pasos:

  1. Ve a la Consola de Actions y haz clic en Develop en el menú superior.
  2. En Scenes, haz clic en la escena que contiene el espacio de permiso.
  3. En la sección Condición de la escena, haz clic en + para agregar una nueva. estado.
  4. Ingresa la siguiente condición para verificar el estado del permiso (donde &lt;slot_name&gt; es el nombre del parámetro de sesión que configuraste en ranura):

    scene.slots.status == "FINAL" && (session.params.<slot_name>.permissionStatus == "PERMISSION_GRANTED" || session.params.<slot_name>.permissionStatus == "ALREADY_GRANTED")
    

  5. En la sección Condición de la escena, haz clic en + para agregar una nueva. estado.

  6. Ingresa la siguiente condición para manejar el caso en el que el usuario no su consentimiento para compartir su información:

    scene.slots.status == "FINAL"
    

  7. En la sección Condición de la escena, haz clic en + para agregar una nueva. estado.

  8. Ingresa la siguiente condición para manejar el caso en el que el usuario ya haya se le otorgó el permiso y no necesita que se le vuelva a pedir:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Cómo leer la información del usuario

Si el usuario otorga permiso, la información del usuario se proporciona en solicitudes posteriores.

En el siguiente fragmento, puedes ver información sobre la ubicación del dispositivo contenido dentro de una solicitud al webhook en device.currentLocation:

JSON de la solicitud
  {
      "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 obtener más información sobre el esquema del tipo de ubicación, consulta la Referencia de Location.

Puedes acceder a la información contenida en la solicitud desde tu webhook, como se muestra a continuación en el siguiente fragmento:

Webhook
  app.handle('handler', (conv) => {
    let location = conv.device.currentLocation;
    conv.add(`Your postal code is ${location.postalCode}`);
  });
    

Usar permisos en las instrucciones

También puedes hacer referencia al permiso en mensajes estáticos. Por ejemplo, para la ubicación del dispositivo, puedes usar $device.currentLocation.coordinates.* y $device.currentLocation.postalAddress.*. En el siguiente fragmento de código, se muestra cómo hacer referencia a la ciudad del usuario en un mensaje:

candidates:
  - first_simple:
      variants:
        - speech: >-
            There are no events scheduled tomorrow in the city of $device.currentLocation.postalAddress.locality.