Esta é a Central do desenvolvedor do Google Home, o novo destino para aprender a desenvolver ações de casa inteligente. Observação:você continuará criando ações no Console do Actions.

Verificação de usuário secundário

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

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.
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"
    }]
  }
}

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.

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

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

User 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
      }
    }]
  }
}
User Diminua a luz da sala de estar.
Google Assistant Posso receber seu 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:

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