هنگامی که یک اقدام smart home ایجاد کردید ، گام بعدی این است که عملکردی را در اجرای خود اضافه کنید تا اهداف خانه هوشمند را پردازش کنید و پاسخهایی را که Google Assistant تشخیص میدهد برگرداند.
کاربر را شناسایی کنید
Assistant با توکن دسترسی ارائه شده توسط سرور OAuth 2.0 در سرصفحه Authorization
، درخواستهایی را برای انجام اقدامات smart home شما ارائه میکند.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
قبل از پاسخ به هر درخواستی، منطق تحقق شما باید تأیید کند که این اعتبار رمز معتبر است و حساب کاربری مرتبط را تعیین کند. اگر رمز دسترسی نامعتبر است، انجام شما باید یک خطای 401 Unauthorized
را برگرداند.
لیست دستگاه ها و قابلیت های آنها
Assistant یک هدف action.devices.SYNC
را برای انجام شما ارسال می کند تا لیست دستگاه های مرتبط با کاربر مورد نظر و قابلیت های آنها را درخواست کند. انجام شما باید یک شناسه منحصر به فرد برای هر کاربر در قسمت agentUserId
پاسخ SYNC
برگرداند. این شناسه باید یک مقدار تغییرناپذیر باشد تا کاربر را در سرویس ابری شما نشان دهد. ارائه آدرس های ایمیل یا سایر ویژگی ها بر اساس تنظیماتی که کاربر می تواند تغییر دهد توصیه نمی شود.
فیلد devices
پاسخ SYNC
شما شامل همه دستگاههایی است که کاربر به Assistant اجازه دسترسی به آنها را داده است، انواع و ویژگیهایی که پشتیبانی میکنند و ویژگیهای مورد نیاز برای پیکربندی رفتار این ویژگی برای آن دستگاه خاص.
هدف SYNC
در حین پیوند دادن حساب یا زمانی که کاربر به صورت دستی دستگاههای خود را مجدداً همگامسازی میکند فعال میشود. اگر فهرست دستگاهها، ویژگیهای پشتیبانیشده یا مقادیر ویژگیهای کاربران تغییر کرد، از Request Sync برای راهاندازی یک هدف SYNC
جدید و گزارش بهروزرسانیها به Google استفاده کنید.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.SYNC" }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "agentUserId": "1836.15267389", "devices": [ { "id": "123", "type": "action.devices.types.OUTLET", "traits": [ "action.devices.traits.OnOff" ], "name": { "defaultNames": [ "My Outlet 1234" ], "name": "Night light", "nicknames": [ "wall plug" ] }, "willReportState": false, "roomHint": "kitchen", "deviceInfo": { "manufacturer": "lights-out-inc", "model": "hs1234", "hwVersion": "3.2", "swVersion": "11.4" }, "otherDeviceIds": [ { "deviceId": "local-device-id" } ], "customData": { "fooValue": 74, "barValue": true, "bazValue": "foo" } }, { "id": "456", "type": "action.devices.types.LIGHT", "traits": [ "action.devices.traits.OnOff", "action.devices.traits.Brightness", "action.devices.traits.ColorSetting" ], "name": { "defaultNames": [ "lights out inc. bulb A19 color hyperglow" ], "name": "lamp1", "nicknames": [ "reading lamp" ] }, "willReportState": false, "roomHint": "office", "attributes": { "colorModel": "rgb", "colorTemperatureRange": { "temperatureMinK": 2000, "temperatureMaxK": 9000 }, "commandOnlyColorSetting": false }, "deviceInfo": { "manufacturer": "lights out inc.", "model": "hg11", "hwVersion": "1.2", "swVersion": "5.4" }, "customData": { "fooValue": 12, "barValue": false, "bazValue": "bar" } } ] } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onSync((body, headers) => { // TODO Get devices for user return { requestId: body.requestId, payload: { agentUserId: "1836.15267389", devices: [{ id: "123", type: "action.devices.types.OUTLET", traits: [ "action.devices.traits.OnOff" ], name: { defaultNames: ["My Outlet 1234"], name: "Night light", nicknames: ["wall plug"] }, willReportState: false, roomHint: "kitchen", deviceInfo: { manufacturer: "lights-out-inc", model: "hs1234", hwVersion: "3.2", swVersion: "11.4" }, otherDeviceIds: [{ deviceId: "local-device-id" }], customData: { fooValue: 74, barValue: true, bazValue: "foo" } }, { id: "456", type: "action.devices.types.LIGHT", traits: [ "action.devices.traits.OnOff", "action.devices.traits.Brightness", "action.devices.traits.ColorSetting" ], name: { defaultNames: ["lights out inc. bulb A19 color hyperglow"], name: "lamp1", nicknames: ["reading lamp"] }, willReportState: false, roomHint: "office", attributes: { colorModel: 'rgb', colorTemperatureRange: { temperatureMinK: 2000, temperatureMaxK: 9000 }, commandOnlyColorSetting: false }, deviceInfo: { manufacturer: "lights out inc.", model: "hg11", hwVersion: "1.2", swVersion: "5.4" }, customData: { fooValue: 12, barValue: false, bazValue: "bar" } }] } }; });
جاوا
@NotNull @Override public SyncResponse onSync(@NotNull SyncRequest syncRequest, @Nullable Map<?, ?> map) { Payload payload = new Payload(); payload.setAgentUserId("1836.15267389"); payload.setDevices( new Device[] { new Device.Builder() .setId("123") .setType("action.devices.types.OUTLET") .addTrait("action.devices.traits.OnOff") .setName( Collections.singletonList("My Outlet 1234"), "Night light", Collections.singletonList("Wall plug")) .setWillReportState(true) .setDeviceInfo("lights-out-inc", "hs1234", "3.2", "11.4") .setCustomData( new JSONObject() .put("fooValue", 74) .put("barValue", true) .put("bazValue", "foo")) .build(), new Device.Builder() .setId("456") .setType("action.devices.types.LIGHT") .addTrait("action.devices.traits.OnOff") .addTrait("action.devices.traits.Brightness") .addTrait("action.devices.traits.ColorTemperature") .addTrait("action.devices.traits.ColorSpectrum") .setName( Collections.singletonList("Lights Out Inc. bulb A19 color hyperglow"), "Lamp", Collections.singletonList("Reading lamp")) .setWillReportState(true) .setDeviceInfo("Lights Out Inc.", "hg11", "1.2", "5.4") .setCustomData( new JSONObject() .put("fooValue", 12) .put("barValue", false) .put("bazValue", "bar")) .build(), }); return new SyncResponse(syncRequest.getRequestId(), payload); }
برای اطلاعات بیشتر، به مستندات مرجع هدف SYNC
مراجعه کنید.