Report State è una funzionalità importante che consente
Home L'azione segnala in modo proattivo lo stato più recente del
il dispositivo dell'utente alla versione Google Home Graph anziché attendere
Intento QUERY
.
Report State segnala a Google gli stati dei dispositivi degli utenti
con i agentUserId
specificati associati (inviati nell'originale
SYNC
). Quando Google Assistant vuole intraprendere un'azione
che richiede la conoscenza dello stato attuale di un dispositivo, può semplicemente
le informazioni sullo stato in Home Graph
dell'emissione di un intent QUERY
a vari cloud di terze parti prima di emettere
Intento EXECUTE
.
Senza Report State, date le luci di più fornitori a
in salotto, il comando Hey Google, illumina il mio salotto richiede
risolvere più intent QUERY
inviati a più cloud, anziché
semplicemente cercando i valori di luminosità correnti in base a ciò che è stato
segnalato in precedenza. Per un'esperienza utente ottimale,
Assistant deve avere lo stato attuale di un dispositivo,
senza richiedere un round trip al dispositivo.
Dopo il valore SYNC
iniziale per un dispositivo, la piattaforma invia un intent QUERY
che raccoglie lo stato del dispositivo per compilare Home Graph.
Dopodiché, Home Graph archivia solo lo stato che
inviato con Report State.
Quando chiami il numero Report State, assicurati di fornire dati
indica i dati per un determinato tratto. Home Graph aggiorna gli stati su un
per tratto e sovrascrive tutti i dati per quel tratto quando
Chiamata Report State effettuata. Ad esempio, se stai segnalando
per il tratto StartStop, il payload
deve includere valori sia per isRunning
che per isPaused
.
Inizia
Per implementare Report State:
Attiva l'API Google HomeGraph
-
In Google Cloud Console, vai alla pagina dell'API HomeGraph.
Vai alla pagina dell'API HomeGraph - Seleziona il progetto che corrisponde al tuo ID progetto smart home.
- Fai clic su ABILITA.
Creare una chiave dell'account di servizio
Segui queste istruzioni per generare una chiave dell'account di servizio dal Google Cloud Console:
-
In Google Cloud Console, vai alla pagina Crea chiave account di servizio.
Vai alla pagina Crea chiave dell'account di servizio - Dall'elenco Account di servizio, seleziona Nuovo account di servizio.
- Nel campo Nome account di servizio, inserisci un nome.
- Nel campo ID account di servizio, inserisci un ID.
Nell'elenco Ruolo, seleziona Account di servizio > Creatore token account di servizio.
In Tipo di chiave, seleziona l'opzione JSON.
- Fai clic su Crea. Un file JSON contenente la chiave vengono scaricati sul computer.
Chiama l'API
Seleziona un'opzione dalle schede seguenti:
HTTP
Home Graph fornisce un endpoint HTTP
- Utilizza il file JSON dell'account di servizio scaricato per creare un file JSON Web token (JWT). Per ulteriori informazioni, vedi Autenticazione con un account di servizio.
- Ottieni un token di accesso OAuth 2.0 con
https://www.googleapis.com/auth/homegraph
ambito utilizzando oauth2l: - Crea la richiesta JSON con
agentUserId
. Ecco un esempio di richiesta JSON per stato del report e notifica: - Combinare il codice JSON dello stato del report e delle notifiche e il token nel file POST HTTP
all'endpoint di Google Home Graph. Ecco un esempio di come
per effettuare la richiesta nella riga di comando utilizzando
curl
, come un test:
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
Home Graph fornisce un endpoint gRPC
- Ottieni la definizione del servizio buffer di protocollo per l'API Home Graph.
- Segui la documentazione per gli sviluppatori gRPC per generare stub client per uno dei lingue supportati.
- Chiama il metodo ReportStateAndNotification.
Node.js
Il client Node.js delle API di Google fornisce associazioni per l'API Home Graph.
- Inizializza il servizio
google.homegraph
utilizzando Credenziali predefinite dell'applicazione. - Chiama il metodo
reportStateAndNotification
con ReportStateAndNotificationRequest. Restituisce un valorePromise
con 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
La libreria client dell'API HomeGraph per Java fornisce associazioni per l'API Home Graph.
- Inizializza
HomeGraphApiService
utilizzando Credenziali predefinite dell'applicazione. - Chiama il metodo
reportStateAndNotification
conReportStateAndNotificationRequest
. Restituisce un valoreReportStateAndNotificationResponse
.
// 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); }
Stato del report di test
Per preparare l'azione per la certificazione, è importante testare Report State.
Per farlo, ti consigliamo di usare lo strumento Visualizzatore Home Graph, che è un'app web autonoma che non richiede né il download né il deployment.
La dashboard Report State è ancora disponibile, ma lo è è deprecata e non più supportata.
Dashboard dello stato dei report
Prerequisiti
Per poter testare l'azione, devi avere il tuo account di servizio
La chiave e il tuo agentUserId
. Se hai già la chiave dell'account di servizio e
agentUserId
consulta Deployment di Report State
di Google Cloud.
Eseguire il deployment della dashboard dello stato del report
Dopo aver ottenuto la chiave dell'account di servizio e l'ID utente agente per il progetto,
scarica ed esegui il deployment della versione più recente
Report State
Dashboard.
Una volta scaricata l'ultima versione, segui le istruzioni nella
ha incluso README.MD
file.
Dopo aver eseguito il deployment della dashboard Report State, accedi la dashboard dal seguente URL (sostituisci your_project_id con il tuo ID progetto):
http://<your-project-id>.appspot.com
Nella dashboard, procedi nel seguente modo:
- Scegli il file della chiave dell'account
- Aggiungi il tuo agentUserId
Poi, fai clic su Elenco.
Sono elencati tutti i tuoi dispositivi. Una volta che l'elenco è compilato, puoi utilizzare il Pulsante Aggiorna per aggiornare gli stati del dispositivo. In caso di modifica dello stato del dispositivo, la riga è evidenziata in verde.
Risposte di errore
Quando chiami, potresti ricevere una delle seguenti risposte di errore Report State. Queste risposte si presentano sotto forma di stato HTTP i codici.
400 Bad Request
- Il server non è riuscito a elaborare la richiesta inviata dal client a causa di una sintassi non valida. Cause comuni includi un file JSON non corretto o utilizzinull
al posto di "" per un valore stringa.404 Not Found
- Impossibile eseguire la risorsa richiesta trovati, ma potrebbero essere disponibili in futuro. In genere, questo significa impossibile trovare il dispositivo richiesto. Potrebbe anche significare che l'account utente non è collegato a Google oppure abbiamo ricevuto un valoreagentUserId
non valido. Assicurati cheagentUserId
corrisponda al valore specificato nei Risposta SYNC: e gestire gli intent DISCONNECT.