Report State, Google 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, kullanıcı cihazlarının durumlarını Google'a bildirir. Bu cihazlarla ilişkili belirtilen agentUserId
(orijinal SYNC
isteğinde gönderilir) de bildirilir. 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 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 gönderilen durumu depolar.
Report State işlevini çağırırken belirli bir özellik için eksiksiz durum verileri 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'te 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ü için 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ına sahip bir OAuth 2.0 erişim jetonu edinin: 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 için protokol arabellekleri hizmet tanımını alın.
- 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'si 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
Cloud-to-cloud entegrasyonunuzu sertifika almaya hazır hale getirmek için Report State'yi 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 ancak kullanımdan kaldırıldığı için artık desteklenmemektedir.
Rapor Durumu Kontrol Paneli
Ön koşullar
Cloud-to-cloud entegrasyonunuzu test edebilmek için Hizmet Hesabı Anahtarınız ve agentUserId
'ınız olmalıdır. Hizmet Hesabı Anahtarınız ve agentUserId
varsa 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ında yer alan talimatları uygulayın.
Report State kontrol panelini dağıttıktan sonra aşağıdaki URL'den kontrol paneline erişin (your_project_id 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şil renkle vurgulanır.
Hata Yanıtları
Report State çağrısı yaparken aşağıdaki hata yanıtlarından birini alabilirsiniz. Bu yanıtlar HTTP durum kodları biçimindedir.
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, SYNC yanıtınızda sağlanan değerle eşleştiğinden ve DISCONNECT intent'lerini doğru şekilde işlediğinizden emin olun.