Gdy użytkownicy korzystają z funkcji Google Assistant, aby sprawdzić bieżący stan urządzenia, Twoja usługa realizacja otrzymuje intencję action.devices.QUERY
zawierającą listę identyfikatorów urządzeń (podanych w odpowiedzi SYNC
).
Twoja usługa otrzymuje intencję action.devices.EXECUTE
, gdy użytkownicy wysyłają polecenia do Assistant, aby sterować urządzeniem.
Obsługa intencji QUERY
Odpowiedź QUERY
zawiera pełny zestaw stanów dla każdego z atrybutów obsługiwanych 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 dokumentacji referencyjnej dotyczącej intencji QUERY
.
Obsługa intencji EXECUTE
Podobnie jak w przypadku QUERY
, pojedynczy zamiar może być kierowany na wiele identyfikatorów urządzeń. Pojedyncza intencja EXECUTE
może też zawierać wiele różnych poleceń wydawanych grupie urządzeń. Na przykład wywołana intencja może ustawić jasność i kolor grupy świateł lub ustawić różne kolory dla różnych świateł. Odpowiedź EXECUTE
powinna zwracać nowy stan urządzenia po wykonaniu operacji.
Użyj Report State, gdy zmieni się stan urządzenia użytkownika. Na przykład z powodu EXECUTE
intencji lub zmiany stanu lokalnego (np. ręcznego włączenia światła).
Dzięki temu Google Home Graph będzie zsynchronizowany z Twoją 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 znajdziesz w dokumentacji referencyjnej dotyczącej intencji EXECUTE
.
Odpowiedzi na stan
Odpowiedzi na żądania QUERY
i EXECUTE
zawierają pole status
, w którym podano wynik wykonania żądania. Każda odpowiedź dotycząca stanu może zawierać jedną z tych wartości:
SUCCESS
: prośba została zrealizowana.OFFLINE
: urządzenie docelowe jest offline lub niedostępne.EXCEPTIONS
: wystąpił problem lub alert związany z prośbą.ERROR
: prośba zakończyła się niepowodzeniem z odpowiednimerrorCode
.
Więcej informacji o elementach ERROR
i EXCEPTIONS
znajdziesz w artykułach Przetwarzanie błędów i wyjątków oraz Błędy i wyjątki.