تسمح الإشعارات لعملية دمج Cloud-to-cloud باستخدام Google Assistant للتواصل مع المستخدمين بشأن الأحداث أو التغييرات المهمة المتعلقة بالجهاز. يمكنك تنفيذ الإشعارات لتنبيه المستخدمين بأحداث الجهاز في الوقت المناسب، على سبيل المثال عندما يكون هناك شخص عند الباب، أو للإبلاغ عن تغيير مطلوب في حالة الجهاز، مثل عندما يتم قفل الباب بنجاح أو عندما يتعطل القفل.
يمكن أن يرسل دمج "Cloud-to-cloud" الأنواع التالية من الإشعارات إلى المستخدمين:
الإشعارات الاستباقية: تنبّه المستخدم بحدث على جهاز smart home بدون أي طلبات سابقة من المستخدم إلى أجهزته، مثل رنين جرس الباب.
الردود على طلبات المتابعة: تأكيد على نجاح أو فشل طلب تنفيذ أمر على الجهاز، مثل قفل الباب استخدِم هذه التنبيهات لأوامر الجهاز التي تستغرق وقتًا لإكمالها. لا تتوفّر الردود على طلبات المتابعة إلا عند إرسال طلبات الأوامر من مكبّرات الصوت الذكية والشاشات الذكية.
يقدّم "Assistant" هذه الإشعارات للمستخدمين كإشعارات على مكبّرات الصوت الذكية والشاشات الذكية. تكون الإشعارات الاستباقية غير مفعَّلة تلقائيًا. يمكن للمستخدمين تفعيل جميع الإشعارات الاستباقية أو إيقافها من خلال Google Home app (GHA).
الأحداث التي تؤدي إلى ظهور الإشعارات
عند وقوع أحداث على الجهاز، يرسل التنفيذ طلب إشعار إلى Google. تحدّد سمات الجهاز التي يتيحها دمج Cloud-to-cloud أنواع أحداث الإشعارات المتاحة والبيانات التي يمكنك تضمينها في هذه الإشعارات.
تتيح السمات التالية الإشعارات الاستباقية:
| السمة | الفعاليات |
|---|---|
| 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 مثل هذا كلما
غيّر المستخدمون هذا الإعداد في تطبيقك.
في ردّك على 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، انتقِل إلى صفحة حسابات الخدمة.
انتقِل إلى صفحة "حسابات الخدمة".قد تحتاج إلى اختيار مشروع قبل الانتقال إلى صفحة "حسابات الخدمة".
انقر على إنشاء حساب خدمة.
في حقل اسم حساب الخدمة، أدخِل اسمًا.
في حقل رقم تعريف حساب الخدمة، أدخِل رقم تعريف.
في حقل وصف حساب الخدمة، أدخِل وصفًا.
انقر على إنشاء ومتابعة.
من القائمة المنسدلة الدور، اختَر حسابات الخدمة > أداة إنشاء الرمز المميّز لهوية OpenID Connect لحساب الخدمة.
انقر على متابعة.
انقر على تم.
اختَر حساب الخدمة الذي أنشأته للتو من قائمة حسابات الخدمة، ثم اختَر إدارة المفاتيح من قائمة الإجراءات.
انقر على إضافة مفتاح > إنشاء مفتاح جديد.
بالنسبة إلى نوع المفتاح، اختَر JSON.
انقر على إنشاء. يتم تنزيل ملف JSON يحتوي على مفتاحك على جهاز الكمبيوتر.
إرسال الإشعار
أرسِل طلب الإشعار باستخدام واجهة برمجة التطبيقات devices.reportStateAndNotification.
يجب أن يتضمّن طلب JSON السمة eventId، وهي معرّف فريد تنشئه منصتك للحدث الذي يؤدي إلى إرسال الإشعار. يجب أن يكون eventId رقم تعريف عشوائي يختلف في كل مرة ترسل فيها طلب إشعار.
في عنصر notifications الذي يتم تمريره في طلب البيانات من واجهة برمجة التطبيقات، يجب تضمين قيمة priority التي تحدّد طريقة عرض الإشعار. قد يتضمّن عنصر
notifications حقولاً مختلفة حسب سمة
الجهاز.
اتّبِع أحد المسارات التالية لضبط الحمولة واستدعاء واجهة برمجة التطبيقات:
إرسال حمولة إشعار استباقي
لطلب بيانات من واجهة برمجة التطبيقات، حدِّد خيارًا من إحدى علامات التبويب التالية:
HTTP
توفّر واجهة برمجة التطبيقات Home Graph نقطة نهاية HTTP
- استخدِم ملف JSON لحساب الخدمة الذي تم تنزيله لإنشاء رمز 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
- احصل على تعريف خدمة مخازن البروتوكولات المؤقتة لواجهة برمجة التطبيقات 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 } } } } } } } });
جافا
توفّر مكتبة عملاء 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 لحساب الخدمة الذي تم تنزيله لإنشاء رمز 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
- احصل على تعريف خدمة Protocol Buffers لواجهة برمجة تطبيقات 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, } } } } } } } });
جافا
توفّر مكتبة عملاء 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);
التسجيل
تتيح الإشعارات تسجيل الأحداث كما هو موضّح في Cloud logging for Cloud-to-cloud. هذه السجلات مفيدة لاختبار جودة الإشعارات والحفاظ عليها ضمن الإجراء الخاص بك.
في ما يلي مخطط إدخال 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).