Informar estado

Report State es una función importante que le permite al La acción Home informa de forma proactiva el estado más reciente del del dispositivo del usuario de vuelta a Google Home Graph en lugar de esperar a que QUERY.

Report State informa a Google los estados de los dispositivos de los usuarios. con el agentUserId especificado y asociado (enviado en el SYNC). Cuando Google Assistant quiere realizar una acción que requiere comprender el estado actual de un dispositivo, puede simplemente buscar la información de estado en Home Graph en lugar de de emitir un intent QUERY a varias nubes de terceros antes de emitir EXECUTE.

Sin Report State, se proporcionan luces de varios proveedores en una sala de estar, se requiere el comando Hey Google, ilumina mi sala de estar resolver múltiples intents QUERY enviados a múltiples nubes, en lugar de buscando los valores de brillo actuales en función de lo que que se informaron anteriormente. Para brindar la mejor experiencia del usuario, Assistant debe tener el estado actual de un dispositivo. sin requerir un recorrido de ida y vuelta al dispositivo.

Luego del SYNC inicial de un dispositivo, la plataforma envía un intent QUERY. que recopila el estado del dispositivo para propagar Home Graph. Después de ese punto, Home Graph solo almacena el estado que es enviado con Report State.

Cuando llames a Report State, asegúrate de proporcionar una de estado de una característica determinada. Home Graph actualiza los estados en un por característica y reemplaza todos los datos de esa característica cuando Se realizó una llamada de Report State. Por ejemplo, si informas para el trait StartStop, la carga útil debe incluir valores para isRunning y isPaused.

Comenzar

Para implementar Report State, sigue estos pasos:

Cómo habilitar la API de Google HomeGraph

  1. En Google Cloud Console, ve a la página API de HomeGraph.

    Ir a la página de la API de HomeGraph
  2. Selecciona el proyecto que coincida con tu ID del proyecto de smart home.
  3. Haz clic en HABILITAR.

Crea una clave de cuenta de servicio

Sigue estas instrucciones para generar una clave de cuenta de servicio desde Google Cloud Console:

Nota: Asegúrate de usar el proyecto de GCP correcto cuando realices estos pasos. Este es el proyecto que coincide con el ID de tu proyecto smart home.
  1. En Google Cloud Console, ve a la página Crear clave de cuenta de servicio.

    Ir a la página Crear clave de la cuenta de servicio
  2. Desde la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
  3. Escribe un nombre en el campo Nombre de cuenta de servicio.
  4. En el campo ID de la cuenta de servicio, ingresa un ID.
  5. Desde la lista de Rol, selecciona Cuentas de servicio > Creador de tokens de cuenta de servicio.

  6. En Tipo de clave, selecciona la opción JSON.

  7. Haz clic en Crear. Un archivo JSON que contiene tu clave descargas en tu computadora.

Llama a la API

Selecciona una opción de las siguientes pestañas:

HTTP

Home Graph proporciona un extremo HTTP.

  1. Usa el archivo JSON de la cuenta de servicio que descargaste para crear un archivo web JSON Token (JWT). Para obtener más información, consulta Autentica con una cuenta de servicio.
  2. Obtén un token de acceso de OAuth 2.0 con el https://www.googleapis.com/auth/homegraph permiso con oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Crea la solicitud JSON con el agentUserId. Este es un ejemplo de una solicitud JSON para el estado del informe y la notificación:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. Combina el estado del informe y el JSON de la notificación con el token en tu HTTP POST. al extremo de Google Home Graph. Aquí hay un ejemplo de cómo para realizar la solicitud en la línea de comandos con curl, como una prueba:
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
    

gRPC

Home Graph proporciona un extremo de gRPC.

  1. Obtén la definición del servicio de búferes de protocolo para la API de Home Graph.
  2. Sigue la documentación para desarrolladores de gRPC con el objetivo de generar stubs de cliente para uno de los lenguajes compatibles.
  3. Llama al método ReportStateAndNotification.

Node.js

El cliente de Node.js de las APIs de Google proporciona vinculaciones para la API de Home Graph.

  1. Inicializa el servicio google.homegraph con las credenciales predeterminadas de la aplicación.
  2. Llama al método reportStateAndNotification con ReportStateAndNotificationRequest. Muestra un Promise con ReportStateAndNotificationResponse.
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.reportStateAndNotification({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    requestId: 'PLACEHOLDER-REQUEST-ID',
    payload: {
      devices: {
        states: {
          "PLACEHOLDER-DEVICE-ID": {
            on: true
          }
        }
      }
    }
  }
});
    

Java

La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.

  1. Inicializa HomeGraphApiService con las credenciales predeterminadas de la aplicación.
  2. Llama al método reportStateAndNotification con ReportStateAndNotificationRequest. Muestra un ReportStateAndNotificationResponse.
  // Get Application Default credentials.
  GoogleCredentials credentials =
      GoogleCredentials.getApplicationDefault()
          .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

  // Create Home Graph service client.
  HomeGraphService homegraphService =
      new HomeGraphService.Builder(
              GoogleNetHttpTransport.newTrustedTransport(),
              GsonFactory.getDefaultInstance(),
              new HttpCredentialsAdapter(credentials))
          .setApplicationName("HomeGraphExample/1.0")
          .build();

  // Build device state payload.
  Map<?, ?> states = Map.of("on", true);

  // Report device state.
  ReportStateAndNotificationRequest request =
      new ReportStateAndNotificationRequest()
          .setRequestId("PLACEHOLDER-REQUEST-ID")
          .setAgentUserId("PLACEHOLDER-USER-ID")
          .setPayload(
              new StateAndNotificationPayload()
                  .setDevices(
                      new ReportStateAndNotificationDevice()
                          .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states))));
  homegraphService.devices().reportStateAndNotification(request);
}
    

Estado del informe de prueba

Herramientas recomendadas para esta tarea

Para preparar tu acción para la certificación, es importante Report State

Para hacerlo, te recomendamos usar la herramienta Visualizador de Home Graph, que es una app web independiente que no requiere descarga ni implementación.

El panel de Report State todavía está disponible, pero está obsoleto y ya no es compatible.

Panel de estado del informe

Requisitos previos

Para poder probar la acción, necesitas tu cuenta de servicio Key y tu agentUserId. Si ya cuentas con la clave de tu cuenta de servicio agentUserId consulta Cómo implementar Report State Panel.

Implementa el panel Report State

Una vez que tengas la clave de la cuenta de servicio y el ID de usuario del agente para tu proyecto, haz lo siguiente: descarga e implementa la última versión Report State Panel de control. Una vez que hayas descargado la última versión, sigue las instrucciones de la archivo README.MD incluido.

Luego de implementar el panel de Report State, accede el panel desde la siguiente URL (reemplaza your_project_id por ID del proyecto):

http://<your-project-id>.appspot.com

En el panel, haz lo siguiente:

  • Elige el archivo de claves de tu cuenta
  • Agrega tu agentUserId

Luego, haz clic en Lista.

Todos tus dispositivos aparecen en la lista. Una vez que la lista se completa, puedes usar Actualizar para actualizar los estados del dispositivo. Si se produce un cambio de estado del dispositivo, la fila se destaca en verde.

Respuestas de error

Puedes recibir una de las siguientes respuestas de error cuando llames Report State Estas respuestas se presentan como estado HTTP en la nube.

  • 400 Bad Request: El servidor no se pudo procesar. La solicitud que envió el cliente debido a una sintaxis no válida Causas comunes incluye un JSON con formato incorrecto o usa null en lugar de “” para un valor de cadena.
  • 404 Not Found: El recurso solicitado no se pudo pero que podrían estar disponibles en el futuro. Por lo general, esto significa que no puede encontrar el dispositivo solicitado. También puede significar que la cuenta de usuario no está vinculado con Google o recibimos un agentUserId no válido. Asegúrate de que que el agentUserId coincida con el valor proporcionado en tu respuesta SYNC y se cumplen que procesa los intents DISCONNECT.