Nachdem du eine smart home-Aktion erstellt hast, musst du deiner Auftragsausführung Funktionen hinzufügen, um die Smart-Home-Intents zu verarbeiten und Antworten zurückzugeben, die von Google Assistant erkannt werden.
Nutzer identifizieren
Assistant sendet Anfragen an die Ausführung deiner smart home-Aktion mit dem Zugriffstoken, das von deinem OAuth 2.0-Server im Authorization
-Header bereitgestellt wurde.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Bevor Sie auf Anfragen antworten, sollte Ihre Auftragsausführungslogik prüfen, ob diese Token-Anmeldedaten gültig sind, und das zugehörige Nutzerkonto ermitteln. Wenn das Zugriffstoken ungültig ist, sollte die Auftragsausführung den HTTP-Fehler 401 Unauthorized
zurückgeben.
Geräte und deren Funktionen auflisten
Assistant sendet den Intent action.devices.SYNC
an Ihre Auftragsausführung, um die Liste der Geräte anzufordern, die dem angegebenen Nutzer und seinen Funktionen zugeordnet sind. Die Auftragsausführung muss für jeden Nutzer im Feld agentUserId
der SYNC
-Antwort eine eindeutige ID zurückgeben. Diese ID muss ein unveränderlicher Wert sein, um den Nutzer in Ihrem Cloud-Dienst darzustellen. Es wird nicht empfohlen, E-Mail-Adressen oder andere Attribute basierend auf Einstellungen anzugeben, die der Nutzer ändern kann.
Das Feld devices
der SYNC
-Antwort enthält alle Geräte, auf die der Nutzer Assistant zugreifen darf, die unterstützten Typen und Eigenschaften sowie die Attribute, die zum Konfigurieren des Verhaltens des Traits für das jeweilige Gerät erforderlich sind.
Der Intent SYNC
wird während der Kontoverknüpfung oder wenn ein Nutzer seine Geräte manuell neu synchronisiert, ausgelöst. Wenn sich die Geräteliste, die unterstützten Eigenschaften oder Attributwerte der Nutzer ändern, verwenden Sie Request Sync, um einen neuen SYNC
-Intent auszulösen und die Aktualisierungen an Google zu melden.
{ "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); }
Weitere Informationen finden Sie in der Intent-Referenzdokumentation zu SYNC
.