उपयोगकर्ता की पहचान करना
Assistant आपके
smart home ऐक्शन के फ़ुलफ़िलमेंट को, आपके OAuth 2.0 सर्वर से मिले ऐक्सेस टोकन के साथ अनुरोध भेजता है. यह टोकन, Authorization हेडर में मौजूद होता है.
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 इंटेंट, खाता जोड़ने के दौरान या जब कोई उपयोगकर्ता अपने डिवाइसों को मैन्युअल तरीके से फिर से सिंक करता है, तब ट्रिगर होता है. अगर उपयोगकर्ताओं के डिवाइसों की सूची, सपोर्ट किए जाने वाले
ट्रेट या एट्रिब्यूट की वैल्यू में बदलाव होता है, तो
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" } }] } }; });
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 इंटेंट
रेफ़रंस से जुड़ा दस्तावेज़ देखें.