Report State is an important feature which lets the
Google Home Action proactively report the latest status of the
user's device back to Google Home Graph rather than waiting for a
QUERY intent.
Report State وضعیت دستگاههای کاربر را با agentUserId مشخصشده مرتبط با آنها (ارسالشده در درخواست اصلی SYNC) به Google گزارش میدهد. وقتی Google Assistant میخواهد اقدامی انجام دهد که مستلزم درک وضعیت فعلی دستگاه است، میتواند بهجای صادر کردن هدف QUERY برای ابرهای شخص ثالث مختلف قبلاز صادر کردن هدف EXECUTE، بهسادگی اطلاعات وضعیت را در Home Graph جستجو کند.
بدون Report State، با فرض وجود چراغهایی از چندین ارائهدهنده در
اتاق نشیمن، فرمان Ok Google، نور اتاق نشیمن را زیاد کن مستلزم
حل کردن چندین هدف 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، به صفحه حسابهای سرویس بروید.
به صفحه «حسابهای سرویس» بروید.شاید لازم باشد پروژهای را انتخاب کنید تا به صفحه «حسابهای سرویس» هدایت شوید.
روی ایجاد حساب سرویس کلیک کنید.
در فیلد نام حساب سرویس، نامی وارد کنید.
در فیلد شناسه حساب سرویس، شناسهای وارد کنید.
در فیلد شرح حساب سرویس، شرحی وارد کنید.
روی ایجاد و ادامه کلیک کنید.
از منوِ کرکرهای نقش، حسابهای سرویس > ایجادکننده شناسه توکن OpenID Connect حساب سرویس را انتخاب کنید.
روی ادامه کلیک کنید.
روی تمام کلیک کنید.
حساب سرویسی را که بهتازگی ایجاد کردهاید از فهرست حسابهای سرویس انتخاب کنید و مدیریت کلیدها را از منوِ کنشها انتخاب کنید.
افزودن کلید > ایجاد کلید جدید را انتخاب کنید.
برای نوع کلید، گزینه JSON را انتخاب کنید.
روی ایجاد کردن کلیک کنید. فایل JSON حاوی کلیدتان در رایانه بارگیری میشود.
فراخوانی میانای برنامهسازی کاربردی
یکی از گزینههای برگههای زیر را انتخاب کنید:
HTTP
Home Graph نقطه پایان HTTP ارائه میدهد
- از فایل JSON حساب سرویس بارگیریشده برای ایجاد «نشان وب JSON» (JWT) استفاده کنید. برای اطلاعات بیشتر، به اصالتسنجی بااستفاده از حساب سرویس مراجعه کنید.
- بااستفاده از oauth2l، کد دسترسی OAuth 2.0 را با دامنه
https://www.googleapis.com/auth/homegraphدریافت کنید: - درخواست JSON را با
agentUserIdایجاد کنید. در اینجا یک نمونه درخواست JSON برای «گزارش وضعیت» و «اعلان» آورده شده است: - JSON «وضعیت گزارش» و «اعلان» و همچنین توکن را در درخواست HTTP POST خود به نقطه پایانی 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 ارائه میدهد
- تعریف سرویس میانگیری پروتکل را برای Home Graph API دریافت کنید.
- برای تولید کدهای آماده کارخواه برای یکی از زبانهای پشتیبانیشده، اسناد توسعهدهنده gRPC را دنبال کنید.
- با روش ReportStateAndNotification تماس بگیرید.
Node.js
Google APIs Node.js Client برای Home Graph API اتصال فراهم میکند.
- سرویس
google.homegraphرا بااستفاده از اعتبارنامه پیشفرض برنامه مقداردهی اولیه کنید. - روش
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 } } } } } });
جاوا
کتابخانه کارخواه HomeGraph API برای Java اتصالهایی برای Home Graph API ارائه میدهد.
HomeGraphApiServiceرا بااستفاده از اعتبارنامه پیشفرض برنامه مقداردهی اولیه کنید.- روش
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).execute(); }
وضعیت گزارش آزمایش
برای آماده کردن ادغام Cloud-to-cloud برای دریافت گواهینامه، مهم است که Report State را آزمایش کنید.
برای انجام این کار، توصیه میکنیم از ابزار «نمایشگر» Home Graph استفاده کنید، که یک برنامه وب مستقل است و نیازی به بارگیری یا استقرار ندارد.
«داشبورد» Report State هنوز دردسترس است، اما منسوخ شده است و دیگر پشتیبانی نمیشود.
داشبورد وضعیت گزارش
پیشنیازها
قبلاز اینکه بتوانید ادغام Cloud-to-cloud را آزمایش کنید، به
«کلید حساب سرویس» و agentUserId نیاز دارید. اگر ازقبل «کلید حساب سرویس» خود را دارید و agentUserId پیادهسازی
Report State داشبورد را میبینید.
پیادهسازی داشبورد Report State
وقتی «کلید حساب سرویس» و «شناسه کاربر نماینده» را برای پروژهتان دریافت کردید،
جدیدترین نسخه را از
Report State
داشبورد بارگیری و مستقر کنید.
وقتی جدیدترین نسخه را بارگیری کردید، دستورالعملهای موجود در فایل README.MD را دنبال کنید.
پساز استقرار داشبورد Report State، ازطریق نشانی وب زیر به داشبورد دسترسی پیدا کنید (your_project_id را با شناسه پروژه خودتان جایگزین کنید):
http://<your-project-id>.appspot.com
در داشبورد، کارهای زیر را انجام دهید:
- «فایل کلید حساب» خود را انتخاب کنید
- agentUserId خود را اضافه کنید
سپس روی فهرست کلیک کنید.
همه دستگاههایتان فهرست شده است. وقتی فهرست پر شد، میتوانید از دکمه بازآوری برای بهروزرسانی وضعیت دستگاه استفاده کنید. اگر تغییری در وضعیت دستگاه ایجاد شود، ردیف با رنگ سبز برجسته میشود.
گزارش کردن مغایرت وضعیت
دقت وضعیت گزارش مبتنی بر پُرسمان میزان مطابقت آخرین وضعیت گزارش دستگاه با وضعیت دستگاه را هنگام پُرسمان کاربر برای آن میسنجد. انتظار میرود این مقدار روی ۹۹٫۵٪ باشد. برای جزئیات بیشتر درباره وضعیت فعلی دقت وضعیت گزارش پروژه خود، به سلامت دستگاه - دقت وضعیت مراجعه کنید. همچنین میتوانید جزئیات گزارش ثبت مغایرت وضعیت را در کاوشگر گزارشها ببینید.
در اینجا نمونهای از گزارش ثبت مغایرت وضعیت آورده شده است:
{
"insertId": "abcdefgh",
"jsonPayload": {
"reportStateLog": {
"result": "INACCURATE",
"detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_INACCURATE",
"isOffline": false,
"queriedTime": "2026-01-17T03:22:01.732938Z",
"reportedTime": "2024-11-30T15:24:34.052751Z",
"agentId": "google-smart-home-agent-id-example",
"requestId": "84920571364829501736",
"queryReportStateDifferences": {
"queryState": "on_off \t {\n on: true\n}\n",
"reportState": "on_off \t {\n on: false\n}\n"
},
"traitName": "TRAIT_ON_OFF",
"snapshotTime": "2026-01-17T03:22:01.732938Z",
"isMissingField": false,
"deviceType": "action.devices.types.OUTLET",
"stateName": "on",
"deviceId": "sample-device-id",
"accuracy": "INACCURATE"
}
},
"resource": {
"type": "assistant_action_project",
"labels": {
"project_id": "google-smart-home-agent-id-example"
}
},
"timestamp": "2026-01-17T07:16:13.712708257Z",
"severity": "ERROR",
"logName": "projects/google-smart-home-agent-id-example/logs/assistant_smarthome%2Fassistant_smarthome_logs",
"receiveTimestamp": "2026-01-17T07:16:13.712708257Z"
}تعاریف فیلد گزارش ثبت مغایرت وضعیت
| نام فیلد | تعریف |
|---|---|
detailedAccuracyResult |
خلاصه تشخیصی که مغایرت خاص بین محموله «وضعیت گزارش» و پاسخ قصد QUERY را توضیح میدهد. |
queriedTime |
مُهر زمان دقیق وقتی که Google پاسخ QUERY را از ارائهدهنده خدمات دریافت کرد. |
reportedTime |
مُهر زمان دقیق وقتی که اعلان «گزارش وضعیت» باموفقیت توسط Google دریافت شد. |
agentId |
شناسه یکتای پروژه شما (معمولاً شناسه پروژه در Google Home Developer Console). |
requestId |
شناسه همبستگی یکتای مرتبط با پاسخ قصد QUERY خاص. |
queryReportStateDifferences |
شیء یا فهرستی که مشخصههای خاص وضعیت دستگاه را که بین پاسخ QUERY و دادههای «وضعیت گزارش» متفاوت است برجسته میکند. |
پاسخهای خطا
ممکن است هنگام تماس با Report State یکی از پاسخهای خطای زیر را دریافت کنید. این پاسخها بهصورت کدهای وضعیت اچتیتیپی ارائه میشوند.
خطای ۴۰۰ - درخواست نامناسب
سرور نتوانست درخواست ارسالشده ازسوی کارخواه را بهدلیل
نحو نامعتبر پردازش کند. دلایل رایج شامل JSON بدشکل یا استفاده از null
بهجای «» برای مقدار رشتهای است.
404 یافت نشد
منبع درخواستی پیدا نشد اما ممکن است در آینده دردسترس قرار گیرد.
معمولاً این یعنی نمیتوانیم دستگاه درخواستشده را پیدا کنیم. همچنین ممکن است به این معنی باشد که حساب کاربر به Google پیوند داده نشده است یا agentUserId نامعتبری دریافت کردهایم. مطمئن شوید که agentUserId با مقدار ارائهشده در پاسخ
SYNC شما مطابقت داشته باشد و هدفهای
DISCONNECT را بهدرستی مدیریت میکنید.
وقتی تماس ReportState با خطای 404 NOT_FOUND ناموفق میشود، نشاندهنده عدم تطابق همگامسازی بین فضای ابری شما و Home Graph است.
این اتفاق ممکن است زمانی رخ دهد که دستگاهی از Home Graph برداشته شود، یا اگر
کاربری پیوند حسابش را لغو کند.
برای رسیدگی به خطاهای 404 از Report State، از روال زیر استفاده کنید:
- بررسی وضعیت حساب کاربر:
devices.syncرا برایagentUserIdکه خطای ۴۰۴ برگردانده است فراخوانی کنید. این کار کمک میکند مشخص شود خطا مربوط به کل حساب کاربری است یا دستگاهی خاص.- اگر
SYNCخطای ۴۰۴ برگرداند، حساب کاربر دیگر با Google پیوند ندارد. ارسال «وضعیت گزارش» و «درخواست همگامسازی» را برای دستگاههای این کاربر متوقف کنید. - اگر
SYNCکد 200 OK را برگرداند، حساب کاربر همچنان پیوندشده است، یعنی خطای 404 مختص دستگاه است.
- اگر
- تطبیق دادن فهرست دستگاه: اگر
SYNCکد 200 OK را برگرداند، باید مشخص کنید کدام دستگاه(ها) دیگر برای Google شناختهشده نیستند. توصیه میکنیم فهرست دستگاههایی را که Google برای کاربر دارد با پایگاه داده دستگاهتان مقایسه کنید و دستگاههایی را که در فهرست Google وجود ندارند در سیستم خود شناسایی کنید. اگر دستگاهی باید با Google همگامسازی شود اما هنوز با Google همرسانی نشده است، ازSYNCاستفاده کنید تا مطمئن شوید دستگاه با Google همگامسازی شده است. اگر دستگاهی باید از Google لغو پیوند شود، گزارش وضعیت را برای آن دستگاه خاص متوقف کنید و گزارشدهی را برای سایر دستگاههای معتبر تحت آنagentUserIdادامه دهید.
گزارش وضعیت آنلاین و آفلاین
وقتی دستگاهی آفلاین است، باید <code{"online": code="" dir="ltr" false}<="" translate="no"> را به گزارش وضعیت ظرف پنج دقیقه از رفتار دستگاه گزارش کنید. برعکس، وقتی دستگاه به حالت آنلاین برمیگردد، باید ظرف پنج دقیقه از رفتار دستگاه، <code{"online": code="" dir="ltr" translate="no" true}<=""> را به گزارش وضعیت گزارش دهید. هرگاه دستگاهی دوباره آنلاین شود، شریک باید همه وضعیتهای فعلی دستگاه را بااستفاده ازreportStateAndNotification API گزارش کند.
این مثال نشان میدهد که نوع دستگاه light آنلاین است و همه وضعیتهای فعلی دستگاه را گزارش میکند.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}