Cloud-to-cloud entegrasyonu oluşturduktan sonraki adım, akıllı ev intent'lerini işlemek ve Google Assistant'ın tanıdığı yanıtları döndürmek için karşılama işlevinize işlevsellik eklemektir.
Kullanıcıyı tanımlama
Assistant, Authorization
üstbilgisinde OAuth 2.0 sunucunuz tarafından sağlanan erişim jetonuyla smart home İşleminizin karşılanması için istekte bulunur.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Yerleştirme mantığınız, istekleri yanıtlamadan önce bu jeton kimlik bilgisinin geçerli olduğunu doğrulamalı ve ilişkili kullanıcı hesabını belirlemelidir. Erişim jetonu geçersizse karşılamanız bir HTTP 401 Unauthorized
hatası döndürmelidir.
Cihazları ve özelliklerini listeleme
Assistant, belirtilen kullanıcıyla ilişkili cihazların listesini ve özelliklerini istemek için yerine getirme işlevinize bir action.devices.SYNC
amacı gönderir. Karşılama yanıtınızın SYNC
yanıtının agentUserId
alanında her kullanıcı için benzersiz bir kimlik döndürmelidir. Bu kimlik, kullanıcınızı bulut hizmetinizde temsil etmek için değişmez bir değer olmalıdır. Kullanıcının değiştirebileceği ayarlara göre e-posta adresleri veya başka özellikler sağlamanız önerilmez.
SYNC
yanıtınızın devices
alanı, kullanıcının Assistant'ın erişmesine izin verdiği tüm cihazları, destekledikleri türleri ve özellikleri ve özelliğin davranışını söz konusu cihaz için yapılandırmak üzere gereken özellikleri içerir.
SYNC
amacı, hesap bağlama 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
amaçlı işlemi 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
amaç referans belgelerine bakın.