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:
- Otwórz Konsolę Actions i wybierz lub utwórz projekt.
- W menu u góry kliknij Programuj.
- W sekcji Sceny kliknij scenę, do której chcesz dodać uprawnienia.
- W sekcji Wypełnianie przedziałów sceny kliknij +, aby dodać nowe miejsce.
Z menu Wybierz typ kliknij
actions.type.Permission
typ boksu.W polu Wpisz nazwę przedziału nadaj boksowi nazwę.
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:
- Otwórz Konsolę Actions i w menu u góry kliknij Develop (Programowanie).
- W sekcji Sceny kliknij scenę zawierającą przedział uprawnień.
- W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.
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")
W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.
Ten warunek będzie spełniony w przypadku, gdy użytkownik nie zgadza się na udostępnienie swoich danych:
scene.slots.status == "FINAL"
W sekcji Warunek sceny kliknij +, aby dodać nowy warunek.
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.