اعلانها به ادغام Cloud-to-cloud شما اجازه میدهد از Google Assistant برای ارتباط با کاربران درباره رویدادها یا تغییرات مهم مرتبط با دستگاه استفاده کند. میتوانید اعلانهایی را پیادهسازی کنید تا کاربران را از رویدادهای بهموقع دستگاه مطلع کنید، برای مثال وقتی کسی پشت در است، یا برای گزارش تغییر وضعیت دستگاه درخواستی، مثلاً وقتی زبانه قفل در با موفقیت درگیر شده است یا گیر کرده است.
ادغام Cloud-to-cloud شما میتواند انواع زیر از اعلانها را به کاربران ارسال کند:
اعلانهای پیشنگرانه: کاربر را از رویداد smart home دستگاه بدون هیچ درخواست قبلی کاربر به دستگاههایش مطلع میکند، مثل زنگ خوردن زنگ در.
پاسخهای پیگیری: تأییدیهای مبنی بر موفقیت یا عدم موفقیت درخواست فرمان دستگاه، برای مثال هنگام قفل کردن در. از این هشدارها برای فرمانهای دستگاه که تکمیل آنها زمان میبرد استفاده کنید. پاسخهای پیگیری فقط زمانی پشتیبانی میشوند که درخواستهای فرمان دستگاه از بلندگوهای هوشمند و نمایشگرهای هوشمند ارسال شوند.
Assistant این اعلانها را بهعنوان اعلان در بلندگوهای هوشمند و نمایشگرهای هوشمند به کاربران ارائه میدهد. اعلانهای پیشکنشی بهطور پیشفرض خاموش است. کاربران میتوانند همه اعلانهای پیشکنشگرانه را از Google Home app (GHA) روشن یا خاموش کنند.
رویدادهایی که باعث راهاندازی اعلانها میشوند
وقتی رویدادهای دستگاه رخ میدهد، اجرای شما درخواست اعلانی به Google ارسال میکند. ویژگیهای دستگاهی که ادغام Cloud-to-cloud شما پشتیبانی میکند تعیین میکند چه نوع رویدادهای اعلانی دردسترس است و چه دادههایی میتوانید در آن اعلانها بگنجانید.
ویژگیهای زیر از اعلانهای پیشکنشی پشتیبانی میکنند:
| ویژگی | رویدادها |
|---|---|
| ObjectDetection | اشیایی که دستگاه تشخیص میدهد، مثلاً وقتی چهرهای آشنا در در تشخیص داده میشود. برای مثال: «سارا و علی پشت در هستند.» |
| RunCycle | دستگاه یک چرخه را تکمیل میکند. برای مثال: «چرخه ماشین لباسشویی کامل شد.» |
| SensorState | دستگاه وضعیت حسگر پشتیبانیشدهای را تشخیص میدهد. برای مثال: «دودیاب دود را تشخیص میدهد.» |
ویژگیهای زیر از پاسخهای پیگیری پشتیبانی میکنند:
| ویژگی | رویدادها |
|---|---|
| LockUnlock | وضعیت تکمیل و تغییر وضعیت پساز اجرای فرمان
action.devices.commands.LockUnlock دستگاه. برای
مثال: «در جلو قفل شده است» یا «در جلو
گیر کرده است.»
|
| NetworkControl | وضعیت تکمیل و تغییر وضعیت پساز اجرای فرمان
action.devices.commands.TestNetworkSpeed دستگاه. برای مثال: «آزمایش سرعت شبکه شما تمام شد. سرعت بارگیری در
رهیاب دفتر درحالحاضر ۸۰٫۲ کیلوبیت در ثانیه و سرعت بارگذاری ۹٫۳
کیلوبیت در ثانیه است."
|
| OpenClose | وضعیت تکمیل و تغییر وضعیت پساز اجرای فرمان
action.devices.commands.OpenClose دستگاه. برای
مثال: «در جلو باز شد» یا «در جلو باز نشد.»
|
همه انواع دستگاه از اعلانهای ویژگیهای ذیربط پشتیبانی میکنند.
ساختن اعلان برای یکپارچهسازی «ابر به ابر»
اعلانها را به ادغام Cloud-to-cloud در این مراحل اضافه کنید:
- به Google اطلاع دهید که آیا اعلانها از برنامه دستگاه smart home فعال هستند یا نه. اگر کاربران اعلانها را در برنامه شما روشن یا خاموش کردند، درخواست
SYNCرا برای اطلاع دادن به Google درباره تغییر دستگاه ارسال کنید. - وقتی رویداد دستگاه مرتبط یا تغییر وضعیتی رخ میدهد که باعث راهاندازی اعلان میشود، با فراخوانی
Report State
reportStateAndNotificationAPI، درخواست اعلان ارسال کنید. اگر وضعیت دستگاه تغییر کرد، میتوانید هم وضعیت و هم بار اعلان را باهم در Report State و تماس «اعلان» ارسال کنید.
بخشهای زیر این مراحل را با جزئیات بیشتری پوشش میدهند.
نشان دهید که آیا اعلانها در برنامهتان فعال هستند یا نه
کاربران میتوانند با فعال کردن این ویژگی در GHA انتخاب کنند که آیا میخواهند اعلانهای پیشکنشگرانه دریافت کنند یا نه. در برنامه دستگاه smart home، همچنین میتوانید بهصورت اختیاری این امکان را اضافه کنید که کاربران بتوانند اعلانهای دستگاه را بهطور صریح روشن/خاموش کنند، برای مثال، از تنظیمات برنامه.
با انجام تماس درخواست همگامسازی
برای بهروزرسانی دادههای دستگاه، به Google اطلاع دهید که اعلانها برای دستگاهتان فعال است. هرزمان که کاربران این تنظیم را در برنامهتان تغییر دادند، باید درخواست SYNC مانند این ارسال کنید.
در پاسخ SYNC خود، یکی از این بهروزرسانیها را ارسال کنید:
- اگر کاربر بهطور صریح اعلانها را در برنامه دستگاهتان روشن کرد، یا اگر گزینه روشن/خاموش ارائه نمیدهید،
دارایی
devices.notificationSupportedByAgentرا رویtrueتنظیم کنید. - اگر کاربر بهطور صریح اعلانها را در برنامه دستگاهتان خاموش کرد،
دارایی
devices.notificationSupportedByAgentرا رویfalseتنظیم کنید.
تکهکد زیر نمونهای از نحوه تنظیم پاسخ SYNC را نشان میدهد:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
ارسال درخواستهای اعلان به Google
برای راهاندازی اعلانها در Assistant، اجرای درخواست شما بار اعلان را ازطریق Report State و فراخوانی Notification API به Google Home Graph ارسال میکند.
فعال کردن Google HomeGraph API
-
در Google Cloud Console، به صفحه HomeGraph API بروید.
رفتن به صفحه HomeGraph API - پروژهای را که با شناسه پروژه smart home شما مطابقت دارد انتخاب کنید.
- روی فعال کردن کلیک کنید.
ایجاد کلید حساب سرویس
برای تولید کلید حساب سرویس از Google Cloud Console، این دستورالعملها را دنبال کنید:
-
در Google Cloud Console، به صفحه حسابهای سرویس بروید.
به صفحه «حسابهای سرویس» بروید.ممکن است لازم باشد قبلاز اینکه به صفحه «حسابهای سرویس» هدایت شوید، پروژهای را انتخاب کنید.
روی ایجاد حساب سرویس کلیک کنید.
در فیلد نام حساب سرویس، نامی وارد کنید.
در فیلد شناسه حساب سرویس، شناسهای وارد کنید.
در فیلد شرح حساب سرویس، شرحی وارد کنید.
روی ایجاد و ادامه کلیک کنید.
از منو کرکرهای نقش، حسابهای سرویس > سازنده نشان هویت OpenID Connect حساب سرویس را انتخاب کنید.
روی ادامه کلیک کنید.
روی تمام کلیک کنید.
حساب خدماتی را که بهتازگی ساختهاید از فهرست حسابهای خدماتی انتخاب کنید و مدیریت کلیدها را از منو کنشها انتخاب کنید.
افزودن کلید > ایجاد کلید جدید را انتخاب کنید.
برای نوع کلید، گزینه JSON را انتخاب کنید.
روی ایجاد کردن کلیک کنید. فایل JSON حاوی کلید شما در رایانهتان بارگیری میشود.
ارسال اعلان
تماس درخواست اعلان را بااستفاده از
devices.reportStateAndNotification API برقرار کنید.
درخواست JSON شما باید شامل eventId باشد که شناسه یکتایی است که پلاتفرم شما برای رویداد راهاندازیکننده اعلان تولید میکند. eventId باید
شناسه تصادفی باشد که هر بار درخواست اعلان ارسال میکنید متفاوت باشد.
در شیء notifications که در فراخوانی API خود ارسال میکنید، مقدار
priority را که نحوه ارائه اعلان را تعریف میکند اضافه کنید. شیء notifications شما ممکن است بسته به ویژگی دستگاه شامل فیلدهای مختلفی باشد.
برای تنظیم کردن بار و فراخوانی API، یکی از این مسیرها را دنبال کنید:
ارسال محتوای اعلان پیشکنشی
برای فراخوانی کردن API، گزینهای را از یکی از این برگهها انتخاب کنید:
HTTP
میانای برنامهسازی کاربردی Home Graph یک نقطه پایان HTTP ارائه میدهد
- از فایل JSON حساب سرویس بارگیریشده برای ایجاد «نشان وب JSON» (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 API یک نقطه پایانی gRPC ارائه میدهد
- تعریف سرویس بافرهای پروتکل را برای میانای برنامهسازی کاربردی Home Graph دریافت کنید.
- برای تولید کردن چوبکهای کارخواه برای یکی از زبانهای پشتیبانیشده ، اسناد توسعهدهنده 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', 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 برای Java پیوندهایی برای 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 است. برای اینکه 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"
}
}]
}]
}
}]
};
Google از followUpToken استفاده میکند تا اعلان فقط در دستگاهی که کاربر در ابتدا با آن تعامل داشته است نمایش داده شود و در همه دستگاههای کاربر همفرستی نشود.
برای فراخوانی کردن API، گزینهای را از یکی از این برگهها انتخاب کنید:
HTTP
میانای برنامهسازی کاربردی Home Graph یک نقطه پایان HTTP ارائه میدهد
- از فایل JSON حساب سرویس بارگیریشده برای ایجاد «نشان وب JSON» (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
Google APIs Node.js Client پیوندهایی برای Home Graph API ارائه میدهد.
- سرویس
google.homegraphرا بااستفاده از «اطلاعات اعتباری پیشفرض برنامه» مقداردهی اولیه کنید. - روش
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 برای 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(); // 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);
ثبت
اعلانها از ثبت رویداد همانگونه که در Cloud logging for Cloud-to-cloud توضیح داده شده است پشتیبانی میکنند. این گزارشها برای آزمایش و حفظ کیفیت اعلانها در «کنش» شما مفید هستند.
در زیر طرحواره ورودی 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).