Bildirimler, smart home İşleminizin kullanmasına olanak tanır Kullanıcılarla önemli konular hakkında iletişim kurmak için Google Assistant ilişkili etkinlikler veya değişiklikler olabilir. Dikkat çekmek için Cihaz etkinliklerine zamanında ulaşması (örneğin, birisi kapıya geldiğinde veya istenen bir cihaz durumu değişikliğini (ör. kapı kilit sürgüsünün başarılı bir şekilde devre dışı bırakılmış veya kilitlenmiş.
smart home İşleminiz aşağıdaki türleri gönderebilir kullanıcılara bildirim gönderme:
Proaktif bildirimler: Kullanıcıyı smart home konusunda uyarır herhangi bir kullanıcı talebi olmadan cihaz etkinliği (örneğin, kapı zili çalıyor.
Takip yanıtları: Bir cihaz komut isteğinin onayı (örneğin, kapı kilitlendiğinde) başarılı veya başarısız olur. Bu uyarıları şunlar için kullanın: komut satırı oluşturmayı deneyin. Yanıt yanıtları Akıllı hoparlörlerden ve akıllı cihazlardan cihaz komutu istekleri gönderildiğinde desteklenir görüntüler.
Assistant, bu bildirimleri kullanıcılara şu şekilde sağlar: duyurulardan ve duyurulardan haberdar olun. Proaktif bildirimler varsayılan olarak devre dışıdır. Kullanıcılar, tüm proaktif bildirimleri şuradan açabilir veya kapatabilirler: Google Home app (GHA).
Bildirimleri tetikleyen etkinlikler
Cihaz etkinlikleri gerçekleştiğinde İşlem karşılama ayarınız bir bildirim isteği gönderir Google'a otomatik olarak gönderin. smart home işleminizin cihaz özellikleri desteği, ne tür bildirim etkinliklerinin kullanılabilir olduğunu belirler ve pek çok veri vardır.
Aşağıdaki özellikler proaktif bildirimleri destekler:
Özellik | Etkinlikler |
---|---|
ObjectDetection | Cihaz tarafından algılanan nesneler; örneğin, tanınan bir yüz kapıda algılandı. Örneğin: "Ali ve Bora ön kapıda." |
RunCycle | Cihaz bir döngüyü tamamlar. Örneğin: "Çamaşır makinesi devri tamamlandı." |
SensorState | Cihaz, desteklenen bir sensör durumu algıladı. Örnek: "Duman dedektörü duman algıladı." |
Aşağıdaki özellikler takip yanıtlarını destekler:
Özellik | Etkinlikler |
---|---|
LockUnlock | Tamamlandıktan sonra tamamlanma durumu ve durum değişikliği
action.devices.commands.LockUnlock cihaz komutu. Örneğin,
örnek: "Ön kapı kilitlendi" veya "Ön kapı sıkışmış."
|
NetworkControl | Tamamlandıktan sonra tamamlanma durumu ve durum değişikliği
action.devices.commands.TestNetworkSpeed cihaz komutu. Örneğin,
örnek: "Ağ hız testiniz tamamlandı. İndirme hızı şurada:
ofis yönlendiricisi şu anda 80,2 Kb/sn., yükleme hızı ise 9,3 Kb/sn."
|
OpenClose | Tamamlandıktan sonra tamamlanma durumu ve durum değişikliği
action.devices.commands.OpenClose cihaz komutu. Örneğin,
örnek: "Ön kapı açıldı" veya "Ön kapı açılamadı."
|
Tüm cihaz türleri, geçerli özelliklerle ilgili bildirimleri destekler.
Akıllı ev işleminiz için bildirimler oluşturma
smart home İşleminize şu aşamalarda bildirim ekleyin:
- Cihazınızdan bildirimlerin etkinleştirilip etkinleştirilmediğini Google'a bildirin
smart home cihaz uygulaması. Kullanıcıların bildirimleri etkinleştirmesi veya devre dışı bırakması
uygulamanızda, cihaz değişikliğini Google'a bildirmek için bir
SYNC
isteği gönderin. - Cihazda bir etkinliği veya durumu tetikleyen alakalı bir cihaz etkinliği veya
bildirimi almak için
Report State
reportStateAndNotification
API. Öğe cihaz durumu değiştiyse hem durum hem de bildirim yükü gönderebilirsiniz Report State ve Bildirim çağrınızda birlikte kullanın.
Aşağıdaki bölümlerde bu adımlar daha ayrıntılı olarak ele alınmaktadır.
Uygulamanızda bildirimlerin etkinleştirilip etkinleştirilmediğini belirtin
Kullanıcılar, proaktif bildirim almak isteyip istemediklerini Bu özelliği GHA üzerinden etkinleştirebilirsiniz. Cihazınızda smart home kullanıyorsanız kullanıcıların cihazdan gelen bildirimleri açıkça değiştirmelerini (örneğin, Ayarlar'ı tıklayın.
Request SYNC çağrısı
cihaz verilerini güncellemek için. Her zaman bunun gibi bir SYNC
isteği göndermelisiniz
Kullanıcılar uygulamanızda bu ayarı değiştirdiğinde.
SYNC
yanıtınızda şu güncellemelerden birini gönderin:
- Kullanıcı, cihaz uygulamanızda bildirimleri açıkça açtıysa veya
açma/kapatma seçeneği yoksa
devices.notificationSupportedByAgent
mülktrue
öğesine. - Kullanıcı, cihaz uygulamanızda bildirimleri açıkça kapattıysa
devices.notificationSupportedByAgent
mülkfalse
öğesine.
Aşağıdaki snippet'te SYNC yanıtınızı nasıl ayarlayacağınıza dair bir örnek gösterilmektedir:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
Google'a bildirim istekleri gönderme
Assistant uygulamasında bildirimleri tetiklemek için sipariş karşılama, Google Home Graph cihazına bir bildirim yükü gönderir. Report State ve Notification API çağrısı ile.
Google HomeGraph API'yi etkinleştirme
-
Google Cloud Console uygulamasında HomeGraph API sayfasına gidin.
HomeGraph API sayfasına gidin - smart home proje kimliğinizle eşleşen projeyi seçin.
- ETKİNLEŞTİR'i tıklayın.
Hizmet Hesabı Anahtarı Oluşturma
Google Cloud Console öğesinden bir hizmet hesabı anahtarı oluşturmak için şu talimatları uygulayın:
-
Google Cloud Console sayfasında Hizmet hesabı anahtarı oluştur sayfasına gidin.
Hizmet Hesabı Anahtarı Oluşturma sayfasına git - Hizmet hesabı listesinden Yeni hizmet hesabı.
- Hizmet hesabı adı alanına bir ad girin.
- Hizmet hesabı kimliği alanına bir kimlik girin.
Role (Rol) listesinden Service Accounts (Hizmet Hesapları) > Hizmet Hesabı Jetonu Oluşturucu.
Anahtar türü olarak JSON seçeneğini belirleyin.
- Oluştur'u tıklayın. Anahtarınızı içeren bir JSON dosyası bilgisayarınıza indirilir.
Bildirimi gönder
Bildirim isteği çağrısını
devices.reportStateAndNotification
API.
JSON isteğiniz, eventId
tarafından oluşturulan benzersiz bir kimlik olan
bildirimi tetikleyen etkinlik için platformunuza. eventId
her bildirim isteği gönderdiğinizde farklı olan rastgele bir kimlik olmalıdır.
API çağrınızda ilettiğiniz notifications
nesnesine bir
Bildirimin nasıl sunulması gerektiğini tanımlayan priority
değeri. Sizin
notifications
nesnesi, cihaza bağlı olarak farklı alanlar içerebilir
çok önemlidir.
Yükü ayarlamak ve API'yi çağırmak için aşağıdaki yollardan birini izleyin:
Proaktif bildirim yükü gönder
API'yi çağırmak için aşağıdaki sekmelerin birinden bir seçenek belirleyin:
HTTP
Home Graph API, bir HTTP uç noktası sağlar
- JSON Web oluşturmak için indirilen hizmet hesabı JSON dosyasını kullanın Jeton (JWT). Daha fazla bilgi için bkz. Hizmet Hesabı Kullanarak Kimlik Doğrulama.
- Mevcut bir OAuth 2.0 erişim jetonu almak için
https://www.googleapis.com/auth/homegraph
kapsamı kullanılıyor oauth2l: agentUserId
ile JSON isteğini oluşturun. Aşağıda, Report State ve Bildirim için örnek bir JSON isteği verilmiştir:- HTTP POST'unuzda Report State ile Notification JSON'u ve jetonu birleştirin
isteği gönderir. Medya etkinliği ölçüm araçlarının
komut satırında isteği
curl
kullanarak yapmak için test:
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
Home Graph API, gRPC uç noktası
- Home Graph API'sinin protokol arabellekleri hizmeti tanımını alın.
- Desteklenen dillerden biri için istemci saplaması oluşturmak üzere gRPC geliştirici belgelerini izleyin.
- ReportStateAndNotification yöntemini çağırın.
Node.js
Google API'leri Node.js İstemcisi Home Graph API için bağlamalar sağlar.
- Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak
google.homegraph
hizmetini başlatın. - ReportStateAndNotificationRequest ile
reportStateAndNotification
yöntemini çağırın. ReportStateAndNotificationResponse ile birPromise
döndürür.
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
Java için HomeGraph API İstemci Kitaplığı, Home Graph API için bağlamalar sağlar.
- Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak
HomeGraphApiService
'ı başlatın. ReportStateAndNotificationRequest
ilereportStateAndNotification
yöntemini çağırın.ReportStateAndNotificationResponse
döndürür.
// 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);
Takip yanıtı yükü gönderme
Takip yanıtının yükü, isteğin durumunu, hatayı
etkinlik hataları için kodları (varsa) ve geçerli followUpToken
,
EXECUTE
intent isteği sırasında sağlanır. followUpToken
kullanılmalıdır
geçerli kalmasını sağlamak ve yanıtı doğru şekilde ilişkilendirmek için beş dakika
değiştirmelisiniz.
Aşağıdaki snippet'te bir EXECUTE
istek yükü için
followUpToken
alanı.
{ "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, bildirim çıkışını yalnızca cihazda yapmak için followUpToken
özelliğini kullanır
kullanıcı ilk olarak etkileşimde bulunmuş ve
cihazlar.
API'yi çağırmak için aşağıdaki sekmelerin birinden bir seçenek belirleyin:
HTTP
Home Graph API, bir HTTP uç noktası sağlar
- JSON Web oluşturmak için indirilen hizmet hesabı JSON dosyasını kullanın Jeton (JWT). Daha fazla bilgi için bkz. Hizmet Hesabı Kullanarak Kimlik Doğrulama.
- Mevcut bir OAuth 2.0 erişim jetonu almak için
https://www.googleapis.com/auth/homegraph
kapsamı kullanılıyor oauth2l: agentUserId
ile JSON isteğini oluşturun. Aşağıda, Report State ve Bildirim için örnek bir JSON isteği verilmiştir:- HTTP POST'unuzda Report State ile Notification JSON'u ve jetonu birleştirin
isteği gönderir. Medya etkinliği ölçüm araçlarının
komut satırında isteği
curl
kullanarak yapmak için test:
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
Home Graph API, bir gRPC uç noktası sağlar
- Home Graph API'sinin protokol arabellekleri hizmeti tanımını alın.
- Desteklenen dillerden biri için istemci saplaması oluşturmak üzere gRPC geliştirici belgelerini izleyin.
- ReportStateAndNotification yöntemini çağırın.
Node.js
Google API'leri Node.js İstemcisi Home Graph API için bağlamalar sağlar.
- Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak
google.homegraph
hizmetini başlatın. - ReportStateAndNotificationRequest ile
reportStateAndNotification
yöntemini çağırın. ReportStateAndNotificationResponse ile birPromise
döndürür.
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
Java için HomeGraph API İstemci Kitaplığı, Home Graph API için bağlamalar sağlar.
- Application Default Credentials (Uygulama Varsayılan Kimlik Bilgilerini) kullanarak
HomeGraphApiService
hizmetini başlatın. ReportStateAndNotificationRequest
ilereportStateAndNotification
yöntemini çağırın.ReportStateAndNotificationResponse
döndürür.
// 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);
Günlük Kaydı
Bildirimler, Cloud Logging ile etkinlik günlüklerine erişme başlıklı makalede özetlendiği şekilde etkinlik günlük kaydını destekler. Bu günlükler, belirli bir süre içinde bildirim kalitesini test etmek İşleminiz.
Aşağıda, bir notificationLog
girişinin şeması bulunmaktadır:
Özellik | Açıklama |
---|---|
requestId |
Bildirim isteği kimliği. |
structName |
Bildirim yapısının adı (ör. "ObjectDetection"). |
status |
Bildirimin durumunu belirtir. |
status
alanı,
bildirim yükü. Bunlardan bazıları yalnızca
üretime sunulmamıştır.
Durumlara örnek olarak şunlar verilebilir:
Durum | Açıklama |
---|---|
EVENT_ID_MISSING |
Zorunlu eventId alanının eksik olduğunu gösterir.
|
PRIORITY_MISSING |
Bir priority alanının eksik olduğunu gösterir.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
Bildirimde bulunan cihazın, SYNC içinde sağlanan notificationSupportedByAgent özelliğinin yanlış olduğunu belirtir.
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
Kullanıcının GHA içindeki bildirim cihazında bildirimleri etkinleştirmediğini belirtir. Bu durum yalnızca üretime sunulmamış İşlemlerde kullanılabilir. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
Kullanıcının bildirim cihazını bir ev/yapıya atamadığını gösterir. Bu durum yalnızca üretime sunulmamış İşlemlerde kullanılabilir. |
Tüm bildirimler için geçerli olan bu genel durumların yanı sıra status
alanı, geçerli olduğu durumlarda özelliğe özgü durumlar da içerebilir (ör. OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING
).