একবার আপনি একটি smart home অ্যাকশন তৈরি করে নিলে , পরবর্তী ধাপ হল স্মার্ট হোম ইন্টেন্টগুলি প্রক্রিয়া করার জন্য আপনার পূর্ণতায় কার্যকারিতা যোগ করা এবং Google Assistant স্বীকৃতি দেয় এমন প্রতিক্রিয়াগুলি ফেরত দেওয়া।
ব্যবহারকারীকে চিহ্নিত করুন
Authorization
শিরোনামে আপনার OAuth 2.0 সার্ভারের দ্বারা প্রদত্ত অ্যাক্সেস টোকেনের সাহায্যে Assistant আপনার smart home অ্যাকশনের পূরণের অনুরোধ করে।
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
যেকোন অনুরোধে সাড়া দেওয়ার আগে, আপনার পূর্ণতা লজিকটি যাচাই করা উচিত যে এই টোকেন শংসাপত্রটি বৈধ এবং সংশ্লিষ্ট ব্যবহারকারীর অ্যাকাউন্ট নির্ধারণ করে। অ্যাক্সেস টোকেনটি অবৈধ হলে, আপনার পূর্ণতা একটি HTTP 401 Unauthorized
ত্রুটি ফিরিয়ে দেবে।
ডিভাইস এবং তাদের ক্ষমতা তালিকা
প্রদত্ত ব্যবহারকারীর সাথে যুক্ত ডিভাইসের তালিকা এবং তাদের ক্ষমতার অনুরোধ করার জন্য Assistant একটি action.devices.SYNC
ইন্টেন্ট পাঠায়। আপনার পূর্ণতা অবশ্যই SYNC
প্রতিক্রিয়ার agentUserId
ক্ষেত্রে প্রতিটি ব্যবহারকারীর জন্য একটি অনন্য আইডি ফেরত দেবে। আপনার ক্লাউড পরিষেবাতে ব্যবহারকারীর প্রতিনিধিত্ব করার জন্য এই আইডিটি একটি অপরিবর্তনীয় মান হতে হবে। ব্যবহারকারী পরিবর্তন করতে পারে এমন সেটিংসের উপর ভিত্তি করে ইমেল ঠিকানা বা অন্যান্য বৈশিষ্ট্য প্রদান করার পরামর্শ দেওয়া হয় না।
আপনার SYNC
প্রতিক্রিয়ার devices
ফিল্ডে ব্যবহারকারী Assistant অ্যাক্সেস করার জন্য অনুমোদিত সমস্ত ডিভাইস, তারা যে ধরনের এবং বৈশিষ্ট্যগুলি সমর্থন করে এবং সেই নির্দিষ্ট ডিভাইসের জন্য বৈশিষ্ট্যের আচরণ কনফিগার করার জন্য প্রয়োজনীয় বৈশিষ্ট্যগুলি ধারণ করে৷
অ্যাকাউন্ট লিঙ্ক করার সময় বা যখন কোনও ব্যবহারকারী ম্যানুয়ালি তাদের ডিভাইসগুলি পুনরায় সিঙ্ক করে তখন 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
অভিপ্রায় রেফারেন্স ডকুমেন্টেশন দেখুন।