Verificação de usuário secundário

A verificação secundária do usuário permite adicionar a segurança de dois fatores à voz comandos Isso permite adicionar mais segurança em 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, pode solicitar que Assistant envie uma solicitação de desafio para abrir uma porta se um chaveiro NFC não estiver perto dessa porta, mas não emitir um desafio se o keyfob 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 compatível

A verificação secundária do usuário é compatível com todos os traços de dispositivo.

Tipos de desafio compatíveis

Estes são os tipos de desafio de verificação de usuário secundário aceitos:

  • 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 atributo como feedback de resposta. Este tipo de desafio não é recomendado para fins de segurança dispositivos e características.
  • 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 uma resposta EXECUTE bem-sucedidas sem uma um desafio de acender as luzes.

Usuário Acender as luzes.
Google Assistant Ok, acendendo três luzes.
Solicitar
{
  "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

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.

Existem os seguintes tipos de desafio de 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 luminosidade da sala de estar. Tem certeza?
Usuário Sim.
Google Assistant Diminuindo a luminosidade 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"
    }]
  }
}

ackPrecisa com estados de características

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?

Você também pode incluir um estado em uma resposta para ter Assistant realiza uma ação específica com base em um solicitação.

As características e os estados a seguir são compatíveis com ackNeeded e estados de características. A listagem de uma característica específica indica que todos os estados dela são aceitos.

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 Assistantnt 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 inicial e uma resposta com pinNeeded. desafio. O exemplo retorna uma resposta com um desafio pinNeeded. Portanto, Assistant solicita 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 challengeFailedPinNeeded desafio. Este desafio deve ser usado após um desafio inicial de pinNeeded falhou.

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.