Verifica utente secondario

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.
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
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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.
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 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.

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.
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
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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?
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"
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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"
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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?
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
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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.