בקשה לסנכרון

התכונה 'בקשת סנכרון' מפעילה בקשת SYNC למילוי ההזמנות לכל משתמש Google שיש לו מכשירים שמשויכים אליהם agentUserId (ששלחתם בבקשת הסנכרון המקורית). כך אפשר לעדכן את המכשירים של המשתמשים בלי לבטל את הקישור של החשבון שלהם ולקשר אותו מחדש. כל המשתמשים שמקושרים למזהה הזה יקבלו בקשת SYNC.

צריך להפעיל בקשת SYNC:

  • אם המשתמש מוסיף מכשיר חדש.
  • אם המשתמש מסיר מכשיר קיים.
  • אם המשתמש משנה שם של מכשיר קיים.
  • אם אתם מטמיעים סוג מכשיר חדש או תכונה חדשה, או מוסיפים תכונה חדשה במכשיר.

שנתחיל?

כדי ליישם את בקשת הסנכרון, יש לבצע את השלבים הבאים:

הפעלת 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 API יש נקודת קצה (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. {
      "agentUserId": "user-123"
    }
    
  6. משלבים את ה-JSON של בקשת הסנכרון עם האסימון בבקשת ה-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:requestSync"
    

gRPC

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

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

Node.js

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

  1. מפעילים את השירות google.homegraph באמצעות Application Default Credentials.
  2. מפעילים את ה-method requestSync באמצעות RequestSyncDevicesRequest. היא מחזירה Promise עם RequestSyncDevicesResponse ריק.
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.requestSync({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    async: false
  }
});
    

Java

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

  1. מאתחלים את HomeGraphApiService באמצעות Application Default Credentials.
  2. מפעילים את השיטה requestSync עם RequestSyncDevicesRequest. הפונקציה מחזירה ערך ריק של 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();

// Request sync.
RequestSyncDevicesRequest request =
    new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false);
homegraphService.devices().requestSync(request);
    

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

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

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