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

smart home की गई कार्रवाई बनाने के बाद, अगला चरण होता है: स्मार्ट होम इंटेंट को प्रोसेस करने और Google Assistant की पहचान करने वाले जवाब दिखाने के लिए, कार्रवाई करने के तरीके में फ़ंक्शन जोड़ें.

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

Assistant, आपके OAuth 2.0 सर्वर के Authorization हेडर में दिए गए ऐक्सेस टोकन का इस्तेमाल करके, आपकी 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 इंटेंट रेफ़रंस दस्तावेज़ देखें.