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 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 antworten, sollte Ihre Fulfillment-Logik prüfen, ob diese Token-Anmeldedaten gültig sind, 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 anzufordern, 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 bereitzustellen, 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
unterstützten Typen und Merkmale sowie die Attribute, die zum Konfigurieren des Verhaltens des Merkmals 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
Merkmale 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 SYNC Intent
Referenzdokumentation.