Uprawnienia

Możesz korzystać z uprawnień w akcji, aby poprosić użytkownika o dostęp do danych osobowych. . Na przykład zdarzenie dostawy jedzenia może użyć dostępu do lokalizacji urządzenia, aby zażądać informacji o lokalizacji.

Gdy dodasz uprawnienia do akcji, Asystent wyświetli standardowy komunikat, do wysyłania próśb o zgodę na udostępnienie do Akcji.

Dostępne uprawnienia

Akcja może mieć te uprawnienia:

  • DEVICE_PRECISE_LOCATION: prosi o dokładną lokalizację urządzenia użytkownika (współrzędne i adres).
  • DEVICE_COARSE_LOCATION: prosi o przybliżoną lokalizację urządzenia użytkownika (kod pocztowy i miasto).

Konfigurowanie ustawień

Aby skonfigurować uprawnienia akcji, dodaj nowy typ przedziału scena. Następnie skonfigurujesz przedział dla żądanego uprawnienia do danych.

Dodaj typ przedziału uprawnień

Możesz zezwolić Akcji na pozyskiwanie informacji o użytkowniku za pomocą Typ przedziału: actions.type.Permission.

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

  1. Otwórz konsolę działań i wybierz lub utwórz projekt.
  2. Kliknij Develop (Rozbuduj) w menu u góry.
  3. W sekcji Sceny kliknij scenę, do której chcesz dodać uprawnienia.
  4. W sekcji Wypełnianie boksu kliknij +, aby dodać nowy boks.
  5. W menu Wybierz typ wybierz typ boksu actions.type.Permission.

  6. W polu Wpisz nazwę boksu wpisz nazwę.

  7. Włącz zapis zwrotny niestandardowego przedziału, aby zapisać wynik w sesji. .

Skonfiguruj przedział

Możesz teraz podać ciąg kontekstu i listę uprawnień, które otrzymasz i skonfigurować przedział czasu. Ciąg kontekstowy to uzasadnienie, żądania informacji od użytkownika i są wyświetlane, prosi o przyznanie uprawnień akcji.

Ciąg tekstowy kontekstu i uprawnienia możesz skonfigurować w sekcji Skonfiguruj przedział jak 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 będzie miał postać "$context_string, wystarczy pobrać Twoją bieżącą lokalizację z Google. Czy możemy tak zrobić?”

Za pomocą kodów uprawnień możesz uzyskać następujące informacje o użytkowniku:

Uprawnienie 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ń

W poniższych sekcjach opisano, jak sprawdzić stan uprawnień i odczytać informacje o użytkowniku, jeśli udzieli on zgody.

Sprawdzanie stanu uprawnień

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

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

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

  1. Otwórz konsolę działań i kliknij Programuj w menu u góry.
  2. W sekcji Sceny kliknij scenę zawierającą przedział uprawnień.
  3. W sekcji Warunek sceny kliknij +, aby dodać nowy .
  4. Wpisz poniższy warunek, aby sprawdzić stan uprawnień (gdzie &lt;slot_name&gt; to nazwa parametru sesji skonfigurowanego w tagu gniazdo):

    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 .

  6. Wpisz poniższy warunek, aby obsłużyć zgłoszenie, w przypadku którego użytkownik nie wyrazić zgodę na udostępnienie swoich informacji:

    scene.slots.status == "FINAL"
    

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

  8. Wpisz poniższy warunek, aby obsłużyć zgłoszenie, w przypadku którego użytkownik już to zrobił ma uprawnienia i nie trzeba ponownie prosić:

    "DEVICE_PRECISE_LOCATION" in user.permissions
    

Odczytywanie informacji o użytkownikach

Jeśli użytkownik przyzna odpowiednie uprawnienia, informacje o nim zostaną podane w kolejnych żądań.

Ten fragment kodu zawiera informacje o lokalizacji urządzenia zawarte w żądaniu do webhooka pod adresem device.currentLocation:

Żądanie 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": ""
          }
        }
      }
    }
    

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

Informacje zawarte w żądaniu możesz uzyskać z webhooka, jak pokazano poniżej w tym fragmencie:

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

Używanie uprawnień w promptach

Możesz też odwoływać się do tych uprawnień w promptach statycznych. Na przykład w przypadku lokalizacji urządzenia możesz używać $device.currentLocation.coordinates.* i $device.currentLocation.postalAddress.*. Ten fragment kodu pokazuje, jak uwzględnić w prompcie miasto użytkownika:

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