شناسایی و همگام سازی کنید

پس از ایجاد یکپارچه‌سازی Cloud-to-cloud ، مرحله بعدی اضافه کردن قابلیت‌هایی به فرآیند تکمیل سفارشات برای پردازش اهداف خانه هوشمند و بازگرداندن پاسخ‌هایی است که 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

قبل از پاسخ به هرگونه درخواست، منطق تکمیل درخواست شما باید اعتبار این توکن را تأیید کند و حساب کاربری مرتبط را تعیین کند. اگر توکن دسترسی نامعتبر باشد، تکمیل درخواست شما باید خطای HTTP 401 Unauthorized برگرداند.

فهرست دستگاه‌ها و قابلیت‌های آنها

ابزارهای پیشنهادی برای این کار

Assistant یک تابع action.devices.SYNC به درخواست شما ارسال می‌کند تا لیستی از دستگاه‌های مرتبط با کاربر مورد نظر و قابلیت‌های آنها را درخواست کند. درخواست شما باید یک شناسه منحصر به فرد برای هر کاربر در فیلد agentUserId از پاسخ SYNC برگرداند. این شناسه باید یک مقدار تغییرناپذیر برای نمایش کاربر به سرویس ابری شما باشد. ارائه آدرس‌های ایمیل یا سایر ویژگی‌ها بر اساس تنظیماتی که کاربر می‌تواند تغییر دهد، توصیه نمی‌شود.

فیلد devices در پاسخ SYNC شما شامل تمام دستگاه‌هایی است که کاربر به Assistant اجازه دسترسی به آنها را داده است، انواع و ویژگی‌هایی که از آنها پشتیبانی می‌کنند و ویژگی‌های مورد نیاز برای پیکربندی رفتار ویژگی برای آن دستگاه خاص.

هدف SYNC در حین پیوند حساب یا زمانی که کاربر به صورت دستی دستگاه‌های خود را دوباره همگام‌سازی می‌کند، فعال می‌شود. اگر لیست دستگاه‌های کاربر، ویژگی‌های پشتیبانی‌شده یا مقادیر ویژگی‌ها تغییر کند، از درخواست همگام‌سازی برای فعال‌سازی یک هدف SYNC جدید استفاده کنید و به‌روزرسانی‌ها را به گوگل گزارش دهید.

درخواست
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.SYNC"
    }]
}
جی‌سون
{
  "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"
        }
      }
    ]
  }
}
نود جی اس
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"
        }
      }]
    }
  };
});
جاوا
@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 intent مراجعه کنید.