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 têm a agentUserId associados a eles (que você enviada na solicitação SYNC original). Isso permite que você atualize as informações dispositivos sem desvincular e vincular novamente a conta. Todos os usuários vinculados a esta vai 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 atual.
  • Se o usuário renomear um dispositivo existente.
  • Se você implementar um novo tipo de dispositivo, uma nova característica ou adicionar um novo recurso.

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

Criar uma chave de 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 executar estas etapas. Esse é o projeto que corresponde ao ID do seu projeto do smart home.
  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, insira um ID.
  5. Na lista Papel, selecione Contas de serviço > Criador de token da conta de serviço.

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

  7. Clique em Criar. Um arquivo JSON que contém a chave para o seu computador.

Chamar a API

HTTP

A API Home Graph fornece um endpoint HTTP

  1. Use o arquivo JSON da conta de serviço salvo 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 a 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. Este é um exemplo de solicitação JSON para a sincronização de solicitações:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Combinar o JSON de sincronização de solicitação e o token no seu HTTP POST para o endpoint do Google Home Graph. Aqui está um exemplo de como para fazer a solicitação na linha de comando usando curl, conforme um 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 fornece um endpoint gRPC (em inglês).

  1. Confira 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

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

  1. Inicialize o serviço google.homegraph com o Application Default Credentials.
  2. Chame o método requestSync com RequestSyncDevicesRequest. Ele retorna um 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
  }
});
    

Java

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

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

  • 400 Bad Request: não foi possível processar o servidor a solicitação enviada pelo cliente devido a uma sintaxe inválida. Causas comuns incluir JSON incorreto ou usar null em vez de "" para um valor de string.
  • 403 Forbidden: o servidor não conseguiu processar a a solicitação de agentUserId fornecido devido a um erro ao atualizando o token. Verifique se o endpoint OAuth responde corretamente para atualizar as solicitações de token e verificar a vinculação da conta do usuário o status atual da conta.
  • 404 Not Found - O recurso solicitado não pôde ser foram encontradas, mas podem estar disponíveis no futuro. Normalmente, isso significa que a conta do usuário não está vinculada ao Google ou recebemos uma agentUserId: Verifique se o agentUserId corresponde ao valor fornecido no sua resposta SYNC e você estará processamento de intents DISCONNECT.
  • 429 Too Many Requests: número máximo de sincronizações simultâneas solicitações foram excedidas para o agentUserId especificado. O autor da chamada só pode emitir uma solicitação de sincronização simultânea, a menos que o async é definida como verdadeira.