Verificação de usuário secundário

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.
Solicitação
{
  "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
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "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.
Solicitação 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
          }
        }]
      }]
    }
  }]
}
Resposta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Solicitação 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
          }
        }]
      }]
    }
  }]
}
Resposta 2
{
  "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.

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.
Solicitação 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"
          }
        }]
      }]
    }
  }]
}
Resposta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Solicitação 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
          }
        }]
      }]
    }
  }]
}
Resposta 2
{
  "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?
Solicitação
{
  "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
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "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?
Solicitação
{
  "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"
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "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.
Solicitação
{
  "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"
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "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?
Solicitação
{
  "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
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "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.