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 desactivar una cámara de seguridad o abrir una puerta. La verificación secundaria del usuario no está vinculada a una característica específica del dispositivo, lo que te permite decidir cuándo presentar un desafío a Google Assistant. Por ejemplo, puedes optar por realizar un desafío para el rasgo OnOff de una cámara de seguridad, pero no para el rasgo OnOff en una luz. También puedes tener desafíos con problemas de Assistant en ciertas situaciones para la misma acción. Por ejemplo, puedes solicitar que Assistant envíe una solicitud de desafío para abrir una puerta si un llavero NFC no está cerca de esa puerta, pero que no emita un desafío si está presente.
El Assistant puede emitir dos tipos de verificaciones: el reconocimiento explícito o el 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 devuelve la solicitud del intent a tu acción con los datos del desafío en el bloque de desafío. Luego, puedes validar los datos del desafío para determinar si el usuario proporcionó la respuesta de seguridad correcta.
Assistant usa el 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 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 desafíos admitidos
Estos son los tipos de verificación secundaria compatibles de la verificación del usuario:
- Sin desafío: Es una solicitud y respuesta que no usa un desafío de verificación secundario del usuario.
- ackNeeded: una verificación secundaria del usuario que requiere una confirmación explícita (sí o no) y también puede usar estados de trait como comentarios de respuesta No se recomienda este tipo de desafío para dispositivos y traits de seguridad.
- pinNeeded: una verificación secundaria del usuario que requiere un número de identificación personal (PIN), que es ideal para las características y los dispositivos de seguridad
Sin desafío
En este ejemplo, se muestra una solicitud y una respuesta de EXECUTE
correctas sin tener que encender las luces.
User | Enciende las luces. |
Google Assistant | Muy bien, encendiendo 3 lámparas. |
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "on": true, "online": true } }] } }
ackNeeded (obligatorio)
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 atenuar la luz.
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. |
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS" }] } }
ackNeeded con estados de trait
Una autenticación de confirmación de usuario secundaria que puede usar estados para un trait.
Por ejemplo, si trabajas con la característica TemperatureSetting y se configuraron thermostatMode
y thermostatTemperatureSetpoint
, Assistant puede preguntar: ¿Confirmas que quieres 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. Una lista de una característica específica indica que se admiten todos sus estados.
- ArmDisarm
currentArmLevel
currentStatusReport
- Fill
- LockUnlock
- OnOff
on
- OpenClose
- Scene
- TemperatureSetting
thermostatMode
thermostatTemperatureSetpoint
thermostatTemperatureSetpointHigh
thermostatTemperatureSetpointLow
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 solicita a los usuarios la confirmación de activar la calefacción y establecer la temperatura en 28 grados, ya que se muestra un thermostatTemperatureSetpoint
de 28
como estado en la respuesta.
User | Establece el modo de aire acondicionado 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. |
{ "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" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 }, "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 } }] } }
Se requiere PIN
El desafío pinNeeded
se recomienda para los dispositivos de seguridad.
En este ejemplo, se muestra una solicitud inicial y una respuesta con un desafío pinNeeded
. En el ejemplo, se muestra una respuesta con un desafío pinNeeded
, por lo que Assistant solicita el pin. 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? |
{ "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 } }] }] } }] }
{ "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 falló un desafío pinNeeded
inicial.
Cuando se muestra un tipo 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 errores.
User | 333222 |
Google Assistant | Lo siento, el código de seguridad es incorrecto. ¿Puedes decirme tu código de seguridad? |
{ "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" } }] }] } }] }
{ "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. |
{ "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" } }] }] } }] }
{ "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? |
{ "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 } }] }] } }] }
{ "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:
challengeFailedNotSetup
: Esta acción requiere un código de seguridad, pero no se configuró en la app de tu dispositivo.tooManyFailedAttempts
: Se produjeron demasiados intentos fallidos. Ve a la app de tu dispositivo para completar esa acción.pinIncorrect
: El código de seguridad es incorrecto.userCancelled
: Aceptar.
Consulta la lista completa de errores y excepciones.