smart home İşlemi oluşturduktan sonraki adım, akıllı ev intent'lerini işlemek ve Google Assistant tarafından tanınan yanıtları döndürmek için karşılamanıza işlev eklemektir.
'i oluşturun.Kullanıcıyı tanımlama
Assistant, smart home İşleminizin, Authorization
başlığında OAuth 2.0 sunucunuzun sağladığı erişim jetonuyla karşılanmasını ister.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Herhangi bir isteğe yanıt vermeden önce, sipariş karşılama mantığınızın bu jeton kimlik bilgisinin geçerli olduğunu doğrulaması ve ilişkili kullanıcı hesabını belirlemesi gerekir. Erişim jetonu geçersizse karşılamanızın HTTP 401 Unauthorized
hatası döndürmesi gerekir.
Cihazları ve işlevlerini listeleyin
Assistant, belirli bir kullanıcıyla ilişkili cihazların listesini ve bu kullanıcının yetkilerini kullanmak için karşılamanıza bir action.devices.SYNC
niyeti gönderir. Sipariş karşılama, SYNC
yanıtının agentUserId
alanındaki her kullanıcı için benzersiz bir kimlik döndürmelidir. Bu kimlik, kullanıcıyı bulut hizmetinize temsil etmek için sabit bir değer olmalıdır. Kullanıcının değiştirebileceği ayarlara dayalı olarak e-posta adresi veya diğer özellikleri sağlamanız önerilmez.
SYNC
yanıtınızın devices
alanı, kullanıcının Assistant hizmetine erişmesine izin verdiği tüm cihazları, desteklediği türleri ve özellikleri ve söz konusu cihaz için özelliğin davranışını yapılandırmak için gereken özellikleri içerir.
SYNC
amacı, hesap bağlama işlemi sırasında veya kullanıcı cihazlarını manuel olarak yeniden senkronize ettiğinde tetiklenir. Kullanıcıların cihaz listesi, desteklenen özellikler veya özellik değerleri değişirse yeni bir SYNC
amacını tetiklemek ve güncellemeleri Google'a bildirmek için Senkronizasyon İste'yi kullanın.
{ "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); }
Daha fazla bilgi için SYNC
intent referansı dokümanlarına bakın.