La sincronización de solicitudes activa una solicitud SYNC para tu entrega para cualquier usuario de Google
con dispositivos que tengan el
agentUserId especificado asociado a ellos (que
enviaste en la solicitud SYNC original). Esto te permite actualizar los dispositivos de los usuarios sin desvincular y volver a vincular su cuenta. Todos los usuarios vinculados a este
identificador recibirán una solicitud de SYNC.
Debes activar una solicitud SYNC:
- Si el usuario agrega un dispositivo nuevo
- Si el usuario quita un dispositivo existente
- Si el usuario cambia el nombre de un dispositivo existente
- Si implementas un nuevo tipo de dispositivo o atributo, o agregas una nueva función de dispositivo.
Comenzar
Para implementar la sincronización de solicitudes, sigue estos pasos:
Habilita la API de Google HomeGraph
-
En la Google Cloud Console, ve a la página de la API de HomeGraph.
Ir a la página de la API de HomeGraph - Selecciona el proyecto que coincida con tu ID del proyecto de 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 la Google Cloud Console:
-
En la Google Cloud Console, ve a la página Cuentas de servicio.
Ir a la página Cuentas de servicio.Es posible que debas seleccionar un proyecto antes de que se te dirija a la página Cuentas de servicio.
Haz clic en Crear cuenta de servicio.
Escribe un nombre en el campo Nombre de cuenta de servicio.
En el campo ID de cuenta de servicio, ingresa un ID.
Opcional: en el campo Descripción de la cuenta de servicio, escribe una descripción.
Haz clic en Crear y continuar.
En el menú desplegable Rol, selecciona Cuentas de servicio > Creador de tokens de identidad de OpenID Connect para cuentas de servicio.
Haz clic en Continuar.
Haz clic en Listo.
Selecciona la cuenta de servicio que acabas de crear de la lista de cuentas de servicio y elige Administrar claves en el menú Acciones.
Selecciona Agregar clave > Crear clave nueva.
En Tipo de clave, selecciona la opción JSON.
Haz clic en Crear. Se descargará en tu computadora un archivo JSON que contiene tu clave.
Llama a la API
HTTP
La API de Home Graph proporciona un extremo HTTP
- Usa el archivo JSON de la cuenta de servicio que descargaste para crear un token web JSON (JWT). Para obtener más información, consulta Autentícate con una cuenta de servicio.
- Obtén un token de acceso de OAuth 2.0 con el
permiso
https://www.googleapis.com/auth/homegraphusando oauth2l: - Crea la solicitud JSON con el
agentUserId. Este es un ejemplo de solicitud JSON para Request Sync: - Combina el JSON de la solicitud de sincronizació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
{ "agentUserId": "user-123" }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
gRPC
La API de 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 admitidos.
- Llama al método RequestSync.
Node.js
El cliente de Node.js para las APIs de Google proporciona vinculaciones para la API de Home Graph.
- Inicializa el servicio
google.homegraphcon las credenciales predeterminadas de la aplicación. - Llama al método
requestSynccon RequestSyncDevicesRequest. Devuelve unPromisecon un RequestSyncDevicesResponse vacío.
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.requestSync({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', async: false } });
Java
La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.
- Inicializa
HomeGraphApiServicecon las credenciales predeterminadas de la aplicación. - Llama al método
requestSyncconRequestSyncDevicesRequest. Devuelve unReportStateAndNotificationResponsevacío.
// 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(); // Request sync. RequestSyncDevicesRequest request = new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false); homegraphService.devices().requestSync(request);
Respuestas de error
Es posible que recibas una de las siguientes respuestas de error cuando llames a Request Sync. 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 un JSON con formato incorrecto o el uso denullen lugar de "" para un valor de cadena.403 Forbidden: El servidor no pudo procesar la solicitud para elagentUserIddeterminado debido a un error mientras se actualizaba el token. Asegúrate de que tu extremo de OAuth responda correctamente a las solicitudes de tokens de actualización y verifica el estado de vinculación de la cuenta del usuario.404 Not Found: No se encontró el recurso solicitado, pero es posible que esté disponible en el futuro. Por lo general, esto significa que la cuenta de usuario no está vinculada con Google o que recibimos unagentUserIdno válido. Asegúrate de que elagentUserIdcoincida con el valor proporcionado en tu respuesta de SYNC y de que estés controlando correctamente los intents de DISCONNECT.429 Too Many Requests: Se superó la cantidad máxima de solicitudes de sincronización simultáneas para elagentUserIddeterminado. Un emisor solo puede emitir una solicitud de sincronización simultánea, a menos que la marcaasyncse establezca como verdadera.