Verifica utente secondario

La verifica utente secondaria ti consente di aggiungere la sicurezza a due fattori ai comandi vocali. In questo modo puoi aggiungere un livello di sicurezza aggiuntivo per determinate azioni, ad esempio 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 Google Assistant deve emettere una richiesta. Ad esempio, puoi scegliere di emettere una richiesta di verifica per la caratteristica OnOff di una videocamera di sicurezza, ma non per la caratteristica OnOff di una luce. Puoi anche Assistant emettere sfide in determinate situazioni per la stessa azione. Ad esempio, puoi richiedere a Assistant di inviare una richiesta di verifica per aprire una porta se un portachiavi NFC non si trova nelle vicinanze della porta, ma non inviare una verifica se il portachiavi è presente.

L'Assistant può emettere due tipi di sfide: riconoscimento esplicito o PIN (Personal Identification Number). In questo modo, viene aggiunto un blocco di verifica agli intent QUERY e EXECUTE inviati da Assistant alla tua azione e viene accettata una risposta di errore challengeNeeded. Assistant quindi invia di nuovo la richiesta di intent all'azione con i dati della sfida nel blocco della sfida. Puoi quindi convalidare i dati della domanda per determinare se l'utente ha fornito la risposta di sicurezza corretta.

Assistant utilizza la finestra di dialogo per emettere la richiesta, ma se utilizzi Assistant su piattaforme non vocali, il PIN e le conferme vengono eseguiti sullo schermo.

Tipi di dispositivi supportati

La verifica utente secondaria è supportata su tutti i tipi di dispositivi.

Trait di dispositivi supportati

La verifica utente secondaria è supportata per tutte le caratteristiche del dispositivo.

Tipi di verifica dell'accesso supportati

Questi sono 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 una conferma esplicita (sì o no) e può anche utilizzare gli stati delle caratteristiche come feedback di risposta. Questo tipo di verifica non è consigliato per dispositivi e caratteristiche di sicurezza.
  • pinNeeded: una verifica dell'utente secondaria che richiede un PIN (Personal Identification Number), ideale per dispositivi e caratteristiche di sicurezza.

Nessuna sfida

Questo esempio mostra una richiesta e una risposta EXECUTE riuscite senza una sfida per accendere le luci.

Utente Accendi le luci.
Google Assistant Ok, accendo tre luci.
Richiesta
{
  "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
          }
        }]
      }]
    }
  }]
}
Response
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true
      }
    }]
  }
}

ackNeeded

Un'autenticazione di conferma utente secondaria che può utilizzare più stati per una caratteristica o un'autenticazione di conferma semplice.

Esistono i seguenti tipi di ackNeeded:

ackNeeded simple

Questo esempio mostra una semplice richiesta e risposta con una sfida ackNeeded per abbassare la luminosità di una luce e la conferma dell'abbassamento della luminosità.

Utente Abbassa la luce del soggiorno.
Google Assistant Diminuisco l'intensità della luce del soggiorno. Confermi?
Utente Sì.
Google Assistant Diminuisco l'intensità della luce del soggiorno.
Richiesta 1
{
  "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
          }
        }]
      }]
    }
  }]
}
Risposta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Richiesta 2
{
  "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
          }
        }]
      }]
    }
  }]
}
Risposta 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

ackNeeded con stati dei tratti

Un'autenticazione di riconoscimento utente secondaria che può utilizzare gli stati per una caratteristica. Ad esempio, se utilizzi la caratteristica TemperatureSetting e sono impostati sia thermostatMode che thermostatTemperatureSetpoint, Assistant può chiedere Vuoi davvero impostare il riscaldamento del condizionatore 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 gli stati dei tratti. Un elenco di una caratteristica specifica indica che tutti i relativi stati sono supportati.

Questo esempio mostra una richiesta e una risposta con una sfida ackNeeded che utilizza uno stato del tratto. Cambia la modalità del condizionatore in riscaldamento e imposta la temperatura a 28 gradi. Poi, Assistant chiede agli utenti la conferma per accendere il riscaldamento e impostare la temperatura a 28 gradi, poiché thermostatTemperatureSetpoint di 28 viene restituito come stato nella risposta.

Utente Imposta la modalità del climatizzatore su riscaldamento.
Google Assistant Vuoi impostare il riscaldamento del condizionatore su 28 gradi?
Utente Sì.
Google Assistant Imposto il riscaldamento del condizionatore su 28 gradi.
Richiesta 1
{
  "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"
          }
        }]
      }]
    }
  }]
}
Risposta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Richiesta 2
{
  "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
          }
        }]
      }]
    }
  }]
}
Risposta 2
{
  "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?
Richiesta
{
  "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
          }
        }]
      }]
    }
  }]
}
Response
{
  "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 pinNeeded iniziale 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.

Utente 333222
Google Assistant Mi spiace, il codice di sicurezza non è corretto. Posso avere il tuo codice di sicurezza?
Richiesta
{
  "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"
          }
        }]
      }]
    }
  }]
}
Response
{
  "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.
Richiesta
{
  "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"
          }
        }]
      }]
    }
  }]
}
Response
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "isLocked": false,
        "isJammed": false
      }
    }]
  }
}
Utente Abbassa la luce del soggiorno.
Google Assistant Posso avere il tuo codice di sicurezza?
Richiesta
{
  "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
          }
        }]
      }]
    }
  }]
}
Response
{
  "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 spiace, troppi tentativi non riusciti. Usa l'app del dispositivo per completare l'azione.
  • pinIncorrect - Mi spiace, il codice di sicurezza non è corretto.
  • userCancelled - Ok

Consulta l'elenco completo di errori ed eccezioni.