पहचानें और सिंक करें

smart home की कार्रवाई बनाने के बाद, अगला कदम है अपने ग्राहक को पूरा करने में ऐसी सुविधा जोड़ना जो स्मार्ट होम इंटेंट को प्रोसेस कर सके और उन जवाबों को लौटा सके जो Google Assistant की पहचान करते हैं.

उपयोगकर्ता की पहचान करें

Assistant, Authorization हेडर में आपके OAuth 2.0 सर्वर से मिले ऐक्सेस टोकन का इस्तेमाल करके, आपकी 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 इंटेंट भेजता है. ग्राहक को आइटम भेजने पर, हर उपयोगकर्ता के लिए SYNC के रिस्पॉन्स के agentUserId फ़ील्ड में एक यूनीक आईडी दिखना चाहिए. उपयोगकर्ता को आपकी क्लाउड सेवा पर दिखाने के लिए, यह आईडी ऐसी वैल्यू होनी चाहिए जिसमें बदलाव न किया जा सके. उपयोगकर्ता जिन सेटिंग में बदलाव कर सकता है उनके हिसाब से, ईमेल पते या दूसरे एट्रिब्यूट देने का सुझाव नहीं दिया जाता है.

आपके SYNC रिस्पॉन्स के devices फ़ील्ड में, वे सभी डिवाइस शामिल होते हैं जिन्हें उपयोगकर्ता ने Assistant को ऐक्सेस करने की अनुमति दी है. इसमें वे टाइप और विशेषताएं शामिल हैं जिनका इस्तेमाल वह करता है. साथ ही, इस डिवाइस के लिए Trait के व्यवहार को कॉन्फ़िगर करने के लिए ज़रूरी एट्रिब्यूट.

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 इंटेंट के रेफ़रंस का दस्तावेज़ देखें.