ההתראות מאפשרות לשילוב Cloud-to-cloud להשתמש ב-Google Assistant כדי לתקשר עם המשתמשים לגבי אירועים או שינויים חשובים שקשורים למכשיר. אתם יכולים להטמיע התראות כדי להודיע למשתמשים על אירועים במכשיר שקורים בזמן אמת, למשל כשמישהו נמצא בדלת, או כדי לדווח על שינוי במצב המכשיר שביקשתם, למשל כשבריח של מנעול בדלת ננעל בהצלחה או נתקע.
שילוב Cloud-to-cloud יכול לשלוח למשתמשים את סוגי ההתראות הבאים:
התראות יזומות: התראות למשתמש על smart homeאירוע במכשיר בלי שהמשתמש שלח בקשות למכשיר לפני כן, כמו צלצול בפעמון הדלת.
תשובות המשך: אישור לכך שבקשה לפקודה במכשיר הצליחה או נכשלה, למשל כשנועלים דלת. אפשר להשתמש בהתראות האלה לפקודות במכשיר שלוקח זמן להשלים אותן. תשובות המשך נתמכות רק כשבקשות לפקודות במכשיר נשלחות מרמקולים חכמים וממסכים חכמים.
Assistant מספקת את ההתראות האלה למשתמשים כהודעות ברמקולים חכמים ובמסכים חכמים. ההתראות היזומות מושבתות כברירת מחדל. המשתמשים יכולים להפעיל או להשבית את כל ההתראות היזומות מGoogle Home app (GHA).
אירועים שמפעילים התראות
כשמתרחשים אירועים במכשיר, מרכז הבקשות שולח בקשת התראה ל-Google. התכונות של המכשיר ששילוב Cloud-to-cloud תומך בהן קובעות אילו סוגים של אירועי התראות זמינים ואילו נתונים אפשר לכלול בהתראות האלה.
התכונות הבאות תומכות בהתראות יזומות:
| מאפיין | אירועים |
|---|---|
| ObjectDetection | אובייקטים שזוהו על ידי המכשיר, למשל כשפנים מוכרות מזוהות בדלת. לדוגמה: "עליזה ויוסי עומדים ליד דלת הכניסה" |
| RunCycle | המכשיר משלים מחזור. לדוגמה: "The washing machine cycle has completed." |
| SensorState | המכשיר מזהה מצב חיישן נתמך. לדוגמה: "גלאי העשן מזהה עשן" |
התכונות הבאות תומכות בתגובות המשך:
| מאפיין | אירועים |
|---|---|
| LockUnlock | סטטוס ההשלמה ושינוי המצב בעקבות ההפעלה של הפקודה action.devices.commands.LockUnlock במכשיר. לדוגמה: "הדלת הקדמית נעולה" או "הדלת הקדמית תקועה".
|
| NetworkControl | סטטוס ההשלמה ושינוי המצב בעקבות ההפעלה של הפקודה action.devices.commands.TestNetworkSpeed במכשיר. For
example: "Your network speed test has finished. מהירות ההורדה בנתב של המשרד היא כרגע 80.2Kbps, ומהירות ההעלאה היא 9.3Kbps".
|
| OpenClose | סטטוס ההשלמה ושינוי המצב בעקבות ההפעלה של הפקודה action.devices.commands.OpenClose במכשיר. לדוגמה: "הדלת הקדמית נפתחה" או "לא הייתה אפשרות לפתוח את הדלת הקדמית".
|
כל סוגי המכשירים תומכים בהתראות לגבי ה-traits הרלוונטיים.
הגדרת התראות לגבי גרסאות build בשילוב בין ענן לענן
מוסיפים התראות לשילוב Cloud-to-cloud בשלבים הבאים:
- צריך לציין ל-Google אם ההתראות מופעלות באפליקציה לניהול מכשיר משני smart home. אם המשתמשים מפעילים או משביתים את ההתראות באפליקציה, צריך לשלוח
SYNCבקשה כדי לעדכן את Google לגבי השינוי במכשיר. - כשמתרחש אירוע רלוונטי במכשיר או שינוי במצב שמפעיל התראה, שולחים בקשה להתראה על ידי קריאה ל-API Report State
reportStateAndNotification. אם מצב המכשיר השתנה, אפשר לשלוח גם מטען ייעודי (payload) של מצב וגם מטען ייעודי (payload) של התראה ביחד בשיחת Report State ובהתראה.
בקטעים הבאים מוסבר בהרחבה על השלבים האלה.
איך מציינים אם ההתראות מופעלות באפליקציה
המשתמשים יכולים לבחור אם הם רוצים לקבל התראות יזומות על ידי הפעלת התכונה הזו בGHA. באפליקציה למכשיר smart home, אפשר גם להוסיף אפשרות למשתמשים להפעיל או להשבית את ההתראות מהמכשיר באופן מפורש, למשל מההגדרות של האפליקציה.
.כדי לעדכן את נתוני המכשיר, צריך לשלוח ל-Google קריאה של Request SYNC כדי לציין שההתראות מופעלות במכשיר. עליכם לשלוח בקשת SYNC כזו בכל פעם שהמשתמשים משנים את ההגדרה הזו באפליקציה שלכם.
בתגובה SYNC, שולחים אחד מהעדכונים הבאים:
- אם המשתמש הפעיל באופן מפורש את ההתראות באפליקציה לניהול מכשיר משני, או אם לא סיפקתם אפשרות להפעלה או להשבתה, צריך להגדיר את המאפיין
devices.notificationSupportedByAgentלערךtrue. - אם המשתמש השבית באופן מפורש את ההתראות באפליקציה לניהול מכשיר משני, צריך להגדיר את המאפיין
devices.notificationSupportedByAgentלערךfalse.
בקטע הקוד הבא אפשר לראות דוגמה להגדרת תגובת SYNC:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
שליחת בקשות להתראות אל Google
כדי להפעיל התראות ב-Assistant, מערכת ניהול ההזמנות שולחת מטען ייעודי (payload) של התראה ל-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, עוברים לדף Service accounts.
מעבר לדף Service Accountsיכול להיות שתצטרכו לבחור פרויקט לפני שתועברו לדף 'חשבונות שירות'.
לוחצים על יצירת חשבון שירות.
כותבים שם בשדה Service account name.
כותבים מזהה בשדה Service account ID.
כותבים תיאור בשדה Service account description.
לוחצים על יצירה והמשך.
בתפריט הנפתח Role, בוחרים באפשרות Service Accounts > Service Account OpenID Connect Identity Token Creator.
לוחצים על המשך.
לוחצים על סיום.
בוחרים את חשבון השירות שיצרתם מהרשימה של חשבונות השירות ובוחרים באפשרות Manage keys (ניהול מפתחות) מהתפריט Actions (פעולות).
בוחרים באפשרות Add key (הוספת מפתח) > Create new key (יצירת מפתח חדש).
בKey type, בוחרים באפשרות JSON.
לוחצים על יצירה. קובץ JSON שמכיל את המפתח יורד למחשב.
שליחת ההתראה
מבצעים את הקריאה לבקשת ההתראה באמצעות devices.reportStateAndNotification API.
בקשת ה-JSON חייבת לכלול eventId, שהוא מזהה ייחודי שנוצר על ידי הפלטפורמה שלכם לאירוע שמפעיל את ההתראה. הערך של eventId צריך להיות מזהה רנדומלי שמשתנה בכל פעם ששולחים בקשת התראה.
באובייקט notifications שמעבירים בקריאה ל-API, צריך לכלול ערך priority שמגדיר איך ההתראה תוצג. אובייקט notifications עשוי לכלול שדות שונים בהתאם למאפיין המכשיר.
כדי להגדיר את מטען הייעודי (payload) ולקרוא ל-API, פועלים לפי אחת מהדרכים הבאות:
שליחת מטען ייעודי (payload) של התראה יזומה
כדי להתקשר אל ה-API, בוחרים באחת מהאפשרויות בכרטיסיות הבאות:
HTTP
Home Graph API מספק נקודת קצה ב-HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורד כדי ליצור אסימון JWT (JSON Web Token). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 עם ההיקף
https://www.googleapis.com/auth/homegraphבאמצעות oauth2l: - יוצרים את בקשת ה-JSON עם
agentUserId. דוגמה לבקשת JSON עבור Report State והתראה: - משלבים את 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
Home Graph API מספק נקודת קצה (endpoint) של gRPC
- אחזור של הגדרת השירות של מאגרי פרוטוקולים עבור Home Graph API.
- פועלים לפי התיעוד למפתחים של gRPC כדי ליצור קטעי קוד חלופי (stub) של לקוח עבור אחת מהשפות הנתמכות .
- מבצעים קריאה ל-method ReportStateAndNotification .
Node.js
לקוח Node.js של Google APIs מספק קשירות ל-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 מספקת קשירות ל-Home Graph API.
- מאתחלים את
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) של תגובה למעקב
המטען הייעודי (payload) של תשובה למעקב מכיל את סטטוס הבקשה, קודי שגיאה של אירועים שנכשלו (אם רלוונטי) ואת הערך התקין של followUpToken, שסופק במהלך בקשת הכוונה EXECUTE. צריך להשתמש ב-followUpToken תוך חמש דקות כדי שהוא יישאר תקף וכדי שהתגובה תשויך לבקשה המקורית בצורה נכונה.
בקטע הקוד הבא מוצגת דוגמה למטען ייעודי (payload) של בקשת 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
Home Graph API מספק נקודת קצה ב-HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורד כדי ליצור אסימון JWT (JSON Web Token). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 עם ההיקף
https://www.googleapis.com/auth/homegraphבאמצעות oauth2l: - יוצרים את בקשת ה-JSON עם
agentUserId. דוגמה לבקשת JSON עבור Report State והתראה: - משלבים את 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
Home Graph API מספק נקודת קצה (endpoint) של gRPC
- אחזור הגדרת השירות של מאגרי פרוטוקולים עבור API Home Graph.
- פועלים לפי התיעוד למפתחים של gRPC כדי ליצור קטעי קוד חלופי (stub) של לקוח עבור אחת מהשפות הנתמכות.
- מבצעים קריאה ל-method ReportStateAndNotification.
Node.js
לקוח Node.js של Google APIs מספק קשירות ל-API Home Graph.
- מפעילים את שירות
google.homegraphבאמצעות Application Default Credentials. - מבצעים קריאה לשיטה
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 API.
- מאתחלים את
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 עבור Cloud-to-Cloud. היומנים האלה שימושיים לבדיקה ולשמירה על איכות ההתראות בפעולה שלכם.
זוהי הסכימה של רשומה notificationLog:
| נכס | תיאור |
|---|---|
requestId |
מזהה בקשת ההתראה. |
structName |
השם של מבנה ההתראה, כמו ObjectDetection. |
status |
מצוין הסטטוס של ההתראה. |
השדה status כולל סטטוסים שונים שעשויים להצביע על שגיאות במטען הייעודי (payload) של ההתראה. יכול להיות שחלק מהאפשרויות האלה יהיו זמינות רק בפעולות שלא הושקו לייצור.
דוגמאות לסטטוסים:
| סטטוס | תיאור |
|---|---|
EVENT_ID_MISSING |
מציין שחסר שדה החובה eventId.
|
PRIORITY_MISSING |
מציין שחסר שדה priority.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
מציין שהערך של המאפיין notificationSupportedByAgent של המכשיר ששולח את ההתראה שסופק ב-SYNC הוא false.
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
מציין שהמשתמש לא הפעיל התראות במכשיר ששולח את ההתראה ב-GHA. הסטטוס הזה זמין רק בשילובים שלא הושקו בייצור. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
מציין שהמשתמש לא הקצה את המכשיר ששולח את ההתראה לבית או למבנה. הסטטוס הזה זמין רק בשילובים שלא הושקו בסביבת ייצור. |
בנוסף לסטטוסים הכלליים האלה שיכולים לחול על כל ההתראות, השדה status עשוי לכלול גם סטטוסים ספציפיים למאפיינים, במקרים הרלוונטיים (לדוגמה, OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING).