Report State è una funzionalità importante che consente all'
Google Home Azione di segnalare in modo proattivo l'ultimo stato del
dispositivo dell'utente a Google Home Graph anziché attendere un
QUERY intent.
Report State segnala a Google gli stati dei dispositivi utente
con il agentUserId specificato associato (inviato nella richiesta originale
SYNC). Quando Google Assistant vuole intraprendere un'azione
che richiede la comprensione dello stato attuale di un dispositivo, può semplicemente cercare
le informazioni sullo stato in Home Graph anziché
emettere un intent QUERY a vari cloud di terze parti prima di emettere l'intent
EXECUTE.
Senza Report State, date le luci di più provider in
un soggiorno, il comando Hey Google, illumina il mio soggiorno richiede
la risoluzione di più intent QUERY inviati a più cloud, anziché
semplicemente cercare i valori di luminosità attuali in base a quanto è 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 la SYNC iniziale per un dispositivo, la piattaforma invia un intent QUERY
che raccoglie lo stato del dispositivo per popolare Home Graph.
A questo punto, Home Graph memorizza solo lo stato che viene
inviato con Report State.
Quando chiami Report State, assicurati di fornire dati di stato completi
per un determinato tratto. Home Graph aggiorna gli stati in base ai
tratti e sovrascrive tutti i dati per quel tratto quando viene effettuata una
Report State chiamata. Ad esempio, se stai segnalando
lo stato per il tratto StartStop, il payload
deve includere valori sia per isRunning sia per isPaused.
Inizia
Per implementare Report State:
Abilita l'API Google HomeGraph
-
Nella Google Cloud Console, vai alla pagina dell'API HomeGraph.
Vai alla pagina dell'API HomeGraph - Seleziona il progetto che corrisponde all'ID progetto smart home.
- Fai clic su ABILITA.
Crea una chiave dell'account di servizio
Segui queste istruzioni per generare una chiave dell'account di servizio da Google Cloud Console:
-
Nella Google Cloud Console, vai alla pagina Account di servizio.
Vai alla pagina Account di servizio.Prima di accedere alla pagina Account di servizio, potrebbe essere necessario selezionare un progetto.
Fai clic su Crea account di servizio.
Nel campo Nome account di servizio, inserisci un nome.
Nel campo ID account di servizio, inserisci un ID.
Nel campo Descrizione account di servizio, inserisci una descrizione.
Fai clic su Crea e continua.
Dal menu a discesa Ruolo, seleziona Account di servizio > Service Account OpenID Connect Identity Token Creator.
Fai clic su Continua.
Fai clic su Fine.
Seleziona l'account di servizio che hai appena creato dall'elenco degli account di servizio e seleziona Gestisci chiavi dal menu Azioni.
Seleziona Aggiungi chiave > Crea nuova chiave.
In Tipo di chiave, seleziona l'opzione JSON.
Fai clic su Crea. Un file JSON contenente la chiave viene scaricato sul computer.
Chiama l'API
Seleziona un'opzione dalle schede di seguito:
HTTP
Il Home Graph fornisce un endpoint HTTP
- Utilizza il file JSON dell'account di servizio scaricato per creare un JSON Web Token (JWT). Per ulteriori informazioni, consulta Autenticazione tramite un account di servizio.
- Ottieni un token di accesso OAuth 2.0 con l'
https://www.googleapis.com/auth/homegraphambito utilizzando oauth2l: - Crea la richiesta JSON con
agentUserId. Ecco una richiesta JSON di esempio per Report State e Notifica: - Combina il JSON di Report State e Notifica e il token nella richiesta POST HTTP
all'endpoint Google Home Graph. Ecco un esempio di come
effettuare la richiesta nella riga di comando utilizzando
curl, a scopo di 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
Il Home Graph fornisce un endpoint gRPC
- Ottieni la definizione del servizio dei buffer di protocollo per l'API Home Graph.
- Segui la documentazione per gli sviluppatori di gRPC per generare stub client per una delle lingue supportate.
- 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.homegraphutilizzando le Credenziali predefinite dell'applicazione. - Chiama il
reportStateAndNotificationmetodo con il ReportStateAndNotificationRequest. Restituisce unPromisecon il 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
HomeGraphApiServiceutilizzando le Credenziali predefinite dell'applicazione. - Chiama il
reportStateAndNotificationmetodo con ilReportStateAndNotificationRequest. Restituisce unReportStateAndNotificationResponse.
// 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).execute(); }
Testa Report State
Per preparare l'integrazione Cloud-to-cloud per la certificazione, è importante testare Report State.
A questo scopo, ti consigliamo di utilizzare lo strumento Viewer Home Graph, un'app web autonoma che non richiede download o deployment.
La dashboard Report State è ancora disponibile, ma è stata ritirata e non è più supportata.
Dashboard Report State
Prerequisiti
Prima di poter testare l'integrazione Cloud-to-cloud, devi avere
la chiave dell'account di servizio e il tuo agentUserId. Se hai già la chiave dell'account di servizio e agentUserId consulta Eseguire il deployment della
Report State dashboard.
Esegui il deployment della dashboard Report State
Dopo aver ottenuto la chiave dell'account di servizio e l'ID utente dell'agente per il tuo progetto,
scarica ed esegui il deployment dell'ultima versione da
Report State
Dashboard.
Una volta scaricata l'ultima versione, segui le istruzioni riportate nel file README.MD incluso.
Dopo aver eseguito il deployment della dashboard Report State, accedi alla dashboard dall'URL seguente (sostituisci your_project_id con l'ID progetto):
http://<your-project-id>.appspot.com
Nella dashboard:
- Scegli il file della chiave dell'account
- Aggiungi l'agentUserId
Quindi, fai clic su Elenca.
Vengono elencati tutti i tuoi dispositivi. Una volta compilato l'elenco, puoi utilizzare il pulsante Aggiorna per aggiornare gli stati dei dispositivi. Se lo stato di un dispositivo cambia, la riga viene evidenziata in verde.
Discrepanza di Report State
L'accuratezza dello stato del report basata sulle query misura la corrispondenza tra l'ultimo stato del report di un dispositivo e lo stato del dispositivo quando un utente esegue una query. Questo valore dovrebbe essere pari al 99,5%. Per maggiori dettagli sullo stato attuale dell' accuratezza di Report State del tuo progetto, consulta Integrità del dispositivo - Accuratezza dello stato. Puoi anche visualizzare i dettagli del log delle discrepanze di Report State da Esplora log.
Ecco un esempio di log delle discrepanze di Report State:
{
"insertId": "abcdefgh",
"jsonPayload": {
"reportStateLog": {
"result": "INACCURATE",
"detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_INACCURATE",
"isOffline": false,
"queriedTime": "2026-01-17T03:22:01.732938Z",
"reportedTime": "2024-11-30T15:24:34.052751Z",
"agentId": "google-smart-home-agent-id-example",
"requestId": "84920571364829501736",
"queryReportStateDifferences": {
"queryState": "on_off \t {\n on: true\n}\n",
"reportState": "on_off \t {\n on: false\n}\n"
},
"traitName": "TRAIT_ON_OFF",
"snapshotTime": "2026-01-17T03:22:01.732938Z",
"isMissingField": false,
"deviceType": "action.devices.types.OUTLET",
"stateName": "on",
"deviceId": "sample-device-id",
"accuracy": "INACCURATE"
}
},
"resource": {
"type": "assistant_action_project",
"labels": {
"project_id": "google-smart-home-agent-id-example"
}
},
"timestamp": "2026-01-17T07:16:13.712708257Z",
"severity": "ERROR",
"logName": "projects/google-smart-home-agent-id-example/logs/assistant_smarthome%2Fassistant_smarthome_logs",
"receiveTimestamp": "2026-01-17T07:16:13.712708257Z"
}Definizioni dei campi del log delle discrepanze di Report State
| Nome campo | Definizione |
|---|---|
detailedAccuracyResult |
Un riepilogo diagnostico che spiega la discrepanza specifica tra il payload di Report State e la risposta dell'intent QUERY. |
queriedTime |
Il timestamp preciso in cui Google ha ricevuto la risposta QUERY dal fornitore di fulfillment. |
reportedTime |
Il timestamp preciso in cui Google ha ricevuto correttamente la notifica di Report State. |
agentId |
L'identificatore univoco del tuo progetto (in genere l'ID progetto nella Google Home Developer Console). |
requestId |
L'ID di correlazione univoco associato alla risposta dell'intent QUERY specifica. |
queryReportStateDifferences |
Un oggetto o un elenco che evidenzia gli attributi dello stato del dispositivo specifici che differiscono tra la risposta QUERY e i dati di Report State. |
Risposte di errore
Quando chiami Report State, potresti ricevere una delle seguenti risposte di errore. Queste risposte sono sotto forma di codici di stato HTTP.
richiesta non valida (400)
Il server non è riuscito a elaborare la richiesta inviata dal client a causa di
sintassi non valida. Le cause comuni includono JSON non valido o l'utilizzo di null anziché "" per un valore stringa.
404: non trovato
Impossibile trovare la risorsa richiesta, ma potrebbe essere disponibile in futuro.
In genere, significa che non riusciamo a trovare il dispositivo richiesto. Potrebbe anche significare che l'account utente non è collegato a Google o che abbiamo ricevuto un agentUserId non valido. Assicurati che il agentUserId corrisponda al valore fornito nella risposta
SYNC e che gestisci correttamente gli intent
DISCONNECT.
Quando una chiamata ReportState non riesce con un errore 404 NOT_FOUND, indica una
mancata corrispondenza di sincronizzazione tra il tuo cloud e Home Graph.
Questo può accadere se un dispositivo viene rimosso da Home Graph o se
un utente dissocia il suo account.
Per gestire gli errori 404 di Report State, segui questa procedura:
- Controlla lo stato dell'account utente: chiama
devices.syncper ilagentUserIdche ha restituito un errore 404. In questo modo puoi determinare se l'errore riguarda l'intero account utente o un dispositivo specifico.- Se
SYNCrestituisce un errore 404, l'account utente non è più collegato a Google. Interrompi l'invio di Report State e Request Sync per i dispositivi di questo utente. - Se
SYNCrestituisce 200 OK, l'account utente è ancora collegato, il che significa che l'errore 404 è specifico del dispositivo.
- Se
- Riconcilia l'elenco dei dispositivi: se
SYNCrestituisce 200 OK, devi identificare i dispositivi che non sono più noti a Google. Ti consigliamo di confrontare l'elenco dei dispositivi che Google ha per l'utente con il tuo database dei dispositivi e identificare i dispositivi nel tuo sistema che non sono presenti nell'elenco di Google. Se un dispositivo deve essere sincronizzato con Google, ma non è ancora condiviso con Google, utilizzaSYNCper assicurarti che il dispositivo sia sincronizzato con Google. Se un dispositivo deve essere dissociato da Google, interrompi la segnalazione dello stato per quel dispositivo specifico e continua a segnalare gli altri dispositivi validi con quell'agentUserId.
Segnalazione dello stato online e offline
Quando un dispositivo è offline, devi segnalare <code{"online": code="" dir="ltr" false}<="" translate="no"> a Report State entro cinque minuti dal comportamento del dispositivo. Al contrario, quando un dispositivo torna online, devi segnalare <code{"online": code="" dir="ltr" translate="no" true}<=""> a Report State entro cinque minuti dal comportamento del dispositivo. Ogni volta che un dispositivo torna online, il partner deve segnalare tutti gli stati attuali del dispositivo utilizzando l'reportStateAndNotification API.
Questo esempio mostra che un tipo di dispositivo light è online e segnala tutti gli stati attuali del dispositivo.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}