La sincronización de solicitudes activa una solicitud SYNC
para tu entrega de cualquier usuario de Google con dispositivos que tengan asociado el agentUserId
especificado (que enviaste en la solicitud SYNC original). Esto te permite actualizar los dispositivos de los usuarios sin desvincular ni volver a vincular su cuenta. Todos los usuarios vinculados a este identificador recibirán una solicitud 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 tipo de dispositivo nuevo, o bien agregas una nueva función del dispositivo.
Primeros pasos
Para implementar la sincronización de solicitudes, sigue estos pasos:
Habilita la API de Google HomeGraph
-
En Google Cloud Console, ve a la página 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 el Google Cloud Console:
-
En Google Cloud Console, ve a la página Crear clave de la 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.
- Ingresa un nombre en el campo Nombre de cuenta de servicio.
- En el campo ID de la cuenta de servicio, ingresa un ID.
En la lista Función, selecciona Cuentas de servicio > Creador de tokens de cuentas 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.
Llamar a la API
HTTP
La API de Home Graph proporciona un extremo HTTP
- Usa el archivo JSON descargado de la cuenta de servicio para crear un token web JSON (JWT). Para obtener más información, consulta Cómo autenticar con una cuenta de servicio.
- Obtén un token de acceso de OAuth 2.0 con el permiso
https://www.googleapis.com/auth/homegraph
mediante oauth2l: - Crea la solicitud JSON con el
agentUserId
. Este es un ejemplo de solicitud JSON para Request Sync: - Combina el JSON de la sincronización de solicitudes y el token de tu solicitud HTTP POST al extremo del gráfico de Google Home. A continuación, se muestra 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 los búferes de protocolo para la API de Home Graph.
- Sigue la documentación para desarrolladores de gRPC a fin de generar stubs de cliente para uno de los idiomas compatibles.
- Llama al método RequestSync.
Node.js
El cliente Node.js de las API 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
requestSync
con RequestSyncDevicesRequest. Muestra unPromise
con una RequestSyncDevicesResponse vacía.
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 con la API de Home Graph.
- Inicializa el elemento
HomeGraphApiService
con Credenciales predeterminadas de la aplicación. - Llama al método
requestSync
conRequestSyncDevicesRequest
. Muestra unReportStateAndNotificationResponse
vací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 Sync Sync. Estas respuestas tienen la 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. Las causas comunes incluyen JSON con formato incorrecto o el uso denull
en lugar de "" para un valor de string.403 Forbidden
: El servidor no pudo procesar la solicitud deagentUserId
debido a un error mientras se actualizaba el token. Asegúrate de que el extremo de OAuth responda de forma correcta para actualizar las solicitudes de tokens y verifica el estado de vinculación de cuentas del usuario.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 la cuenta de usuario no está vinculada con Google o recibimos unagentUserId
no válido. Asegúrate de que elagentUserId
coincida con el valor proporcionado en tu respuesta de SYNC y de que manejes correctamente los intents DISCONNECT.429 Too Many Requests
: Se superó la cantidad máxima de solicitudes de sincronización simultáneas para unaagentUserId
determinada. Un emisor solo puede emitir una solicitud de sincronización simultánea, a menos que la marcaasync
esté configurada como verdadera.