Com a verificação secundária do usuário, é possível adicionar segurança de dois fatores aos comandos de voz. Isso permite adicionar mais segurança a determinadas ações, como desativar uma câmera de segurança ou abrir uma porta. A verificação secundária do usuário não está vinculada a uma característica específica do dispositivo, o que permite decidir quando o Google Assistant vai emitir um desafio. Por exemplo, você pode emitir um desafio para a característica OnOff de uma câmera de segurança, mas não para a característica OnOff de uma luz. Também é possível ter Assistant desafios 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 próximo a ela, mas não emitir 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 aos intents QUERY
e EXECUTE
enviados de Assistant de volta à sua ação e aceita uma resposta de erro challengeNeeded
. Assistant envia de volta a solicitação de intent para
sua ação com os dados do desafio no bloco de desafio. 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 o 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 dispositivos.
Características do dispositivo compatível
A verificação secundária do usuário é compatível com todas as características do dispositivo.
Tipos de desafios aceitos
Estes são os tipos de desafio de verificação secundária do usuário compatíveis:
- Nenhum desafio: uma solicitação e uma resposta que não usam um desafio de verificação secundária do usuário.
- ackNeeded: uma verificação secundária do usuário que requer confirmação explícita (sim ou não) e também pode usar estados de traços 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 reconhecimento de usuário secundário que pode usar vários estados para um traço ou uma autenticação de reconhecimento simples.
Há os seguintes tipos de desafios ackNeeded
:
ackNeeded simple
Este exemplo mostra uma solicitação e uma resposta simples com um desafio ackNeeded
para diminuir a intensidade de uma luz e a confirmação para fazer isso.
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 secundária de reconhecimento do usuário 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,
o Assistant pode perguntar: Tem certeza de que quer definir o aquecimento
do ar-condicionado para 28 graus?
Você também pode incluir um estado em uma resposta para que o Assistant execute uma ação específica com base em uma determinada solicitação.
As seguintes características e estados são compatíveis com ackNeeded
com estados de características. Uma lista de uma característica específica indica que todos os estados dela são compatíveis.
- 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 característica. Ele muda o modo do ar-condicionado para aquecimento e define a temperatura para 28 graus. Em seguida, o Assistant pede aos usuários
a confirmação 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 do ar-condicionado para aquecer. |
Google Assistant | Você quer mesmo definir o aquecimento do ar-condicionado para 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 PIN. 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 | Destrancar 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 deve ser usado depois que um desafio pinNeeded
inicial
falhar.
Quando um tipo challengeFailedPinNeeded
é retornado, o
Assistant pede o código de segurança novamente. Se o usuário
fizer muitas tentativas com falha, retorne 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 | Destrancando 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: Excesso de tentativas falhas. 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.