Nachdem du eine Cloud-to-cloud-Integration erstellt hast, musst du als Nächstes Funktionen in deine Auftragsausführung einfügen, um die Smart-Home-Intents zu verarbeiten und Antworten zurückzugeben, die Google Assistant erkennt.
Nutzer identifizieren
Assistant sendet Anfragen an die Auftragsausführung deiner smart home-Aktion mit dem Zugriffstoken, das von deinem 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 Ihre Auftragsausführungslogik auf Anfragen antwortet, sollte sie prüfen, ob diese Token-Anmeldedaten gültig sind, und das zugehörige Nutzerkonto ermitteln. Wenn das Zugriffstoken ungültig ist, sollte deine Auftragsausführung einen HTTP-Fehler 401 Unauthorized zurückgeben.
Geräte und ihre Funktionen auflisten
Assistant sendet einen action.devices.SYNC-Intent an deine Auftragsausführung, um die Liste der Geräte anzufordern, die mit dem angegebenen Nutzer und seinen Funktionen verknüpft sind. Deine Auftragsausführung muss für jeden Nutzer eine eindeutige ID im Feld agentUserId der SYNC-Antwort zurückgeben. Diese ID muss ein unveränderlicher Wert sein, der den Nutzer für Ihren Cloud-Dienst darstellt. 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, für die der Nutzer Assistant Zugriff gewährt hat, die unterstützten Typen und Eigenschaften sowie die Attribute, die zum Konfigurieren des Verhaltens der Eigenschaft für dieses bestimmte Gerät erforderlich sind.
Der Intent SYNC wird während der Kontoverknüpfung oder bei der manuellen Neusynchronisierung der Geräte durch einen Nutzer ausgelöst. Wenn sich die Liste der Geräte, unterstützten Eigenschaften oder Attributwerte der Nutzer ändert, verwende 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 zum Intent SYNC.