Solicitar sincronização

{/0}

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

É necessário acionar uma solicitação SYNC:

  • Se o usuário adicionar um novo dispositivo.
  • Se o usuário remover um dispositivo existente.
  • Se o usuário renomear um dispositivo existente.
  • Se você implementar um novo tipo de dispositivo, traço ou adicionar um novo recurso.

Começar

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 smart home do seu projeto.
  3. Clique em ATIVAR.

Criar uma chave da conta de serviço

Siga estas instruções para gerar uma chave da 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 smart home do seu projeto.
  1. No Google Cloud Console, acesse a página Criar chave da conta de serviço.

    Acessar página "Criar chave da conta de serviço"
  2. Na lista Conta de serviço, selecione Nova 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, digite um ID.
  5. Na lista Papel, selecione Contas de serviço > Criador do token da conta de serviço.

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

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

Chamar a API

HTTP

A API Home Graph oferece um endpoint HTTP

  1. Use o arquivo JSON da conta de serviço salva para criar um JSON Web Token (JWT). Para mais informações, consulte Como autenticar usando uma conta de serviço.
  2. Consiga 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 agentUserId. Veja um exemplo de solicitação JSON para o Request Sync:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Combine o JSON do Request Sync e o token na solicitação POST HTTP com o endpoint do Google Home Graph. Veja 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"
    

gRPC

A API Home Graph oferece um endpoint gRPC

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

Node.js

As Google APIs Node.js Client fornecem vinculações para a API Home Graph.

  1. Inicialize o serviço do google.homegraph usando o Application Default Credentials.
  2. Chame o método requestSync com RequestSyncDevicesRequest. Ele retorna um Promise com um RequestSyncDevicesResponse vazio.
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

A biblioteca de cliente da API HomeGraph para Java fornece vinculações para a API do gráfico do Google Home.

  1. Inicialize o HomeGraphApiService usando o Application Default Credentials.
  2. Chame o método requestSync com RequestSyncDevicesRequest. Ele 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 o Request Sync. Essas respostas vêm na forma de códigos de status HTTP.

  • 400 Bad Request: o servidor não pôde processar a solicitação enviada pelo cliente devido a 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 pôde processar a solicitação para um determinado agentUserId devido a um erro ao atualizar o token. Verifique se o endpoint do OAuth responde corretamente para atualizar as solicitações de token e verificar o status da vinculação da conta do usuário.
  • 404 Not Found: o recurso solicitado não foi encontrado, mas pode estar disponível no futuro. Normalmente, isso significa que a conta de usuário não está vinculada ao Google ou recebemos um agentUserId inválido. Verifique se agentUserId corresponde ao valor fornecido na resposta de SYNC e se você está processando corretamente os intents DISCONNECT.
  • 429 Too Many Requests: o número máximo de solicitações de sincronização simultâneas foi excedido para o agentUserId especificado. O autor da chamada pode emitir apenas uma solicitação de sincronização simultânea, a menos que a sinalização async esteja definida como verdadeira.