Te damos la bienvenida al Centro para desarrolladores de Google Home, el nuevo destino para aprender a desarrollar acciones para el hogar inteligente. Nota: Continuarás compilando acciones en la Consola de Actions.

Verificación del usuario secundario

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La verificación del usuario secundario te permite agregar seguridad de dos factores a los comandos por voz. Esto te permite agregar medidas de seguridad adicionales para ciertas acciones, como desactivar una cámara de seguridad o abrir una puerta. La verificación del usuario secundario no está vinculada a una característica específica del dispositivo, lo que te permite decidir en qué momento un Google Assistant puede generar un desafío. Por ejemplo, puedes optar por emitir un desafío para la característica OnOff en una cámara de seguridad, pero no puedes emitir un desafío para la característica OnOff en el caso de una luz. También puedes tener desafíos de problemas Assistant en ciertas situaciones para la misma acción. Por ejemplo, puedes solicitar que Assistant emita una solicitud de verificación para abrir una puerta si un llavero NFC no está cerca, pero no puede hacerlo si está presente.

El Assistant puede emitir dos tipos de verificaciones: confirmación explícita o número de identificación personal (PIN). Esto agrega un bloque de desafío a los intents QUERY y EXECUTE enviados desde Assistant hacia 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 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 superficies que no son de voz, el PIN y las confirmaciones se hacen en pantalla.

Tipos de dispositivos compatibles

La verificación del usuario secundario es compatible con todos los tipos de dispositivo.

Características del dispositivo compatible

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

Tipos de desafíos admitidos

Estos son los tipos de verificación de usuarios secundarios admitidos:

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

Sin desafíos

En este ejemplo, se muestra una solicitud y una respuesta exitosas de EXECUTE sin el desafío de encender las luces.

User Enciende las luces.
Google Assistant Muy bien, encendiendo 3 luces.
Solicitud
{
  "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
      }
    }]
  }
}

Se requiere confirmación

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

Existen los siguientes tipos de desafíos de ackNeeded:

Se requiere confirmación

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

User Atenúa la luz de la sala de estar.
Google Assistant Atenuando la luz de la sala de estar. ¿Confirmas la cancelación?
User Sí.
Google Assistant Atenuando 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 requiere confirmación mediante estados de característica

Una autenticación de reconocimiento de usuario secundaria que puede usar estados para una característica. Por ejemplo, si estás trabajando con la característica TemperatureSetting y thermostatMode y thermostatTemperatureSetpoint están configurados, Assistant puede preguntar Are you sure you want to set the calefacción on the air acondicionado to 28 degrees?

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

Las siguientes características y estados admiten ackNeeded con estados de característica. Una lista de una característica específica indica que se admiten todos sus estados.

En este ejemplo, se muestra una solicitud y una respuesta con un desafío ackNeeded que usa un estado de característica. Cambia el modo de aire acondicionado a calefacción y establece la temperatura en 28 grados. Luego, Assistant solicita a los usuarios la confirmación para encender la calefacción y establecer la temperatura en 28 grados, ya que un thermostatTemperatureSetpoint de 28 se muestra como un estado en la respuesta.

User Establecer el modo AC para calefacción
Google Assistant ¿Confirmas que quieres establecer la calefacción en el 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
      }
    }]
  }
}

Se necesita PIN

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

En este ejemplo, se muestra una solicitud y una 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.

Solicitud de muestra y respuesta para un PIN incorrecto o válido:

User Destraba la puerta.
Google Assistant ¿Puedes decirme tu código de seguridad?
Solicitud
{
  "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 falló un desafío inicial pinNeeded.

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 sentimos, el código de seguridad es incorrecto. ¿Puedes decirme tu código de seguridad?
Solicitud
{
  "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.
Solicitud
{
  "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?
Solicitud
{
  "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:

  • 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 del dispositivo para completar la acción.
  • pinIncorrect: El código de seguridad es incorrecto.
  • userCancelled: aceptable

Consulta la lista completa de errores y excepciones.