Solicitar sincronização

A sincronização de solicitações aciona uma solicitação SYNC para o fulfillment de qualquer usuário do Google com dispositivos que tenham o agentUserId especificado associado a eles (que você enviou na solicitação de SYNC original). Isso permite atualizar os dispositivos dos usuários sem desvincular e vincular novamente a conta deles. Todos os usuários vinculados a esse identificador vão receber uma solicitação SYNC.

Você precisa acionar uma solicitação SYNC:

  • Se o usuário adicionar um novo dispositivo.
  • Se o usuário remover um dispositivo.
  • Se o usuário renomear um dispositivo.
  • Se você implementar um novo tipo de dispositivo, característica ou adicionar um novo recurso de dispositivo.

Primeiros passos

Para implementar a sincronização de solicitações, siga estas etapas:

Ativar a API Google HomeGraph

  1. No Google Cloud Console, acesse a página API HomeGraph.

    Acessar a página da API HomeGraph
  2. Selecione o projeto que corresponde ao ID do projeto smart home.
  3. Clique em ATIVAR.

Criar uma chave de conta de serviço

Siga estas instruções para gerar uma chave de conta de serviço do Google Cloud Console:

Observação: verifique se você está usando o projeto correto do GCP ao realizar estas etapas. Esse é o projeto que corresponde ao ID do projeto smart home.
  1. No Google Cloud Console, acesse a página Contas de serviço.

    Acesse a página "Contas de serviço".

    Talvez seja necessário selecionar um projeto antes de acessar a página "Contas de serviço".

  2. Clique em Criar conta de serviço.

  3. No campo Nome da conta de serviço, insira um nome.

  4. No campo ID da conta de serviço, insira um ID.

  5. No campo Descrição da conta de serviço, insira uma descrição.

  6. Clique em Criar e continuar.

  7. No menu suspenso Papel, selecione Contas de serviço > Criador do token de identidade do OpenID Connect da conta de serviço.

  8. Clique em Continuar.

  9. Clique em Concluído.

  10. Selecione a conta de serviço que você acabou de criar na lista de contas de serviço e selecione Gerenciar chaves no menu Ações.

  11. Selecione Adicionar chave > Criar nova chave.

  12. Em Tipo de chave, selecione a opção JSON.

  13. Clique em Criar. O download de um arquivo JSON com a chave é feito no computador.

Para instruções detalhadas e informações sobre como criar chaves de conta de serviço, consulte Criar e excluir chaves de conta de serviço no site de ajuda do Google Cloud Console.

Chamar a API

A API Home Graph oferece um endpoint HTTP

  1. Use o arquivo JSON da conta de serviço baixado para criar um token da Web JSON (JWT). Para mais informações, consulte Como autenticar usando uma conta de serviço.
  2. Receba um token de acesso do OAuth 2.0 com o escopo https://www.googleapis.com/auth/homegraph usando oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Crie a solicitação JSON com o agentUserId. Confira um exemplo de solicitação JSON para a sincronização de solicitações:
  5. {
      "agentUserId": "user-123"
    }
  6. Combine o JSON de sincronização de solicitações e o token na sua solicitação HTTP POST com o endpoint do Google Home Graph. Confira um exemplo de como fazer a solicitação na linha de comando usando curl, como teste:
  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"
    

A API Home Graph oferece um endpoint gRPC

  1. Receba a definição do serviço de Buffers de protocolo para a API Home Graph.
  2. Siga a documentação para desenvolvedores do gRPC para gerar stubs de cliente para uma das linguagens compatíveis.
  3. Chame o método RequestSync.

O cliente Node.js das APIs do Google fornece vinculações para a API Home Graph.

  1. Inicialize o serviço google.homegraph usando as credenciais padrão do aplicativo.
  2. Chame o método requestSync com o RequestSyncDevicesRequest. Ele retorna uma Promise com uma RequestSyncDevicesResponse vazia.
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
  }
});
    

A biblioteca de cliente da API HomeGraph para Java fornece vinculações para a API Home Graph.

  1. Inicialize o HomeGraphApiService usando as credenciais padrão do aplicativo.
  2. Chame o método requestSync com o RequestSyncDevicesRequest. Ela retorna um ReportStateAndNotificationResponse vazio.
// 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);
    

Respostas de erro

Você pode receber uma das seguintes respostas de erro ao chamar a sincronização de solicitações. Essas respostas são enviadas na forma de códigos de status HTTP.

  • 400 Bad Request: o servidor não conseguiu processar a solicitação enviada pelo cliente devido a uma sintaxe inválida. As causas comuns incluem JSON malformado ou o uso de null em vez de "" para um valor de string.
  • 403 Forbidden: o servidor não conseguiu processar a solicitação para o agentUserId fornecido devido a um erro ao atualizar o token. Verifique se o endpoint OAuth responde corretamente às solicitações de atualização de token e verifique o status de vinculação da conta do usuário.
  • 404 Not Found: o recurso solicitado não foi encontrado, mas poderá estar disponível no futuro. Isso geralmente significa que a conta do usuário não está vinculada ao Google ou que recebemos um agentUserId inválido. Verifique se o agentUserId corresponde ao valor fornecido na resposta SYNC e se você está processando corretamente as intents DISCONNECT.
  • 429 Too Many Requests: o número máximo de solicitações de sincronização simultâneas foi excedido para o agentUserId fornecido. Um autor da chamada só pode emitir uma solicitação de sincronização simultânea, a menos que a flag async esteja definida como verdadeira.