একবার আপনি Cloud-to-cloud ইন্টিগ্রেশন তৈরি করে ফেললে, পরবর্তী ধাপ হলো আপনার ফুলফিলমেন্টে এমন কার্যকারিতা যোগ করা যা স্মার্ট হোম ইনটেন্টগুলো প্রসেস করবে এবং 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-কে আপডেটগুলো সম্পর্কে জানাতে Request Sync ব্যবহার করুন।
{
"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" } } ] } }
নোড.জেএস
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 ইন্টেন্ট রেফারেন্স ডকুমেন্টেশন দেখুন।