Nachdem Sie eine Integration Cloud-to-clouderstellt haben, müssen Sie Ihrer Fulfillment-Anwendung Funktionen hinzufügen, mit denen Smart-Home-Intents verarbeitet und Antworten zurückgegeben werden können, die Google Assistant erkennt.
Nutzer identifizieren
Assistant sendet Anfragen an die Fulfillment-Anwendung Ihrer
smart home Action. Das Zugriffstoken wird von Ihrem OAuth 2.0-Server
im Authorization Header bereitgestellt.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Bevor Sie auf Anfragen antworten, sollte Ihre Fulfillment-Logik prüfen, ob dieses Token gültig ist, und das zugehörige Nutzerkonto ermitteln. Wenn das Zugriffstoken ungültig ist, sollte Ihre Fulfillment-Anwendung den HTTP-Fehler 401 Unauthorized zurückgeben.
Geräte und ihre Funktionen auflisten
Assistant sendet einen
action.devices.SYNC-Intent an Ihre
Fulfillment-Anwendung, um die Liste der Geräte abzurufen, die mit dem angegebenen Nutzer verknüpft sind, sowie deren
Funktionen. Ihre Fulfillment-Anwendung muss im Feld agentUserId der SYNC-Antwort eine eindeutige ID für jeden Nutzer zurückgeben. Diese ID muss ein unveränderlicher Wert sein, um den Nutzer für Ihren Clouddienst zu repräsentieren. Es wird nicht empfohlen, E-Mail-Adressen oder andere Attribute basierend auf Einstellungen anzugeben, die der Nutzer ändern kann.
Das Feld devices Ihrer SYNC-Antwort enthält alle Geräte, für die der Nutzer Assistant den Zugriff autorisiert hat, die Typen und Traits, die sie unterstützen, sowie die Attribute, die zum Konfigurieren des Verhaltens des Traits für dieses bestimmte Gerät erforderlich sind.
Der SYNC-Intent wird während der Kontoverknüpfung oder ausgelöst, wenn ein Nutzer seine Geräte manuell neu synchronisiert. Wenn sich die Liste der Geräte, unterstützten
Traits oder Attributwerte der Nutzer ändert, verwenden Sie
Synchronisierung anfordern, 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 SYNC Intent
Referenzdokumentation.