اعلانها به ادغام 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 خود اضافه کنید:
- اگر اعلانها از برنامه دستگاه smart home شما فعال شده است، به Google اطلاع دهید. اگر کاربران اعلانها را در برنامه شما روشن یا خاموش کردند، درخواست
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، تماس درخواست اعلان را برقرار کنید.
درخواست JSON شما باید شامل eventId باشد که شناسه یکتایی است که پلاتفرم شما برای رویداد راهانداز اعلان تولید کرده است. eventId باید
شناسهای تصادفی باشد که هربار درخواست اعلان ارسال میکنید متفاوت باشد.
در شیء notifications که در فراخوانی API خود ارسال میکنید، یک مقدار priority اضافه کنید که نحوه نمایش اعلان را تعریف میکند. شیء
notifications شما ممکن است بسته به ویژگی دستگاه،
فیلدهای متفاوتی داشته باشد.
یکی از این مسیرها را برای تنظیم بار و فراخوانی میانای برنامهسازی کاربردی دنبال کنید:
ارسال محموله اعلان پیشکنشی
برای فراخوانی API، گزینهای را از یکی از این برگهها انتخاب کنید:
HTTP
Home Graph API یک نقطه پایانی 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 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', 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را بااستفاده از اعتبارنامه پیشفرض برنامه مقداردهی اولیه کنید. - روش
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 API یک نقطه پایانی 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 API یک نقطه پایانی gRPC ارائه میدهد
- تعریف سرویس میانگیرهای پروتکل را برای Home Graph API دریافت کنید.
- برای تولید کدهای آماده کارخواه برای یکی از زبانهای پشتیبانیشده، اسناد توسعهدهنده 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 برای 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).