اعلانها به یکپارچهسازی Cloud-to-cloud شما اجازه میدهند تا Google Assistant برای ارتباط با کاربران در مورد رویدادها یا تغییرات مهم مربوط به دستگاه استفاده کند. میتوانید اعلانها را برای هشدار به کاربران در مورد رویدادهای به موقع دستگاه، مثلاً زمانی که کسی پشت در است، یا برای گزارش تغییر وضعیت درخواستی دستگاه، مانند زمانی که قفل درب با موفقیت باز شده یا گیر کرده است، پیادهسازی کنید.
ادغام Cloud-to-cloud شما میتواند انواع اعلانهای زیر را برای کاربران ارسال کند:
اعلانهای پیشگیرانه : بدون هیچ درخواست قبلی کاربر از دستگاههای smart home ، مانند زنگ در، کاربر را از رویدادی در دستگاه هوشمند مطلع میکند.
پاسخهای پیگیری : تأییدیهای مبنی بر موفقیتآمیز بودن یا نبودن درخواست دستور دستگاه، مثلاً هنگام قفل کردن در. از این هشدارها برای دستورات دستگاه که تکمیل آنها زمان میبرد، استفاده کنید. پاسخهای پیگیری فقط زمانی پشتیبانی میشوند که درخواستهای دستور دستگاه از بلندگوهای هوشمند و نمایشگرهای هوشمند ارسال شوند.
Assistant این اعلانها را به صورت اعلانهایی در بلندگوهای هوشمند و نمایشگرهای هوشمند به کاربران ارائه میدهد. اعلانهای فعال به طور پیشفرض غیرفعال هستند. کاربران میتوانند همه اعلانهای فعال را از Google Home app (GHA) روشن یا خاموش کنند.
رویدادهایی که اعلانها را فعال میکنند
وقتی رویدادهای دستگاه رخ میدهد، بخش سفارشات شما یک درخواست اعلان به گوگل ارسال میکند. ویژگیهای دستگاهی که ادغام Cloud-to-cloud شما پشتیبانی میکند، تعیین میکند که چه نوع رویدادهای اعلانی در دسترس هستند و چه دادههایی را میتوانید در آن اعلانها بگنجانید.
ویژگیهای زیر از اعلانهای پیشگیرانه پشتیبانی میکنند:
| صفت | رویدادها | 
|---|---|
| ObjectDetection | اشیاء شناسایی شده توسط دستگاه، مانند زمانی که یک چهره شناخته شده در درب شناسایی میشود. به عنوان مثال: "آلیس و باب در درب ورودی هستند." | 
| RunCycle | دستگاه یک چرخه را کامل میکند. برای مثال: "چرخه ماشین لباسشویی کامل شده است." | 
| SensorState | دستگاه، وضعیت حسگر پشتیبانیشده را تشخیص میدهد. برای مثال: «دتکتور دود، دود را تشخیص میدهد.» | 
ویژگیهای زیر از پاسخهای تکمیلی پشتیبانی میکنند:
| صفت | رویدادها | 
|---|---|
| LockUnlock |  وضعیت تکمیل و تغییر حالت پس از اجرای دستور action.devices.commands.LockUnlock دستگاه. به عنوان مثال: "درب جلو قفل شده است" یا "درب جلو گیر کرده است." | 
| NetworkControl |  وضعیت تکمیل و تغییر حالت پس از اجرای دستور action.devices.commands.TestNetworkSpeed device. به عنوان مثال: "تست سرعت شبکه شما به پایان رسیده است. سرعت دانلود روی روتر دفتر در حال حاضر 80.2 کیلوبیت بر ثانیه و سرعت آپلود 9.3 کیلوبیت بر ثانیه است." | 
| OpenClose |  وضعیت تکمیل و تغییر حالت پس از اجرای دستور action.devices.commands.OpenClose دستگاه. به عنوان مثال: "درب جلو باز شده است" یا "درب جلو قابل باز شدن نیست."  | 
همه انواع دستگاهها از اعلانها برای ویژگیهای مربوطه پشتیبانی میکنند.
برای ادغام ابر به ابر خود، اعلان بسازید
اعلانها را در این مراحل به ادغام Cloud-to-cloud خود اضافه کنید:
-  اگر اعلانها از برنامه دستگاه smart home شما فعال هستند، به گوگل اطلاع دهید. اگر کاربران اعلانها را در برنامه شما فعال یا غیرفعال میکنند، یک درخواست 
SYNCارسال کنید تا گوگل را از تغییر دستگاه مطلع کنید. -  وقتی یک رویداد یا تغییر وضعیت دستگاه رخ میدهد که باعث ایجاد یک اعلان میشود، با فراخوانی API Report State 
reportStateAndNotificationیک درخواست اعلان ارسال کنید. اگر وضعیت دستگاه تغییر کرد، میتوانید هم وضعیت و هم بار داده اعلان را در فراخوانی Report State و Notification خود با هم ارسال کنید. 
بخشهای بعدی این مراحل را با جزئیات بیشتری پوشش میدهند.
مشخص کنید که آیا اعلانها در برنامه شما فعال هستند یا خیر
کاربران میتوانند با فعال کردن این ویژگی در GHA ، انتخاب کنند که آیا میخواهند اعلانهای پیشگیرانه دریافت کنند یا خیر. در برنامه دستگاه smart home خود، میتوانید به صورت اختیاری قابلیتی را اضافه کنید که کاربران بتوانند اعلانها را از دستگاه، مثلاً از تنظیمات برنامه، به طور صریح تغییر دهند.
 با ایجاد یک درخواست همگامسازی (Request SYNC) برای بهروزرسانی دادههای دستگاه، به گوگل اطلاع دهید که اعلانها برای دستگاه شما فعال شدهاند. هر زمان که کاربران این تنظیم را در برنامه شما تغییر میدهند، باید یک درخواست SYNC مانند این ارسال کنید.
 در پاسخ SYNC خود، یکی از این بهروزرسانیها را ارسال کنید:
-  اگر کاربر به صراحت اعلانها را در برنامه دستگاه شما فعال کرده است، یا اگر گزینهای برای فعال کردن اعلانها ارائه ندادهاید، ویژگی 
devices.notificationSupportedByAgentرا رویtrueتنظیم کنید. -  اگر کاربر صراحتاً اعلانها را در برنامه دستگاه شما غیرفعال کرده است، ویژگی 
devices.notificationSupportedByAgentرا رویfalseتنظیم کنید. 
قطعه کد زیر مثالی از نحوه تنظیم پاسخ SYNC شما را نشان میدهد:
devices: [{
   id: 'device123',
   ...
   notificationSupportedByAgent: true,
}]
ارسال درخواستهای اعلان به گوگل
برای فعال کردن اعلانها در Assistant ، درخواست شما از طریق فراخوانی API Report State و اعلان ، یک بار داده اعلان را به Google Home Graph ارسال میکند.
فعال کردن API گوگل هومگراف
در Google Cloud Console ، به صفحه HomeGraph API بروید.
به صفحه HomeGraph API بروید- پروژهای را انتخاب کنید که با شناسه پروژه smart home شما مطابقت داشته باشد.
 - روی فعال کردن (ENABLE) کلیک کنید.
 
ایجاد کلید حساب سرویس
برای تولید کلید حساب سرویس از Google Cloud Console این دستورالعملها را دنبال کنید:
در Google Cloud Console ، به صفحه حسابهای سرویس بروید.
به صفحه حسابهای سرویس بروید .ممکن است لازم باشد قبل از اینکه به صفحه حسابهای سرویس هدایت شوید، یک پروژه را انتخاب کنید.
روی کلیک کنید. ایجاد حساب کاربری سرویس .
در قسمت نام حساب سرویس ، یک نام وارد کنید.
در قسمت شناسه حساب سرویس ، یک شناسه وارد کنید.
در قسمت توضیحات حساب سرویس ، توضیحی وارد کنید.
روی ایجاد کلیک کنید و ادامه دهید .
از منوی کشویی نقش ، حسابهای سرویس > حساب سرویس OpenID Connect Identity Token Creator را انتخاب کنید.
روی ادامه کلیک کنید.
روی انجام شد کلیک کنید.
حساب سرویسی که ایجاد کردهاید را از فهرست حسابهای سرویس انتخاب کنید و از منوی Actions گزینه Manage keys را انتخاب کنید.
افزودن کلید > ایجاد کلید جدید را انتخاب کنید.
برای نوع کلید ، گزینه JSON را انتخاب کنید.
روی «ایجاد» کلیک کنید. یک فایل JSON که حاوی کلیدهای دانلود شده روی رایانه شماست.
ارسال اعلان
 با استفاده از API مربوط به devices.reportStateAndNotification ، درخواست اعلان را فراخوانی کنید. درخواست JSON شما باید شامل یک eventId باشد که یک شناسه منحصر به فرد است که توسط پلتفرم شما برای رویدادی که اعلان را فعال میکند، تولید میشود. eventId باید یک شناسه تصادفی باشد که هر بار که درخواست اعلان ارسال میکنید، متفاوت است.
 در شیء notifications که در فراخوانی API خود ارسال میکنید، یک مقدار priority قرار دهید که نحوه نمایش اعلان را تعریف میکند. شیء notifications شما ممکن است بسته به ویژگی دستگاه، فیلدهای مختلفی داشته باشد.
برای تنظیم payload و فراخوانی API، یکی از این مسیرها را دنبال کنید:
ارسال یک بار اطلاع رسانی پیشگیرانه
برای فراخوانی API، یکی از گزینههای زیر را انتخاب کنید:
اچتیپی
رابط برنامهنویسی کاربردی Home Graph یک نقطه پایانی HTTP ارائه میدهد.
- از فایل JSON حساب سرویس دانلود شده برای ایجاد یک JSON Web Token (JWT) استفاده کنید. برای اطلاعات بیشتر، به بخش احراز هویت با استفاده از حساب سرویس مراجعه کنید.
 -  با استفاده از oauth2l، یک توکن دسترسی OAuth 2.0 با دامنه 
https://www.googleapis.com/auth/homegraphدریافت کنید: - درخواست JSON را با 
agentUserIdایجاد کنید. در اینجا یک نمونه درخواست JSON برای Report State و اعلان آمده است: - Report State و اعلان JSON و توکن موجود در درخواست HTTP POST خود را به نقطه پایانی Google Home Graph ترکیب کنید. در اینجا مثالی از نحوه ارسال درخواست در خط فرمان با استفاده از 
curlبه عنوان تست آورده شده است: 
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "ObjectDetection": { "priority": 0, "detectionTimestamp": 1534875126750, "objects": { "named": [ "Alice" ], "unclassified": 2 } } } } } } }
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 دریافت کنید.
 - برای تولید استابهای کلاینت برای یکی از زبانهای پشتیبانیشده، مستندات توسعهدهندهی gRPC را دنبال کنید.
 - متد ReportStateAndNotification را فراخوانی کنید.
 
نود جی اس
کلاینت Node.js مربوط به APIهای گوگل، اتصالاتی را برای Home Graph API فراهم میکند.
-  سرویس 
google.homegraphرا با استفاده از Application Default Credentials راهاندازی کنید. -  متد 
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', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { ObjectDetection: { priority: 0, detectionTimestamp: 1534875126750, objects: { named: ['Alice'], unclassified: 2 } } } } } } } });
جاوا
کتابخانه کلاینت HomeGraph API برای جاوا، اتصالاتی را برای Home Graph API فراهم میکند.
-  
HomeGraphApiServiceرا با استفاده از Application Default Credentials مقداردهی اولیه کنید. -  متد 
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 notification payload. Map<?, ?> notifications = Map.of( "ObjectDetection", Map.of( "priority", 0, "detectionTimestamp", 1534875126, "objects", Map.of("named", List.of("Alice"), "unclassifed", 2))); // Send notification. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", notifications)))); homegraphService.devices().reportStateAndNotification(request);
ارسال یک بسته پاسخ پیگیری
 بار داده برای پاسخ پیگیری شامل وضعیت درخواست، کدهای خطا برای خطاهای رویداد، در صورت وجود، و followUpToken معتبر ارائه شده در طول درخواست EXECUTE intent است. followUpToken باید ظرف پنج دقیقه استفاده شود تا معتبر باقی بماند و پاسخ را به درستی با درخواست اصلی مرتبط کند.
 قطعه کد زیر نمونهای از یک درخواست EXECUTE با فیلد followUpToken را نشان میدهد.
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123",
        }],
        "execution": [{
          "command": "action.devices.commands.TestNetworkSpeed",
          "params": {
            "testDownloadSpeed": true,
            "testUploadSpeed": false,
            "followUpToken": "PLACEHOLDER"
          }
        }]
      }]
    }
  }]
};
 گوگل از followUpToken برای نمایش اعلان فقط روی دستگاهی که کاربر در ابتدا با آن تعامل داشته استفاده میکند و آن را در تمام دستگاههای کاربر پخش نمیکند.
برای فراخوانی API، یکی از گزینههای زیر را انتخاب کنید:
اچتیپی
رابط برنامهنویسی کاربردی Home Graph یک نقطه پایانی HTTP ارائه میدهد.
- از فایل JSON حساب سرویس دانلود شده برای ایجاد یک JSON Web Token (JWT) استفاده کنید. برای اطلاعات بیشتر، به بخش احراز هویت با استفاده از حساب سرویس مراجعه کنید.
 -  با استفاده از oauth2l، یک توکن دسترسی OAuth 2.0 با دامنه 
https://www.googleapis.com/auth/homegraphدریافت کنید: - درخواست JSON را با 
agentUserIdایجاد کنید. در اینجا یک نمونه درخواست JSON برای Report State و اعلان آمده است: - Report State و اعلان JSON و توکن موجود در درخواست HTTP POST خود را به نقطه پایانی Google Home Graph ترکیب کنید. در اینجا مثالی از نحوه ارسال درخواست در خط فرمان با استفاده از 
curlبه عنوان تست آورده شده است: 
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "NetworkControl": { "priority": 0, "followUpResponse": { "status": "SUCCESS", "followUpToken": "PLACEHOLDER", "networkDownloadSpeedMbps": 23.3, "networkUploadSpeedMbps": 10.2 } } } } } } }
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 دریافت کنید.
 - برای تولید استابهای کلاینت برای یکی از زبانهای پشتیبانیشده، مستندات توسعهدهندهی gRPC را دنبال کنید.
 - متد ReportStateAndNotification را فراخوانی کنید.
 
نود جی اس
کلاینت Node.js مربوط به APIهای گوگل، اتصالاتی را برای Home Graph API فراهم میکند.
-  سرویس 
google.homegraphرا با استفاده از Application Default Credentials راهاندازی کنید. -  متد 
reportStateAndNotificationبا ReportStateAndNotificationRequest فراخوانی کنید. این متد یکPromiseبا ReportStateAndNotificationResponse برمیگرداند. 
const followUpToken = executionRequest.inputs[0].payload.commands[0].execution[0].params.followUpToken; 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', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { NetworkControl: { priority: 0, followUpResponse: { status: 'SUCCESS', followUpToken, networkDownloadSpeedMbps: 23.3, networkUploadSpeedMbps: 10.2, } } } } } } } });
جاوا
کتابخانه کلاینت HomeGraph API برای جاوا، اتصالاتی را برای 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(); // Extract follow-up token. ExecuteRequest.Inputs executeInputs = (Inputs) executeRequest.getInputs()[0]; String followUpToken = (String) executeInputs .getPayload() .getCommands()[0] .getExecution()[0] .getParams() .get("followUpToken"); // Build device follow-up response payload. Map<?, ?> followUpResponse = Map.of( "NetworkControl", Map.of( "priority", 0, "followUpResponse", Map.of( "status", "SUCCESS", "followUpToken", followUpToken, "networkDownloadSpeedMbps", 23.3, "networkUploadSpeedMbps", 10.2))); // Send follow-up response. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", followUpResponse)))); homegraphService.devices().reportStateAndNotification(request);
ثبت وقایع
اعلانها از ثبت وقایع همانطور که در ثبت وقایع ابری برای ابر به ابر شرح داده شده است، پشتیبانی میکنند. این گزارشها برای آزمایش و حفظ کیفیت اعلانها در اکشن شما مفید هستند.
 طرح کلی یک ورودی notificationLog به صورت زیر است:
| ملک | توضیحات | 
|---|---|
 requestId | شناسه درخواست اعلان | 
 structName | نام ساختار اعلان، مانند "ObjectDetection". | 
 status | وضعیت اعلان را نشان میدهد. | 
 فیلد status شامل وضعیتهای مختلفی است که ممکن است نشاندهندهی خطاهایی در محتوای اعلان باشند. برخی از این موارد ممکن است فقط در اکشنهایی که هنوز به مرحلهی تولید نرسیدهاند، در دسترس باشند.
مثالهایی از وضعیتها عبارتند از:
| وضعیت | توضیحات | 
|---|---|
 EVENT_ID_MISSING |  نشان میدهد که فیلد eventId مورد نیاز وجود ندارد. | 
 PRIORITY_MISSING |  نشان میدهد که یک فیلد priority وجود ندارد. | 
 NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |  نشان میدهد که ویژگی notificationSupportedByAgent دستگاه اعلانکننده که در SYNC ارائه شده است، نادرست است. | 
 NOTIFICATION_ENABLED_BY_USER_FALSE | نشان میدهد که کاربر اعلانها را در دستگاه اعلاندهنده در GHA فعال نکرده است. این وضعیت فقط در ادغامهایی که به مرحله تولید نرسیدهاند، در دسترس است. | 
 NOTIFYING_DEVICE_NOT_IN_STRUCTURE | نشان میدهد که کاربر دستگاه اعلان را به خانه/ساختار اختصاص نداده است. این وضعیت فقط در ادغامهایی که به مرحله تولید نرسیدهاند، در دسترس است. | 
 علاوه بر این وضعیتهای عمومی که میتوانند برای همه اعلانها اعمال شوند، فیلد status میتواند در صورت لزوم شامل وضعیتهای خاص مربوط به یک ویژگی نیز باشد (برای مثال، OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING ).