إشعارات بشأن إجراءات المنزل المزوّد بأجهزة ذكية

تسمح الإشعارات لعملية دمج Cloud-to-cloud باستخدام Google Assistant للتواصل مع المستخدمين بشأن الأحداث أو التغييرات المهمة المرتبطة بالأجهزة. يمكنك استخدام الإشعارات لتنبيه المستخدمين إلى أحداث الجهاز في الوقت المناسب، على سبيل المثال عندما يكون أحد الأشخاص عند الباب، أو لتسجيل تغيير في حالة الجهاز المطلوبة، مثل عندما يتم تثبيت عرقلة قفل الباب بنجاح أو تعطُّلها.

يمكن أن تؤدي عملية دمج Cloud-to-cloud إلى إرسال الأنواع التالية من الإشعارات إلى المستخدمين:

  • الإشعارات الاستباقية: تنبيه المستخدم بشأن smart home حدث على الجهاز بدون أي طلبات مسبقة من المستخدم على أجهزته، مثل 🔔رنين جرس الباب

  • الاستجابات للمتابعة: تأكيد على نجاح طلب تنفيذ أمر على الجهاز أو تعذُّر تنفيذه، على سبيل المثال عند قفل باب. استخدِم هذه التنبيهات لتلقّي إشعارات بشأن أوامر الجهاز التي تستغرق وقتًا لإكمالها. لا تتوفّر الردود اللاحقة إلا عند إرسال طلبات الأوامر إلى الأجهزة من مكبّرات الصوت الذكية والشاشات الذكية.

Assistant تقدّم هذه الإشعارات للمستخدمين على شكل إشعارات على مكبّرات الصوت والشاشات الذكية. تكون الإشعارات الاستباقية متوقفة تلقائيًا. يمكن للمستخدمين تفعيل جميع الإشعارات الاستباقية أو إيقافها من رمز الإعدادات Google Home app (GHA).

الأحداث التي تؤدي إلى ظهور الإشعارات

عند حدوث أحداث على الجهاز، يُرسِل فريق المعالجة طلب إشعار إلى Google. تحدِّد سمات الجهاز التي يتيح لك تكامل Cloud-to-cloud استخدامها أنواع أحداث الإشعارات المتاحة وال data التي يمكنك تضمينها في هذه الإشعارات.

تتيح السمات التالية الإشعارات الاستباقية:

السمة الفعاليات
ObjectDetection الأجسام التي يرصدها الجهاز، مثل عندما يتم رصد وجه معروف عند الباب على سبيل المثال: "ياسر وهبة عند الباب الأمامي".
RunCycle يُكمل الجهاز دورة. على سبيل المثال: "اكتملت دورة غسالة الملابس."
SensorState يرصد الجهاز حالة جهاز استشعار متوافق. على سبيل المثال: "يرصد كاشف الدخان الدخان".

تتيح السمات التالية الردّ على المتابعة:

السمة الفعاليات
LockUnlock حالة الاكتمال وتغيير الحالة بعد تنفيذ الأمر action.devices.commands.LockUnlock للجهاز على سبيل المثال: "تم قفل الباب الأمامي" أو "الباب الأمامي عالق"
NetworkControl حالة الاكتمال وتغيير الحالة بعد تنفيذ الأمر action.devices.commands.TestNetworkSpeed للجهاز على سبيل المثال: "انتهى اختبار سرعة الشبكة. تبلغ سرعة التنزيل على جهاز التوجيه في المكتب حاليًا 80.2 كيلوبت في الثانية، وسرعة التحميل 9.3 كيلوبت في الثانية".
OpenClose حالة الاكتمال وتغيير الحالة بعد تنفيذ الأمر action.devices.commands.OpenClose للجهاز على سبيل المثال: "تم فتح الباب الأمامي" أو "تعذّر فتح الباب الأمامي"

تتوافق جميع أنواع الأجهزة مع إشعارات السمات السارية.

إنشاء إشعارات لعملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية

أضِف الإشعارات إلى عملية دمج Cloud-to-cloud في هذين المرحلتَين:

  1. أطلِع Google على ما إذا كانت الإشعارات مفعَّلة من تطبيق smart home على الجهاز. إذا فعَّل المستخدمون الإشعارات أو أوقفوها في تطبيقك، أرسِل طلبًا بشأن SYNC لإعلام Google بتغيير الجهاز.
  2. عند حدوث حدث أو تغيير حالة على الجهاز يؤدي إلى إرسال إشعار، أرسِل طلب إشعار من خلال طلب بيانات من واجهة برمجة التطبيقات Report State reportStateAndNotification. إذا اختلفت حالة الجهاز، يمكنك إرسال الحمولة الخاصة بالحالة والإشعار معًا في طلب Report State وطلب الإشعار.

تتناول الأقسام التالية هذه الخطوات بمزيد من التفصيل.

الإشارة إلى ما إذا كانت الإشعارات مفعّلة في تطبيقك

يمكن للمستخدمين اختيار ما إذا كانوا يريدون تلقّي إشعارات استباقية من خلال تفعيل هذه الميزة في GHA. في التطبيق المخصّص لجهاز smart home، يمكنك أيضًا اختياريًا منح المستخدمين إمكانية تفعيل الإشعارات أو إيقافها صراحةً من الجهاز، على سبيل المثال، من إعدادات تطبيقك.

أطلِع Google على أنّ الإشعارات مفعّلة على جهازك من خلال إجراء مكالمة لطلب المزامنة بهدف تعديل بيانات الجهاز. يجب إرسال طلب SYNC مماثل هذا كلما غيّر المستخدمون هذا الإعداد في تطبيقك.

في ردّك على SYNC، أرسِل أحد التعديلات التالية:

  • إذا فعّل المستخدم الإشعارات صراحةً في تطبيق جهازك، أو إذا لم تقدِّم خيارًا للتبديل، اضبط القيمة devices.notificationSupportedByAgent على true.
  • إذا أوقف المستخدم الإشعارات صراحةً في تطبيق جهازك، اضبط القيمة devices.notificationSupportedByAgent على false.

يعرض المقتطف التالي مثالاً على كيفية ضبط استجابة SYNC:

devices: [{
   id: 'device123',
   ...
   notificationSupportedByAgent: true,
}]

إرسال طلبات الإشعارات إلى Google

لعرض الإشعارات على Assistant، تُرسِل عملية المعالجة حمولة إشعار إلى Google Home Graph من خلال Report State وNotification API.

تفعيل Google HomeGraph API

  1. في Google Cloud Console، انتقِل إلى صفحة HomeGraph API.

    الانتقال إلى صفحة HomeGraph API
  2. اختَر المشروع الذي يتطابق مع رقم تعريف مشروعك على smart home.
  3. انقر على تفعيل.

إنشاء مفتاح حساب خدمة

اتّبِع التعليمات التالية لإنشاء مفتاح حساب خدمة من Google Cloud Console:

ملاحظة: تأكَّد من استخدام مشروع Google Cloud Platform الصحيح عند تنفيذ هذه الخطوات. هذا هو المشروع الذي يتطابق مع رقم تعريف مشروعك smart home.
  1. في Google Cloud Console، انتقِل إلى صفحة إنشاء مفتاح حساب خدمة.

    الانتقال إلى صفحة "إنشاء مفتاح حساب الخدمة"
  2. من قائمة حساب الخدمة، اختَر حساب خدمة جديد.
  3. في حقل اسم حساب الخدمة، أدخِل اسمًا.
  4. في الحقل رقم تعريف حساب الخدمة، أدخِل رقم تعريف.
  5. من قائمة الدور، اختَر حسابات الخدمة > صانع رمز مميّز لحساب الخدمة.

  6. بالنسبة إلى نوع المفتاح، اختَر JSON.

  7. انقر على إنشاء. يتم تنزيل ملف JSON يحتوي على مفتاحك على جهاز الكمبيوتر.

إرسال الإشعار

يمكنك إجراء طلب الإشعار باستخدام واجهة برمجة التطبيقات devices.reportStateAndNotification. يجب أن يتضمّن طلب JSON eventId، وهو معرّف فريد تم إنشاؤه من قِبل منصتك للحدث الذي يتسبّب في ظهور الإشعار. يجب أن يكون eventId معرّفًا عشوائيًا يختلف في كل مرة تُرسل فيها طلب إشعار.

في عنصر notifications الذي ترسله في طلب واجهة برمجة التطبيقات، أدرِج قيمة priority التي تحدّد كيفية عرض الإشعار. قد يتضمّن عنصر notifications حقولًا مختلفة حسب سمة الجهاز.

اتّبِع أحد المسارات التالية لضبط الحمولة والاتّصال بواجهة برمجة التطبيقات:

إرسال حمولة إشعار استباقي

لطلب بيانات من واجهة برمجة التطبيقات، اختَر أحد الخيارات من إحدى علامتَي التبويب أدناه:

HTTP

توفّر واجهة برمجة التطبيقات Home Graph نقطة نهاية HTTP.

  1. استخدِم ملف JSON الذي تم تنزيله لحساب الخدمة لإنشاء رمز مميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
  2. احصل على رمز مميز للوصول إلى OAuth 2.0 باستخدام نطاق https://www.googleapis.com/auth/homegraph باستخدام oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. أنشئ طلب JSON باستخدام agentUserId. في ما يلي نموذج طلب JSON لـ Report State والإشعار:
  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. اجمع Report State وNotification JSON والرمز المميّز في طلب HTTP POST لنقطة نهاية Google Home Graph. في ما يلي مثال على كيفية تقديم الطلب في سطر الأوامر باستخدام curl، كمحاولة:
  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 نقطة نهاية gRPC.

  1. احصل على تعريف خدمة بروتوكول Buffers لواجهة برمجة التطبيقات Home Graph.
  2. اتّبِع مستندات مطوّري gRPC لإنشاء طرق كعب العميل لإحدى اللغات المتاحة .
  3. استخدِم الأسلوب ReportStateAndNotification .

Node.js

يقدّم عميل Node.js لـ Google APIs عمليات ربط لواجهة برمجة التطبيقات Home Graph.

  1. اضبط خدمة google.homegraph باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استخدِم الطريقة reportStateAndNotification مع ReportStateAndNotificationRequest. ويعرض Promise مع ReportStateAndNotificationResponse.
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

توفّر مكتبة عميل HomeGraph API للغة Java عمليات ربط لواجهة برمجة التطبيقات Home Graph.

  1. اضبط HomeGraphApiService باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استخدِم الطريقة reportStateAndNotification مع الوسيطة ReportStateAndNotificationRequest. ويعرض ReportStateAndNotificationResponse.
// 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);
    
إرسال حمولة ردّ للمتابعة

تحتوي الحمولة لرسالة المتابعة على حالة الطلب، ورموًع خطأ لحالات تعذُّر الأحداث، إن أمكن، وfollowUpToken الصالح، الذي تم تقديمه أثناء طلب الإجراء EXECUTE. يجب استخدام followUpToken خلال خمس دقائق ليظل صالحًا ولربط الردّ بالطلب الأصلي بشكل صحيح.

يعرض المقتطف التالي مثالاً على الحمولة المطلوبة لطلب EXECUTE باستخدام حقل followUpToken.

{
  "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 الرمز followUpToken لعرض الإشعار على الجهاز الذي كان المستخدم يتفاعل معه في الأصل فقط، ولا يتم بثه على جميع أجهزة المستخدم.

لطلب بيانات من واجهة برمجة التطبيقات، اختَر أحد الخيارات من إحدى علامتَي التبويب أدناه:

HTTP

توفّر واجهة برمجة التطبيقات Home Graph نقطة نهاية HTTP.

  1. استخدِم ملف JSON الذي تم تنزيله لحساب الخدمة لإنشاء رمز مميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
  2. احصل على رمز مميز للوصول إلى OAuth 2.0 باستخدام نطاق https://www.googleapis.com/auth/homegraph باستخدام oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. أنشئ طلب JSON باستخدام agentUserId. في ما يلي نموذج طلب JSON لـ Report State والإشعار:
  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. اجمع Report State وNotification JSON والرمز المميّز في طلب HTTP POST لنقطة نهاية Google Home Graph. في ما يلي مثال على كيفية تقديم الطلب في سطر الأوامر باستخدام curl، كمحاولة:
  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 نقطة نهاية gRPC.

  1. احصل على تعريف خدمة تنسيقات بروتوكول البيانات لواجهة برمجة التطبيقات Home Graph.
  2. اتّبِع مستندات مطوّري gRPC لإنشاء طرق كعب العميل لإحدى اللغات المتوافقة.
  3. استخدِم الطريقة ReportStateAndNotification.

Node.js

يقدّم عميل Node.js لـ Google APIs عمليات ربط لواجهة برمجة التطبيقات Home Graph.

  1. اضبط خدمة google.homegraph باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استخدِم الطريقة reportStateAndNotification مع ReportStateAndNotificationRequest. يتم عرض Promise مع ReportStateAndNotificationResponse.
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

توفّر مكتبة عميل HomeGraph API للغة Java عمليات ربط لواجهة برمجة التطبيقات Home Graph.

  1. شغِّل HomeGraphApiService باستخدام بيانات الاعتماد التلقائية للتطبيق.
  2. استخدِم الوسيطة reportStateAndNotification مع الوسيطة ReportStateAndNotificationRequest. ويعرض الرمز التالي: ReportStateAndNotificationResponse
// 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);
    

التسجيل

تتيح الإشعارات تسجيل الأحداث على النحو الموضّح في مقالة تسجيل الأحداث في السحابة الإلكترونية لعمليات الربط بين خدمات السحابة الإلكترونية. تكون هذه السجلات مفيدة لاختبار جودة الإشعارات والحفاظ عليها في الإجراءات.

في ما يلي مخطّط إدخال notificationLog:

الموقع الوصف
requestId رقم تعريف طلب الإشعار
structName اسم بنية الإشعار، مثل "ObjectDetection"
status يشير إلى حالة الإشعار.

يتضمّن الحقل status حالات مختلفة قد تشير إلى أخطاء في ملف حمولة الإشعار. قد لا تتوفّر بعض هذه الإجراءات إلا في "المهام" التي لم يتم إطلاقها في قناة الإصدار العلني.

تشمل أمثلة الحالات ما يلي:

الحالة الوصف
EVENT_ID_MISSING تشير إلى أنّ حقل eventId المطلوب غير متوفّر.
PRIORITY_MISSING يشير إلى أنّ حقل priority غير متوفّر.
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE يشير إلى أنّ قيمة الخاصية notificationSupportedByAgent للجهاز المُرسِل للإشعارات المقدَّمة في SYNC غير صحيحة.
NOTIFICATION_ENABLED_BY_USER_FALSE يشير ذلك إلى أنّ المستخدم لم يفعِّل الإشعارات على الجهاز المُرسِل للإشعارات في GHA. لا تتوفّر هذه الحالة إلا في عمليات دمج لم يتم إطلاقها في قناة الإصدار العلني.
NOTIFYING_DEVICE_NOT_IN_STRUCTURE يشير ذلك إلى أنّ المستخدم لم يربط الجهاز المُرسِل للإشعارات بأحد المنازل/المباني. لا تتوفّر هذه الحالة إلا في عمليات الدمج التي لم يتم إطلاقها في قناة الإصدار العلني.

بالإضافة إلى هذه الحالات العامة التي يمكن أن تنطبق على جميع الإشعارات، قد يتضمّن الحقل status أيضًا حالات خاصة بالسمات عند الاقتضاء (مثل OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING).