Verificação de usuário secundário

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.
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 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.
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 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.

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.
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 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?
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 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?
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 Destrancar 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: 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.