Akıllı ev İşlemleri için bildirimler

Bildirimler, Cloud-to-cloud entegrasyonunuzun önemli cihaz etkinlikleri veya değişiklikleri hakkında kullanıcılarla iletişim kurmak için Google Assistant kullanmasına olanak tanır. Kullanıcıları zamanında cihaz etkinlikleri (ör. kapıda biri olduğunda) konusunda uyarmak veya istenen bir cihaz durumu değişikliğini (ör. kapı kilidi sürgüsünün başarıyla takılması veya sıkışması) bildirmek için bildirimleri uygulayabilirsiniz.

Cloud-to-cloud entegrasyonunuz, kullanıcılara aşağıdaki bildirim türlerini gönderebilir:

  • Proaktif bildirimler: Kullanıcıyı, cihazlarından önceden herhangi bir kullanıcı isteği olmadan bir smart home cihaz etkinliği (ör. kapı zilinin çalması) hakkında uyarır.

  • Takip yanıtları: Bir cihaz komutu isteğinin başarılı veya başarısız olduğuna dair onay (ör. kapı kilitlenirken). Bu uyarıları, tamamlanması zaman alan cihaz komutları için kullanın. Takip yanıtları yalnızca cihaz komutu istekleri akıllı hoparlörlerden ve akıllı ekranlardan gönderildiğinde desteklenir.

Assistant, bu bildirimleri kullanıcılara akıllı hoparlörlerde ve akıllı ekranlarda duyuru olarak sunar. Proaktif bildirimler varsayılan olarak kapalıdır. Kullanıcılar, Google Home app (GHA)'dan gelen tüm proaktif bildirimleri etkinleştirebilir veya devre dışı bırakabilir.

Bildirimleri tetikleyen etkinlikler

Cihaz etkinlikleri gerçekleştiğinde, yerine getirme işleminiz Google'a bir bildirim isteği gönderir. Cloud-to-cloud entegrasyonunuzun desteklediği cihaz özellikleri, hangi bildirim etkinliği türlerinin kullanılabileceğini ve bu bildirimlere ekleyebileceğiniz verileri belirler.

Aşağıdaki özellikler proaktif bildirimleri destekler:

Özellik Etkinlikler
ObjectDetection Cihaz tarafından algılanan nesneler (ör. kapıda tanınan bir yüz algılandığında). Örneğin: "Aylin ve Bora ön kapıda."
RunCycle Cihaz bir döngüyü tamamladığında. Örneğin: "Çamaşır makinesi döngüsü tamamlandı."
SensorState Cihaz, desteklenen bir sensör durumu algıladığında. Örneğin: "Duman dedektörü duman algıladı."

Aşağıdaki özellikler takip yanıtlarını destekler:

Özellik Etkinlikler
LockUnlock action.devices.commands.LockUnlock cihaz komutunun yürütülmesinin ardından tamamlanma durumu ve durum değişikliği. Örneğin: "Ön kapı kilitlendi" veya "Ön kapı sıkıştı."
NetworkControl action.devices.commands.TestNetworkSpeed cihaz komutunun yürütülmesinin ardından tamamlanma durumu ve durum değişikliği. Örneğin: "Ağ hız testin tamamlandı. Ofis yönlendiricisinin indirme hızı şu anda 80,2 Kb/sn., yükleme hızı ise 9,3 Kb/sn."
OpenClose action.devices.commands.OpenClose cihaz komutunun yürütülmesinin ardından tamamlanma durumu ve durum değişikliği. Örneğin: "Ön kapı açıldı" veya "Ön kapı açılamadı."

Tüm cihaz türleri, geçerli özellikler için bildirimleri destekler.

Buluttan buluta entegrasyonunuz için bildirimler oluşturma

Cloud-to-cloud entegrasyonunuza şu aşamalarda bildirim ekleyin:

  1. Bildirimlerin smart home cihaz uygulamanızda etkinleştirilip etkinleştirilmediğini Google'a bildirin. Kullanıcılar uygulamanızda bildirimleri açar veya kapatırsa cihaz değişikliğini Google'a bildirmek için bir SYNC isteği gönderin.
  2. Bildirim tetikleyen alakalı bir cihaz etkinliği veya durum değişikliği gerçekleştiğinde Report State reportStateAndNotification API'yi çağırarak bildirim isteği gönderin. Cihaz durumu değiştiyse Report State ve bildirim çağrınızda hem durum hem de bildirim yükü gönderebilirsiniz.

Aşağıdaki bölümlerde bu adımlar daha ayrıntılı olarak ele alınmaktadır.

Uygulamanızda bildirimlerin etkin olup olmadığını belirtme

Kullanıcılar, GHA bölümünde bu özelliği etkinleştirerek proaktif bildirimler almak isteyip istemediklerini seçebilir. smart home cihazınızın uygulamasında, kullanıcıların cihazdan gelen bildirimleri açıkça açıp kapatabilme özelliğini de (ör. uygulama ayarlarınızdan) ekleyebilirsiniz.

Cihaz verilerini güncellemek için Request SYNC çağrısı yaparak Google'a cihazınızda bildirimlerin etkinleştirildiğini belirtin. Kullanıcılar uygulamanızda bu ayarı her değiştirdiğinde bu şekilde bir SYNC isteği göndermeniz gerekir.

SYNC yanıtınızda aşağıdaki güncellemelerden birini gönderin:

  • Kullanıcı, cihaz uygulamanızda bildirimleri açıkça etkinleştirdiyse veya açma/kapatma seçeneği sunmuyorsanız devices.notificationSupportedByAgent özelliğini true olarak ayarlayın.
  • Kullanıcı, cihaz uygulamanızda bildirimleri açıkça devre dışı bıraktıysa devices.notificationSupportedByAgent özelliğini false olarak ayarlayın.

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 cihazında bildirimleri tetiklemek için karşılama, Report State ve Notification API çağrısı aracılığıyla Google Home Graph cihazına bir bildirim yükü gönderir.

Google HomeGraph API'yi etkinleştirme

  1. Google Cloud Console içinde HomeGraph API sayfasına gidin.

    HomeGraph API sayfasına gidin
  2. smart home proje kimliğinizle eşleşen projeyi seçin.
  3. ETKİNLEŞTİR'i tıklayın.

Hizmet hesabı anahtarı oluşturma

Google Cloud Console üzerinden hizmet hesabı anahtarı oluşturmak için aşağıdaki talimatları uygulayın:

Not: Bu adımları uygularken doğru GCP projesini kullandığınızdan emin olun. Bu, smart home proje kimliğinizle eşleşen projedir.
  1. Google Cloud Console'nda Hizmet hesapları sayfasına gidin.

    Hizmet Hesapları sayfasına gidin.

    Hizmet Hesapları sayfasına yönlendirilmeden önce bir proje seçmeniz gerekebilir.

  2. Hizmet hesabı oluştur'u tıklayın.

  3. Service account name (Hizmet hesabı adı) alanına bir ad girin.

  4. Hizmet hesabı kimliği alanına bir kimlik girin.

  5. Hizmet hesabı açıklaması alanına bir açıklama girin.

  6. Oluştur ve devam et'i tıklayın.

  7. Role (Rol) açılır menüsünden Service Accounts (Hizmet Hesapları) > Service Account OpenID Connect Identity Token Creator'ı (Hizmet Hesabı OpenID Connect Kimlik Jetonu Oluşturucu) seçin.

  8. Devam'ı tıklayın.

  9. Bitti'yi tıklayın.

  10. Hizmet hesapları listesinden yeni oluşturduğunuz hizmet hesabını seçin ve İşlemler menüsünden Anahtarları yönet'i seçin.

  11. Anahtar ekle > Yeni anahtar oluştur'u seçin.

  12. Anahtar türü için JSON seçeneğini belirleyin.

  13. Oluştur'u tıklayın. Anahtarınızı içeren bir JSON dosyası bilgisayarınıza indirilir.

Hizmet hesabı anahtarları oluşturmayla ilgili ayrıntılı talimatlar ve bilgiler için Google Cloud Console Yardım sitesindeki Hizmet hesabı anahtarları oluşturma ve silme başlıklı makaleyi inceleyin.

Bildirimi gönderme

devices.reportStateAndNotification API'yi kullanarak bildirim isteği çağrısı yapın. JSON isteğinizde, bildirimi tetikleyen etkinlik için platformunuz tarafından oluşturulan benzersiz bir kimlik olan eventId bulunmalıdır. eventId, bildirim isteği gönderdiğiniz her seferde farklı olan rastgele bir kimlik olmalıdır.

API çağrınızda ilettiğiniz notifications nesnesine, bildirimin nasıl sunulması gerektiğini tanımlayan bir priority değeri ekleyin. notifications nesneniz, cihaz özelliğine bağlı olarak farklı alanlar içerebilir.

Yükü ayarlamak ve API'yi çağırmak için aşağıdaki yollardan birini izleyin:

Proaktif bildirim yükü gönderme

API'yi çağırmak için aşağıdaki sekmelerden birindeki seçeneği belirleyin:

HTTP

Home Graph API'si, bir HTTP uç noktası sağlar.

  1. 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.
  2. oauth2l kullanarak https://www.googleapis.com/auth/homegraph kapsamıyla bir OAuth 2.0 erişim jetonu alın:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId ile JSON isteğini oluşturun. Report State ve bildirim için örnek bir JSON isteği:
  5. {
      "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
                }
              }
            }
          }
        }
      }
    }
  6. Google Home Graph uç noktasına gönderdiğiniz HTTP POST isteğinde Report State ve bildirim JSON'u ile jetonu birleştirin. Aşağıda, test amacıyla curl kullanarak komut satırında nasıl istek oluşturulacağına dair bir örnek verilmiştir:
  7. 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'si, gRPC uç noktası sağlar.

  1. Home Graph API'si için protokol arabellekleri hizmet tanımını alın.
  2. Desteklenen dillerden biri için istemci taslakları oluşturmak üzere gRPC geliştirici belgelerini inceleyin.
  3. ReportStateAndNotification yöntemini çağırın.

Node.js

Google API'leri Node.js istemcisi, Home Graph API'si için bağlamalar sağlar.

  1. google.homegraph hizmetini Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak başlatın.
  2. ReportStateAndNotificationRequest ile reportStateAndNotification yöntemini çağırın. ReportStateAndNotificationResponse ile bir Promise 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 istemci kitaplığı, Home Graph API için bağlamalar sağlar.

  1. Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak HomeGraphApiService'ı ilk kullanıma hazırlayın.
  2. ReportStateAndNotificationRequest ile reportStateAndNotification 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, etkinlik hataları için hata kodlarını (varsa) ve EXECUTE intent isteği sırasında sağlanan geçerli followUpToken değerini içerir. followUpToken, geçerli kalması ve yanıtın orijinal istekle doğru şekilde ilişkilendirilmesi için beş dakika içinde kullanılmalıdır.

Aşağıdaki snippet'te, followUpToken alanı içeren örnek bir EXECUTE istek yükü gösterilmektedir.

{
  "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, bildirimi yalnızca kullanıcının başlangıçta etkileşimde bulunduğu cihazda yayınlamak ve kullanıcının tüm cihazlarında yayınlamamak için followUpToken kullanır.

API'yi çağırmak için aşağıdaki sekmelerden birindeki seçeneği belirleyin:

HTTP

Home Graph API'si, bir HTTP uç noktası sağlar.

  1. 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.
  2. oauth2l kullanarak https://www.googleapis.com/auth/homegraph kapsamıyla bir OAuth 2.0 erişim jetonu alın:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId ile JSON isteğini oluşturun. Report State ve bildirim için örnek bir JSON isteği:
  5. {
      "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
                }
              }
            }
          }
        }
      }
    }
  6. Google Home Graph uç noktasına gönderdiğiniz HTTP POST isteğinde Report State ve bildirim JSON'u ile jetonu birleştirin. Aşağıda, test amacıyla curl kullanarak komut satırında nasıl istek oluşturulacağına dair bir örnek verilmiştir:
  7. 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'si, gRPC uç noktası sağlar.

  1. Home Graph API'si için protokol arabellekleri hizmet tanımını alın.
  2. Desteklenen dillerden biri için istemci taslakları oluşturmak üzere gRPC geliştirici belgelerini inceleyin.
  3. ReportStateAndNotification yöntemini çağırın.

Node.js

Google API'leri Node.js İstemcisi, Home Graph API'si için bağlamalar sağlar.

  1. google.homegraph hizmetini Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak başlatın.
  2. ReportStateAndNotificationRequest ile reportStateAndNotification yöntemini çağırın. ReportStateAndNotificationResponse ile bir Promise 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 istemci kitaplığı, Home Graph API için bağlamalar sağlar.

  1. Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak HomeGraphApiService'ı ilk kullanıma hazırlayın.
  2. reportStateAndNotification yöntemini ReportStateAndNotificationRequest ile ç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-to-cloud için Cloud Logging bölümünde açıklandığı gibi olay günlüğünü destekler. Bu günlükler, Action'ınızdaki bildirim kalitesini test etmek ve korumak için kullanışlıdır.

Aşağıda, notificationLog girişinin şeması verilmiştir:

Mülk Açıklama
requestId Bildirim isteği kimliği.
structName Bildirim yapısının adı (ör. "ObjectDetection").
status Bildirimin durumunu gösterir.

status alanı, bildirim yükünde hata olduğunu gösterebilecek çeşitli durumlar içerir. Bunlardan bazıları yalnızca üretime sunulmamış İşlemler'de kullanılabilir.

Örnek durumlar şunlardır:

Durum Açıklama
EVENT_ID_MISSING Zorunlu eventId alanının eksik olduğunu gösterir.
PRIORITY_MISSING 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 gösterir.
NOTIFICATION_ENABLED_BY_USER_FALSE Kullanıcının, GHA uygulamasında bildirim gönderen cihazda bildirimleri etkinleştirmediğini gösterir. Bu durum yalnızca üretime sunulmamış entegrasyonlarda kullanılabilir.
NOTIFYING_DEVICE_NOT_IN_STRUCTURE Kullanıcının, bildirimde bulunan cihazı bir eve/yapıya atamadığını gösterir. Bu durum yalnızca üretime sunulmamış entegrasyonlarda kullanılabilir.

Tüm bildirimler için geçerli olabilecek bu genel durumlara ek olarak status alanı, geçerli olduğu durumlarda özelliğe özgü durumları da (ör. OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING) içerebilir.