تسمح الإشعارات لعملية دمج 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 في هذين المرحلتَين:
- أطلِع Google على ما إذا كانت الإشعارات مفعَّلة من تطبيق
smart home على الجهاز. إذا فعَّل المستخدمون الإشعارات أو أوقفوها
في تطبيقك، أرسِل طلبًا بشأن
SYNC
لإعلام Google بتغيير الجهاز. - عند حدوث حدث أو تغيير حالة على الجهاز يؤدي إلى إرسال
إشعار، أرسِل طلب إشعار من خلال طلب بيانات من واجهة برمجة التطبيقات
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
-
في Google Cloud Console، انتقِل إلى صفحة HomeGraph API.
الانتقال إلى صفحة HomeGraph API - اختَر المشروع الذي يتطابق مع رقم تعريف مشروعك على smart home.
- انقر على تفعيل.
إنشاء مفتاح حساب خدمة
اتّبِع التعليمات التالية لإنشاء مفتاح حساب خدمة من Google Cloud Console:
-
في Google Cloud Console، انتقِل إلى صفحة إنشاء مفتاح حساب خدمة.
الانتقال إلى صفحة "إنشاء مفتاح حساب الخدمة" - من قائمة حساب الخدمة، اختَر حساب خدمة جديد.
- في حقل اسم حساب الخدمة، أدخِل اسمًا.
- في الحقل رقم تعريف حساب الخدمة، أدخِل رقم تعريف.
من قائمة الدور، اختَر حسابات الخدمة > صانع رمز مميّز لحساب الخدمة.
بالنسبة إلى نوع المفتاح، اختَر JSON.
- انقر على إنشاء. يتم تنزيل ملف JSON يحتوي على مفتاحك على جهاز الكمبيوتر.
إرسال الإشعار
يمكنك إجراء طلب الإشعار باستخدام واجهة برمجة التطبيقات
devices.reportStateAndNotification
.
يجب أن يتضمّن طلب JSON eventId
، وهو معرّف فريد تم إنشاؤه من قِبل منصتك للحدث الذي يتسبّب في ظهور الإشعار. يجب أن يكون eventId
معرّفًا عشوائيًا يختلف في كل مرة تُرسل فيها طلب إشعار.
في عنصر notifications
الذي ترسله في طلب واجهة برمجة التطبيقات، أدرِج قيمة
priority
التي تحدّد كيفية عرض الإشعار. قد يتضمّن عنصر
notifications
حقولًا مختلفة حسب سمة
الجهاز.
اتّبِع أحد المسارات التالية لضبط الحمولة والاتّصال بواجهة برمجة التطبيقات:
إرسال حمولة إشعار استباقي
لطلب بيانات من واجهة برمجة التطبيقات، اختَر أحد الخيارات من إحدى علامتَي التبويب أدناه:
HTTP
توفّر واجهة برمجة التطبيقات Home Graph نقطة نهاية HTTP.
- استخدِم ملف JSON الذي تم تنزيله لحساب الخدمة لإنشاء رمز مميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
- احصل على رمز مميز للوصول إلى OAuth 2.0 باستخدام نطاق
https://www.googleapis.com/auth/homegraph
باستخدام oauth2l: - أنشئ طلب JSON باستخدام
agentUserId
. في ما يلي نموذج طلب JSON لـ Report State والإشعار: - اجمع Report State وNotification JSON والرمز المميّز في طلب HTTP POST
لنقطة نهاية Google Home Graph. في ما يلي مثال على كيفية
تقديم الطلب في سطر الأوامر باستخدام
curl
، كمحاولة:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "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 } } } } } } }
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.
- احصل على تعريف خدمة بروتوكول Buffers لواجهة برمجة التطبيقات Home Graph.
- اتّبِع مستندات مطوّري gRPC لإنشاء طرق كعب العميل لإحدى اللغات المتاحة .
- استخدِم الأسلوب ReportStateAndNotification .
Node.js
يقدّم عميل Node.js لـ Google APIs عمليات ربط لواجهة برمجة التطبيقات Home Graph.
- اضبط خدمة
google.homegraph
باستخدام بيانات الاعتماد التلقائية للتطبيق. - استخدِم الطريقة
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.
- اضبط
HomeGraphApiService
باستخدام بيانات الاعتماد التلقائية للتطبيق. - استخدِم الطريقة
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.
- استخدِم ملف JSON الذي تم تنزيله لحساب الخدمة لإنشاء رمز مميّز للويب (JWT). لمزيد من المعلومات، يُرجى الاطّلاع على المصادقة باستخدام حساب خدمة.
- احصل على رمز مميز للوصول إلى OAuth 2.0 باستخدام نطاق
https://www.googleapis.com/auth/homegraph
باستخدام oauth2l: - أنشئ طلب JSON باستخدام
agentUserId
. في ما يلي نموذج طلب JSON لـ Report State والإشعار: - اجمع Report State وNotification JSON والرمز المميّز في طلب HTTP POST
لنقطة نهاية Google Home Graph. في ما يلي مثال على كيفية
تقديم الطلب في سطر الأوامر باستخدام
curl
، كمحاولة:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "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 } } } } } } }
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.
- احصل على تعريف خدمة تنسيقات بروتوكول البيانات لواجهة برمجة التطبيقات Home Graph.
- اتّبِع مستندات مطوّري gRPC لإنشاء طرق كعب العميل لإحدى اللغات المتوافقة.
- استخدِم الطريقة ReportStateAndNotification.
Node.js
يقدّم عميل Node.js لـ Google APIs عمليات ربط لواجهة برمجة التطبيقات Home Graph.
- اضبط خدمة
google.homegraph
باستخدام بيانات الاعتماد التلقائية للتطبيق. - استخدِم الطريقة
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.
- شغِّل
HomeGraphApiService
باستخدام بيانات الاعتماد التلقائية للتطبيق. - استخدِم الوسيطة
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
).