Report State היא תכונה חשובה שמאפשרת לפעולה Google 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.
- לוחצים על 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
בוחרים אפשרות מהכרטיסיות הבאות:
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. - קוראים ל-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 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); }
מצב דוח הבדיקה
כדי שהשילוב של Cloud-to-cloud יהיה מוכן לקבלת אישור, חשוב לבדוק את Report State.
לשם כך, מומלץ להשתמש בכלי הצפייה Home Graph, שהוא אפליקציית אינטרנט עצמאית שלא דורשת הורדה או פריסה.
מרכז הבקרה של Report State עדיין זמין, אבל הוא הוצא משימוש ואין יותר תמיכה בו.
מרכז הבקרה של סטטוס הדוחות
דרישות מוקדמות
כדי לבדוק את השילוב של Cloud-to-cloud, צריך את מפתח חשבון השירות ואת agentUserId
. אם כבר יש לכם מפתח לחשבון השירות ו-agentUserId
מופיע, עיינו במאמר פריסה של מרכז הבקרה Report State.
פריסה של מרכז הבקרה 'סטטוס הדוחות'
אחרי שמקבלים את המפתח של חשבון השירות ואת מזהה המשתמש של הסוכן בפרויקט, מורידים את הגרסה האחרונה ומפרסים אותה דרך Report State Dashboard.
אחרי שמורידים את הגרסה האחרונה, פועלים לפי ההוראות בקובץ 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 תקין.