Verifica utente secondario

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.
Richiedi
{
  "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 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.
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 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.

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.
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 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?
Richiedi
{
  "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 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?
Richiedi
{
  "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.

User 333444
Google Assistant Apro la porta.
Richiedi
{
  "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
      }
    }]
  }
}
User Diminuisci l'intensità della luce del salotto.
Google Assistant Puoi dirmi il tuo codice di sicurezza?
Richiedi
{
  "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

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.