Report State, Home işleminin QUERY
intent'i beklemek yerine kullanıcının cihazının son durumunu proaktif olarak Google Home Graph'ye bildirmesini sağlayan önemli bir özelliktir.
Report State, ilişkili agentUserId
ile kullanıcı cihazlarının durumunu Google'a bildirir (orijinal SYNC
isteğinde gönderilir). Google Assistant, bir cihazın mevcut durumunu anlama gerektiren bir işlem yapmak istediğinde EXECUTE
intent'ini göndermeden önce çeşitli üçüncü taraf bulutlarına QUERY
intent'i göndermek yerine Home Graph'te durum bilgilerini arayabilir.
Report State olmadan, bir oturma odasında birden fazla sağlayıcıdan ışık verildiğinde Ok Google, oturma odamın ışığını aç komutu, daha önce bildirilenlere göre mevcut parlaklık değerlerini aramak yerine birden fazla buluta gönderilen birden fazla QUERY
intent'inin çözülmesini gerektirir. En iyi kullanıcı deneyimi için Assistant'ün, cihaza gidip gelme gerektirmeden cihazın mevcut durumunu bilmesi gerekir.
Bir cihaz için ilk SYNC
'ten sonra platform, Home Graph'yi doldurmak üzere cihazın durumunu toplayan bir QUERY
intent'i gönderir.
Bu noktadan sonra Home Graph yalnızca Report State ile birlikte gönderilen durumu depolar.
Report State öğesini çağırırken belirli bir özellik için tam durum verilerini sağladığınızdan emin olun. Home Graph, durumları özellik bazında günceller ve Report State çağrısı yapıldığında ilgili özelliğin tüm verilerinin üzerine yazar. Örneğin, StartStop özelliğinin durumunu bildiriyorsanız yükün hem isRunning
hem de isPaused
değerlerini içermesi gerekir.
Başlayın
Report State özelliğini uygulamak için aşağıdaki adımları uygulayın:
Google HomeGraph API'yi etkinleştirme
-
Google Cloud Console sayfası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'ten hizmet hesabı anahtarı oluşturmak için aşağıdaki talimatları uygulayın:
-
Google Cloud Console sayfasında Hizmet hesabı anahtarı oluştur sayfasına gidin.
Hizmet Hesabı Anahtarı Oluştur sayfasına gidin. - Hizmet hesabı listesinden Yeni hizmet hesabı'nı seçin.
- Hizmet hesabı adı alanına bir ad girin.
- Hizmet hesabı kimliği alanına bir kimlik girin.
Rol listesinde Hizmet Hesapları > Hizmet Hesabı Jetonu Oluşturucusu'nu seçin.
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.
API'yi çağırma
Aşağıdaki sekmelerden bir seçenek belirleyin:
HTTP
Home Graph, HTTP uç noktası sağlar.
- JSON Web Token (JWT) oluşturmak için indirilen hizmet hesabı JSON dosyasını kullanın. Daha fazla bilgi için Hizmet Hesabı Kullanarak Kimlik Doğrulama başlıklı makaleyi inceleyin.
- oauth2l kullanarak
https://www.googleapis.com/auth/homegraph
kapsamıyla bir OAuth 2.0 erişim jetonu alın: agentUserId
ile JSON isteğini oluşturun. Rapor Durumu ve Bildirim için örnek bir JSON isteği:- Google Home Graph uç noktasına gönderdiğiniz HTTP POST isteğinizde Rapor Durumu ve Bildirim JSON'unu ve jetonu birleştirin. Aşağıda, test amacıyla
curl
kullanarak komut satırında isteği nasıl yapacağınıza dair bir örnek verilmiştir:
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, gRPC uç noktası sağlar.
- Home Graph API'nin protokol arabellekleri hizmeti tanımını öğrenin.
- Desteklenen dillerden biri için istemci saplamaları oluşturmak üzere gRPC geliştirici belgelerini uygulayın.
- ReportStateAndNotification yöntemini çağırın.
Node.js
Google API'leri Node.js İstemcisi Home Graph API için bağlamalar sağlar.
- Uygulama Varsayılan Kimlik Bilgileri'ni 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', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { states: { "PLACEHOLDER-DEVICE-ID": { on: true } } } } } });
Java
Java için HomeGraph API İstemci Kitaplığı, HomeGraph API için bağlamalar sağlar.
- Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak
HomeGraphApiService
'i başlatın. ReportStateAndNotificationRequest
ilereportStateAndNotification
yöntemini çağırın. BirReportStateAndNotificationResponse
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 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); }
Test Raporu Durumu
İşleminizin sertifika almaya hazır olması için Report State değerini test etmeniz önemlidir.
Bunu yapmak için indirme veya dağıtma gerektirmeyen bağımsız bir web uygulaması olan Home Graph Görüntüleyici aracını kullanmanızı öneririz.
Report State Kontrol Paneli hâlâ kullanılabilir olsa da kullanımdan kaldırılmıştır ve artık desteklenmemektedir.
Rapor Durumu Kontrol Paneli
Ön koşullar
İşleminizi test edebilmek için Hizmet Hesabı Anahtarınız ve agentUserId
'niz olmalıdır. Hizmet Hesabı Anahtarınız varsa ve agentUserId
Report State Kontrol Paneli'ni dağıtma başlıklı makaleyi inceleyin.
Rapor Durumu kontrol panelini dağıtma
Projeniz için hizmet hesabı anahtarını ve temsilci kullanıcı kimliğini aldıktan sonra Report State
Kontrol panelinden en son sürümü indirip dağıtın.
En son sürümü indirdikten sonra, ekteki README.MD
dosyasındaki talimatları uygulayın.
Report State kontrol panelini dağıttıktan sonra aşağıdaki URL'den kontrol paneline erişin (proje_kimliğiniz yerine proje kimliğinizi yazın):
http://<your-project-id>.appspot.com
Kontrol panelinde aşağıdakileri yapın:
- Hesap anahtar dosyanızı seçin
- agentUserId değerinizi ekleyin
Ardından Liste'yi tıklayın.
Tüm cihazlarınız listelenir. Liste doldurulduktan sonra cihaz durumlarını güncellemek için Yenile düğmesini kullanabilirsiniz. Cihaz durumunda değişiklik varsa satır yeşille vurgulanır.
Hata Yanıtları
Report State'ü çağırırken aşağıdaki hata yanıtlarından birini alabilirsiniz. Bu yanıtlar, HTTP durum kodları biçiminde gelir.
400 Bad Request
: Sunucu, geçersiz söz dizimi nedeniyle istemci tarafından gönderilen isteği işleyemedi. Yaygın nedenler arasında hatalı biçimlendirilmiş JSON veya dize değeri için "" yerinenull
kullanılması yer alır.404 Not Found
: İstenen kaynak bulunamadı ancak gelecekte kullanılabilir. Bu genellikle istenen cihazı bulamadığımız anlamına gelir. Bu durum, kullanıcı hesabının Google'a bağlı olmadığı veya geçersiz biragentUserId
aldığımız anlamına da gelebilir.agentUserId
değerinin SENKRONİZE yanıtınızda sağlanan değerle eşleştiğinden ve DISCONNECT amaçlarını düzgün bir şekilde yönettiğinizden emin olun.