ההתראות מאפשרות לפעולה של smart home להשתמש Google Assistant כדי לתקשר עם משתמשים על אירועים או שינויים שקשורים למכשיר. אפשר להטמיע התראות כדי לקבל התראות למשתמשים בזמן אירועים במכשיר, למשל כשמישהו נמצא מחוץ לדלת או דיווח על שינוי מבוקש במצב המכשיר, למשל כאשר בריח של מנעול דלת הופעל או נתקע.
הפעולה smart home יכולה לשלוח את הסוגים הבאים של התראות למשתמשים:
התראות יזומות: שליחת התראה למשתמש של smart home אירוע במכשיר ללא בקשות קודמות של משתמשים למכשירים שלהם, כמו צלצול של פעמון דלת.
תגובות המשך: אישור על בקשה לפקודה במכשיר הצליחה או נכשלה, לדוגמה, במהלך נעילת דלת. יש להשתמש בהתראות האלה עבור את פקודות המכשיר שהשלמתן דורשות זמן. תגובות ההמשך כוללות בלבד כשבקשות לפקודות במכשיר נשלחות מרמקולים חכמים ומרמקולים חכמים מסכים.
ההתראות האלה מוצגות למשתמשים על ידי Assistant בתור הודעות ברמקולים חכמים ובמסכים חכמים. התראות יזומות מושבתים כברירת מחדל. המשתמשים יכולים להפעיל או להשבית את כל ההתראות היזומות Google Home app (GHA)
אירועים שמפעילים התראות
כשמתרחשים אירועים במכשיר, בזמן מילוי הפעולות נשלחת בקשה ל-Google. המכשיר תואם לפעולה של smart home קובעת אילו סוגים של אירועי התראות זמינים, נתונים שאפשר לכלול בהתראות האלה.
התכונות הבאות תומכות בהתראות יזומות:
תכונה | אירועים |
---|---|
ObjectDetection | חפצים שזוהו על ידי המכשיר, למשל מקרים שבהם פנים מזוהות זוהה ליד הדלת. לדוגמה: "יוסי ויוסי נמצאים בדלת הכניסה". |
RunCycle | המכשיר משלים מחזור. לדוגמה: "מחזור מכונת הכביסה" הושלם". |
SensorState | המכשיר מזהה מצב נתמך של חיישן. מוצרים לדוגמה: "גלאי העשן מזהה עשן". |
התכונות הבאות תומכות בתגובות המשך:
תכונה | אירועים |
---|---|
LockUnlock | סטטוס השלמה ושינוי מצב לאחר ביצוע
פקודה במכשיר action.devices.commands.LockUnlock . עבור
לדוגמה: "הדלת הקדמית ננעלה" או "הדלת הקדמית תקועה".
|
NetworkControl | סטטוס השלמה ושינוי מצב לאחר ביצוע
פקודה במכשיר action.devices.commands.TestNetworkSpeed . עבור
דוגמה: "בדיקת מהירות הרשת הסתיימה. מהירות ההורדה מופעלת
כרגע הנתב המשרדי הוא 80.2 Kbps, ומהירות ההעלאה היא 9.3 Kbps."
|
OpenClose | סטטוס השלמה ושינוי מצב לאחר ביצוע
פקודה במכשיר action.devices.commands.OpenClose . עבור
לדוגמה: "הדלת הקדמית נפתחה" או "לא ניתן היה לפתוח את הדלת הראשית".
|
בכל סוגי המכשירים יש תמיכה בהתראות לגבי התכונות הרלוונטיות.
יצירת התראות לפעולה בבית החכם
הוספת התראות לפעולה smart home בשלבים הבאים:
- יש לציין ל-Google אם ההתראות מופעלות
אפליקציה אחת (smart home) למכשיר. אם המשתמשים מפעילים או משביתים את ההתראות
באפליקציה שלך, לשלוח בקשת
SYNC
כדי להודיע ל-Google על שינוי המכשיר. - כשמתרחש אירוע רלוונטי במכשיר או שינוי מצב שגורמים להפעלת
התראה, לשלוח בקשת התראה באמצעות קריאה
Report State
reportStateAndNotification
API. אם מצב המכשיר השתנה, אפשר לשלוח מטען ייעודי (payload) של מצב וגם של התראות יחד ב-Report State ובשיחת ההתראות שלך.
בחלקים הבאים יש הסבר מפורט על השלבים האלה.
יש לציין אם ההתראות מופעלות באפליקציה
המשתמשים יכולים לבחור אם הם רוצים לקבל התראות יזומות באמצעות הפעלת התכונה הזו בGHA. באפליקציה של מכשיר smart home, אפשר גם להוסיף את היכולת למשתמשים כדי להפעיל או להשבית באופן מפורש התראות מהמכשיר, לדוגמה, הגדרות האפליקציה.
לציין ל-Google שההתראות מופעלות במכשיר שלך על ידי לחיצה על
קריאה לבקשה לסנכרון
כדי לעדכן את נתוני המכשיר. צריך לשלוח בקשת SYNC
כמו זו בכל פעם
משתמשים משנים את ההגדרה הזו באפליקציה שלכם.
בתשובה של SYNC
, צריך לשלוח אחד מהעדכונים הבאים:
- אם המשתמש הפעיל התראות באופן מפורש באפליקציה במכשיר, או
לא מספקים אפשרות מתג, מגדירים את
נכס
devices.notificationSupportedByAgent
אלtrue
. - אם המשתמש השבית את ההתראות באופן מפורש באפליקציה במכשיר, צריך להגדיר
נכס
devices.notificationSupportedByAgent
אלfalse
.
בקטע הקוד הבא מוצגת דוגמה להגדרה של תגובת סנכרון:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
שליחת בקשות התראה ל-Google
כדי להפעיל התראות ב-Assistant, נשלחת מטען ייעודי (payload) של התראה אל Google Home Graph באמצעות Report State ו-Notification API.
הפעלת Google Home Graph API
-
ברכיב Google Cloud Console, עוברים לדף Home Graph API.
לדף Home Graph API - צריך לבחור את הפרויקט שתואם למזהה הפרויקט ב-smart home.
- לוחצים על הפעלה.
יצירת מפתח לחשבון שירות
כדי ליצור מפתח לחשבון שירות מ-Google Cloud Console, פועלים לפי ההוראות הבאות:
-
באפליקציית Google Cloud Console, עוברים לדף Create service account key.
כניסה לדף Create Service Account Key - מהרשימה Service Account, בוחרים חשבון שירות חדש.
- כותבים שם בשדה Service account name.
- מזינים מזהה בשדה Service account ID.
ברשימה Role בוחרים באפשרות Service Accounts > יצירת אסימונים בחשבון שירות.
בשדה Key type, בוחרים באפשרות JSON.
- לוחצים על יצירה. קובץ JSON שמכיל את המפתח שלכם הורדות למחשב שלך.
שליחת ההתראה
מבצעים את השיחה עם בקשת ההתראה באמצעות
devices.reportStateAndNotification
API.
בקשת ה-JSON שלך חייבת לכלול eventId
, שהוא מזהה ייחודי שנוצר על ידי
הפלטפורמה של האירוע שהפעיל את ההתראה. eventId
צריך
להיות מזהה אקראי ששונה בכל פעם ששולחים בקשת התראה.
באובייקט notifications
שמעבירים בקריאה ל-API, צריך לכלול
ערך priority
שמגדיר איך ההתראה צריכה להופיע. שלך
אובייקט notifications
יכול לכלול שדות שונים, בהתאם למכשיר
.
מבצעים את אחת מהנתיבים הבאים כדי להגדיר את המטען הייעודי (payload) ולקרוא ל-API:
שליחת מטען ייעודי (payload) של התראות יזומות
כדי לשלוח קריאה ל-API, בוחרים באחת מהכרטיסיות הבאות:
HTTP
ה-API של Home Graph מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ JSON של חשבון השירות שהורדתם כדי ליצור קובץ JSON Web אסימון (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
ה-API של Home Graph מספק נקודת קצה ב-gRPC
- מקבלים את ההגדרה של שירות מאגר נתונים זמני של פרוטוקולים ל-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
ספריית הלקוח של Home Graph 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) של תגובת המשך
המטען הייעודי לתגובת המשך מכיל את סטטוס הבקשה, שגיאה
קודים לכשלים באירועים, אם רלוונטי, וקודים תקינים של followUpToken
,
סופקו במהלך בקשת ה-Intent של 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
ה-API של Home Graph מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ JSON של חשבון השירות שהורדתם כדי ליצור קובץ JSON Web אסימון (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
ה-API של Home Graph מספק נקודת קצה של gRPC
- מקבלים את ההגדרה של שירות מאגר נתונים זמני של פרוטוקולים ל-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 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
ספריית הלקוח של Home Graph 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. היומנים האלה שימושיים לבדיקה ולשמירה על איכות ההתראות בפעולה שלך.
הסכימה של רשומת notificationLog
היא:
נכס | תיאור |
---|---|
requestId |
מזהה הבקשה להתראה. |
structName |
השם של מבנה ההתראה, למשל "ObjectDetection". |
status |
ציון הסטטוס של ההתראה. |
השדה status
כולל סטטוסים שונים שעשויים להצביע על שגיאות
מטען ייעודי (payload) של התראות. יכול להיות שחלק מהפרטים האלה זמינים רק בפעולות שכוללות
לא הושק בסביבת הייצור.
דוגמאות לסטטוסים:
סטטוס | תיאור |
---|---|
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
).