La verifica utente secondaria ti consente di aggiungere la sicurezza del secondo fattore ai comandi vocali. In questo modo puoi aumentare la sicurezza per determinate azioni, come spegnere una videocamera di sicurezza o aprire una porta. La verifica utente secondaria non è legata a un trait specifico del dispositivo, che ti consente di decidere quando presentare una verifica a Google Assistant. Ad esempio, puoi scegliere di eseguire una verifica per il tratto OnOff per una videocamera di sicurezza, ma non di eseguire una verifica per il tratto OnOff per una luce. In determinate situazioni, puoi anche avere Assistant risposte di problemi per la stessa azione. Ad esempio, puoi richiedere a Assistant di inviare una richiesta di verifica per aprire una porta se il telecomando NFC non si trova nelle vicinanze della porta, ma non di inviare una richiesta se è presente.
Il Assistant può presentare due tipi di verifiche:
conferma esplicita o PIN (Personal Identification Number). Viene aggiunto un blocco di verifica agli intent QUERY
e EXECUTE
inviati da Assistant all'azione e viene accettata una risposta di errore challengeNeeded
. Assistant restituisce quindi la richiesta di intent alla tua azione con i dati della sfida nel blocco della sfida. Puoi quindi convalidare i dati del test per determinare se l'utente ha fornito la risposta di sicurezza corretta.
Assistant utilizza le finestre di dialogo per inviare la verifica, ma se utilizzi Assistant su piattaforme non vocali, il PIN e conferma vengono effettuati sullo schermo.
Tipi di dispositivi supportati
La verifica utente secondaria è supportata su tutti i tipi di dispositivi.
Trait dei dispositivi supportati
La verifica utente secondaria è supportata per tutti i tratti del dispositivo.
Tipi di challenge supportati
Di seguito sono riportati i tipi di verifica dell'utente secondari supportati:
- Nessuna verifica: una richiesta e una risposta che non utilizza una verifica dell'utente secondario.
- ackNeeded - Una verifica utente secondaria che richiede la conferma esplicita (sì o no) e può anche utilizzare gli stati dei trait come feedback della risposta. Questo tipo di verifica non è consigliato per dispositivi e trait di sicurezza.
- pinNeeded: una verifica secondaria dell'utente che richiede un PIN (Personal Identification Number), ideale per dispositivi e tratti di sicurezza.
Nessuna sfida
Questo esempio mostra una richiesta e una risposta EXECUTE
andate a buon fine senza
la sfida per l'accensione delle luci.
User | Accendi le luci. |
Google Assistant | Ok, accendo tre luci. |
{ "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
Un'autenticazione di conferma dell'utente secondaria che può utilizzare più stati per un tratto o una semplice autenticazione di conferma.
Esistono i seguenti tipi di sfide ackNeeded
:
ackNeeded semplice
Questo esempio mostra una richiesta e una risposta semplici con una sfida ackNeeded
per abbassare una luce e la conferma che l'attenuazione.
User | Diminuisci l'intensità della luce del salotto. |
Google Assistant | Abbasso la luce del salotto. Vuoi continuare? |
User | Sì. |
Google Assistant | Abbasso la luce del salotto. |
{ "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 con stati dei tratti
Un'autenticazione di riconoscimento degli utenti secondaria che può utilizzare gli stati per un tratto.
Ad esempio, se utilizzi la funzionalità TemperatureSetting e sono impostati entrambi i valori thermostatMode
e thermostatTemperatureSetpoint
, Assistant può chiedere Vuoi impostare il riscaldamento del condizionatore su 28 gradi?
Puoi anche includere uno stato in una risposta per fare in modo che Assistant esegua un'azione specifica in base a una determinata richiesta.
I seguenti trait e stati supportano ackNeeded
con gli stati dei trait. L'elenco di un tratto specifico indica che tutti i suoi stati sono supportati.
- ArmDisarm
currentArmLevel
currentStatusReport
- Fill
- LockUnlock
- OnOff
on
- OpenClose
- Scene
- TemperatureSetting
thermostatMode
thermostatTemperatureSetpoint
thermostatTemperatureSetpointHigh
thermostatTemperatureSetpointLow
Questo esempio mostra una richiesta e una risposta con una sfida ackNeeded
che
utilizza uno stato del trait. Cambia la modalità del condizionatore in riscaldamento e imposta
la temperatura su 28 gradi. Poi, Assistant chiede agli utenti la conferma di accendere il riscaldamento e di impostare la temperatura su 28 gradi, poiché nella risposta viene restituito un thermostatTemperatureSetpoint
di 28
.
User | Imposta la modalità AC su Caldo. |
Google Assistant | Vuoi impostare il riscaldamento del condizionatore su 28 gradi? |
User | Sì. |
Google Assistantnt | Imposto il riscaldamento del condizionatore su 28 gradi. |
{ "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
La sfida pinNeeded
è consigliata per i dispositivi di sicurezza.
Questo esempio mostra una richiesta e una risposta iniziali con una verifica pinNeeded
. L'esempio restituisce una risposta con una sfida pinNeeded
, quindi Assistant chiede il PIN. A questo punto, l'utente può
fornire un PIN errato o valido.
Esempio di richiesta e risposta relativa a un PIN errato o valido:
User | Apri la porta. |
Google Assistant | Puoi dirmi il tuo codice di sicurezza? |
{ "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" } }] } }
PIN errato
Questo esempio mostra la richiesta e la risposta con una sfida challengeFailedPinNeeded
. Questa verifica deve essere utilizzata dopo che una verifica iniziale di pinNeeded
non è andata a buon fine.
Quando viene restituito un tipo challengeFailedPinNeeded
,
Assistant chiede nuovamente il codice di sicurezza. Se l'utente
esegue troppi tentativi non riusciti, puoi restituire una
risposta di errore tooManyFailedAttempts
. Vedi Risposte di errore.
User | 333222 |
Google Assistant | Mi dispiace, il codice di sicurezza non è corretto. Puoi dirmi il tuo codice di sicurezza? |
{ "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" } }] } }
PIN valido
Questo esempio mostra la richiesta e la risposta di un PIN valido.
User | 333444 |
Google Assistant | Apro la porta. |
{ "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 } }] } }
User | Diminuisci l'intensità della luce del salotto. |
Google Assistant | Puoi dirmi il tuo codice di sicurezza? |
{ "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" } }] } }
Risposte di errore
Di seguito sono riportati alcuni codici di errore che possono essere restituiti con le tue risposte:
- tooManyFailedAttempts: sono spiacenti, sono stati effettuati troppi tentativi non riusciti. Vai all'app del dispositivo per completare l'azione.
- pinIncorrect: Spiacenti, il codice di sicurezza non è corretto.
- userCancelled - Ok
Consulta l'elenco completo di errori ed eccezioni.