Report State היא תכונה חשובה שמאפשרת לפעולה Home לדווח באופן יזום על הסטטוס העדכני של המכשיר של המשתמש בחזרה אל Google Home Graph, במקום להמתין לכוונה QUERY
.
Report State מדווח ל-Google על המצבים של מכשירי המשתמשים עם agentUserId
שצוין שמשויך אליהם (שנשלח בבקשה המקורית SYNC
). כש-Google Assistant רוצה לבצע פעולה שמחייבת הבנה של המצב הנוכחי של מכשיר, היא יכולה פשוט לחפש את פרטי המצב ב-Home Graph במקום להנפיק כוונה QUERY
לעננים שונים של צד שלישי לפני שהיא מנפיקה את הכוונה EXECUTE
.
ללא Report State, אם יש כמה ספקי תאורה בסלון, כדי לבצע את הפקודה Ok Google, brighten my living room צריך לפתור כמה כוונות QUERY
שנשלחו לכמה עננים, במקום פשוט לחפש את ערכי הבהירות הנוכחיים על סמך מה שדווח בעבר. כדי לספק את חוויית המשתמש הטובה ביותר, השדה Assistant צריך לכלול את המצב הנוכחי של המכשיר, בלי צורך בפעולה הלוך ושוב למכשיר.
אחרי ה-SYNC
הראשוני של המכשיר, הפלטפורמה שולחת כוונה מסוג QUERY
שמרכזת את המצב של המכשיר כדי לאכלס את Home Graph.
לאחר מכן, Home Graph מאחסן רק את המצב שנשלח עם Report State.
כשקוראים ל-Report State, חשוב לספק נתוני מצב מלאים של מאפיין נתון. Home Graph מעדכן את המצבים לפי מאפיין, ומחליף את כל הנתונים של המאפיין הזה כשמתבצעת קריאה ל-Report State. לדוגמה, אם אתם מדווחים על מצב של המאפיין StartStop, תוכן העומס צריך לכלול ערכים גם ל-isRunning
וגם ל-isPaused
.
שנתחיל?
כדי להטמיע את Report State:
הפעלת Google HomeGraph API
-
ב-Google Cloud Console, עוברים לדף HomeGraph API.
כניסה לדף HomeGraph API - בוחרים את הפרויקט שתואם למזהה הפרויקט smart home.
- לוחצים על הפעלה.
יצירת מפתח לחשבון שירות
פועלים לפי ההוראות הבאות כדי ליצור מפתח לחשבון שירות מה-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
בוחרים אפשרות מהכרטיסיות הבאות:
HTTP
Home Graph מספק נקודת קצה (endpoint) של HTTP
- משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון אינטרנט מסוג JSON (JWT). למידע נוסף, ראו אימות באמצעות חשבון שירות.
- מקבלים אסימון גישה מסוג OAuth 2.0 בהיקף
https://www.googleapis.com/auth/homegraph
באמצעות oauth2l: - יוצרים את בקשת ה-JSON באמצעות
agentUserId
. הנה דוגמה לבקשת JSON לסטטוס הדוח ולתזכורת: - משלבים את ה-JSON של סטטוס הדוח וההתראה ואת האסימון בבקשת ה-POST של ה-HTTP לנקודת הקצה של Google Home Graph. דוגמה לאופן שבו שולחים את הבקשה בשורת הפקודה באמצעות
curl
, בתור בדיקה:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
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 API.
- פועלים לפי ההוראות בתיעוד למפתחים של gRPC כדי ליצור stubs של לקוח לאחת מהשפות הנתמכות.
- קוראים ל-method ReportStateAndNotification.
Node.js
לקוח Google APIs Node.js מספק קישורים עבור ה-API של Home Graph.
- מאתחלים את השירות
google.homegraph
באמצעות Application Default Credentials. - קוראים ל-method
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', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { states: { "PLACEHOLDER-DEVICE-ID": { on: true } } } } } });
Java
ספריית הלקוח של HomeGraph API ל-Java מספקת קישורים ל-Home Graph API.
- מאתחלים את
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 state payload. Map<?, ?> states = Map.of("on", true); // Report device state. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states)))); homegraphService.devices().reportStateAndNotification(request); }
מצב דוח הבדיקה
כדי שהפעולה תהיה מוכנה לקבלת אישור, חשוב לבדוק את Report State.
כדי לעשות זאת, מומלץ להשתמש בכלי 'צפייה' Home Graph, שהוא אפליקציית אינטרנט עצמאית שלא מחייבת הורדה או פריסה.
מרכז הבקרה של Report State עדיין זמין, אבל הוא הוצא משימוש ואין יותר תמיכה בו.
מרכז הבקרה של סטטוס הדוחות
דרישות מוקדמות
כדי לבדוק את הפעולה, צריך את המפתח לחשבון השירות ואת agentUserId
. אם כבר יש לכם את המפתח של חשבון השירות ו-agentUserId
, תוכלו לקרוא את המאמר פריסה של מרכז הבקרה של Report State.
פריסה של מרכז הבקרה 'סטטוס הדוחות'
אחרי שמקבלים את המפתח של חשבון השירות ואת מזהה המשתמש של הסוכן לפרויקט, מורידים ופורסים את הגרסה האחרונה ממרכז הבקרה של Report State.
אחרי שמורידים את הגרסה העדכנית, פועלים לפי ההוראות בקובץ README.MD
המצורף.
אחרי הפריסה של לוח הבקרה Report State, תוכלו לגשת ללוח הבקרה מכתובת ה-URL הבאה (מחליפים את your_project_id במזהה הפרויקט):
http://<your-project-id>.appspot.com
במרכז הבקרה, מבצעים את הפעולות הבאות:
- בחירת קובץ המפתח של החשבון
- הוספת agentUserId
לאחר מכן לוחצים על רשימת משימות.
כל המכשירים שלך רשומים. אחרי שהרשימה תתמלא, תוכלו להשתמש בלחצן Refresh כדי לעדכן את מצבי המכשירים. אם יש שינוי במצב המכשיר, השורה תודגש בירוק.
תגובות שגיאה
יכול להיות שאחת מתגובות השגיאה הבאות תופיע כשתתבצע שיחה אל Report State. התשובות האלה מגיעות בצורת קודי מצב HTTP.
400 Bad Request
– השרת לא הצליח לעבד את הבקשה שנשלחה מהלקוח בגלל תחביר לא חוקי. יש כמה סיבות נפוצות לכך: פורמט JSON שגוי או שימוש ב-null
במקום ב-"" בערך מחרוזת.404 Not Found
– לא ניתן למצוא את המשאב המבוקש אבל יכול להיות שהוא יהיה זמין בעתיד. בדרך כלל, פירוש הדבר הוא שאנחנו לא מצליחים למצוא את המכשיר המבוקש. יכול להיות גם שחשבון המשתמש לא מקושר ל-Google או שקיבלנו ערך לא תקין בשדהagentUserId
. חשוב לוודא שהערך שלagentUserId
תואם לערך שצוין בתגובה ל-SYNC, ושהטיפול בכוונות DISCONNECT תקין.