Notifikasi memungkinkan integrasi Cloud-to-cloud Anda menggunakan Google Assistant untuk berkomunikasi dengan pengguna tentang peristiwa atau perubahan penting terkait perangkat. Anda dapat menerapkan notifikasi untuk memberi tahu pengguna tentang peristiwa perangkat yang tepat waktu, misalnya saat seseorang berada di depan pintu, atau untuk melaporkan perubahan status perangkat yang diminta, seperti saat baut kunci pintu berhasil dipasang atau macet.
Integrasi Cloud-to-cloud Anda dapat mengirimkan jenis notifikasi berikut kepada pengguna:
Notifikasi proaktif: Memberi tahu pengguna tentang smart home peristiwa perangkat tanpa permintaan pengguna sebelumnya ke perangkat mereka, seperti bel pintu berdering.
Respons lanjutan: Konfirmasi bahwa permintaan perintah perangkat berhasil atau gagal, misalnya saat mengunci pintu. Gunakan pemberitahuan ini untuk perintah perangkat yang memerlukan waktu untuk diselesaikan. Respons lanjutan hanya didukung saat permintaan perintah perangkat dikirim dari speaker smart dan layar smart.
Assistant memberikan notifikasi ini kepada pengguna sebagai pengumuman di speaker smart dan layar smart. Notifikasi proaktif dinonaktifkan secara default. Pengguna dapat mengaktifkan atau menonaktifkan semua notifikasi proaktif dari Google Home app (GHA).
Peristiwa yang memicu notifikasi
Saat peristiwa perangkat terjadi, pemenuhan Anda akan mengirim permintaan notifikasi ke Google. Trait perangkat yang didukung oleh integrasi Cloud-to-cloud Anda menentukan jenis peristiwa notifikasi yang tersedia dan data yang dapat Anda sertakan dalam notifikasi tersebut.
Ciri berikut mendukung notifikasi proaktif:
Ciri | Acara |
---|---|
ObjectDetection | Objek yang terdeteksi oleh perangkat, seperti saat wajah yang dikenali terdeteksi di pintu. Misalnya: "Alice dan Bob ada di pintu depan." |
RunCycle | Perangkat menyelesaikan siklus. Misalnya: "Siklus mesin cuci telah selesai." |
SensorState | Perangkat mendeteksi status sensor yang didukung. Misalnya: "Pendeteksi asap mendeteksi asap." |
Ciri berikut mendukung respons lanjutan:
Ciri | Acara |
---|---|
LockUnlock | Status penyelesaian dan perubahan status setelah eksekusi perintah perangkat
action.devices.commands.LockUnlock . Misalnya: "Pintu depan sudah dikunci" atau "Pintu depan macet".
|
NetworkControl | Status penyelesaian dan perubahan status setelah eksekusi perintah perangkat
action.devices.commands.TestNetworkSpeed . Misalnya: "Uji kecepatan jaringan Anda sudah selesai. Kecepatan download di router kantor saat ini adalah 80,2 Kbps, dan kecepatan uploadnya adalah 9,3 Kbps."
|
OpenClose | Status penyelesaian dan perubahan status setelah eksekusi perintah perangkat
action.devices.commands.OpenClose . Misalnya: "Pintu depan telah terbuka" atau "Pintu depan tidak dapat
dibuka."
|
Semua jenis perangkat mendukung notifikasi untuk trait yang berlaku.
Membangun notifikasi untuk integrasi Cloud-to-cloud
Tambahkan notifikasi ke integrasi Cloud-to-cloud Anda pada tahap berikut:
- Tunjukkan kepada Google apakah notifikasi diaktifkan dari aplikasi perangkat smart home Anda. Jika pengguna mengaktifkan atau menonaktifkan notifikasi di aplikasi Anda, kirim permintaan
SYNC
untuk memberi tahu Google tentang perubahan perangkat. - Saat peristiwa perangkat atau perubahan status yang relevan terjadi dan memicu notifikasi, kirim permintaan notifikasi dengan memanggil Report State
reportStateAndNotification
API. Jika status perangkat berubah, Anda dapat mengirimkan payload status dan notifikasi bersama-sama dalam panggilan Report State dan Notifikasi.
Bagian berikut akan membahas langkah-langkah ini secara lebih detail.
Menunjukkan apakah notifikasi diaktifkan di aplikasi Anda
Pengguna dapat memilih apakah mereka ingin menerima notifikasi proaktif dengan mengaktifkan fitur ini di GHA. Di aplikasi untuk perangkat smart home, Anda juga dapat menambahkan kemampuan bagi pengguna untuk mengaktifkan/menonaktifkan notifikasi dari perangkat secara eksplisit, misalnya, dari setelan aplikasi Anda.
Tunjukkan kepada Google bahwa notifikasi diaktifkan untuk perangkat Anda dengan melakukan panggilan
Request SYNC
untuk memperbarui data perangkat. Anda harus mengirim permintaan SYNC
seperti ini setiap kali
pengguna mengubah setelan ini di aplikasi Anda.
Dalam respons SYNC
, kirim salah satu info terbaru berikut:
- Jika pengguna secara eksplisit mengaktifkan notifikasi di aplikasi perangkat Anda, atau jika Anda tidak menyediakan opsi tombol, tetapkan properti
devices.notificationSupportedByAgent
ketrue
. - Jika pengguna secara eksplisit menonaktifkan notifikasi di aplikasi perangkat Anda, tetapkan properti
devices.notificationSupportedByAgent
kefalse
.
Cuplikan berikut menunjukkan contoh cara menyetel respons SYNC Anda:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
Mengirim permintaan notifikasi ke Google
Untuk memicu notifikasi di Assistant, pemenuhan Anda mengirimkan payload notifikasi ke Google Home Graph melalui panggilan Report State dan Notification API.
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 Continue.
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.
Mengirim notifikasi
Lakukan panggilan permintaan notifikasi menggunakan
devices.reportStateAndNotification
API.
Permintaan JSON Anda harus menyertakan eventId
, yang merupakan ID unik yang dibuat oleh platform Anda untuk peristiwa yang memicu notifikasi. eventId
harus berupa ID acak yang berbeda setiap kali Anda mengirim permintaan notifikasi.
Di objek notifications
yang Anda teruskan dalam panggilan API, sertakan nilai
priority
yang menentukan cara menampilkan notifikasi. Objek
notifications
Anda dapat menyertakan kolom yang berbeda, bergantung pada sifat perangkat.
Ikuti salah satu jalur ini untuk menyetel payload dan memanggil API:
Mengirim payload notifikasi proaktif
Untuk memanggil API, pilih opsi dari salah satu tab berikut:
HTTP
Home Graph API 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 Report State dan Notifikasi: - Gabungkan Report State dan JSON Notifikasi serta token dalam permintaan
HTTP POST 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
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "ObjectDetection": { "priority": 0, "detectionTimestamp": 1534875126750, "objects": { "named": [ "Alice" ], "unclassified": 2 } } } } } } }
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
API 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', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { ObjectDetection: { priority: 0, detectionTimestamp: 1534875126750, objects: { named: ['Alice'], unclassified: 2 } } } } } } } });
Java
Library Klien HomeGraph API untuk Java menyediakan binding untuk API Home Graph.
- 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 notification payload. Map<?, ?> notifications = Map.of( "ObjectDetection", Map.of( "priority", 0, "detectionTimestamp", 1534875126, "objects", Map.of("named", List.of("Alice"), "unclassifed", 2))); // Send notification. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", notifications)))); homegraphService.devices().reportStateAndNotification(request);
Mengirim payload respons lanjutan
Payload untuk respons lanjutan berisi status permintaan, kode error untuk kegagalan peristiwa, jika berlaku, dan followUpToken
yang valid, yang diberikan selama permintaan intent EXECUTE
. followUpToken
harus digunakan dalam waktu lima menit agar tetap valid dan untuk mengaitkan respons dengan benar dengan permintaan asli.
Cuplikan berikut menunjukkan contoh payload permintaan EXECUTE
dengan kolom
followUpToken
.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123", }], "execution": [{ "command": "action.devices.commands.TestNetworkSpeed", "params": { "testDownloadSpeed": true, "testUploadSpeed": false, "followUpToken": "PLACEHOLDER" } }] }] } }] };
Google menggunakan followUpToken
untuk menampilkan notifikasi hanya di perangkat yang awalnya digunakan pengguna untuk berinteraksi, dan tidak menyiarkannya ke semua perangkat pengguna.
Untuk memanggil API, pilih opsi dari salah satu tab berikut:
HTTP
Home Graph API 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 Report State dan Notifikasi: - Gabungkan Report State dan JSON Notifikasi serta token dalam permintaan
HTTP POST 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
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "NetworkControl": { "priority": 0, "followUpResponse": { "status": "SUCCESS", "followUpToken": "PLACEHOLDER", "networkDownloadSpeedMbps": 23.3, "networkUploadSpeedMbps": 10.2 } } } } } } }
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
API 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 followUpToken = executionRequest.inputs[0].payload.commands[0].execution[0].params.followUpToken; 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', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { NetworkControl: { priority: 0, followUpResponse: { status: 'SUCCESS', followUpToken, networkDownloadSpeedMbps: 23.3, networkUploadSpeedMbps: 10.2, } } } } } } } });
Java
Library Klien HomeGraph API untuk Java menyediakan binding untuk API Home Graph.
- Lakukan inisialisasi
HomeGraphApiService
menggunakan Kredensial Default Aplikasi - Panggil metode
reportStateAndNotification
denganReportStateAndNotificationRequest
. Metode ini 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(); // Extract follow-up token. ExecuteRequest.Inputs executeInputs = (Inputs) executeRequest.getInputs()[0]; String followUpToken = (String) executeInputs .getPayload() .getCommands()[0] .getExecution()[0] .getParams() .get("followUpToken"); // Build device follow-up response payload. Map<?, ?> followUpResponse = Map.of( "NetworkControl", Map.of( "priority", 0, "followUpResponse", Map.of( "status", "SUCCESS", "followUpToken", followUpToken, "networkDownloadSpeedMbps", 23.3, "networkUploadSpeedMbps", 10.2))); // Send follow-up response. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", followUpResponse)))); homegraphService.devices().reportStateAndNotification(request);
Logging
Notifikasi mendukung pencatatan peristiwa seperti yang diuraikan dalam Cloud Logging untuk Cloud-to-Cloud. Log ini berguna untuk menguji dan menjaga kualitas notifikasi dalam Tindakan Anda.
Berikut adalah skema entri notificationLog
:
Properti | Deskripsi |
---|---|
requestId |
ID permintaan notifikasi. |
structName |
Nama struct notifikasi, seperti "ObjectDetection". |
status |
Menunjukkan status notifikasi. |
Kolom status
mencakup berbagai status yang dapat menunjukkan error dalam payload notifikasi. Beberapa di antaranya mungkin hanya tersedia di Tindakan yang belum diluncurkan ke produksi.
Contoh status mencakup:
Status | Deskripsi |
---|---|
EVENT_ID_MISSING |
Menunjukkan bahwa kolom eventId yang wajib diisi tidak ada.
|
PRIORITY_MISSING |
Menunjukkan bahwa kolom priority tidak ada.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
Menunjukkan bahwa properti
notificationSupportedByAgent perangkat pemberi notifikasi yang diberikan di
SYNC adalah salah (false).
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
Menunjukkan bahwa pengguna belum mengaktifkan notifikasi di perangkat yang mengirim notifikasi dalam GHA. Status ini hanya tersedia di integrasi yang belum diluncurkan ke produksi. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
Menunjukkan bahwa pengguna belum menetapkan perangkat pemberi notifikasi ke Rumah/Struktur. Status ini hanya tersedia di integrasi yang belum diluncurkan ke produksi. |
Selain status umum yang dapat berlaku untuk semua notifikasi ini, kolom
status
juga dapat menyertakan status khusus sifat jika berlaku (misalnya, OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING
).