Report State adalah fitur penting yang memungkinkan
Tindakan Google Home melaporkan status terbaru perangkat
pengguna secara proaktif kembali ke Google Home Graph, bukan menunggu intent
QUERY
.
Report State melaporkan status perangkat pengguna ke Google dengan agentUserId
yang ditentukan terkait dengannya (dikirim dalam permintaan SYNC
asli). Saat Google Assistant ingin melakukan tindakan
yang memerlukan pemahaman tentang status perangkat saat ini, Google Assistant cukup mencari
informasi status di Home Graph, bukan
mengirimkan intent QUERY
ke berbagai cloud pihak ketiga sebelum mengirimkan
intent EXECUTE
.
Tanpa Report State, mengingat lampu dari beberapa penyedia di
ruang keluarga, perintah Ok Google, cerahkan ruang keluarga saya memerlukan
penyelesaian beberapa maksud QUERY
yang dikirim ke beberapa cloud, bukan
hanya mencari nilai kecerahan saat ini berdasarkan apa yang telah
dilaporkan sebelumnya. Untuk pengalaman pengguna terbaik, Assistant harus memiliki status perangkat saat ini, tanpa memerlukan perjalanan pulang-pergi ke perangkat.
Setelah SYNC
awal untuk perangkat, platform 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
yang lengkap untuk sifat tertentu. Home Graph memperbarui status berdasarkan per-trait dan menggantikan semua data untuk trait tersebut saat panggilan Report State dilakukan. Misalnya, jika Anda melaporkan
status untuk trait StartStop, payload
harus menyertakan nilai untuk isRunning
dan isPaused
.
Mulai
Untuk menerapkan Report State, ikuti langkah-langkah berikut:
Aktifkan 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 ini untuk membuat kunci akun layanan dari Google Cloud Console:
-
Di Google Cloud Console, buka halaman Service accounts.
Buka halaman Service Accounts.Anda mungkin perlu memilih project sebelum diarahkan ke halaman Akun Layanan.
Klik
Buat akun layanan.Di kolom Nama akun layanan, masukkan nama.
Di kolom Service account ID, masukkan ID.
Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi.
Klik Buat dan lanjutkan.
Dari dropdown Peran, pilih Akun Layanan > Pembuat Token OpenID Connect Identity pada 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 cakupan
https://www.googleapis.com/auth/homegraph
menggunakan oauth2l: - Buat permintaan JSON dengan
agentUserId
. Berikut adalah contoh permintaan JSON untuk Status dan Notifikasi Laporan: - Gabungkan JSON Status Laporan dan Notifikasi serta token dalam permintaan POST
HTTP Anda 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
Klien Node.js Google API menyediakan binding untuk Home Graph API.
- Lakukan inisialisasi layanan
google.homegraph
menggunakan Kredensial Default Aplikasi. - Panggil metode
reportStateAndNotification
dengan ReportStateAndNotificationRequest. Tindakan ini akan menampilkanPromise
dengan 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
Library Klien HomeGraph API untuk Java menyediakan binding untuk Home Graph API.
- Lakukan inisialisasi
HomeGraphApiService
menggunakan Kredensial Default Aplikasi. - Panggil metode
reportStateAndNotification
denganReportStateAndNotificationRequest
. Tindakan 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); }
Menguji Status Laporan
Agar integrasi Cloud-to-cloud Anda siap untuk sertifikasi, penting untuk menguji Report State.
Untuk melakukannya, sebaiknya gunakan alat Penampil Home Graph, yang merupakan aplikasi web mandiri yang tidak memerlukan download atau deployment.
Dasbor Report State masih tersedia, tetapi sudah tidak digunakan lagi dan tidak didukung lagi.
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 Dasbor
Report State.
Men-deploy dasbor Report State
Setelah Anda memiliki Kunci Akun Layanan dan ID Pengguna Agen untuk project Anda, download dan deploy versi terbaru dari Dasbor Report State.
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 dicantumkan. 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%.
Respons Error
Anda mungkin menerima salah satu respons error berikut saat memanggil Report State. Respons ini berupa kode status HTTP.
400 Bad Request
- Server tidak dapat memproses permintaan yang dikirim oleh klien karena sintaksis tidak valid. Penyebab umum mencakup JSON yang salah format atau menggunakannull
, bukan "" untuk nilai string.404 Not Found
- Resource yang diminta tidak dapat ditemukan, tetapi mungkin tersedia pada 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 menerimaagentUserId
yang tidak valid. Pastikan bahwaagentUserId
cocok dengan nilai yang diberikan dalam respons SYNC, dan Anda menangani intent DISCONNECT dengan benar.
Pelaporan status online dan offline
Saat perangkat offline, Anda harus melaporkan <code{"online": code="" dir="ltr" false}<="" translate="no"> ke Report State 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 Report State dalam waktu lima menit setelah perilaku perangkat. Setiap kali perangkat kembali online, partner harus melaporkan semua status perangkat saat ini menggunakanreportStateAndNotification
API.
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": {},
}
}
}