ההתראות מאפשרות לשילוב 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 . לדוגמה: "בדיקת מהירות הרשת הסתיימה. מהירות ההורדה בנתב של המשרד היא כרגע 80.2Kbps, ומהירות ההעלאה היא 9.3Kbps".
|
OpenClose | סטטוס ההשלמה ושינוי המצב אחרי ההפעלה של פקודת המכשיר action.devices.commands.OpenClose . לדוגמה: "הדלת הקדמית נפתחה" או "לא ניתן לפתוח את הדלת הקדמית".
|
כל סוגי המכשירים תומכים בהתראות לגבי ה-traits הרלוונטיים.
התראות על גרסאות build לשילוב בין ענן לענן
מוסיפים התראות לשלבים הבאים של Cloud-to-cloudהשילוב:
- צריך לציין ל-Google אם ההתראות מופעלות באפליקציית המכשיר שלכם. אם המשתמשים מפעילים או משביתים את ההתראות באפליקציה שלכם, צריך לשלוח
SYNC
בקשה כדי לעדכן את Google לגבי השינוי במכשיר.smart home - כשמתרחש אירוע רלוונטי במכשיר או שינוי במצב שמפעיל התראה, שולחים בקשה להתראה על ידי קריאה ל-Report State
reportStateAndNotification
API. אם מצב המכשיר השתנה, אפשר לשלוח גם מטען ייעודי (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.
לוחצים על המשך.
לוחצים על סיום.
בוחרים את חשבון השירות שיצרתם מהרשימה של חשבונות השירות ובוחרים באפשרות ניהול מפתחות בתפריט
פעולות.בוחרים באפשרות Add key (הוספת מפתח) > Create new key (יצירת מפתח חדש).
בסוג המפתח, בוחרים באפשרות JSON.
לוחצים על יצירה. קובץ JSON שמכיל את המפתח יורד למחשב.
שליחת ההתראה
מבצעים את הקריאה לבקשת ההתראה באמצעות devices.reportStateAndNotification
API.
בקשת ה-JSON חייבת לכלול eventId
, שהוא מזהה ייחודי שנוצר על ידי הפלטפורמה שלכם לאירוע שמפעיל את ההתראה. הערך של eventId
צריך להיות מזהה אקראי שמשתנה בכל פעם ששולחים בקשה לשליחת התראה.
באובייקט notifications
שמועבר בקריאת ה-API, צריך לכלול ערך priority
שמגדיר איך ההתראה תוצג. אובייקט notifications
עשוי לכלול שדות שונים בהתאם למאפיין המכשיר.
כדי להגדיר את מטען הייעודי (payload) ולקרוא ל-API, פועלים לפי אחת מהדרכים הבאות:
שליחת מטען ייעודי (payload) של התראה יזומה
כדי להתקשר ל-API, בוחרים באחת מהאפשרויות בכרטיסיות הבאות:
HTTP
Home Graph API מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורד כדי ליצור אסימון אינטרנט מסוג JSON (JWT). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג 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 של לקוח לאחת מהשפות הנתמכות .
- מפעילים את השיטה 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 מספקת קשירות ל-API Home Graph.
- מאתחלים את
HomeGraphApiService
באמצעות Application Default Credentials. - מפעילים את השיטה
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 מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורד כדי ליצור אסימון אינטרנט מסוג JSON (JWT). מידע נוסף זמין במאמר אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג 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
- אפשר לקבל את הגדרת השירות של מאגרי פרוטוקולים עבור Home Graph API.
- פועלים לפי ההוראות בתיעוד למפתחים של gRPC כדי ליצור קובצי stub של לקוח לאחת מהשפות הנתמכות.
- מפעילים את השיטה 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 מספקת קשירות ל-API Home Graph.
- מאתחלים את
HomeGraphApiService
באמצעות Application Default Credentials - מפעילים את השיטה
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
).