smart home İşlemi oluşturduktan sonraki adım, işlevi akıllı ev niyetini işlemek ve bu soruları yanıtlamak için Google Assistant tanır.
Kullanıcıyı tanımlama
Assistant,
smart home İşlemin sağlanan erişim jetonuyla karşılanması
OAuth 2.0 sunucunuz tarafından Authorization
üstbilgisinde.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
İsteklere yanıt vermeden önce sipariş karşılama mantığınızın şunları doğrulaması gerekir:
Bu jeton kimlik bilgisi geçerlidir ve ilişkili kullanıcı hesabını belirler. Eğer
erişim jetonu geçersizse, karşılama işleminiz bir
HTTP 401 Unauthorized
hatası.
Cihazları ve özelliklerini listeleyin
Assistant,
size action.devices.SYNC
belirtilen kullanıcıyla ilişkili cihazların listesini isteme ve
en iyi uygulamaları paylaşacağım. Sipariş karşılama işleminiz şu konumdaki her kullanıcı için benzersiz bir kimlik döndürmelidir:
SYNC
yanıtının agentUserId
alanı. Bu kimlik sabit olmalıdır
temsil edecek bir değer ekleyin. Bu işlem önerilmez
kullanıcının yapabileceği ayarlara bağlı olarak e-posta adreslerini veya diğer özellikleri sağlayın
unutmayın.
SYNC
yanıtınızın devices
alanı,
kullanıcı, Assistant uygulamasına erişme yetkisi verdi.
türlerini ve özelliklerini
özelliğinin davranışını yapılandırmak için gereken özellikleri
karar verebilirsiniz.
SYNC
niyeti, hesap bağlama işlemi sırasında veya kullanıcı tarafından tetiklenir.
cihazlarını manuel olarak yeniden senkronize edebilir. Kullanıcıların cihaz listesi, desteklenen
özellikleri veya özellik değerleri değiştiğinde,
Senkronizasyon isteğinde bulunarak yeni bir
SYNC
isteğinde bulundu ve güncellemeleri Google'a bildirin.
{ "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
amacına bakın
referans belgeler.