Verificación del usuario secundario

La verificación secundaria del usuario te permite agregar seguridad de dos factores a los comandos por voz. Esto te permite agregar seguridad adicional para ciertas acciones, como apagar una cámara de seguridad o abrir una puerta. La verificación secundaria del usuario no está vinculada a una característica del dispositivo específica, lo que te permite decidir cuándo hacer que Google Assistant emita un desafío. Por ejemplo, puedes optar por presentar un desafío para la característica OnOff de una cámara de seguridad, pero no emitir un desafío para la característica OnOff de una luz. También puedes hacer que Assistant genere desafíos en ciertas situaciones para la misma acción. Por ejemplo, puedes solicitar que Assistant emita una solicitud de desafío para abrir una puerta si un llavero NFC no está cerca de esa puerta, pero no genere un desafío si está presente.

El Assistant puede emitir dos tipos de verificaciones: una confirmación explícita o un número de identificación personal (PIN). Esto agrega un bloque de desafío a los intents QUERY y EXECUTE enviados desde Assistant a tu acción y acepta una respuesta de error challengeNeeded. Luego, Assistant envía la solicitud de intent a tu acción con los datos del desafío en el bloque de desafío. Luego, puedes validar los datos de desafío para determinar si el usuario proporcionó la respuesta de seguridad correcta.

Assistant usa un diálogo para emitir el desafío, pero si usas Assistant en plataformas que no son de voz, el PIN y las confirmaciones se realizan en la pantalla.

Tipos de dispositivos compatibles

La verificación secundaria del usuario es compatible con todos los tipos de dispositivos.

Traits de los dispositivos compatibles

La verificación secundaria del usuario es compatible con todas las características del dispositivo.

Tipos de verificaciones compatibles

Estos son los tipos de verificación secundaria admitidos para los usuarios:

  • Sin desafío: Es una solicitud y respuesta que no usa un desafío de verificación secundario del usuario.
  • ackNeeded: Es una verificación secundaria del usuario que requiere una confirmación explícita (sí o no) y también puede usar estados de rasgo como comentarios de respuesta. No se recomienda este tipo de desafío para dispositivos y traits de seguridad.
  • pinNeeded: Es una verificación secundaria del usuario que requiere un número de identificación personal (PIN), que es ideal para los dispositivos y rasgos de seguridad.

Sin desafío

En este ejemplo, se muestra una solicitud y una respuesta de EXECUTE correctas sin ningún desafío para encender las luces.

User Enciende las luces.
Google Assistant Muy bien. Se encenderán 3 lámparas.
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
          }
        }]
      }]
    }
  }]
}
Respuesta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true
      }
    }]
  }
}

ackNeeded

Una autenticación de confirmación de usuario secundaria que puede usar varios estados para una característica o una autenticación de confirmación simple.

Existen los siguientes tipos de desafíos de ackNeeded:

ackNeeded simple

En este ejemplo, se muestra una solicitud y una respuesta simples con un desafío ackNeeded para atenuar una luz y la confirmación para atenuarla.

User Atenúa la luz de la sala de estar.
Google Assistant Se atenuará la luz de la sala de estar. ¿Confirmas la acción?
User Sí.
Google Assistant Se atenuará la luz de la sala de estar.
Solicitud 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
          }
        }]
      }]
    }
  }]
}
Respuesta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Solicitud 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
          }
        }]
      }]
    }
  }]
}
Respuesta 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

Se necesita con estados de trait

Una autenticación secundaria de confirmación de recepción del usuario que puede usar estados para una característica. Por ejemplo, si trabajas con la característica TemperatureSetting y se configuran thermostatMode y thermostatTemperatureSetpoint, Assistant puede preguntar ¿Confirmas que deseas establecer la calefacción del aire acondicionado en 28 grados?

También puedes incluir un estado en una respuesta para que Assistant realice una acción específica en función de una solicitud determinada.

Las siguientes características y estados admiten ackNeeded con estados de trait. La lista de una característica específica indica que todos sus estados son compatibles.

En este ejemplo, se muestra una solicitud y una respuesta con un desafío ackNeeded que usa un estado de trait. Cambia el modo del aire acondicionado a calor y establece la temperatura en 28 grados. Luego, Assistant les pide a los usuarios que activen la calefacción y establezcan la temperatura en 28 grados, ya que se muestra una thermostatTemperatureSetpoint de 28 como estado en la respuesta.

User Establece el modo de CA en calefacción.
Google Assistant ¿Confirmas que quieres establecer la calefacción del aire acondicionado en 28 grados?
User Sí.
Google Assistantnt Se establecerá la calefacción del aire acondicionado en 28 grados.
Solicitud 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"
          }
        }]
      }]
    }
  }]
}
Respuesta 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Solicitud 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
          }
        }]
      }]
    }
  }]
}
Respuesta 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      }
    }]
  }
}

pinNeeded

Se recomienda el desafío pinNeeded para los dispositivos de seguridad.

En este ejemplo, se muestra una solicitud y respuesta iniciales con un desafío pinNeeded. En el ejemplo, se muestra una respuesta con un desafío pinNeeded, por lo que Assistant solicita el marcador. En este punto, el usuario puede proporcionar un PIN incorrecto o válido.

Ejemplo de solicitud y respuesta para un PIN incorrecto o válido:

User Destraba la puerta.
Google Assistant ¿Puedes decirme tu código de seguridad?
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
          }
        }]
      }]
    }
  }]
}
Respuesta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

PIN incorrecto

En este ejemplo, se muestra la solicitud y la respuesta con un desafío challengeFailedPinNeeded. Este desafío debe usarse después de que un desafío inicial pinNeeded falló.

Cuando se muestra un tipo de challengeFailedPinNeeded, Assistant vuelve a solicitar el código de seguridad. Si el usuario realiza demasiados intentos fallidos, puedes mostrar una respuesta de error tooManyFailedAttempts. Consulta Respuestas de error.

User 333222
Google Assistant Lo siento, el código de seguridad es incorrecto. ¿Puedes decirme tu código de seguridad?
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"
          }
        }]
      }]
    }
  }]
}
Respuesta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "challengeFailedPinNeeded"
      }
    }]
  }
}

PIN válido

En este ejemplo, se muestra la solicitud y la respuesta de un PIN válido.

User 333444
Google Assistant Destrabando la puerta.
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"
          }
        }]
      }]
    }
  }]
}
Respuesta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS",
      "states": {
        "isLocked": false,
        "isJammed": false
      }
    }]
  }
}
User Atenúa la luz de la sala de estar.
Google Assistant ¿Puedes decirme tu código de seguridad?
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
          }
        }]
      }]
    }
  }]
}
Respuesta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Respuestas de error

Estos son algunos códigos de error que se pueden mostrar con tus respuestas:

  • tooManyFailedAttempts: lo sentimos, se produjeron demasiados intentos fallidos. Para completar la acción, ve a la app de tu dispositivo.
  • pinIncorrect: Lo sentimos, el código de seguridad es incorrecto.
  • userCancelled: Ok

Consulta la lista completa de errores y excepciones.