Wenn Nutzer mit Google Assistant interagieren, um den aktuellen Status eines Geräts abzufragen, erhält die Auftragsausführung den Intent action.devices.QUERY
, der eine Liste von Geräte-IDs enthält (wie in Ihrer SYNC
-Antwort angegeben).
Die Auftragsausführung empfängt einen action.devices.EXECUTE
-Intent, wenn Nutzer Befehle an Assistant senden, um das Gerät zu steuern.
QUERY
-Intents verarbeiten
Die QUERY
-Antwort enthält einen vollständigen Satz von Status für alle 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 }, "456": { "on": true, "online": true, "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 }, 456: { on: true, online: true, 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( "456", new HashMap<String, Object>() { { put("on", true); put("online", true); 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 Dokumentation zum Intent QUERY
.
EXECUTE
-Intents verarbeiten
Ähnlich wie bei QUERY
kann ein einzelner Intent auf mehrere Geräte-IDs ausgerichtet werden. Ein einzelner EXECUTE
-Intent kann auch mehrere separate Befehle enthalten, die an eine Gruppe von Geräten gesendet werden. Ein ausgelöster Intent kann beispielsweise sowohl Helligkeit als auch Farbe für eine Gruppe von Leuchten oder für mehrere Leuchten jeweils eine andere Farbe festlegen. Die EXECUTE
-Antwort sollte nach der Ausführung den neuen Status des Geräts zurückgeben.
Verwenden Sie Report State, wenn sich der Status des Nutzergeräts ändert. beispielsweise durch einen EXECUTE
-Intent oder eine lokale Statusänderung (z. B. durch manuelles Betätigen eines Lichtschalters).
Dadurch wird 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
Die Antworten QUERY
und EXECUTE
enthalten das Feld status
, über das das Ergebnis der Anfrage gemeldet wird. In jeder Statusantwort kann einer der folgenden Werte zurückgegeben werden:
SUCCESS
: Die Anfrage war erfolgreich.OFFLINE
: Das Zielgerät ist offline oder anderweitig nicht erreichbar.EXCEPTIONS
: Im Zusammenhang mit der Anfrage ist ein Problem oder eine Benachrichtigung aufgetreten.ERROR
: Die Anfrage ist mit der entsprechendenerrorCode
fehlgeschlagen.
Weitere Informationen zu ERROR
und EXCEPTIONS
finden Sie unter Fehler und Ausnahmen verarbeiten und Fehler und Ausnahmen.