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 SYNC original). Isso permite que você atualize os dispositivos dos usuários
sem desvincular e vincular a conta novamente. 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
-
No Google Cloud Console, acesse a página API HomeGraph.
Acessar a página da API HomeGraph - Selecione o projeto que corresponde ao ID do projeto smart home.
- 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:
-
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" - Na lista Conta de serviço, selecione Nova conta de serviço.
- No campo Nome da conta de serviço, insira um nome.
- No campo ID da conta de serviço, insira um ID.
Na lista Papel, selecione Contas de serviço > Criador de token de conta de serviço.
Em Tipo de chave, selecione a opção JSON.
- 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
- 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.
- Receba um token de acesso do OAuth 2.0 com o
escopo
https://www.googleapis.com/auth/homegraph
usando oauth2l: - Crie a solicitação JSON com o
agentUserId
. Confira um exemplo de solicitação JSON para a sincronização de solicitações: - 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:
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
A API Home Graph oferece um endpoint gRPC
- Receba a definição do serviço de Buffers de protocolo para a API Home Graph.
- Siga a documentação para desenvolvedores do gRPC para gerar stubs de cliente para uma das linguagens compatíveis.
- Chame o método RequestSync.
Node.js
O cliente Node.js das APIs do Google fornece vinculações para a API Home Graph.
- Inicialize o serviço
google.homegraph
usando as credenciais padrão do aplicativo. - Chame o método
requestSync
com o RequestSyncDevicesRequest. Ele retorna umaPromise
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 para a API Home Graph.
- Inicialize o
HomeGraphApiService
usando as credenciais padrão do aplicativo. - Chame o método
requestSync
com oRequestSyncDevicesRequest
. Ele retorna umReportStateAndNotificationResponse
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 denull
em vez de "" para um valor de string.403 Forbidden
: o servidor não conseguiu processar a solicitação para oagentUserId
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 umagentUserId
inválido. Verifique se oagentUserId
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 oagentUserId
fornecido. Um autor da chamada só pode emitir uma solicitação de sincronização simultânea, a menos que a flagasync
esteja definida como verdadeira.