Autorizzazioni

Puoi utilizzare le autorizzazioni nell'Azione per richiedere dati personali all'utente ai fini del completamento di una richiesta. Ad esempio, un'azione di consegna di cibo potrebbe utilizzare un'autorizzazione di accesso alla posizione del dispositivo per richiedere informazioni sull'accesso in ogni località.

Quando aggiungi un'autorizzazione all'azione, l'assistente presenta uno standard, coerente per richiedere l'autorizzazione all'utente per fornire informazioni all'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 impostare le autorizzazioni per l'Azione, aggiungi un nuovo tipo di area alla scena. Devi quindi configurare lo slot per l'autorizzazione dati che vuoi richiedere.

Aggiungi tipo di slot di autorizzazione

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

Per configurare questo tipo di slot:

  1. Vai alla console Actions e seleziona o crea di 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 autorizzazione.
  4. Nella sezione Riempimento degli slot della scena, fai clic su + per aggiungere un nuovo spazio.
  5. Nel menu a discesa Seleziona tipo, seleziona il tipo di area actions.type.Permission.

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

  7. Attiva Writeback valore slot personalizzato per scrivere il risultato in una sessione .

Configura slot

Ora puoi fornire una stringa di contesto e un elenco di autorizzazioni da concedere e configurare lo slot. La stringa di contesto è la motivazione per cui richiedono informazioni all'utente e vengono mostrate agli utenti quando viene chiesto 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"]
}

Il messaggio mostrato agli utenti avrà il formato "$context_string, devi solo ottenere la tua posizione attuale da Google. Va bene?"

Utilizzando i codici di autorizzazione puoi ottenere le seguenti informazioni utente:

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

Ottieni risultato autorizzazione

Le seguenti sezioni descrivono come controllare 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 nella sessione. associato allo slot.

Puoi controllare lo stato dell'autorizzazione controllando il valore di session.params.<slot_name>.permissionStatus nelle condizioni di una scena.

Per controllare lo stato dello spazio di autorizzazione:

  1. Vai alla console Actions e fai clic su Sviluppa nel menu in alto.
  2. In Scene, fai clic sulla scena contenente lo spazio per le autorizzazioni.
  3. Nella sezione Condizione della scena, fai clic su + per aggiungerne una nuova .
  4. Inserisci la seguente condizione per verificare lo stato dell'autorizzazione (dove &lt;slot_name&gt; è il nome del parametro di sessione che hai configurato nella 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 aggiungerne una nuova .

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

    scene.slots.status == "FINAL"
    

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

  8. Inserisci la seguente condizione per gestire il caso in cui l'utente ha già è stata concessa l'autorizzazione e non sarà necessario richiederla di nuovo:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Lettura informazioni utente

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

Nello snippet seguente puoi vedere le informazioni sulla posizione del dispositivo contenuto 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 le Riferimento 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}`);
  });
    

Usa l'autorizzazione nei prompt

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

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