Gdy użytkownicy wchodzą w interakcję z aplikacją Google Assistant, aby przesłać zapytanie dotyczące bieżącego
zgodnie ze stanem urządzenia, realizacja otrzymuje
intencja action.devices.QUERY
zawierająca
lista identyfikatorów urządzeń (na podstawie odpowiedzi SYNC
).
Twoja realizacja otrzyma
Zamiar action.devices.EXECUTE
gdy użytkownicy wysyłają do Assistant polecenia pozwalające sterować
urządzenia.
Obsługa intencji QUERY
Odpowiedź QUERY
zawiera pełny zestaw stanów każdej z cech
obsługiwane przez żądane urządzenia.
{ "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); }
Więcej informacji znajdziesz w intencji QUERY
.
dokumentacji referencyjnej.
Obsługa intencji EXECUTE
Podobnie jak w przypadku QUERY
, jedna intencja może być kierowana na wiele identyfikatorów urządzeń. Jeden
Intencja EXECUTE
może też zawierać wiele różnych poleceń podanych grupie
urządzeń. Na przykład wywołana intencja może ustawiać zarówno jasność, jak i kolor
na grupie lampek lub ustawić poszczególne lampy w innym kolorze. Twoje
Odpowiedź EXECUTE
powinna zwrócić nowy stan urządzenia po
Użyj formatu Report State
gdy stan danych użytkownika zmian urządzenia. Na przykład ze względu na atrybut EXECUTE
intencja lub lokalna zmiana stanu (np. ręczne przestawienie włącznika).
Dzięki temu usługa Google Home Graph będzie synchronizowana z usługą w chmurze.
{ "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); }
Więcej informacji: EXECUTE
dokumentacji dotyczącej intencji.
Odpowiedzi dotyczące stanu
Odpowiedzi QUERY
i EXECUTE
zawierają pole status
, które wskazuje
w wyniku żądania. Każda odpowiedź dotycząca stanu może zawierać jeden z tych elementów:
wartości:
SUCCESS
: prośba została zrealizowana.OFFLINE
: urządzenie docelowe jest offline lub jest niedostępne z innego powodu.EXCEPTIONS
: wystąpił problem lub alert związany z prośbą.ERROR
: nie udało się zrealizować żądania:errorCode
.
W przypadku ERROR
i EXCEPTIONS
zobacz
Obsługa błędów i wyjątków oraz
Więcej informacji o błędach i wyjątkach
.