Wenn Nutzer mit Google Assistant interagieren, um den aktuellen Status eines Geräts abzufragen, erhält deine Ausführung einen action.devices.QUERY-Intent, der eine Liste von Geräte-IDs enthält (wie in deiner SYNC-Antwort angegeben).
Deine Auftragsausführung erhält einen action.devices.EXECUTE-Intent, wenn Nutzer Befehle an Assistant senden, um dein Gerät zu steuern.
QUERY Intents verarbeiten
Deine QUERY-Antwort enthält einen vollständigen Satz von Status für jede der Eigenschaften, die von den angeforderten Geräten unterstützt werden.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.QUERY", "payload": { "devices": [{ "id": "123", "customData": { "fooValue": 74, "barValue": true, "bazValue": "foo" } }, { "id": "456", "customData": { "fooValue": 12, "barValue": false, "bazValue": "bar" } }] } }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "123": { "on": true, "online": true, "status": "SUCCESS" }, "456": { "on": true, "online": true, "status": "SUCCESS", "brightness": 80, "color": { "name": "cerulean", "spectrumRGB": 31655 } } } } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onQuery((body, headers) => { // TODO Get device state return { requestId: body.requestId, payload: { devices: { 123: { on: true, online: true, status: "SUCCESS" }, 456: { on: true, online: true, status: "SUCCESS", brightness: 80, color: { name: "cerulean", spectrumRGB: 31655 } } } } }; });
Java
@NotNull @Override public QueryResponse onQuery(@NotNull QueryRequest queryRequest, @Nullable Map<?, ?> map) { QueryResponse.Payload payload = new QueryResponse.Payload(); payload.setDevices( new HashMap<String, Map<String, Object>>() { { put( "123", new HashMap<String, Object>() { { put("on", true); put("online", true); put("status", "SUCCESS"); } }); put( "456", new HashMap<String, Object>() { { put("on", true); put("online", true); put("status", "SUCCESS"); put("brightness", 80); put( "color", new HashMap<String, Object>() { { put("name", "cerulean"); put("spectrumRGB", 31655); } }); } }); } }); return new QueryResponse(queryRequest.getRequestId(), payload); }
Weitere Informationen finden Sie in der Referenzdokumentation zum Intent QUERY.
EXECUTE Intents verarbeiten
Ähnlich wie bei QUERY kann ein einzelner Intent auf mehrere Geräte-IDs ausgerichtet sein. Ein einzelner EXECUTE-Intent kann auch mehrere unterschiedliche Befehle enthalten, die an eine Gruppe von Geräten gesendet werden. Beispielsweise kann ein ausgelöster Intent sowohl die Helligkeit als auch die Farbe einer Gruppe von Lampen festlegen oder mehrere Lampen auf jeweils eine andere Farbe einstellen. Die Antwort auf EXECUTE sollte den neuen Status des Geräts nach der Ausführung zurückgeben.
Verwende Report State, wenn sich der Status des Geräts des Nutzers ändert. Beispielsweise aufgrund eines EXECUTE-Intents oder einer lokalen Statusänderung (z. B. manuelles Betätigen eines Lichtschalters).
So bleibt Google Home Graph mit Ihrem Cloud-Dienst synchronisiert.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123", "customData": { "fooValue": 74, "barValue": true, "bazValue": "sheepdip" } }, { "id": "456", "customData": { "fooValue": 36, "barValue": false, "bazValue": "moarsheep" } }], "execution": [{ "command": "action.devices.commands.OnOff", "params": { "on": true } }] }] } }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "123" ], "status": "SUCCESS", "states": { "on": true, "online": true } }, { "ids": [ "456" ], "status": "ERROR", "errorCode": "deviceTurnedOff" } ] } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onExecute((body, headers) => { // TODO Send command to device return { requestId: body.requestId, payload: { commands: [{ ids: ["123"], status: "SUCCESS", states: { on: true, online: true } }, { ids: ["456"], status: "ERROR", errorCode: "deviceTurnedOff" }] } }; });
Java
@NotNull @Override public ExecuteResponse onExecute( @NotNull ExecuteRequest executeRequest, @Nullable Map<?, ?> map) { ExecuteResponse.Payload payload = new ExecuteResponse.Payload(); payload.setCommands( new Commands[] { new Commands( new String[] {"123"}, "SUCCESS", new HashMap<String, Object>() { { put("on", true); put("online", true); } }, null, null), new Commands(new String[] {"456"}, "ERROR", null, "deviceTurnedOff", null) }); return new ExecuteResponse(executeRequest.getRequestId(), payload); }
Weitere Informationen finden Sie in der Referenzdokumentation zum Intent EXECUTE.
Statusantworten
Ihre QUERY- und EXECUTE-Antworten enthalten ein status-Feld, in dem das Ergebnis der Anfrage angegeben wird. Jede Statusantwort kann einen der folgenden Werte enthalten:
SUCCESS: Die Anfrage war erfolgreich.OFFLINE: Das Zielgerät ist offline oder anderweitig nicht erreichbar.EXCEPTIONS: Es gibt ein Problem oder eine Warnung im Zusammenhang mit der Anfrage.ERROR: Die Anfrage ist mit dem entsprechendenerrorCodefehlgeschlagen.
Weitere Informationen zu ERROR und EXCEPTIONS finden Sie unter Fehler und Ausnahmen verarbeiten und Fehler und Ausnahmen.