La verifica utente secondaria ti consente di aggiungere un secondo fattore di sicurezza ai comandi vocali. In questo modo puoi aggiungere un livello di sicurezza in più per determinate azioni, come spegnere una videocamera di sicurezza o aprire una porta. La verifica utente secondaria non è legata a una caratteristica specifica del dispositivo, il che ti consente di decidere quando chiedere a Google Assistant di effettuare una verifica. Ad esempio, puoi scegliere di effettuare una verifica per l'attributo OnOff per una videocamera di sicurezza, ma non per l'attributo OnOff per una luce. Puoi anche Assistant presentare delle contestazioni in determinate situazioni per la stessa azione. Ad esempio, puoi chiedere a Assistant di inviare una richiesta di verifica per aprire una porta se non è presente un telecomando NFC nelle vicinanze, ma non di inviare una verifica se il telecomando è presente.
L'Assistant può emettere due tipi di verifiche: conferma esplicita o PIN (Personal Identification Number). In questo modo, aggiungi un
blocco di verifica agli intent QUERY
e EXECUTE
inviati da Assistant alla tua azione e accetti 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 verificare i dati della verifica per determinare se l'utente ha fornito la risposta di sicurezza corretta.
Assistant utilizza il dialogo per presentare la verifica, ma se lo usi su piattaforme non vocali, il PIN e le conferme vengono eseguiti sullo schermo.Assistant
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 verifica supportati
Di seguito sono riportati i tipi di verifica utente secondaria supportati:
- Nessuna verifica: una richiesta e una risposta che non utilizzano una verifica secondaria dell'utente.
- ackNeeded: una verifica utente secondaria che richiede un conferma esplicita (sì o no) e può anche utilizzare gli stati degli attributi come feedback sulla risposta. Questo tipo di verifica non è consigliato per dispositivi e tratti di sicurezza.
- pinNeeded: una verifica dell'utente secondaria che richiede un PIN (Personal Identification Number), ideale per dispositivi e funzionalità di sicurezza.
Nessuna sfida
Questo esempio mostra una richiesta e una risposta EXECUTE
andate a buon fine senza una richiesta di conferma per l'accensione delle luci.
Utente | 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 secondario che può utilizzare più stati per un tratto o una semplice autenticazione di conferma.
Esistono i seguenti tipi di ackNeeded
:
ackNeeded semplice
Questo esempio mostra una semplice richiesta e risposta con una ackNeeded
sfida per attenuare una luce e la conferma dell'attenuazione.
Utente | Abbassa l'intensità della luce del soggiorno. |
Google Assistant | Abbassa l'intensità della luce del soggiorno. Confermi? |
Utente | Sì. |
Google Assistant | Abbassa l'intensità della luce del soggiorno. |
{ "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 del tratto
Un'autenticazione di conferma dell'utente secondario che può utilizzare stati per un tratto.
Ad esempio, se utilizzi il tratto TemperatureSetting e sono impostati sia thermostatMode
sia thermostatTemperatureSetpoint
, Assistant può chiedere Sei sicuro di voler impostare l'aria calda sul climatizzatore a 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 tratti e stati supportano ackNeeded
con stati dei tratti. L'elenco di un tratto specifico indica che tutti i relativi 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 verifica ackNeeded
che utilizza uno stato del tratto. Cambia la modalità del condizionatore su caldo e imposta la temperatura su 28 gradi. Quindi, Assistant chiede agli utenti di confermare l'accensione dell'impianto di riscaldamento e l'impostazione della temperatura a 28 gradi, poiché un thermostatTemperatureSetpoint
di 28
viene restituito come stato nella risposta.
Utente | Imposta la modalità dell'aria condizionata su caldo. |
Google Assistant | Vuoi impostare l\'aria condizionata su 28 gradi? |
Utente | Sì. |
Google Assistant | Imposta la modalità 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 verifica 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 verifica pinNeeded
, quindi
Assistant chiede il PIN. A questo punto, l'utente può fornire un PIN errato o valido.
Richiesta e risposta di esempio per un PIN errato o valido:
Utente | Apri la porta. |
Google Assistant | Posso avere 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 verifica challengeFailedPinNeeded
. Questa sfida deve essere utilizzata dopo che una sfida pinNeeded
iniziale è stata eseguita senza esito.
Quando viene restituito un tipo challengeFailedPinNeeded
,
Assistant richiede di nuovo il codice di sicurezza. Se l'utente effettua troppi tentativi non riusciti, puoi restituire una risposta di errore tooManyFailedAttempts
. Consulta la sezione Risposte di errore.
Utente | 333222 |
Google Assistant | Mi dispiace, il codice di sicurezza non è corretto. Posso avere 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.
Utente | 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 } }] } }
Utente | Abbassa l'intensità della luce del soggiorno. |
Google Assistant | Posso avere 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
Ecco alcuni codici di errore che possono essere restituiti con le risposte:
- tooManyFailedAttempts: Mi dispiace, troppi tentativi non riusciti. Usa l'app del dispositivo per completare l'azione.
- pinIncorrect - Mi dispiace, il codice di sicurezza non è corretto.
- userCancelled - Ok
Consulta l'elenco completo di errori ed eccezioni.