Report State é um recurso importante que permite que a
ação Home informe proativamente o status mais recente do
dispositivo do usuário até
Google Home Graph
rather than waiting for a
QUERY
intent.
Report State informa ao Google os estados dos dispositivos de usuário
com o agentUserId
especificado associado a eles (enviados na solicitação
original SYNC
). Quando
Google Assistant
wants to take an action
that requires understanding the current state of a device, it can simply look
up the state information in the
Home Graph instead
of issuing a QUERY
intent to various third-party clouds prior to issuing the
EXECUTE
intent.
Sem
Report State, usando luzes de vários provedores em
uma sala de estar, o comando Ok Google, ilumine minha sala de estar exige
a resolução de várias intents QUERY
enviadas para várias nuvens, em vez de
simplesmente procurar os valores de brilho atuais com base no que foi
informado anteriormente. Para ter a melhor experiência do usuário,
Assistant precisa ter o estado atual de um dispositivo,
sem precisar de um trajeto de ida e volta.
Após a SYNC
inicial de um dispositivo, a plataforma envia uma intent QUERY
que coleta o estado do dispositivo para preencher
Home Graph.
Depois disso,
Home Graph armazena somente o estado
enviado com
Report State.
Ao chamar
Report State, forneça dados de estado
completos para uma determinada característica.
Home Graph atualiza os estados por
característica e substitui todos os dados dessa característica quando uma
chamada Report State é feita. Por exemplo, se você estiver informando
o estado da característica StartStop, o payload
precisará incluir valores para isRunning
e isPaused
.
Começar
Para implementar Report State, siga estas etapas:
Ativar a API Google HomeGraph
-
No Google Cloud Console , go to the HomeGraph API page.
Acessar a página da API HomeGraph - Selecione o projeto que corresponde ao seu smart home project ID.
- Clique em ATIVAR.
Criar uma chave de conta de serviço
Siga estas instruções para gerar uma chave de conta de serviço no Google Cloud Console:
-
Em 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, digite um ID.
Na lista Papel, selecione Contas de serviço > Criador do token da 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 vai ser feito no computador.
Chamar a API
Selecione uma opção nas guias abaixo:
HTTP
O Home Graph fornece um endpoint HTTP
- 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.
- Consiga 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
agentUserId
. Veja um exemplo de solicitação JSON para estado e notificação do relatório: - Combine o estado do relatório e o JSON de notificação e o token na solicitação POST HTTP
para o endpoint do gráfico do Google Home. Veja 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
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
O Home Graph fornece um endpoint do gRPC
- Encontre a definição de serviço dos buffers de protocolo para a API Home Graph.
- Siga a documentação do desenvolvedor do gRPC para gerar stubs de cliente para uma das linguagens compatíveis.
- Chame o método ReportStateAndNotification.
Node.js
O cliente de APIs do Google para Node.js fornece vinculações para a API Home Graph.
- Inicialize o serviço do
google.homegraph
usando o Application Default Credentials. - Chame o método
reportStateAndNotification
com o ReportStateAndNotificationRequest. Ele retorna umPromise
com o ReportStateAndNotificationResponse.
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { states: { "PLACEHOLDER-DEVICE-ID": { on: true } } } } } });
Java
A biblioteca de cliente da API HomeGraph para Java fornece vinculações para a API Home Graph.
- Inicialize o
HomeGraphApiService
usando o Application Default Credentials. - Chame o método
reportStateAndNotification
com oReportStateAndNotificationRequest
. Ela retorna umReportStateAndNotificationResponse
.
// 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(); // Build device state payload. Map<?, ?> states = Map.of("on", true); // Report device state. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states)))); homegraphService.devices().reportStateAndNotification(request); }
Estado do relatório de teste
Para preparar sua ação para a certificação, é importante testar Report State.
Para fazer isso, recomendamos o uso da ferramenta Leitor do Home Graph, que é um app da Web independente que não requer download ou implantação.
O Painel Report State ainda está disponível, mas foi descontinuado e não é mais compatível.
Painel de estado do relatório
Pré-requisitos
Para testar a ação, você precisa da chave da conta de serviço e do agentUserId
. Se você já tiver a chave da conta de serviço e agentUserId
, consulte Implantar o painel do Report State.
Implantar o painel de estado do relatório
Depois de definir a chave da conta de serviço e o ID do usuário do agente para seu projeto,
faça o download e implante a versão mais recente no
Painel do Report State.
Depois de fazer o download da versão mais recente, siga as instruções do
arquivo README.MD
incluído.
Depois de implantar o painel Report State, acesse o painel pelo URL a seguir (substitua your_project_id pelo ID do projeto):
http://<your-project-id>.appspot.com
No painel, faça o seguinte:
- Escolha o arquivo da chave da conta
- Adicionar seu userUserId
Em seguida, clique em Lista.
Todos os seus dispositivos estão listados. Depois que a lista for preenchida, você poderá usar o botão Atualizar para atualizar os estados do dispositivo. Se houver uma mudança de estado do dispositivo, a linha vai ser destacada em verde.
Respostas de erro
É possível que você receba uma das seguintes respostas de erro ao chamar Report State. Essas respostas vêm 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 usandonull
em vez de "" para um valor de string.404 Not Found
: o recurso solicitado não foi encontrado, mas poderá estar disponível no futuro. Normalmente, isso significa que não encontramos o dispositivo solicitado. Isso também pode significar que a conta de usuário não está vinculada ao Google ou que recebemos umagentUserId
inválido. Verifique seagentUserId
corresponde ao valor fornecido na resposta de SYNC e se você está processando corretamente as intents DISCONNECT.