Solicitar sincronización

Cloud-to-cloud

Request Sync activa una solicitud SYNC a tu fulfillment para cualquier usuario de Google con dispositivos que tengan el agentUserId especificado asociado (que enviaste en la solicitud SYNC original). Esto te permite actualizar los dispositivos de los usuarios sin desvincular y volver a vincular sus cuentas. Todos los usuarios vinculados a este identificador recibirán una solicitud SYNC.

Debes activar una solicitud SYNC en los siguientes casos:

  • 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, rasgo o agregas una nueva función del dispositivo

Comenzar

Para implementar Request Sync, sigue estos pasos:

Habilita la API de Google HomeGraph

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

    Ir a la página de la API de HomeGraph
  2. Selecciona el proyecto que coincida con tu ID de proyecto 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 tu ID de proyecto smart home.
  1. En 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.

  2. Haz clic en Crear cuenta de servicio.

  3. Escribe un nombre en el campo Nombre de cuenta de servicio.

  4. En el campo ID de cuenta de servicio, ingresa un ID.

  5. Opcional: en el campo Descripción de la cuenta de servicio, escribe una descripción.

  6. Haz clic en Crear y continuar.

  7. En el menú desplegable Función, selecciona Cuentas de servicio > Creador de tokens de identidad de OpenID Connect de cuentas de servicio.

  8. Haz clic en Continuar.

  9. Haz clic en Listo.

  10. Selecciona la cuenta de servicio que acabas de crear en la lista de cuentas de servicio y selecciona Administrar claves en el menú Acciones.

  11. Selecciona Agregar clave > Crear clave nueva.

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

  13. Haz clic en Crear. Se descargará a tu computadora un archivo JSON con la clave.

Para obtener instrucciones detalladas y más información sobre cómo crear claves de cuentas de servicio, consulta Crea y borra claves de cuentas de servicio en el sitio de ayuda de la consola de Google Cloud.

Llama a la API

HTTP

La API de Home Graph proporciona un extremo HTTP

  1. Usa el archivo JSON de la cuenta de servicio descargado para crear un token web JSON Token (JWT). Para obtener más información, consulta Autenticación con una cuenta de servicio.
  2. Obtén un token de acceso de OAuth 2.0 con el https://www.googleapis.com/auth/homegraph alcance mediante oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Crea la solicitud JSON con el agentUserId. Esta es una solicitud JSON de muestra para Request Sync:
  5. {
      "agentUserId": "user-123"
    }
  6. Combina el JSON de Request Sync 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:
  7. 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 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 para generar stubs de cliente para uno de los lenguajes compatibles.
  3. Llama al método RequestSync.

Node.js

El cliente de las APIs de Google para Node.js 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 requestSync con RequestSyncDevicesRequest. Muestra un Promise con 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.

  1. Inicializa HomeGraphApiService con las credenciales predeterminadas de la aplicación.
  2. Llama al método requestSync con RequestSyncDevicesRequest. Muestra un ReportStateAndNotificationResponse 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 Request Sync. Estas respuestas se presentan en forma de códigos de estado HTTP.

  • 400 Bad Request - El servidor no pudo procesar la solicitud enviada por el cliente debido a una sintaxis no válida. Las causas comunes incluyen JSON con formato incorrecto o el uso de null en lugar de "" para un valor de cadena.
  • 403 Forbidden - El servidor no pudo procesar la solicitud para el agentUserId determinado debido a un error mientras se actualizaba el token. Asegúrate de que tu extremo de OAuth responda correctamente a las solicitudes de token de actualización y verifica el estado de vinculación de la cuenta 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 a Google o que recibimos un agentUserId no válido. Asegúrate de que el agentUserId coincida con el valor proporcionado en tu SYNC y de que estés controlando correctamente las intents de DISCONNECT.
  • 429 Too Many Requests - Se superó la cantidad máxima de solicitudes de sincronización simultáneas para el agentUserId determinado. Un llamador solo puede emitir una solicitud de sincronización simultánea, a menos que la marca async se establezca en true.