Nachdem Sie eine smart home-Aktion erstellt haben, fügen Sie im nächsten Schritt Funktionen in um die Smart-Home-Intents zu verarbeiten und Antworten zurückzugeben, Google Assistant erkennt.
Nutzer identifizieren
Assistant sendet Anfragen an Ihr
Ausführung der Aktion smart home mit dem angegebenen Zugriffstoken
von deinem OAuth 2.0-Server im Authorization
-Header.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Bevor Sie auf Anfragen antworten, sollte in Ihrer Auftragsausführungslogik überprüft werden, ob
diese Token-Anmeldedaten gültig sind und das zugehörige Nutzerkonto bestimmen. Wenn
das Zugriffstoken ungültig ist, sollte Ihre Auftragsausführung ein
HTTP-Fehler 401 Unauthorized
.
Geräte und deren Funktionen auflisten
Assistant sendet ein
action.devices.SYNC
-Intent mit Ihrem
Fulfillment, um die Liste der Geräte anzufordern, die mit dem jeweiligen Nutzer verknüpft sind, und
ihre Fähigkeiten. Ihre Auftragsausführung muss für jeden Nutzer in
Das Feld agentUserId
der SYNC
-Antwort. Diese ID muss unveränderlich sein
-Wert, der den Nutzer für Ihren Cloud-Dienst repräsentiert. Wir raten davon ab,
E-Mail-Adressen oder andere Attribute angeben, die auf den Einstellungen basieren, die der Nutzer kann
ändern können.
Das Feld „devices
“ deiner SYNC
-Antwort enthält alle Geräte, die
Nutzer hat Assistant für den Zugriff autorisiert, die
Typen und Eigenschaften, die sie
sowie die Attribute, die zur Konfiguration des Traits für
genau auf das Gerät zugreifen.
Der Intent SYNC
wird während der Kontoverknüpfung oder wenn ein Nutzer ausgelöst
ihre Geräte manuell neu synchronisiert. Wenn die Liste der unterstützten Geräte
oder Attributwerte ändern, verwenden
Request Sync (Synchronisierung anfordern), um eine neue
SYNC
-Intent und die Aktualisierungen an Google 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 zum Intent SYNC
in der Referenzdokumentation.