Nachdem Sie eine Cloud-to-cloud-Integration erstellt haben, müssen Sie als Nächstes Funktionen in Ihre Ausführung hinzufügen, um die Smart Home-Intents zu verarbeiten und Antworten zurückzugeben, die Google Assistant erkennt.
Nutzer identifizieren
Assistant sendet Anfragen an die Ausführung Ihrer smart home Action mit dem Zugriffstoken, das von Ihrem OAuth 2.0-Server im Authorization
-Header bereitgestellt wird.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Bevor Sie auf Anfragen reagieren, sollte Ihre Fulfillment-Logik prüfen, ob diese Token-Anmeldedaten gültig sind, und das zugehörige Nutzerkonto ermitteln. Wenn der Zugriffstoken ungültig ist, sollte dein Fulfillment den HTTP-Fehler 401 Unauthorized
zurückgeben.
Geräte und ihre Funktionen auflisten
Assistant sendet einen action.devices.SYNC
-Intent an dein Fulfillment, um die Liste der Geräte anzufordern, die mit dem angegebenen Nutzer verknüpft sind, sowie deren Funktionen. Ihr Fulfillment muss für jeden Nutzer eine eindeutige ID im Feld agentUserId
der SYNC
-Antwort 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 auf Grundlage von Einstellungen bereitzustellen, die der Nutzer ändern kann.
Das Feld devices
Ihrer SYNC
-Antwort enthält alle Geräte, auf die der Nutzer Assistant den Zugriff autorisiert hat, die unterstützten Typen und Eigenschaften sowie die Attribute, die zum Konfigurieren des Verhaltens der Eigenschaft 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 synchronisiert, ausgelöst. Wenn sich die Liste der Geräte, unterstützten Eigenschaften oder Attributwerte der Nutzer ändert, 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 Referenzdokumentation zu SYNC
-Intents.