Uprawnienia

W ramach akcji możesz użyć uprawnień, aby poprosić użytkownika o udostępnienie danych osobowych w celu wypełnienia żądania. Na przykład akcja zajmująca się dostawą jedzenia może użyć dostępu do lokalizacji urządzenia, aby poprosić o informacje o lokalizacji użytkownika.

Gdy dodasz do akcji uprawnienie, Asystent będzie wyświetlać standardowy, spójny interfejs, aby prosić użytkownika o zgodę na udostępnienie informacji do akcji.

Dostępne uprawnienia

Akcja może wymagać tych uprawnień:

  • DEVICE_PRECISE_LOCATION: prosi o podanie dokładnej lokalizacji urządzenia użytkownika (współrzędne i adresowe).
  • DEVICE_COARSE_LOCATION: prosi o przybliżoną lokalizację urządzenia użytkownika (kod pocztowy i nazwę miasta).

Konfigurowanie ustawień

Aby skonfigurować uprawnienia akcji, dodaj do sceny nowy typ przedziału. Następnie skonfigurujesz przedział dla uprawnienia do danych, o które chcesz poprosić.

Dodaj typ przedziału uprawnień

Możesz przyznać Akcjom możliwość uzyskiwania informacji o użytkowniku za pomocą przedziału typu actions.type.Permission.

Aby skonfigurować ten typ przedziału, wykonaj te czynności:

  1. Otwórz Konsolę Actions i wybierz lub utwórz projekt.
  2. W menu u góry kliknij Programuj.
  3. W sekcji Sceny kliknij scenę, do której chcesz dodać uprawnienia.
  4. W sekcji Wypełnianie przedziałów sceny kliknij +, aby dodać nowe miejsce.
  5. Z menu Wybierz typ kliknij actions.type.Permission typ boksu.

  6. W polu Wpisz nazwę przedziału nadaj boksowi nazwę.

  7. Włącz Zapis wartości przedziału niestandardowego, aby zapisać wynik w parametrze sesji.

Skonfiguruj przedział

Teraz możesz podać ciąg kontekstu i listę uprawnień, które można przyznać, aby skonfigurować przedział. Ciąg tekstowy podany w kontekście uzasadnia, dlaczego prosisz użytkownika o informacje. Jest on wyświetlany, gdy użytkownicy są proszeni o przyznanie uprawnień do działania.

Ciąg kontekstu i uprawnienia możesz skonfigurować w sekcji Skonfiguruj przedział, jak pokazano na tym zrzucie ekranu:

Ten fragment kodu zawiera przykładową konfigurację przedziału:

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

Prompt wyświetlany użytkownikom będzie miał postać "$context_string. Muszę tylko pobrać od Google Twoją bieżącą lokalizację. Czy na pewno chcesz to zrobić?”

Za pomocą tych kodów uprawnień możesz uzyskać te informacje o użytkownikach:

Uprawnienia Opis
DEVICE_PRECISE_LOCATION Dokładna lokalizacja urządzenia (współrzędne i adres)
DEVICE_COARSE_LOCATION Przybliżona lokalizacja urządzenia (kod pocztowy i miasto)

Uzyskaj wynik dotyczący uprawnień

Poniższe sekcje zawierają informacje o sprawdzaniu stanu uprawnień i odczytywaniu informacji o użytkowniku, jeśli przyzna on uprawnienia.

Sprawdź stan uprawnień

Gdy użytkownik przyzna uprawnienia, wynikowy stan zostanie zapisany w parametrze sesji powiązanym z boksem.

Stan uprawnień możesz sprawdzić, sprawdzając wartość session.params.<slot_name>.permissionStatus w warunku sceny.

Aby sprawdzić stan przedziału uprawnień, wykonaj te czynności:

  1. Otwórz Konsolę Actions i w menu u góry kliknij Develop (Programowanie).
  2. W sekcji Sceny kliknij scenę zawierającą przedział uprawnień.
  3. W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.
  4. Aby sprawdzić stan uprawnień, wpisz ten warunek (gdzie <slot_name> to nazwa parametru sesji skonfigurowanego przez Ciebie w boksie):

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

  5. W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.

  6. Ten warunek będzie spełniony w przypadku, gdy użytkownik nie zgadza się na udostępnienie swoich danych:

    scene.slots.status == "FINAL"
    

  7. W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.

  8. Wpisz ten warunek, aby uwzględnić przypadek, w którym użytkownik przyznał już uprawnienia i nie musi prosić o kolejne pytanie:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Odczytywanie informacji o użytkownikach

Jeśli użytkownik udzieli zgody, informacje o nim zostaną udostępnione w kolejnych prośbach.

We fragmencie kodu poniżej możesz zobaczyć informacje o lokalizacji urządzenia zawarte w żądaniu wysyłanym do webhooka w sekcji device.currentLocation:

Plik JSON żądania
  {
      "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": ""
          }
        }
      }
    }
    

Więcej informacji o schemacie typu lokalizacji znajdziesz w dokumentacji typu Location.

Informacje zawarte w żądaniu są dostępne z poziomu webhooka, tak jak w tym fragmencie:

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

Używaj uprawnień w promptach

Możesz też odwoływać się do uprawnień w promptach statycznych. Do określania lokalizacji urządzenia możesz na przykład użyć $device.currentLocation.coordinates.* i $device.currentLocation.postalAddress.*. Ten fragment kodu pokazuje, jak umieścić w prompcie odwołanie do miasta użytkownika:

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