A verificação secundária do usuário permite adicionar segurança de segundo fator aos comandos de voz. Isso permite adicionar mais segurança a determinadas ações, como desligar uma câmera de segurança ou abrir uma porta. A verificação de usuário secundária não está vinculada a uma característica de dispositivo específica, o que permite que você decida quando Google Assistant vai emitir um desafio. Por exemplo, você pode escolher emitir um desafio para o atributo OnOff de uma câmera de segurança, mas não emitir um desafio para o atributo OnOff de uma luz. Também é possível ter desafios de Assistant em determinadas situações para a mesma ação. Por exemplo, você pode solicitar que o Assistant emita uma solicitação de desafio para abrir uma porta se um chaveiro NFC não estiver na proximidade dela, mas não emita um desafio se o chaveiro estiver presente.
O Assistant pode emitir dois tipos de desafios:
confirmação explícita ou número de identificação pessoal (PIN). Isso adiciona um
bloco de desafio às intents QUERY
e EXECUTE
enviadas de Assistant de volta à sua ação e aceita uma resposta de erro
challengeNeeded
. Em seguida, Assistant envia a solicitação de intent de volta para
sua ação com os dados do desafio no bloco de desafios. Em seguida,
valide os dados do desafio para determinar se o usuário deu a resposta de segurança
correta.
O Assistant usa uma caixa de diálogo para emitir o desafio, mas se você usar Assistant em plataformas que não são de voz, o PIN e as confirmações serão feitos na tela.
Tipos de dispositivos com suporte
A verificação secundária do usuário é compatível com todos os tipos de dispositivo.
Características do dispositivo com suporte
A verificação secundária do usuário é compatível com todos os traços de dispositivo.
Tipos de desafios aceitos
Estes são os tipos de desafio de verificação secundária do usuário compatíveis:
- Sem desafio: uma solicitação e uma resposta que não usam um desafio de verificação de usuário secundário.
- ackNeeded: uma verificação secundária do usuário que exige confirmação explícita (sim ou não) e também pode usar estados de características como feedback de resposta. Esse tipo de desafio não é recomendado para dispositivos e características de segurança.
- pinNeeded: uma verificação secundária do usuário que exige um número de identificação pessoal (PIN), ideal para dispositivos e características de segurança.
Nenhum desafio
Este exemplo mostra uma solicitação e resposta EXECUTE
bem-sucedidas sem um
desafio para acender as luzes.
Usuário | Acenda as luzes. |
Google Assistant | Ok, acendendo três luzes. |
{ "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
Uma autenticação de confirmação de usuário secundária que pode usar vários estados para um atributo ou uma autenticação de confirmação simples.
Há os seguintes tipos de desafios ackNeeded
:
ackNeeded simples
Este exemplo mostra uma solicitação e uma resposta simples com um desafio ackNeeded
para diminuir a luz e a confirmação de que a luz foi diminuída.
Usuário | Diminua a luz da sala de estar. |
Google Assistant | Diminuindo a luz da sala de estar. Tem certeza? |
Usuário | Sim. |
Google Assistant | Diminuindo a luz da sala de estar. |
{ "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 com estados de traço
Uma autenticação de confirmação de usuário secundária que pode usar estados para um
traço.
Por exemplo, se você estiver trabalhando com o
traço TemperatureSetting e
thermostatMode
e thermostatTemperatureSetpoint
estiverem definidos,
Assistant poderá perguntar Tem certeza de que quer definir o aquecimento
do ar-condicionado em 28 graus?
Também é possível incluir um estado em uma resposta para que Assistant realize uma ação específica com base em uma determinada solicitação.
As características e os estados a seguir oferecem suporte a ackNeeded
com estados de características. A
listagem de uma característica específica indica que todos os estados dela têm suporte.
- ArmDisarm
currentArmLevel
currentStatusReport
- Fill
- LockUnlock
- OnOff
on
- OpenClose
- Scene
- TemperatureSetting
thermostatMode
thermostatTemperatureSetpoint
thermostatTemperatureSetpointHigh
thermostatTemperatureSetpointLow
Este exemplo mostra uma solicitação e uma resposta com um desafio ackNeeded
que
usa um estado de atributo. Ele muda o modo do ar-condicionado para aquecer e define a
temperatura em 28 graus. Em seguida, Assistant pede aos usuários
o reconhecimento para ligar o aquecimento e definir a temperatura em 28
graus, já que um thermostatTemperatureSetpoint
de 28
é retornado como um estado
na resposta.
Usuário | Defina o modo de ar-condicionado para aquecer. |
Google Assistant | Você tem certeza de que quer definir o aquecimento do ar-condicionado em 28 graus? |
Usuário | Sim. |
Google Assistant | Definindo o aquecimento do ar-condicionado para 28 graus. |
{ "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
O desafio pinNeeded
é recomendado para dispositivos de segurança.
Este exemplo mostra uma solicitação e uma resposta iniciais com um desafio
pinNeeded
. O exemplo retorna uma resposta com um desafio pinNeeded
, então
Assistant pede o pino. Nesse ponto, o usuário pode
fornecer um PIN incorreto ou válido.
Exemplo de solicitação e resposta para um PIN incorreto ou válido:
Usuário | Destranque a porta. |
Google Assistant | Você pode informar o código de segurança? |
{ "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 incorreto
Este exemplo mostra a solicitação e a resposta com um desafio
challengeFailedPinNeeded
. Esse desafio precisa ser usado depois que um desafio pinNeeded
inicial
falha.
Quando um tipo challengeFailedPinNeeded
é retornado,
Assistant pede o código de segurança novamente. Se o usuário
realizar muitas tentativas com falha, você poderá retornar uma resposta de erro
tooManyFailedAttempts
. Consulte Respostas de erro.
Usuário | 333222 |
Google Assistant | O código de segurança está incorreto. Você pode informar o código de segurança? |
{ "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 válido
Este exemplo mostra a solicitação e a resposta de um PIN válido.
Usuário | 333444 |
Google Assistant | Destrancar a 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 } }] } }
Usuário | Diminua a luz da sala de estar. |
Google Assistant | Você pode informar o código de segurança? |
{ "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" } }] } }
Respostas de erro
Estes são alguns códigos de erro que podem ser retornados com suas respostas:
- tooManyFailedAttempts: Desculpe, muitas tentativas falharam. Acesse o app do dispositivo para concluir a ação.
- pinIncorrect: o código de segurança está incorreto.
- userCancelled: Ok
Confira a lista completa de erros e exceções.