Verificação de usuário secundário

A verificação secundária do usuário permite adicionar segurança de dois fatores aos comandos de voz. Isso permite adicionar mais segurança em 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 que você decida quando Google Assistant emitir um desafio. Por exemplo, é possível enviar um desafio para a característica OnOff de uma câmera de segurança, mas não um desafio para a característica OnOff para uma luz. Você também pode ter desafios de problemas Assistant 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 perto dessa porta, mas não emitir um desafio se ele estiver presente.

A Assistant pode gerar dois tipos de desafio: confirmação explícita ou PIN (Número de identificação pessoal). 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. Assistant envia de volta a solicitação de intent para sua ação com os dados do desafio no bloco de desafio. É possível validar os dados do desafio para determinar se o usuário forneceu a resposta de segurança correta.

O Assistant usa a caixa de diálogo para emitir o desafio, mas se você usar o Assistant em superfícies que não sejam de voz, o PIN e as confirmações serão exibidos na tela.

Tipos de dispositivos com suporte

A verificação de usuário secundá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 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 requer 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 requer 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 de EXECUTE bem-sucedidas sem um desafio para acender as luzes.

User Acenda as luzes.
Google Assistant Certo, 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

Uma autenticação de confirmação de 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 o brilho de uma luz e a confirmação para isso.

User Diminua a luz da sala de estar.
Google Assistant Diminuindo a luminosidade da sala de estar. Tem certeza?
User 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 secundária de confirmação do usuário que pode usar estados para uma característica. Por exemplo, se você estiver trabalhando com a característica TemperatureSetting e tanto thermostatMode quanto thermostatTemperatureSetpoint estiverem definidos, Assistant poderá perguntar Você quer mesmo definir o aquecimento do ar-condicionado para 28 graus?

Também é possível incluir um estado em uma resposta para que Assistant execute uma ação específica com base em uma determinada solicitação.

As características e estados abaixo são compatíveis com ackNeeded com estados de característica. Uma listagem 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, Assistant solicita a confirmação aos usuários para ativar o aquecimento e definir a temperatura em 28 graus, já que um thermostatTemperatureSetpoint de 28 é retornado como um estado na resposta.

User Definir o modo AC para aquecimento.
Google Assistant Você quer mesmo ajustar o aquecimento do ar-condicionado para 28 graus?
User Sim.
Google Assistantnt Definindo o aquecedor 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.

Neste exemplo, mostramos uma solicitação inicial e uma resposta com um desafio pinNeeded. O exemplo retorna uma resposta com um desafio pinNeeded, portanto, 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 Destrancar a porta.
Google Assistant Você pode informar o código de segurança?
Solicitar
{
  "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. Use este desafio depois que um desafio pinNeeded inicial falhar.

Quando um tipo challengeFailedPinNeeded é retornado, Assistant solicita o código de segurança novamente. Se o usuário realizar muitas tentativas com falha, será possível retornar uma resposta de erro tooManyFailedAttempts. Consulte Respostas de erro.

User 333222
Google Assistant O código de segurança está incorreto. Você pode informar o código de segurança?
Solicitar
{
  "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.

User 333444
Google Assistant Destrancando a porta.
Solicitar
{
  "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
      }
    }]
  }
}
User Diminua a luz da sala de estar.
Google Assistant Você pode informar o código de segurança?
Solicitar
{
  "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 - Lamentamos, muitas tentativas com falha. Acesse o app do 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.