Autorizzazioni

Puoi utilizzare le autorizzazioni nell'Azione per richiedere dati personali all'utente al fine di completare una richiesta. Ad esempio, un'Azione di consegna di cibo potrebbe utilizzare un'autorizzazione di accesso alla posizione del dispositivo per richiedere informazioni sulla posizione dell'utente.

Quando aggiungi un'autorizzazione all'Azione, l'assistente presenta un'interfaccia standard e coerente per richiedere all'utente l'autorizzazione a fornire le informazioni sull'Azione.

Autorizzazioni disponibili

L'Azione può richiedere le seguenti autorizzazioni:

  • DEVICE_PRECISE_LOCATION: richiede la posizione esatta del dispositivo dell'utente (coordinate e indirizzo).
  • DEVICE_COARSE_LOCATION: richiede la posizione approssimativa del dispositivo dell'utente (codice postale e città).

Configurare le autorizzazioni

Per configurare le autorizzazioni per l'Azione, aggiungi un nuovo tipo di slot alla scena. Successivamente, configurerai lo slot per l'autorizzazione dati che vuoi richiedere.

Aggiungi tipo di slot autorizzazione

Puoi concedere all'Azione la possibilità di ottenere informazioni sugli utenti con il tipo di slot actions.type.Permission.

Per configurare questo tipo di slot:

  1. Vai alla Console di Actions e seleziona o crea un progetto.
  2. Fai clic su Sviluppa nel menu in alto.
  3. In Scene, fai clic sulla scena a cui vuoi aggiungere il flusso di autorizzazioni.
  4. Nella sezione Riempimento slot della scena, fai clic su + per aggiungere una nuova area.
  5. Nel menu a discesa Seleziona tipo, scegli il tipo di area actions.type.Permission.

  6. Nel campo Inserisci il nome dell'area, assegna un nome all'area.

  7. Abilita Writeback valore slot personalizzato per scrivere il risultato in un parametro di sessione.

Configura slot

Ora puoi fornire una stringa di contesto e un elenco di autorizzazioni da concedere per configurare lo slot. La stringa di contesto è il motivo per cui richiedi informazioni all'utente e viene mostrata agli utenti quando viene loro richiesto di concedere l'autorizzazione all'Azione.

Puoi configurare la stringa di contesto e le autorizzazioni nella sezione Configura slot, come mostrato nello screenshot seguente:

Il seguente snippet di codice mostra una configurazione di slot di esempio:

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

La richiesta mostrata agli utenti sarà nel formato "$context_string, dovrò soltanto recuperare la tua posizione attuale da Google. Va bene?"

Puoi ottenere le seguenti informazioni sull'utente utilizzando i codici di autorizzazione:

Autorizzazione Descrizione
DEVICE_PRECISE_LOCATION Posizione esatta del dispositivo (coordinate e via)
DEVICE_COARSE_LOCATION Posizione approssimativa del dispositivo (codice postale e città)

Ottieni risultato autorizzazione

Le seguenti sezioni descrivono come verificare lo stato dell'autorizzazione e leggere le informazioni dell'utente se concede l'autorizzazione.

Controllare lo stato delle autorizzazioni

Quando l'utente concede l'autorizzazione, lo stato risultante viene scritto nel parametro di sessione associato allo slot.

Puoi controllare lo stato di autorizzazione controllando il valore di session.params.<slot_name>.permissionStatus nella condizione di una scena.

Per controllare lo stato dello slot di autorizzazione:

  1. Vai alla console di Actions e fai clic su Sviluppa nel menu in alto.
  2. In Scene, fai clic sulla scena contenente lo slot delle autorizzazioni.
  3. Nella sezione Condizione della scena, fai clic su + per aggiungere una nuova condizione.
  4. Inserisci la seguente condizione per verificare lo stato di autorizzazione (dove <slot_name> è il nome del parametro sessione configurato nella tua slot):

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

  5. Nella sezione Condizione della scena, fai clic su + per aggiungere una nuova condizione.

  6. Inserisci la condizione seguente per gestire il caso in cui l'utente non acconsente alla condivisione delle proprie informazioni:

    scene.slots.status == "FINAL"
    

  7. Nella sezione Condizione della scena, fai clic su + per aggiungere una nuova condizione.

  8. Inserisci la condizione seguente per gestire il caso in cui l'utente ha già concesso l'autorizzazione e non deve essere nuovamente richiesta:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Lettura delle informazioni degli utenti

Se l'utente concede l'autorizzazione, le informazioni sull'utente vengono fornite nelle richieste successive.

Nello snippet seguente puoi visualizzare le informazioni sulla posizione del dispositivo contenute in una richiesta al webhook in device.currentLocation:

Richiedi 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": ""
          }
        }
      }
    }
    

Per ulteriori informazioni sullo schema del tipo di località, consulta la documentazione di riferimento di Location.

Puoi accedere alle informazioni contenute nella richiesta dal webhook, come mostrato nel seguente snippet:

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

Utilizzare l'autorizzazione nei prompt

Puoi fare riferimento all'autorizzazione anche nei prompt statici. Ad esempio, per la geolocalizzazione del dispositivo, puoi utilizzare $device.currentLocation.coordinates.* e $device.currentLocation.postalAddress.*. Il seguente snippet di codice mostra come fare riferimento alla città dell'utente in una richiesta:

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