Report State adalah fitur penting yang memungkinkan
Google Home Action melaporkan status terbaru perangkat
pengguna secara proaktif ke Google Home Graph, bukan menunggu intent
QUERY.
Report State melaporkan status perangkat pengguna ke Google
dengan agentUserId yang ditentukan dan terkait dengan perangkat tersebut (dikirim dalam permintaan
SYNC asli). Jika Google Assistant ingin melakukan tindakan
yang memerlukan pemahaman tentang status perangkat saat ini, dapat mencari
informasi status di Home Graph bukan
mengirimkan intent QUERY ke berbagai cloud pihak ketiga sebelum mengirimkan
EXECUTE intent.
Tanpa Report State, jika ada lampu dari beberapa penyedia di
ruang keluarga, perintah Ok Google, cerahkan ruang keluarga memerlukan
penyelesaian beberapa intent QUERY yang dikirim ke beberapa cloud, bukan hanya
mencari nilai kecerahan saat ini berdasarkan apa yang telah
dilaporkan sebelumnya. Untuk memberikan pengalaman pengguna terbaik,
Assistant harus memiliki status perangkat saat ini,
tanpa memerlukan perjalanan pulang pergi ke perangkat.
Setelah SYNC awal untuk perangkat, platform akan mengirimkan intent QUERY
yang mengumpulkan status perangkat untuk mengisi Home Graph.
Setelah itu, Home Graph hanya menyimpan status yang
dikirim dengan Report State.
Saat memanggil Report State, pastikan untuk memberikan data status lengkap
untuk karakteristik tertentu. Home Graph memperbarui status berdasarkan per karakteristik dan menimpa semua data untuk karakteristik tersebut saat panggilan
Report State dilakukan. Misalnya, jika Anda melaporkan
status untuk karakteristik StartStop, payload
harus menyertakan nilai untuk isRunning dan isPaused.
Mulai
Untuk menerapkan Report State, ikuti langkah-langkah berikut:
Mengaktifkan Google HomeGraph API
-
Di Google Cloud Console, buka halaman HomeGraph API.
Buka halaman HomeGraph API - Pilih project yang cocok dengan project ID smart home Anda.
- Klik ENABLE.
Membuat Kunci Akun Layanan
Ikuti petunjuk berikut untuk membuat kunci akun layanan dari Google Cloud Console:
-
Di Google Cloud Console, buka halaman Akun layanan.
Buka halaman Akun Layanan.Anda mungkin perlu memilih project sebelum diarahkan ke halaman Akun Layanan.
Klik Buat akun layanan.
Di kolom Nama akun layanan, masukkan nama.
Di kolom ID akun layanan, masukkan ID.
Di kolom Deskripsi akun layanan, masukkan deskripsi.
Klik Buat dan lanjutkan.
Dari dropdown Peran, pilih Akun Layanan > Pembuat Token Identitas OpenID Connect Akun Layanan.
Klik Lanjutkan.
Klik Selesai.
Pilih akun layanan yang baru saja Anda buat dari daftar akun layanan dan pilih Kelola kunci dari menu Tindakan.
Pilih Tambahkan kunci > Buat kunci baru.
Untuk Jenis kunci, pilih opsi JSON.
Klik Buat. File JSON yang berisi kunci Anda akan didownload ke komputer Anda.
Memanggil API
Pilih opsi dari tab di bawah:
HTTP
Home Graph menyediakan endpoint HTTP
- Gunakan file JSON akun layanan yang didownload untuk membuat Token Web JSON (JWT). Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi Menggunakan Akun Layanan.
- Dapatkan token akses OAuth 2.0 dengan
https://www.googleapis.com/auth/homegraphcakupan menggunakan oauth2l: - Buat permintaan JSON dengan
agentUserId. Berikut adalah contoh permintaan JSON untuk Status Laporan dan Notifikasi: - Gabungkan JSON Status Laporan dan Notifikasi serta token dalam permintaan HTTP POST
permintaan ke endpoint Google Home Graph. Berikut adalah contoh cara
membuat permintaan di command line menggunakan
curl, sebagai pengujian:
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 menyediakan endpoint gRPC
- Dapatkan definisi layanan buffer protokol untuk Home Graph API.
- Ikuti dokumentasi developer gRPC untuk membuat stub klien bagi salah satu bahasa yang didukung.
- Panggil metode ReportStateAndNotification.
Node.js
Google APIs Node.js Client menyediakan binding untuk Home Graph API.
- Lakukan inisialisasi layanan
google.homegraphmenggunakan Kredensial Default Aplikasi. - Panggil metode
reportStateAndNotificationdengan ReportStateAndNotificationRequest. Metode ini akan menampilkanPromisedengan 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
HomeGraph API Client Library untuk Java menyediakan binding untuk Home Graph API.
- Lakukan inisialisasi
HomeGraphApiServicemenggunakan Kredensial Default Aplikasi. - Panggil metode
reportStateAndNotificationdenganReportStateAndNotificationRequest. Metode ini akan menampilkanReportStateAndNotificationResponse.
// 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(); }
Menguji Status Laporan
Agar integrasi Cloud-to-cloud Anda siap untuk sertifikasi, penting untuk menguji Report State.
Untuk melakukannya, sebaiknya gunakan alat Viewer Home Graph, yang merupakan aplikasi web mandiri yang tidak memerlukan download atau deployment.
Dasbor Report State masih tersedia, tetapi tidak digunakan lagi dan tidak lagi didukung.
Dasbor Status Laporan
Prasyarat
Sebelum dapat menguji integrasi Cloud-to-cloud, Anda memerlukan
Kunci Akun Layanan dan agentUserId. Jika Anda sudah memiliki
Kunci Akun Layanan dan agentUserId lihat Men-deploy
Report State Dasbor.
Men-deploy dasbor Status Laporan
Setelah Anda memiliki Kunci Akun Layanan dan ID Pengguna Agen untuk project Anda,
download dan deploy versi terbaru dari
Report State
Dasbor.
Setelah mendownload versi terbaru, ikuti petunjuk dari file README.MD yang disertakan.
Setelah men-deploy dasbor Report State, akses dasbor dari URL berikut (ganti your_project_id dengan project ID Anda):
http://<your-project-id>.appspot.com
Di dasbor, lakukan hal berikut:
- Pilih File Kunci Akun Anda
- Tambahkan agentUserId Anda
Kemudian, klik Daftar.
Semua perangkat Anda akan tercantum. Setelah daftar diisi, Anda dapat menggunakan tombol Muat ulang untuk memperbarui status perangkat. Jika ada perubahan status perangkat, baris akan ditandai dengan warna hijau.
Perbedaan Status Laporan
Akurasi status laporan berbasis kueri mengukur seberapa baik status laporan terbaru untuk perangkat cocok dengan status perangkat saat pengguna membuat kueri untuknya. Nilai ini diharapkan berada pada 99,5%. Untuk mengetahui detail selengkapnya tentang status Akurasi Status Laporan project Anda saat ini, lihat Kesehatan Perangkat - Akurasi status. Anda juga dapat melihat detail Log Perbedaan Status Laporan dari Logs Explorer.
Berikut adalah contoh Log Perbedaan Status Laporan:
{
"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"
}Definisi kolom Log Perbedaan Status Laporan
| Nama Kolom | Definisi |
|---|---|
detailedAccuracyResult |
Ringkasan diagnostik yang menjelaskan perbedaan spesifik antara payload Status Laporan dan respons intent QUERY. |
queriedTime |
Stempel waktu yang tepat saat Google menerima respons QUERY dari penyedia fulfillment. |
reportedTime |
Stempel waktu yang tepat saat notifikasi Status Laporan berhasil diterima oleh Google. |
agentId |
ID unik untuk project Anda (biasanya Project ID di Google Home Developer Console). |
requestId |
ID korelasi unik yang terkait dengan respons intent QUERY tertentu. |
queryReportStateDifferences |
Objek atau daftar yang menandai atribut status perangkat tertentu yang berbeda antara respons QUERY dan data Status Laporan. |
Respons Error
Anda mungkin menerima salah satu respons error berikut saat memanggil Report State. Respons ini berbentuk kode status HTTP.
400 Bad Request (400 Permintaan Tidak Valid)
Server tidak dapat memproses permintaan yang dikirim oleh klien karena
sintaksis tidak valid. Penyebab umumnya mencakup JSON yang tidak lengkap atau menggunakan null dan bukan "" untuk nilai string.
404 Not Found (404 Tidak Ditemukan)
Resource yang diminta tidak dapat ditemukan, tetapi mungkin tersedia di masa mendatang.
Biasanya, hal ini berarti kami tidak dapat menemukan perangkat yang diminta. Hal ini juga dapat berarti bahwa akun pengguna tidak ditautkan dengan Google atau kami menerima agentUserId yang tidak valid. Pastikan agentUserId cocok dengan nilai yang diberikan dalam respons
SYNC Anda, dan Anda menangani intent
DISCONNECT dengan benar.
Jika panggilan ReportState gagal dengan error 404 NOT_FOUND, hal ini menunjukkan
ketidakcocokan sinkronisasi antara cloud Anda dan Home Graph.
Hal ini dapat terjadi jika perangkat dihapus dari Home Graph, atau jika
pengguna membatalkan tautan akunnya.
Untuk menangani error 404 dari Status Laporan, gunakan prosedur berikut:
- Periksa status akun pengguna: Panggil
devices.syncuntukagentUserIdyang menampilkan error 404. Hal ini membantu menentukan apakah error tersebut berlaku untuk seluruh akun pengguna atau perangkat tertentu.- Jika
SYNCmenampilkan error 404, akun pengguna tidak lagi ditautkan dengan Google. Berhenti mengirim Status Laporan dan Sinkronisasi Permintaan untuk perangkat pengguna ini. - Jika
SYNCmenampilkan 200 OK, akun pengguna masih ditautkan, yang berarti error 404 bersifat khusus untuk perangkat.
- Jika
- Rekonsiliasi daftar perangkat: Jika
SYNCmenampilkan 200 OK, Anda harus mengidentifikasi perangkat mana yang tidak lagi dikenal oleh Google. Sebaiknya bandingkan daftar perangkat yang dimiliki Google untuk pengguna dengan database perangkat Anda, dan identifikasi perangkat dalam sistem Anda yang tidak ada dalam daftar Google. Jika perangkat harus disinkronkan ke Google, tetapi belum dibagikan ke Google, gunakanSYNCuntuk memastikan perangkat disinkronkan dengan Google. Jika perangkat harus dibatalkan tautannya dari Google, berhenti melaporkan status untuk perangkat tertentu tersebut dan terus laporkan untuk perangkat valid lainnya di bawahagentUserIdtersebut.
Pelaporan status online dan offline
Saat perangkat offline, Anda harus melaporkan <code{"online": code="" dir="ltr" false}<="" translate="no"> ke Status Laporan dalam waktu lima menit setelah perilaku perangkat. Sebaliknya, saat perangkat kembali ke status online, Anda harus melaporkan <code{"online": code="" dir="ltr" translate="no" true}<=""> ke Status Laporan dalam waktu lima menit setelah perilaku perangkat. Setiap kali perangkat kembali online, partner harus melaporkan semua status perangkat saat ini menggunakan API.reportStateAndNotification
Contoh ini menunjukkan bahwa jenis perangkat light sedang online, dan melaporkan semua status perangkat saat ini.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}