Report State es una función importante que permite que la acción Google Home informe de forma proactiva el estado más reciente del dispositivo del usuario a Google Home Graph en lugar de esperar un intent QUERY
.
Report State informa a Google los estados de los dispositivos del usuario con el agentUserId
especificado asociado con ellos (que se envía en la solicitud SYNC
original). 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 emitir un intent QUERY
a varias nubes de terceros antes de emitir el intent EXECUTE
.
Sin Report State, dadas las luces de varios proveedores en una sala de estar, el comando Hey Google, ilumina mi sala de estar requiere resolver varios intents QUERY
enviados a varias nubes, en lugar de simplemente buscar los valores de brillo actuales en función de lo que se informó 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.
Después 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 se envía con Report State.
Cuando llames a Report State, asegúrate de proporcionar datos de estado completos para un rasgo determinado. Home Graph actualiza los estados por rasgo y reemplaza todos los datos de ese rasgo cuando se realiza una llamada a Report State. Por ejemplo, si informas el estado del atributo StartStop, la carga útil debe incluir valores para isRunning
y isPaused
.
Comenzar
Para implementar Report State, sigue estos pasos:
Habilita la API de Google HomeGraph
-
En Google Cloud Console, ve a la página API de HomeGraph.
Ve a la página de la API de HomeGraph - Selecciona el proyecto que coincida con el ID de tu proyecto smart home.
- 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:
-
En Google Cloud Console, ve a la página Crear una clave de cuenta de servicio.
Ir a la página Crear clave de la cuenta de servicio - En la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
- Escribe un nombre en el campo Nombre de cuenta de servicio.
- En el campo ID de cuenta de servicio, ingresa un ID.
En la lista Rol, selecciona Cuentas de servicio > Creador de tokens de cuenta de servicio.
En Tipo de clave, selecciona la opción JSON.
- Haz clic en Crear. Se descargará a tu computadora un archivo JSON con la clave.
Llama a la API
Selecciona una opción de las siguientes pestañas:
Home Graph proporciona un extremo HTTP.
- Usa el archivo JSON de la cuenta de servicio descargado para crear un token web JSON (JWT). Para obtener más información, consulta Autenticación con una cuenta de servicio.
- Obtén un token de acceso de OAuth 2.0 con el permiso
https://www.googleapis.com/auth/homegraph
con oauth2l: - Crea la solicitud JSON con el
agentUserId
. Esta es una solicitud JSON de muestra para el estado y la notificación del informe: - Combina el estado del informe y el JSON de la notificación, y el token en tu solicitud HTTP POST al extremo de Google Home Graph. Este es un ejemplo de cómo realizar la solicitud en la línea de comandos con
curl
, como prueba:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
curl -X POST -H "Authorization: BearerACCESS_TOKEN " \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
Home Graph proporciona un extremo de gRPC.
- Obtén la definición del servicio de búferes de protocolo para la API de Home Graph.
- Sigue la documentación para desarrolladores de gRPC para generar stubs de cliente para uno de los lenguajes compatibles.
- Llama al método ReportStateAndNotification.
El cliente de Node.js de las APIs de Google proporciona vinculaciones para la API de Home Graph.
- Inicializa el servicio
google.homegraph
con las Credenciales predeterminadas de la aplicación. - Llama al método
reportStateAndNotification
con ReportStateAndNotificationRequest. Muestra unPromise
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 } } } } } });
La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.
- Inicializa
HomeGraphApiService
con las credenciales predeterminadas de la aplicación. - Llama al método
reportStateAndNotification
conReportStateAndNotificationRequest
. Muestra unReportStateAndNotificationResponse
.
// 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
Para preparar tu integración de Cloud-to-cloud para la certificación, es importante probar Report State.
Para ello, te recomendamos que uses la herramienta Home Graph Viewer, que es una app web independiente que no requiere descarga ni implementación.
El panel de Report State aún está disponible, pero dejó de estar disponible y ya no es compatible.
Panel de estado de los informes
Requisitos previos
Antes de poder probar tu integración de Cloud-to-cloud, necesitas tu clave de cuenta de servicio y tu agentUserId
. Si ya tienes la clave de la cuenta de servicio y agentUserId
, consulta Cómo implementar el panel de Report State.
Cómo crear una clave de cuenta de servicio
Sigue estas instrucciones para generar una clave de cuenta de servicio desde Google Cloud Console:
-
En Google Cloud Console, ve a la página Crear una clave de cuenta de servicio.
Ir a la página Crear clave de la cuenta de servicio - En la lista Cuenta de servicio, selecciona Cuenta de servicio nueva.
- Escribe un nombre en el campo Nombre de cuenta de servicio.
- En el campo ID de cuenta de servicio, ingresa un ID.
En la lista Rol, selecciona Cuentas de servicio > Creador de tokens de cuenta de servicio.
En Tipo de clave, selecciona la opción JSON.
- Haz clic en Crear. Se descargará a tu computadora un archivo JSON con la clave.
Cómo recuperar tu agentUserId
Sigue estos pasos para recuperar tu agentUserId
:
- Abre la herramienta OAuth Playground.
- Haz clic en el ícono de ajustes que se encuentra en la esquina superior derecha para abrir el diálogo de configuración de OAuth 2.0.
- En el campo Extremos de OAuth, selecciona Personalizado.
- Especifica los siguientes parámetros de vinculación de cuentas con los valores que estableciste en la consola de Acciones cuando creaste el proyecto de casa inteligente. Haga clic en Cerrar para guardar los cambios.
- Extremo de autorización: Establece este parámetro en la URL de autorización en la consola.
- Extremo de token: Establece este parámetro en la URL del token en la consola.
- ID de cliente de OAuth: Establece este parámetro en el mismo valor que en la consola.
- Clave secreta del cliente de OAuth: Establece este parámetro con el mismo valor que en la consola.
Figura 1: Configuración de OAuth 2.0. - Expande Paso 1: Selecciona y autoriza las APIs. En el campo de texto que dice "Ingresa tus propios permisos", ingresa "devices" y haz clic en Autorizar APIs.
- Si el paso anterior se realizó de forma correcta, se te redireccionará a tu extremo de OAuth. Accede con la cuenta de usuario que quieres probar. Después de acceder correctamente, se te redireccionará a OAuth Playground con el paso 2 expandido y completado con un código de autorización que se generó por ti.
- Haz clic en Intercambiar código autorizado por tokens para obtener un token de actualización y un token de acceso.
- En Paso 3: Configura la solicitud a la API, sigue estos pasos:
- Establece Método HTTP en POST.
- Establece el URI de solicitud en tu URL de entrega.
Haz clic en Enter request body y agrega esta entrada de muestra:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.SYNC" }] }
- Haz clic en Enviar la solicitud.
- Busca el valor del campo "agentUserId" en la respuesta.
Implementa el panel de estado de los informes
Una vez que tengas la clave de la cuenta de servicio y el ID de usuario del agente para tu proyecto, descarga y, luego, implementa la versión más reciente desde el panel de Report State.
Una vez que hayas descargado la versión más reciente, sigue las instrucciones del archivo README.MD
incluido.
Después de implementar el panel Report State, accede al panel desde la siguiente URL (reemplaza your_project_id por el ID de tu proyecto):
http://<your-project-id>.appspot.com
En el panel, haz lo siguiente:
- Elige el archivo de clave de la cuenta
- Agrega tu agentUserId
Luego, haz clic en Lista.
Se muestran todos tus dispositivos. Una vez que se propague la lista, puedes usar el botón Actualizar para actualizar los estados de los dispositivos. Si hay un cambio en el estado del dispositivo, la fila se destaca en verde.
Respuestas de error
Es posible que recibas una de las siguientes respuestas de error cuando llames a Report State. Estas respuestas se presentan en forma de códigos de estado HTTP.
400 Bad Request
: El servidor no pudo procesar la solicitud que envió el cliente debido a una sintaxis no válida. Entre las causas comunes, se incluyen JSON con el formato incorrecto o el uso denull
en lugar de "" para un valor de cadena.404 Not Found
: No se pudo encontrar el recurso solicitado, pero es posible que esté disponible en el futuro. Por lo general, esto significa que no podemos encontrar el dispositivo solicitado. También puede significar que la cuenta de usuario no está vinculada con Google o que recibimos unagentUserId
no válido. Asegúrate de queagentUserId
coincida con el valor proporcionado en tu respuesta SYNC y de que estés controlando correctamente los intents DISCONNECT.