تحديد المستخدِم
Assistant يرسل طلبات إلى عملية التنفيذ الخاصة بإجراء
smart home باستخدام رمز الدخول الذي يوفّره خادم OAuth 2.0 في عنوان Authorization.
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 وإبلاغ 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.