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

هنگامی که یک اقدام 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 را برای انجام شما ارسال می کند تا لیست دستگاه های مرتبط با کاربر مورد نظر و قابلیت های آنها را درخواست کند. انجام شما باید یک شناسه منحصر به فرد برای هر کاربر در قسمت agentUserId پاسخ SYNC برگرداند. این شناسه باید یک مقدار تغییرناپذیر باشد تا کاربر را در سرویس ابری شما نشان دهد. ارائه آدرس های ایمیل یا سایر ویژگی ها بر اساس تنظیماتی که کاربر می تواند تغییر دهد توصیه نمی شود.

فیلد devices پاسخ SYNC شما شامل همه دستگاه‌هایی است که کاربر به 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"
        }
      }]
    }
  };
});
جاوا
@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 مراجعه کنید.