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

कोई smart home कार्रवाई बनाने के बाद, अगला चरण आपका लक्ष्य स्मार्ट होम इंटेंट प्रोसेस करना और इस तरह के सवालों के जवाब देना Google Assistant पहचानता है.

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

Assistant आपके दिए गए ऐक्सेस टोकन की मदद से, smart home कार्रवाई पूरी करना अपने OAuth 2.0 सर्वर के Authorization हेडर में बदलाव करें.

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 इंटेंट देखें देखें.