Gdy użytkownicy wchodzą w interakcję z Google Assistant, aby wysłać zapytanie dotyczące bieżącego stanu urządzenia, Twoja realizacja otrzymuje intencję action.devices.QUERY
zawierającą listę identyfikatorów urządzeń (dostarczoną przez odpowiedź SYNC
).
Gdy użytkownik wyśle polecenia do Assistant, aby sterować urządzeniem, otrzyma ona intencję action.devices.EXECUTE
.
Obsługa QUERY
intencji
Odpowiedź QUERY
zawiera pełny zestaw stanów dla wszystkich cech 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 dotyczącej intencji QUERY
.
Obsługa EXECUTE
intencji
Tak jak QUERY
, jedna intencja może być kierowana na wiele identyfikatorów urządzeń. Pojedyncza intencja EXECUTE
może też zawierać różne różne polecenia kierowane do grupy urządzeń. Na przykład aktywowana intencja może ustawić jasność i kolor grupy oświetlenia lub ustawić dla każdego z nich inny kolor. Odpowiedź EXECUTE
powinna zwrócić nowy stan urządzenia po wykonaniu.
Użyj Report State, gdy zmieni się stan urządzenia użytkownika. Na przykład ze względu na zamiar EXECUTE
lub zmianę stanu lokalnego (np. ręczne przesuwanie przełącznika oświetlenia).
Dzięki temu Google Home Graph będzie zsynchronizowany 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 znajdziesz w dokumentacji dotyczącej intencji EXECUTE
.
Odpowiedzi w sekcji Stan
Twoje odpowiedzi QUERY
i EXECUTE
zawierają pole status
, by zgłosić wynik żądania. Każda odpowiedź stanu może mieć jedną z tych wartości:
SUCCESS
: prośba została zrealizowana.OFFLINE
: urządzenie docelowe jest offline lub z innego powodu nieosiągalne.EXCEPTIONS
: z żądaniem jest powiązany problem lub alert.ERROR
: nie udało się wysłać żądania dla odpowiedniego parametruerrorCode
.
Więcej informacji na temat błędów ERROR
i EXCEPTIONS
znajdziesz w sekcji Obsługa błędów i wyjątki oraz Błędy i wyjątki.