התראות מאפשרות לפעולה smart home להשתמש ב-Google Assistant כדי לתקשר עם משתמשים לגבי אירועים או שינויים חשובים שקשורים למכשיר. אתם יכולים להטמיע התראות כדי להתריע למשתמשים על אירועים במכשיר בזמן אמת, למשל כשמישהו נמצא בדלת, או כדי לדווח על שינוי מצב נדרש במכשיר, למשל כשמנעול הדלת ננעל או נתקע.
הפעולה של smart home יכולה לשלוח למשתמשים את סוגי ההתראות הבאים:
התראות יזומות: שליחת התראה למשתמשים על אירוע במכשיר smart home בלי בקשות קודמות של משתמשים למכשירים, כמו צלצול של פעמון דלת.
תשובות המשך: אישור שהבקשה להפעלת פקודה במכשיר בוצעה או נכשלה, למשל כשנועלים דלת. כדאי להשתמש בהתראות האלה לפקודות במכשיר שהשלמתן נמשכת זמן מה. תגובות המשך נתמכות רק כשבקשות לפקודות במכשיר נשלחות מרמקולים חכמים וממסכים חכמים.
Assistant מעביר את ההתראות האלה למשתמשים כהודעות ברמקולים חכמים ובמסכים חכמים. ההתראות היזומות מושבתות כברירת מחדל. המשתמשים יכולים להפעיל או להשבית את כל ההתראות היזום דרך Google Home app (GHA).
אירועים שמפעילים התראות
כשמתרחשים אירועים במכשיר, בזמן מילוי הפעולות נשלחת ל-Google בקשה להתראות. מאפייני המכשיר שנתמכים בפעולה smart home קובעים את סוגי אירועי ההתראות שזמינים ואת הנתונים שאפשר לכלול בהתראות האלה.
המאפיינים הבאים תומכים בהתראות יזום:
מאפיין | אירועים |
---|---|
ObjectDetection | אובייקטים שזוהו על ידי המכשיר, למשל כשזיהינו פנים מוכרים בדלת. לדוגמה: "מיכל ויוסי נמצאים בדלת הראשית". |
RunCycle | המכשיר משלים מחזור. לדוגמה: "The washing machine cycle has completed" |
SensorState | המכשיר מזהה מצב נתמך של חיישן. לדוגמה: "גלאי העשן מזהה עשן" |
המאפיינים הבאים תומכים בתשובות המשך:
תכונה | אירועים |
---|---|
LockUnlock | סטטוס ההשלמה ושינוי המצב בעקבות ביצוע הפקודה action.devices.commands.LockUnlock במכשיר. לדוגמה: "הדלת הקדמית נעולה" או "הדלת הקדמית תקועה".
|
NetworkControl | סטטוס השלמה ושינוי המצב לאחר ביצוע הפקודה action.devices.commands.TestNetworkSpeed במכשיר. לדוגמה: "בדיקת מהירות הרשת הסתיימה. מהירות ההורדה בנתב המשרד היא 80.2Kbps וקצב ההעלאה הוא 9.3Kbps."
|
OpenClose | סטטוס השלמה ושינוי המצב לאחר ביצוע הפקודה action.devices.commands.OpenClose במכשיר. לדוגמה: "הדלת הקדמית נפתחה" או "לא ניתן היה לפתוח את הדלת הקדמית".
|
כל סוגי המכשירים תומכים בהתראות לגבי המאפיינים הרלוונטיים.
יצירת התראות לפעולה בבית החכם
מוסיפים התראות לפעולה smart home בשלבים הבאים:
- עליכם לציין ל-Google אם ההתראות מופעלות באפליקציה של המכשיר smart home. אם המשתמשים מפעילים או משביתים את ההתראות באפליקציה, עליכם לשלוח בקשה
SYNC
כדי להודיע ל-Google על השינוי במכשיר. - כשמתרחש אירוע רלוונטי במכשיר או שינוי במצב שלו שמפעיל התראה, שולחים בקשה לקבלת התראה באמצעות קריאה ל-API של Report State
reportStateAndNotification
. אם מצב המכשיר השתנה, אפשר לשלוח יחד את מצב המכשיר ואת עומס העבודה של ההתראה בקריאה ל-Report State ול-Notification.
בקטעים הבאים מוסבר בהרחבה על השלבים האלה.
לציין אם ההתראות מופעלות באפליקציה
המשתמשים יכולים לבחור אם הם רוצים לקבל התראות יזומות על ידי הפעלת התכונה הזו ב-GHA. באפליקציה של מכשיר smart home, אפשר גם להוסיף אפשרות שמאפשרת למשתמשים להפעיל או להשבית את ההתראות במכשיר באופן מפורש, למשל דרך הגדרות האפליקציה.
כדי להודיע ל-Google שההתראות מופעלות במכשיר, צריך לבצע קריאה ל-Request 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, עוברים לדף Home Graph API.
לדף Home Graph API - צריך לבחור את הפרויקט שתואם למזהה הפרויקט ב-smart home.
- לוחצים על ENABLE.
יצירת מפתח לחשבון שירות
פועלים לפי ההוראות הבאות כדי ליצור מפתח לחשבון שירות מה-Google Cloud Console:
-
ב-Google Cloud Console, עוברים לדף Create service account key.
כניסה לדף Create Service Account Key - ברשימה Service account, בוחרים באפשרות New service account.
- כותבים שם בשדה Service account name.
- מזינים מזהה בשדה Service account ID.
ברשימה Role בוחרים באפשרות Service Accounts > Service Account Token Creator.
בKey type, בוחרים באפשרות JSON.
- לוחצים על יצירה. קובץ JSON שמכיל את המפתח שלכם יורד למחשב.
שליחת ההתראה
מריצים את הקריאה לבקשת ההתראה באמצעות ה-API devices.reportStateAndNotification
.
בקשת ה-JSON חייבת לכלול את השדה eventId
, שהוא מזהה ייחודי שנוצר על ידי הפלטפורמה שלכם לאירוע שמפעיל את ההתראה. השדה eventId
צריך להיות מזהה אקראי שונה בכל פעם ששולחים בקשת התראה.
באובייקט notifications
שאתם מעבירים בקריאת ה-API, צריך לכלול ערך priority
שמגדיר את אופן הצגת ההתראה. האובייקט notifications
עשוי לכלול שדות שונים בהתאם למאפיין המכשיר.
פועלים לפי אחת מהנתיבים הבאים כדי להגדיר את המטען הייעודי (payload) ולקרוא ל-API:
שליחת עומס נתונים של התראה יזומה
כדי לקרוא ל-API, בוחרים אפשרות מאחד מהכרטיסיות הבאות:
HTTP
ה-API של Home Graph מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון אינטרנט מסוג JSON (JWT). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 בהיקף
https://www.googleapis.com/auth/homegraph
באמצעות oauth2l: - יוצרים את בקשת ה-JSON עם התג
agentUserId
. דוגמה לבקשת JSON ל-Report State ול-Notification: - משלבים את Report State ואת ה-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
ה-API של Home Graph מספק נקודת קצה (endpoint) של gRPC
- מקבלים את הגדרת השירות של protocol buffers עבור ה-API של Home Graph.
- פועלים לפי ההוראות בתיעוד למפתחים של gRPC כדי ליצור stubs של לקוח לאחת מהשפות הנתמכות.
- קוראים ל-method ReportStateAndNotification.
Node.js
לקוח Google APIs ל-Node.js מספק קישורים לממשק ה-API של Home Graph.
- מאתחלים את השירות
google.homegraph
באמצעות Application Default Credentials. - מפעילים את השיטה
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 מספקת קישורים לממשק ה-API Home Graph.
- מאתחלים את
HomeGraphApiService
באמצעות Application Default Credentials. - קוראים ל-method
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);
שליחת מטען ייעודי (payload) של תגובת המשך
עומס העבודה בתשובה עוקבת מכיל את סטטוס הבקשה, קודי השגיאה של כשלים באירועים, אם רלוונטי, ואת הערך החוקי של 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
כדי ליצור פלט של ההתראה רק במכשיר שהמשתמש ביצע איתו אינטראקציה במקור, ולא לכל המכשירים של המשתמש.
כדי לקרוא ל-API, בוחרים אפשרות מאחד מהכרטיסיות הבאות:
HTTP
ה-API של Home Graph מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון אינטרנט מסוג JSON (JWT). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- משיגים אסימון גישה מסוג OAuth 2.0 עם ההיקף
https://www.googleapis.com/auth/homegraph
באמצעות oauth2l: - יוצרים את בקשת ה-JSON באמצעות
agentUserId
. הנה דוגמה לבקשת JSON עבור Report State ו-Notification: - משלבים את Report State ואת ה-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
ה-API של Home Graph מספק נקודת קצה (endpoint) של gRPC
- מקבלים את הגדרת השירות של protocol buffers עבור ה-API של Home Graph.
- יש לעיין במסמכי התיעוד למפתחים בנושא gRPC כדי ליצור מודלים של לקוחות (stubs) עבור אחת מהשפות הנתמכות.
- קוראים ל-method ReportStateAndNotification.
Node.js
לקוח Google APIs ל-Node.js מספק קישורים לממשק ה-API של Home Graph.
- מאתחלים את השירות
google.homegraph
באמצעות Application Default Credentials. - קוראים ל-method
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 מספקת קישורים לממשק ה-API Home Graph.
- איך מאתחלים את
HomeGraphApiService
באמצעות Application Default Credentials - קוראים ל-method
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. היומנים האלה שימושיים לבדיקה ולשמירה על איכות ההתראות בתוך הפעולה.
זו הסכימה של רשומה 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
).