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

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:

  1. 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.
  2. 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ülk true öğesine.
  • Kullanıcı, cihaz uygulamanızda bildirimleri açıkça kapattıysa devices.notificationSupportedByAgent mülk false öğ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

  1. Google Cloud Console uygulamasında 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 öğesinden bir hizmet hesabı anahtarı oluşturmak için şu talimatları uygulayın:

Not: Gerçekleştirme sırasında doğru GCP projesini kullandığınızdan emin olun bu adımları uygulayın. Bu, smart home proje kimliğinizle eşleşen projedir.
  1. Google Cloud Console sayfasında Hizmet hesabı anahtarı oluştur sayfasına gidin.

    Hizmet Hesabı Anahtarı Oluşturma sayfasına git
  2. Hizmet hesabı listesinden Yeni hizmet hesabı.
  3. Hizmet hesabı adı alanına bir ad girin.
  4. Hizmet hesabı kimliği alanına bir kimlik girin.
  5. Role (Rol) listesinden Service Accounts (Hizmet Hesapları) > Hizmet Hesabı Jetonu Oluşturucu.

  6. Anahtar türü olarak JSON seçeneğini belirleyin.

  7. 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

  1. 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.
  2. Mevcut bir OAuth 2.0 erişim jetonu almak için https://www.googleapis.com/auth/homegraph kapsamı kullanılıyor oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId ile JSON isteğini oluşturun. Aşağıda, Report State ve Bildirim için örnek bir JSON isteği verilmiştir:
  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. 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:
  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, gRPC uç noktası

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

Node.js

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

  1. Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak google.homegraph hizmetini 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 İstemci Kitaplığı, Home Graph API için bağlamalar sağlar.

  1. Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak HomeGraphApiService'ı başlatı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, 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

  1. 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.
  2. Mevcut bir OAuth 2.0 erişim jetonu almak için https://www.googleapis.com/auth/homegraph kapsamı kullanılıyor oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId ile JSON isteğini oluşturun. Aşağıda, Report State ve Bildirim için örnek bir JSON isteği verilmiştir:
  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. 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:
  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, bir gRPC uç noktası sağlar

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

Node.js

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

  1. Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak google.homegraph hizmetini 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 İstemci Kitaplığı, Home Graph API için bağlamalar sağlar.

  1. Application Default Credentials (Uygulama Varsayılan Kimlik Bilgilerini) kullanarak HomeGraphApiService hizmetini başlatı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();

// 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).