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 seguridad adicional 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 del dispositivo específica, lo que te permite decidir cuándo hacer que Asistente de Google emita un desafío. Por ejemplo, puedes optar por emitir un desafío de la característica OnOff para una cámara de seguridad, pero no emitir un desafío de la característica OnOff de una luz. También puedes hacer que Asistente de Google genere problemas en determinadas situaciones para la misma acción. Por ejemplo, puedes solicitar que el Asistente de Google emita una solicitud de desafío para abrir una puerta si un llavero NFC no está cerca, pero no emite un desafío si está presente.

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

Asistente de Google usa el diálogo para iniciar el desafío, pero si lo usas en plataformas que no sean 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 dispositivos.

Características del dispositivo compatibles

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

Tipos de verificación admitidos

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

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

Sin desafíos

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

User Enciende las luces.
Asistente de Google 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 ack

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.

Estos son los tipos de desafíos ackNeeded:

ackNeeded simple

En este ejemplo, se muestra una solicitud y 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.
Asistente de Google Se atenuará la luz de la sala de estar. ¿Confirmas la cancelación?
User Sí.
Asistente de Google 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"
    }]
  }
}

ackNeeded con estados de características

Una autenticación de confirmación de usuario secundaria que puede usar estados para una característica. Por ejemplo, si trabajas con la característica temperación y se configuran thermostatMode y thermostatTemperatureSetpoint, Asistente de Google puede preguntar ¿Estás seguro de que quieres establecer la calefacción en el aire acondicionado en 28 grados?

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

Las siguientes características y estados admiten ackNeeded con estados de características. 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, el Asistente de Google solicita a los usuarios que confirmen el cambio para encender 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 CA en calefacción.
Asistente de Google ¿Confirmas que quieres establecer la calefacción del aire acondicionado en 28 grados?
User Sí.
Asistente de Google 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
      }
    }]
  }
}

Necesario

Se recomienda el desafío pinNeeded 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 Asistente de Google solicita el PIN. 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.
Asistente de Google ¿Puedo tener 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 pinNeeded inicial.

Cuando se muestra un tipo challengeFailedPinNeeded, Asistente de Google 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
Asistente de Google Lo sentimos, el código de seguridad es incorrecto. ¿Puedo tener 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
Asistente de Google 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.
Asistente de Google ¿Puedo tener 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 de tu dispositivo para completar esa acción.
  • pinIncorrect - Lo sentimos, el código de seguridad es incorrecto.
  • userCancelled: Aceptar

Consulta la lista completa de errores y excepciones.