Dodatkowa weryfikacja użytkownika umożliwia dodanie drugiego poziomu zabezpieczeń do poleceń głosowych. Dzięki temu możesz dodać dodatkową ochronę w przypadku niektórych działań, takich jak wyłączenie kamery bezpieczeństwa czy otwarcie drzwi. Dodatkowa weryfikacja użytkownika nie jest powiązana z określonym atrybutem urządzenia, co pozwala Ci decydować, kiedy Google Assistant ma wysłać wyzwanie. Możesz na przykład wybrać wyzwanie dotyczące cechy OnOff dla kamery bezpieczeństwa, ale nie wyzwanie dotyczące cechy OnOff dla światła. W niektórych sytuacjach możesz też mieć Assistantwyzwania w odniesieniu do tego samego działania. Możesz na przykład poprosić Assistant o wysłanie prośby o potwierdzenie tożsamości, aby otworzyć drzwi, jeśli brelok NFC nie znajduje się w pobliżu drzwi, ale nie żądaj potwierdzenia, jeśli brelok jest obecny.
Assistant może wysłać 2 rodzaje wyzwań: potwierdzenie lub osobisty numer identyfikacyjny (PIN). Dodaje to blokowanie wyzwania do intencji QUERY
i EXECUTE
wysyłanych z Assistant z powrotem do Twojego działania i akceptuje odpowiedź błędu challengeNeeded
. Assistant wysyła żądanie intencji do Twojego działania z danymi wyzwania w bloku wyzwania. Następnie możesz zweryfikować dane wyzwania, aby sprawdzić, czy użytkownik podał prawidłową odpowiedź bezpieczeństwa.
Assistant używa dialogu do zadawania pytania, ale jeśli używasz Assistant na urządzeniach bez obsługi mowy, kod PIN i potwierdzenie są wyświetlane na ekranie.
Obsługiwane typy urządzeń
Dodatkowa weryfikacja użytkownika jest obsługiwana na wszystkich typach urządzeń.
Obsługiwane właściwości urządzeń
Dodatkowa weryfikacja użytkownika jest obsługiwana w przypadku wszystkich atrybutów urządzenia.
Obsługiwane typy testów
Obsługiwane typy testów weryfikujących dodatkowej weryfikacji użytkownika:
- Brak wyzwania – żądanie i odpowiedź, które nie używają wyzwania weryfikacji dodatkowej użytkownika.
- ackNeeded – dodatkowa weryfikacja użytkownika, która wymaga wyraźnego potwierdzenia (tak lub nie), a także może używać stanów cech jako informacji zwrotnej. Ten typ wyzwania nie jest zalecany w przypadku urządzeń i cech związanych z bezpieczeństwem.
- pinNeeded – dodatkowa weryfikacja użytkownika, która wymaga podania osobistego numeru identyfikacyjnego (PIN). Jest to idealne rozwiązanie w przypadku urządzeń zabezpieczających i właściwości.
Brak wyzwania
Ten przykład pokazuje prawidłowe EXECUTE
zapytanie i odpowiedź bez problemu z włącznikiem światła.
Użytkownik | Włącz światła. |
Google Assistant | OK, włączam 3 światła. |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.OnOff", "params": { "on": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "on": true, "online": true } }] } }
ackNeeded
uwierzytelnianie potwierdzenia użytkownika dodatkowego, które może używać wielu stanów w przypadku cechy lub prostego uwierzytelniania potwierdzenia;
Istnieją te typy wyzwań: ackNeeded
ackNeeded simple
Ten przykład pokazuje proste żądanie i odpowiedź z wyzwaniem ackNeeded
dotyczącym przyciemnienia światła oraz potwierdzenie przyciemnienia światła.
Użytkownik | Przyciemnij światło w salonie. |
Google Assistant | Przyciemniam światło w salonie. Na pewno? |
Użytkownik | Tak. |
Google Assistant | Przyciemniam światło w salonie. |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 }, "challenge": { "ack": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS" }] } }
ackNeeded z stanami cech
uwierzytelnianie za pomocą potwierdzenia przez użytkownika dodatkowego, które może używać stanów w przypadku cechy;
Jeśli na przykład pracujesz z właściwością TemperatureSetting, a obie wartości thermostatMode
i thermostatTemperatureSetpoint
są ustawione, Assistant może zapytać: Czy na pewno chcesz ustawić temperaturę klimatyzacji na 28 stopni?
Możesz też uwzględnić stan w odpowiedzi, aby Assistant wykonać określone działanie na podstawie danego żądania.
Te cechy i stany obsługują ackNeeded
z stanami cech. Wyświetlenie konkretnej cechy oznacza, że wszystkie jej stany są obsługiwane.
- ArmDisarm
currentArmLevel
currentStatusReport
- Fill
- LockUnlock
- OnOff
on
- OpenClose
- Scene
- TemperatureSetting
thermostatMode
thermostatTemperatureSetpoint
thermostatTemperatureSetpointHigh
thermostatTemperatureSetpointLow
Ten przykład pokazuje żądanie i odpowiedź z wyzwaniem ackNeeded
, które korzysta ze stanu cechy. Zmienia tryb klimatyzatora na ogrzewanie i ustawia temperaturę na 28 stopni. Następnie Assistant prosi użytkowników o potwierdzenie, aby włączyć ogrzewanie i ustawić temperaturę na 28 stopnie, ponieważ thermostatTemperatureSetpoint
28
jest zwracany jako stan w odpowiedzi.
Użytkownik | Ustaw tryb klimatyzacji na ogrzewanie. |
Google Assistant | Czy na pewno chcesz ustawić temperaturę klimatyzacji na 28 stopni? |
Użytkownik | Tak. |
Google Assistant | Ustawiam ogrzewanie klimatyzacji na 28 stopni. |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.TemperatureSetting", "params": { "thermostatMode": "heat" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 }, "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.TemperatureSetting", "params": { "thermostatMode": "heat" }, "challenge": { "ack": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 } }] } }
pinNeeded
W przypadku urządzeń zabezpieczających zalecamy użycie wyzwania pinNeeded
.
Ten przykład pokazuje początkowe żądanie i odpowiedź z wyzwaniem pinNeeded
. Przykład zwraca odpowiedź z wyzwaniem pinNeeded
, więc usługa Assistant prosi o kod PIN. W tym momencie użytkownik może podać nieprawidłowy lub prawidłowy kod PIN.
Przykład żądania i odpowiedzi w przypadku nieprawidłowego lub prawidłowego kodu PIN:
Użytkownik | Otwórz drzwi. |
Google Assistant | Czy możesz podać kod zabezpieczający? |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "pinNeeded" } }] } }
Błędny kod PIN
Ten przykład pokazuje żądanie i odpowiedź z wyzwaniem challengeFailedPinNeeded
. To wyzwanie powinno być używane po nieudanym pierwszym wyzwaniu pinNeeded
.
Gdy zwrócisz typ challengeFailedPinNeeded
, Assistant ponownie poprosi o kod bezpieczeństwa. Jeśli użytkownik wykona zbyt wiele nieudanych prób, możesz zwrócić odpowiedź o błędzie tooManyFailedAttempts
. Zobacz Odpowiedzi na błędy.
Użytkownik | 333222 |
Google Assistant | Kod jest nieprawidłowy. Czy możesz podać kod zabezpieczający? |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false }, "challenge": { "pin": "333222" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "challengeFailedPinNeeded" } }] } }
Prawidłowy kod PIN
Ten przykład pokazuje żądanie i odpowiedź dla prawidłowego kodu PIN.
Użytkownik | 333444 |
Google Assistant | Otwieram drzwi. |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false }, "challenge": { "pin": "333444" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "isLocked": false, "isJammed": false } }] } }
Użytkownik | Przyciemnij światło w salonie. |
Google Assistant | Czy możesz podać kod zabezpieczający? |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "pinNeeded" } }] } }
Odpowiedzi na błędy
Oto kody błędów, które mogą zostać zwrócone z odpowiedziami:
- tooManyFailedAttempts – Przepraszamy, ale nastąpiło zbyt wiele nieudanych prób. Otwórz aplikację na urządzeniu, aby dokończyć tę czynność.
- pinIncorrect – kod zabezpieczający jest nieprawidłowy.
- userCancelled – OK.
Zobacz pełną listę błędów i wyjątków.