Autorisations

Dans votre action, vous pouvez utiliser des autorisations pour demander des données à caractère personnel à l'utilisateur afin de traiter une requête. Par exemple, une action de livraison de repas peut utiliser l'autorisation d'accéder à la position de l'appareil pour demander des informations sur la position de l'utilisateur.

Lorsque vous ajoutez une autorisation à votre action, l'Assistant présente une interface standard et cohérente pour demander à l'utilisateur l'autorisation de fournir les informations à votre action.

Autorisations disponibles

Les autorisations suivantes peuvent être demandées par votre action:

  • DEVICE_PRECISE_LOCATION: demande la position exacte de l'appareil de l'utilisateur (coordonnées et adresse postale).
  • DEVICE_COARSE_LOCATION: demande la position approximative de l'appareil de l'utilisateur (code postal et ville).

Configurer les autorisations

Pour configurer des autorisations pour votre action, vous devez ajouter un nouveau type d'emplacement à la scène. Vous configurez ensuite l'emplacement pour l'autorisation d'accès aux données que vous souhaitez demander.

Ajouter un type d'emplacement d'autorisation

Vous pouvez autoriser votre action à obtenir des informations utilisateur avec le type d'emplacement actions.type.Permission.

Pour configurer ce type d'emplacement, procédez comme suit:

  1. Accédez à la console Actions, puis sélectionnez ou créez un projet.
  2. Cliquez sur Develop (Développer) dans le menu supérieur.
  3. Sous Scenes (Scènes), cliquez sur la scène à laquelle vous souhaitez ajouter le flux d'autorisations.
  4. Dans la section Remplissage d'emplacements de la scène, cliquez sur + pour ajouter un emplacement.
  5. Dans le menu déroulant Sélectionner un type, sélectionnez le type d'emplacement actions.type.Permission.

  6. Dans le champ Saisir le nom de l'emplacement, attribuez un nom à l'emplacement.

  7. Activez l'option Custom_slot value writeback pour écrire le résultat dans un paramètre de session.

Configurer l'emplacement

Vous pouvez maintenant fournir une chaîne de contexte et une liste des autorisations à accorder pour configurer l'emplacement. La chaîne de contexte explique pourquoi vous demandez des informations à l'utilisateur. Elle est présentée aux utilisateurs lorsqu'ils sont invités à accorder l'autorisation à votre action.

Vous pouvez configurer la chaîne de contexte et les autorisations dans la section Configurer l'emplacement, comme illustré dans la capture d'écran suivante:

L'extrait de code suivant présente un exemple de configuration d'emplacement:

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

L'invite qui s'affiche pour les utilisateurs se présentera sous la forme suivante : "$context_string, I'm need to get your current location from Google. Est-ce que cela vous convient ?"

Vous pouvez obtenir les informations utilisateur suivantes à l'aide des codes d'autorisation:

Autorisation Description
DEVICE_PRECISE_LOCATION Position exacte de l'appareil (coordonnées et adresse postale)
DEVICE_COARSE_LOCATION Position approximative de l'appareil (code postal et ville)

Obtenir le résultat de l'autorisation

Les sections suivantes décrivent comment vérifier l'état de l'autorisation et lire les informations concernant l'utilisateur s'il accorde l'autorisation.

Vérifier l'état des autorisations

Lorsque l'utilisateur accorde l'autorisation, l'état obtenu est écrit dans le paramètre de session associé à l'emplacement.

Vous pouvez vérifier l'état d'autorisation en vérifiant la valeur de session.params.<slot_name>.permissionStatus dans la condition d'une scène.

Pour vérifier l'état de l'emplacement d'autorisation, procédez comme suit:

  1. Accédez à la console Actions, puis cliquez sur Développer dans le menu supérieur.
  2. Sous Scenes (Scènes), cliquez sur la scène contenant l'emplacement d'autorisation.
  3. Dans la section Condition de la scène, cliquez sur + pour ajouter une condition.
  4. Saisissez la condition suivante pour vérifier l'état d'autorisation (où <slot_name> est le nom du paramètre de session que vous avez configuré dans votre emplacement):

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

  5. Dans la section Condition de la scène, cliquez sur + pour ajouter une condition.

  6. Saisissez la condition suivante pour gérer le cas où l'utilisateur n'autorise pas le partage de ses informations:

    scene.slots.status == "FINAL"
    

  7. Dans la section Condition de la scène, cliquez sur + pour ajouter une condition.

  8. Saisissez la condition suivante pour gérer les cas où l'utilisateur a déjà accordé l'autorisation et n'a pas besoin d'être invité à nouveau:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Lire les informations utilisateur

Si l'utilisateur accorde son autorisation, ses informations sont fournies dans les requêtes suivantes.

L'extrait de code ci-dessous vous permet de consulter les informations de localisation de l'appareil contenues dans une requête adressée au webhook sous device.currentLocation:

Requête 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": ""
          }
        }
      }
    }
    

Pour en savoir plus sur le schéma du type d'emplacement, consultez la documentation de référence sur Location.

Vous pouvez accéder aux informations contenues dans la requête à partir de votre webhook, comme indiqué dans l'extrait de code suivant:

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

Utiliser l'autorisation dans les requêtes

Vous pouvez également référencer l'autorisation dans des invites statiques. Par exemple, pour la localisation de l'appareil, vous pouvez utiliser $device.currentLocation.coordinates.* et $device.currentLocation.postalAddress.*. L'extrait de code suivant montre comment référencer la ville de l'utilisateur dans une requête:

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