מצב דוח

Report State היא תכונה חשובה שמאפשרת לפעולה Home לדווח באופן יזום על הסטטוס האחרון של המכשיר של המשתמש ל-Google Home Graph במקום להמתין ל-Intent מסוג QUERY.

Report State מדווח ל-Google על המצבים של מכשירי המשתמשים שה-agentUserId שצוין משויך אליהם (נשלח בבקשת SYNC המקורית). כש-Google Assistant רוצה לבצע פעולה שדורשת הבנת המצב הנוכחי של המכשיר, הוא יכול פשוט לחפש את פרטי המצב ב-Home Graph במקום להנפיק Intent של QUERY לעננים שונים של צד שלישי לפני ביצוע הכוונה של EXECUTE.

בלי Report State, בהינתן תאורה ממספר ספקים בסלון, כדי להשתמש בפקודה Ok Google, מואר בסלון, צריך לפתור כמה כוונות של QUERY שנשלחו למספר עננים, במקום לחפש פשוט את ערכי הבהירות הנוכחיים על סמך הנתונים שדווחו בעבר. כדי ליהנות מחוויית המשתמש הטובה ביותר, Assistant צריך להיות במצב הנוכחי של המכשיר, בלי צורך בנסיעה הלוך ושוב למכשיר.

אחרי ה-SYNC הראשוני של המכשיר, הפלטפורמה שולחת Intent מסוג QUERY שאוסף את מצב המכשיר כדי לאכלס את Home Graph. לאחר מכן, Home Graph שומר רק את המצב שנשלח עם Report State.

כששולחים קריאה ל-Report State, חשוב לספק את נתוני המצב המלאים של מאפיין נתון. Home Graph מעדכנת את המצבים לפי תכונה ומחליפה את כל הנתונים של התכונה הזו כשמתבצעת קריאה ל-Report State. לדוגמה, אם אתם מדווחים על מצב של התכונה StartStop, המטען הייעודי צריך לכלול ערכים של isRunning וגם של isPaused.

שנתחיל?

כדי להטמיע את Report State צריך לבצע את השלבים הבאים:

הפעלת Google Home Graph API

  1. ברכיב Google Cloud Console, עוברים לדף Home Graph API.

    לדף Home Graph API
  2. צריך לבחור את הפרויקט שתואם למזהה הפרויקט ב-smart home.
  3. לוחצים על הפעלה.

יצירת מפתח לחשבון שירות

כדי ליצור מפתח לחשבון שירות מ-Google Cloud Console, יש לפעול לפי ההוראות הבאות:

הערה: חשוב לוודא שאתם משתמשים בפרויקט GCP הנכון כשאתם מבצעים את השלבים האלה. זהו הפרויקט שתואם למזהה הפרויקט ב-smart home.
  1. באפליקציית Google Cloud Console, עוברים לדף Create service account key.

    כניסה לדף Create Service Account Key
  2. ברשימה Service account בוחרים באפשרות New service account.
  3. כותבים שם בשדה Service account name.
  4. מזינים מזהה בשדה Service account ID.
  5. ברשימה Role בוחרים באפשרות Service Accounts > Service Account Token Creator.

  6. בשדה Key type, בוחרים באפשרות JSON.

  7. לוחצים על יצירה. קובץ JSON שמכיל את ההורדות של המפתח למחשב.

שליחת קריאה ל-API

בוחרים אפשרות מהכרטיסיות הבאות:

HTTP

השדה Home Graph מספק נקודת קצה (endpoint) של HTTP

  1. משתמשים בקובץ ה-JSON של חשבון השירות שהורדתם כדי ליצור אסימון אינטרנט מסוג JSON (JWT). למידע נוסף, ראו אימות באמצעות חשבון שירות.
  2. משיגים אסימון גישה מסוג OAuth 2.0 עם ההיקף https://www.googleapis.com/auth/homegraph באמצעות oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. יוצרים את בקשת ה-JSON עם התג agentUserId. הנה דוגמה לבקשת JSON למצב הדוח ולהתראה:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. משלבים את ה-JSON 'מצב דוח' ו-'Notification' עם האסימון בבקשת ה-HTTP POST אל נקודת הקצה של Google Home Graph. דוגמה לאופן שבו שולחים את הבקשה בשורת הפקודה באמצעות curl, בתור בדיקה:
  7. 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

  1. מורידים את ההגדרה של שירות מאגר נתונים זמני של פרוטוקולים ל-Home Graph API.
  2. יש לעיין במסמכי התיעוד למפתחים בנושא gRPC כדי ליצור מודלים של לקוחות (stubs) עבור אחת מהשפות הנתמכות.
  3. קוראים ל-method ReportStateAndNotification.

Node.js

לקוח Google APIs Node.js מספק קישורים עבור ה-API של Home Graph.

  1. מפעילים את השירות google.homegraph באמצעות Application Default Credentials.
  2. מפעילים את השיטה 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

ספריית הלקוח של Home Graph API ל-Java מספקת קישורים ל-Home Graph API.

  1. מאתחלים את HomeGraphApiService באמצעות Application Default Credentials.
  2. מפעילים את השיטה 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

לאחר מכן לוחצים על רשימה.

כל המכשירים שלך רשומים. אחרי שהרשימה תאוכלס, אפשר יהיה להשתמש בלחצן רענן כדי לעדכן את מצבי המכשיר. אם יש שינוי במצב המכשיר, השורה תודגש בירוק.

תשובות לשגיאות

יכול להיות שאחת מתגובות השגיאה הבאות תופיע כשתתבצע שיחה אל Report State. התגובות האלה מגיעות כקודי סטטוס HTTP.

  • 400 Bad Request – השרת לא הצליח לעבד את הבקשה שנשלחה על ידי הלקוח בגלל תחביר לא חוקי. יש כמה סיבות נפוצות לכך: פורמט JSON שגוי או שימוש ב-null במקום ב-"" בערך מחרוזת.
  • 404 Not Found – לא ניתן למצוא את המשאב המבוקש אבל יכול להיות שהוא יהיה זמין בעתיד. בדרך כלל המשמעות היא שלא הצלחנו למצוא את המכשיר המבוקש. יכול להיות גם שחשבון המשתמש לא מקושר ל-Google או שקיבלנו ערך לא תקין בשדה agentUserId. חשוב לוודא שה-agentUserId תואם לערך שצוין בתשובה של הסנכרון, ושאתם מטפלים באובייקטים מסוג DISCONNECT בצורה נכונה.