חבילת לוחות הבקרה וההתראות הזו עוזרת לכם לשמור על אינטגרציה באיכות גבוהה עם הסביבה העסקית של Google Home. Google מחויבת לתמוך בשותפים בפיתוח סביבה איכותית לכל הלקוחות
מרכז הבקרה מחולק לשלושה חלקים, שכל אחד מהם מתייחס לחלק חשוב שמשפיע על האיכות של השילוב הכולל.
Google to Partner Metrics – מדד שבודק את תקינות הקריאות מ-Google אל הבק אנד בענן.
System Health - Partner to Google Metrics – מדד שבודק את תקינות הקריאות מהמערכת שלכם אל Google.
Device Health - State Accuracy – מדד שבודק את הדיוק של המצבים שמאוחסנים במערכות של Google, שמשמשים כדי להחזיר תשובות לשאילתות של משתמשים.
אם ערכי המדדים לא עומדים בערכי היעד, הם מודגשים באדום כדי לציין בעיה שיכולה להשפיע על חוויית המשתמש. בהמשך מפורט כל יעד ומצוין למה הוא חשוב למשתמשים.
אם הלחיצה על הלחצן הבא לא מעבירה אתכם ישירות ללוח הבקרה, אתם יכולים להגיע אליו על ידי בחירה בדף סקירה כללית, בחירה באפשרות לוחות בקרה ואז בחירה באפשרות לוח הבקרה של Google Home Vitals (Cloud) מתוך הרשימה לוחות הבקרה שלי.
מדדי Google לשותף
המדד Query/Execute Success Rate >= 99.5% מודד את התדירות שבה הפקודות של המשתמשים מבוצעות בצורה נכונה. המדד הזה עוזר להימנע מתשובות של Assistant כמו "אין לי גישה למכשיר" או מאישור שגוי של פקודה שלא בוצעה.
מהי ההגדרה של 'הצלחה'?
עסקה מסומנת כהצלחה אם פלטפורמת Google Home מקבלת תגובה תקפה שמציינת שהפעולה המיועדת בוצעה או שהמצב המבוקש אוחזר.
תגובות שכוללות חריגים שלא חוסמים (לדוגמה, סטטוס SUCCESS עם חריג lowBattery) נספרות כעסקאות מוצלחות.
הפקודה הגיעה למכשיר והכוונה הושגה למרות האזהרה.
מהי הגדרה של 'כשל'?
השגיאות שמופיעות בקטע קודי שגיאה נפוצים בפלטפורמה ומסומנות כנדרשת פעולה מצד השותף נחשבות כ'כשלים' בחישוב שיעורי ההצלחה של שאילתות וביצועים. בנוסף, השגיאות שמופיעות בדף Errors and exceptions הן גם 'כשלים', למעט השגיאות הבאות:
| חריגות שקשורות לכשלים | ||
|---|---|---|
| aboveMaximumLightEffectsDuration | armLevelNeeded | inOffMode |
| alreadyArmed | bagFull | lockedToRange |
| alreadyAtMax | belowMinimumLightEffectsDuration | lowBattery |
| alreadyAtMin | binFull | maxSpeedReached |
| alreadyClosed | cancelArmingRestricted | minSpeedReached |
| alreadyDisarmed | deadBattery | notSupported |
| alreadyDocked | degreesOutOfRange | לא מקוון |
| alreadyInState | deviceJammingDetected | percentOutOfRange |
| alreadyLocked | deviceNotMounted | rangeTooClose |
| alreadyOff | deviceNotReady | relinkRequired |
| alreadyOn | deviceOffline | remoteSetDisabled |
| alreadyOpen | deviceTurnedOff | safetyShutOff |
| alreadyPaused | discreteOnlyOpenClose | targetAlreadyReached |
| alreadyStarted | functionNotSupported | tooManyFailedAttempts |
| alreadyStopped | inAutoMode | valueOutOfRange |
| alreadyUnlocked | inEcoMode |
המדד Query/Execute Latency (p90) <= 1000ms מודד את זמן ההמתנה של פעולה שבוקשה ועוזר לוודא שהמשתמשים לא צריכים לחכות יותר מדי זמן, למשל, לחכות כמה שניות עד שהאור ייכבה.
מדדי זמן אחזור
זמן האחזור הוא אינדיקטור קריטי לרמת הרספונסיביות של השילוב עבור משתמש הקצה. בלוח הבקרה מוצג נתון השהייה באחוזון ה-90 (P90), שמייצג את החוויה של המשתמשים ה "איטיים" ביותר (לדוגמה, P90 של 800ms פירושו ש-90% מהבקשות מאושרות תוך 800ms או פחות).
Google מודדת את זמן האחזור באופן שונה בבדיקות סטטוס ובפקודות למכשירים, כדי להבטיח דיוק טכני.
1. זמן האחזור של השאילתה (שאילתה)
המדד הזה מודד את Cloud-to-cloud זמן הלוך ושוב כש-Google מבקשת את המצב הנוכחי של מכשיר.
- התחלה: Google שולחת בקשת
action.devices.QUERYלכתובת ה-URL של מרכז הבקשות. - חלון המדידה: הזמן שנדרש לענן לקבל, לעבד ולהעביר את תגובת ה-HTTP המלאה בחזרה אל Google.
- סיום: Google מקבלת את מטען הנתונים של התגובה הסופית מהשירות שלכם ומאשרת את קבלתו.
2. זמן האחזור של הפעולה EXECUTE (הפעלה)
המדד הזה מודד את הזמן שחולף מרגע ש-Google שולחת בקשת שליטה למכשיר ועד לרגע שמתקבל אישור על ביצוע הפקודה.
- התחלה: Google שולחת בקשת
action.devices.EXECUTEלכתובת ה-URL של מרכז הבקשות. - חלון המדידה: הזמן שחלף מרגע שליחת הפקודה לענן ועד לקבלת תשובת אישור.
- סיום: Google מקבלת את תגובת הסטטוס
SUCCESS,PENDINGאוOFFLINE. - היקף טכני: המדד הזה מודד את הזמן שחלף בין קבלת אישור התגובה בענן של Google לבין קבלת אישור התגובה בענן שלכם. המדד לא מודד את הזמן שנדרש לחומרה הפיזית (לדוגמה, נורת חשמל) כדי להשלים את השינוי במצב הפיזי, כי בדרך כלל יש השהיה ברשת אריג מקומית שאינה חלק מהנתיב בין הענן לענן.
אפשרויות להפחתת זמן הטעינה
המלצות לארכיטקטורה של ניתוב גיאוגרפי
אם הטמעה של כתובת IP מסוג Anycast לא אפשרית, מומלץ להשתמש בחלופות הבאות שחוסכות עלויות כדי לוודא שהמשתמשים מקבלים שירות ממרכז הנתונים האזורי הקרוב ביותר.
איזון עומסים גלובלי (GLB)
במקום ניתוב סטטי, משתמשים במאזן עומסים של אפליקציות גלובלי (זמין מרוב ספקי הענן הגדולים).
איך זה עובד: מגדירים נקודת כניסה גלובלית אחת (כתובת URL) שנמצאת בקצה הרשת. מאזן העומסים מזהה אוטומטית את המקור הגיאוגרפי של הבקשה מאשכולות המילוי של Google ומנתב את התנועה אל קצה העורף האזורי הקרוב ביותר שפועל בצורה תקינה.
היתרון: כך אפשר ליהנות מהביצועים של Anycast עם מורכבות ועלות הגדרה נמוכות משמעותית.
מערכת DNS שמודעת למיקום גיאוגרפי (GeoDNS)
איך זה עובד: מגדירים את ספק ה-DNS כך שיפענח את כתובת ה-URL של מרכז הלוגיסטיקה לכתובות IP שונות על סמך המיקום הגיאוגרפי של שאילתת ה-DNS.
הטמעה: צריך לוודא שספק ה-DNS שלכם מותאם לנקודות היציאה של Google. כששירותי ההשלמה האזוריים של Google (לדוגמה, בארה"ב, באיחוד האירופי או באסיה) פותרים את הדומיין שלכם, הם מקבלים את כתובת ה-IP של מרכז הנתונים באזור הספציפי הזה.
אסטרטגיות אופטימיזציה בשכבת האפליקציה
בנוסף לניתוב ברמת התשתית, אפשר להטמיע את האסטרטגיות הבאות בשכבת האפליקציות כדי לצמצם את זמן הטעינה בעיבוד הבקשות.
שיטת ה-Proxy של Trampoline
אם אתם חייבים לשמור על מרכז נתונים ראשי, השתמשו בשרתי proxy אזוריים קלי משקל (Trampolines) כדי לטפל בלחיצת היד הראשונית.
מערכת Google ניגשת לכתובת ה-URL הגלובלית.
בקשה מתקבלת על ידי שרת proxy אזורי (לדוגמה, פונקציית Nginx או Lambda קלה).
ה-proxy מעביר את מטען הנתונים דרך עמוד השדרה הפנימי והמהיר שלכם למסד הנתונים הראשי.
היתרון: הפעולה הזו מקצרת את הזמן של 'לחיצת היד של TCP', שלרוב תורמת הכי הרבה לזמן הטעינה של בקשות למרחקים ארוכים.
רמזים לגבי אזור של טוקן גישה
במהלך תהליך קישור החשבון (OAuth), המערכת שלכם יכולה לזהות את האזור הביתי של המשתמש.
הטמעה: מקודדים מזהה אזור ב-
access_tokenשהונפק ל-Google. כש-Google שולחת בקשת הפצה, שער התשלומים יכול לבדוק את האסימון באופן מיידי ולנתב את הבקשה לאשכול האזורי הנכון בלי לבצע חיפוש במסד נתונים.
תקינות המערכת – מדדי שותף ל-Google
שמירה על שיעור הצלחה של 99.5% ומעלה עוזרת לוודא שהסטטוסים של המכשירים נכונים ב-Google Home, שהמכשירים מתווספים ומוסרים, שהאוטומציות מופעלות ושאירועי ההיסטוריה מופיעים בכרטיסייה "פעילות" של Google Home app (GHA).
שיעור ההצלחה מחושב על סמך קודי תגובת HTTP שמוחזרים על ידי Google כשאתם שולחים עדכוני סטטוס בענן. כדי לוודא שלא נטיל על השותפים קנסות בגלל בעיות בתשתית בצד של Google, המדד לא כולל בספירת הכשלים שגיאות פנימיות של Google. הקריאות ל-API שכלולות בחישוב מפורטות בהפניית HomeGraph API.
מהי ההגדרה של 'הצלחה'?
2xx (הצלחה): עדכון המצב התקבל ועובד בהצלחה על ידי Home Graph.
מהי הגדרה של 'כשל'?
שגיאות 4xx (שגיאות של שותף) מייצגות כשלים ומצביעות על בעיה בבקשה שנשלחה מהענן שלכם. דוגמאות לקודים נפוצים:
400 בקשה שגויה
הסיבה: השרת לא הצליח לעבד את הבקשה בגלל תחביר לא תקין. הסיבות הנפוצות לכך הן JSON לא תקין או שימוש בערך null במקום "" לערך מחרוזת.
פתרון: מוודאים שגוף הבקשה הוא JSON תקין (אין מבנה פגום או ערכי null בשדות מחרוזת), ומוודאים שהערך agentUserId תואם לערך מתגובת ה-SYNC.
שגיאת 404
הסיבה: לא נמצאו deviceId או agentUserId ב-HomeGraph (עדיין לא סונכרנו, כבר בוטל הקישור או שיש אי התאמה במזהה).
פתרון:
- חשוב לוודא שהערך
agentUserIdזהה לערך שצוין בתגובת הסנכרון. - כדי לקבוע אם השגיאה 404 Not Found נגרמת בגלל מכשיר או משתמש חסרים ב-HomeGraph, צריך להשתמש ב-Home Graph SYNC API.
- חשוב להפעיל את
requestSyncאחרי שמוסיפים, מסירים, משנים את השם או מעדכנים מכשיר או חשבון, כדי לוודא שהסטטוס יישאר מעודכן. - טיפול נכון ב-intents של
DISCONNECTכדי להפסיק את הדיווח על מכשירים לא פעילים. אחרי קבלת הכוונהDISCONNECT, שירות הענן צריך להפסיק לפרסם שינויים ב-Google באמצעות Request Sync ו-Report State.
429: המשאבים מוצו
הסיבה: חרגתם מהמכסה שהוקצתה לשילוב.
פתרון: אפשר לעיין בהוראות שבקטע 'שלב 2א: ניפוי באגים בבעיות שקשורות למכסה' בלוח הבקרה לניהול מכסות. מידע נוסף זמין במאמר מכסות ומגבלות של בית חכם.
תקינות המכשיר – דיוק המצב
אם רמת הדיוק של המצב היא 99.5% ומעלה, המשתמשים יראו תוצאות נכונות כשהם יסתכלו על המצבים של המכשיר או ישתמשו בתכונות מבוססות-AI כמו "שאלת הבית". אם רמת הדיוק של המצב נמוכה, יכול להיות שהאוטומציות לא יופעלו והערכים בהיסטוריה לא יופיעו בכרטיסיית הפעילות של GHA בזמן הנכון. מידע נוסף מופיע במאמר בנושא דיווח של המצב.
לוח הבקרה של האיכות עוקב אחרי המדד הזה מדי שעה באמצעות שני מדדים נפרדים: דיוק כולל והשילוב הנמוך ביותר של סוג/מאפיין.
1. רכיבי הדיוק
המדד נגזר מ "דגימות" שבהן Google יכולה לאמת את המצב המדווח מול תוצאה ידועה של כוונת המשתמש.
2. מדדים בלוח הבקרה (חישוב שעתי)
לוח הבקרה מחשב את רמת הדיוק על בסיס מרווח של שעה. אם בשעה מסוימת יש פחות מ-100 דגימות כוללות (S_Total < 100), הדיוק של השעה הזו מוגדר כ-N/A.
תצוגה 1: דיוק כולל (ממוצע גלובלי)
הערך הזה מייצג את רמת הדיוק הכוללת של השילוב בכל סוגי המכשירים ובכל התכונות יחד. הוא מספק ממוצע משוקלל של תקינות כל המערכת האקולוגית שלכם.
- חישוב: סך הדיוק של המצב בכל המכשירים חלקי סך המצב הכולל בכל המכשירים.
תצוגה 2: השילוב הנמוך ביותר של סוג/מאפיין
הקטגוריה הזו מציינת את הקטגוריה הספציפית הכי לא אמינה בשילוב. היא מונעת ממכשירים עם עוצמת קול גבוהה ובאיכות גבוהה להסתיר מכשירים עם עוצמת קול נמוכה ובאיכות נמוכה. לדוגמה, אם יש לכם נפח גבוה של נורות עם דיוק מצב מעל 99.5%, אבל נפח נמוך של מתגים עם דיוק מצב נמוך, זה מצביע על הצורך בשיפור המתגים, שיכול להיות שלא יופיע בערך ממוצע.
- חישוב: המינימום של דיוק המצב חלקי סך המצב לכל השילובים של מאפיין/מכשיר.
3. שיפור הדיוק של תקינות המכשיר והמצב שלו
אי התאמות מתרחשות כשהמצב שמאוחסן ב-Home Graph לא תואם לתוצאות של שאילתה בזמן אמת.
השגיאות "חסר שדה"
DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD example
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD" deviceId: "curtain" deviceType: "action.devices.types.CURTAIN" isMissingField: true isOffline: false queriedTime: "2026-04-13T12:20:26Z" queryReportStateDifferences: { queryState: "open_close { open_percent: 0.0 missing open_direction }" reportState: "open_close { open_state { open_percent: 100.0 open_direction: "LEFT" } }" } reportedTime: "2022-05-13T07:14:35Z" requestId: "123" result: "INACCURATE" snapshotTime: "2026-04-13T12:20:26Z" stateName: "open_state" traitName: "TRAIT_OPEN_CLOSE" }
DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD example
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD" deviceId: "sensor" deviceType: "action.devices.types.SENSOR" isMissingField: true isOffline: false queriedTime: "2026-04-28T10:40:33Z" queryReportStateDifferences: { queryState: "temperature_setting { thermostat_mode: "off" thermostat_temperature_ambient: 20.0 active_thermostat_mode: "none" }" reportState: "temperature_setting { thermostat_mode: "off" active_thermostat_mode: "none" }" } reportedTime: "2024-09-20T15:00:00Z" requestId: "123" result: "INACCURATE" snapshotTime: "2026-04-28T10:40:33Z" stateName: "thermostat_temperature_ambient" traitName: "TRAIT_TEMPERATURE_SETTING" }
הסיבה: בשגיאה DETAILED_ACCURACY_RESULT_QUERY_STATE_MISSING_FIELD או DETAILED_ACCURACY_RESULT_REPORT_STATE_MISSING_FIELD, קבוצת השדות של מטען הייעודי שונה בין תגובת ה-QUERY לבין בקשת Report State עבור אותו מכשיר.
פתרון: מוודאים שמבנה הנתונים זהה בשני הנתיבים. אם מאפיין כלול ב-SYNC, השדות התואמים שלו צריכים להיות נוכחים ועקביים גם בדוחות הפרואקטיביים וגם בשאילתות הריאקטיביות.
שגיאות מסוג 'לא מדויק'
דוגמה ל-DETAILED_ACCURACY_RESULT_INACCURATE
reportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_INACCURATE" deviceId: "outlet" deviceType: "action.devices.types.OUTLET" isMissingField: false isOffline: false queriedTime: "2026-04-12T16:02:58Z" queryReportStateDifferences: { queryState: "on_off { on: false }" reportState: "on_off { on: true }" } reportedTime: "2025-03-10T01:56:44Z" requestId: "abc" result: "INACCURATE" snapshotTime: "2026-04-12T16:02:58Z" stateName: "on" traitName: "TRAIT_ON_OFF" }
הסיבה: בשגיאה DETAILED_ACCURACY_RESULT_INACCURATE, יש אי התאמה בין הערך שמוחזר בתגובת השאילתה לבין הערך האחרון של מצב הדוח.
פתרון: מוודאים שהפעולה Report State מופעלת בכל פעם שסטטוס המכשיר משתנה, ושהפעולות Report State ו-QUERY תמיד מספקות את אותם ערכים מדויקים ועדכניים ואת כל השדות הנדרשים כדי לשמור על עקביות הנתונים.
דוגמה ל-DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE
"reportStateLog": { "isMissingField": false, "snapshotTime": "2026-04-13T07:56:21Z", "traitName": "TRAIT_ON_OFF", "detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE", "executionReportStateDifferences": { "expectedPostExecutionDeviceState": { "onOff": { "on": false } }, "preExecutionDeviceState": { "onOff": { "on": true } }, "executionCommand": { "requestId": "test001", "beginTimestamp": "2026-04-13T07:56:20Z", "action": { "trait": "TRAIT_ON_OFF", "actionType": "ONOFF_OFF" }, "status": { "statusType": "SUCCESS_STATUS" }, "endTimestamp": "2026-04-13T07:56:21Z", "executionType": "PARTNER_CLOUD" }, "reportState": {} }, "accuracy": "MISSING_REPORT_STATE", "deviceType": "action.devices.types.LIGHT", "agentId": "abc", "stateName": "on", "result": "MISSING_REPORT_STATE" }
הסיבה: בשגיאה DETAILED_ACCURACY_RESULT_MISSING_REPORT_STATE, השותף ביצע את הפקודה בהצלחה, אבל לא דיווח ל-Google על מצב המכשיר המעודכן.
פתרון: תמיד שולחים עדכון של מצב הדוח אחרי הפעלת הפקודה, כדי ש-HomeGraph יקבל את מצב המכשיר החדש.
דוגמה ל-DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED
eportStateLog: { accuracy: "INACCURATE" agentId: "abc" detailedAccuracyResult: "DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED" deviceId: "switch" deviceType: "action.devices.types.SWITCH" isMissingField: false isOffline: true queriedTime: "2026-04-13T13:53:26Z" queryReportStateDifferences: { queryState: "online { online: false } " reportState: "" } reportedTime: "1970-01-01T00:00:00Z" requestId: "test001" result: "INACCURATE" snapshotTime: "2026-04-13T13:53:26Z" stateName: "online" traitName: "TRAIT_ONLINE" }
הסיבה: בשגיאה DETAILED_ACCURACY_RESULT_NO_STATE_REPORTED, לא התקבל Report State עבור המכשיר הזה (המצב ריק וחותמת הזמן שדווחה היא תקופה של זמן מערכת), למרות שתוצאות ה-QUERY מספקות את הסטטוס הנוכחי.
המשמעות היא שעדכוני המצב לא מופעלים, לא מגיעים ל-HomeGraph או שהמכשיר לא מדווח על מעברים בקישוריות או בסטטוס התפעולי שלו.
פתרון: מוודאים שהפעלת Report State מתבצעת ושליחתה מצליחה בכל שינוי במצב. מוודאים שהלוגיקה של ה-Backend מטפלת נכון בעדכוני סטטוס, מאשרת את הצלחת המסירה ל-Google HomeGraph ומוודאת שהמכשיר מסנכרן באופן עקבי את המצב שלו כדי לשמור על דיוק ממשק המשתמש ומנוע האוטומציה.