Cloud-to-cloud ইন্টিগ্রেশন তৈরি করার পরে, পরবর্তী ধাপ হল স্মার্ট হোম ইনটেন্ট প্রসেস করা এবং Google Assistant শনাক্ত করতে পারে এমন উত্তর রিটার্ন করার জন্য আপনার ফুলফিলমেন্টে ফাংশনালিটি যোগ করা।
ব্যবহারকারীকে শনাক্ত করা
Assistant আপনার
smart home অ্যাকশনের ফুলফিলমেন্টের জন্য অনুরোধ করে, এর সাথে Authorization হেডারে আপনার OAuth 2.0 সার্ভারের
প্রদান করা অ্যাক্সেস টোকেন থাকে।
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" } }] } }; });
Java
@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ইন্টেন্ট
রেফারেন্স ডকুমেন্টেশন দেখুন।