A verificação de usuário secundária permite adicionar segurança de dois fatores aos comandos de voz. Isso permite acrescentar 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, que permite decidir quando o Google Assistant emitirá um desafio. Por exemplo, você pode optar por emitir um desafio para a característica OnOff de uma câmera de segurança, mas não emitir um desafio para a característica OnOff de uma luz. Também é possível ter Assistant emitindo desafios em determinadas situações para a mesma ação. Por exemplo, você pode solicitar que 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 emita um desafio se ele 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 à ação e aceita uma resposta de erro
challengeNeeded
. Em seguida, Assistant envia a solicitação de intent de
sua ação com os dados do desafio no bloco correspondente. Em seguida, é possível validar os dados do desafio para determinar se o usuário deu a resposta de segurança correta.
Assistant usa a caixa de diálogo para emitir o desafio, mas se você usar Assistant em superfícies que não são de voz, o PIN e as confirmações serão feitas 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 compatíveis
A verificação secundária do usuário é compatível com todas as características do dispositivo.
Tipos de desafio compatíveis
Estes são os tipos de desafio de verificação de usuários secundários compatíveis:
- Nenhum 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 de usuário secundária que exige confirmação explícita (sim ou não) e também pode usar estados de traço como feedback de resposta. Esse tipo de desafio não é recomendado para características de dispositivos de segurança.
- pinNeeded: uma verificação de usuário secundária que requer um número de identificação pessoal (PIN), ideal para características de dispositivos de segurança.
Nenhum desafio
Este exemplo mostra uma solicitação e uma resposta de EXECUTE
bem-sucedida sem um desafio para acender as luzes.
User | Acender 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 } }] } }
confirmação necessária
Uma autenticação de confirmação do usuário secundária que pode usar vários estados para uma característica ou uma autenticação de confirmação simples.
Estes são os tipos de desafio ackNeeded
:
ackNeeded simples
Este exemplo mostra uma solicitação e uma resposta simples com um desafio ackNeeded
para escurecer uma luz e a confirmação para escurecer a luz.
User | Diminua a luz da sala de estar. |
Google Assistant | Reduzindo o brilho da luz da sala de estar. Tem certeza? |
User | Sim. |
Google Assistant | Reduzindo o brilho da 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" }] } }
acknecessário com estados de traço
Uma autenticação de confirmação do usuário secundária que pode usar estados para uma característica.
Por exemplo, se você estiver trabalhando com a característica TemperatureSetting e thermostatMode
e thermostatTemperatureSetpoint
estiverem definidos, Assistant poderá perguntar Você quer mesmo definir o aquecimento do ar-condicionado para 28 graus?
Você também pode incluir um estado em uma resposta para que Assistant execute uma ação específica com base em uma determinada solicitação.
As seguintes características e estados aceitam ackNeeded
com estados de característica. Uma
lista de uma característica específica indica que todos os estados são compatíveis.
- ArmDisarm (em inglês)
currentArmLevel
currentStatusReport
- Preencher
- LockUnlock (link em inglês)
- Ativado
on
- OpenClose (link em inglês)
- Cena
- TemperatureSetting (em inglês)
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 ar condicionado para aquecer e define a temperatura em 28 graus. Em seguida, o Assistant solicita aos usuários
a confirmação para ligar o aquecimento e definir a temperatura como 28
graus, já que um thermostatTemperatureSetpoint
de 28
é retornado como um estado
na resposta.
User | Definir o modo CA para aquecer. |
Google Assistant | Você quer mesmo definir o aquecedor do ar-condicionado para 28 graus? |
User | Sim. |
Google Assistantn | Definindo o aquecedor 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 } }] } }
PIN necessário
O desafio pinNeeded
é recomendado para dispositivos de segurança.
Este exemplo mostra uma solicitação e uma resposta inicial com um desafio pinNeeded
. O exemplo retorna uma resposta com um desafio pinNeeded
, então Assistant solicita o PIN. Nesse momento, o usuário pode
fornecer um PIN incorreto ou válido.
Exemplo de solicitação e resposta para um PIN incorreto ou válido:
User | Destrave a porta. |
Google Assistant | Posso receber seu 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
. Este desafio deve ser usado após uma falha inicial de pinNeeded
.
Quando um tipo challengeFailedPinNeeded
é retornado, Assistant pede o código de segurança novamente. Se o usuário fizer muitas tentativas com falha, será possível retornar uma resposta de erro tooManyFailedAttempts
. Consulte Respostas de erro.
User | 333222 |
Google Assistant | Desculpe, o código de segurança está incorreto. Posso receber seu 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.
User | 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 } }] } }
User | Diminua a luz da sala de estar. |
Google Assistant | Posso receber seu 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:
challengeFailedNotSetup
: essa ação exige um código de segurança, mas ele ainda não foi configurado no app do dispositivo.tooManyFailedAttempts
- Muitas tentativas com falha. Acesse o app do seu dispositivo para concluir essa ação.pinIncorrect
- O código de segurança está incorreto.userCancelled
- OK.
Veja a lista completa de erros e exceções.