Gdy użytkownicy korzystają z Google Assistant, aby sprawdzić bieżący
stan urządzenia, Twoja usługa otrzymuje
action.devices.QUERY intencję zawierającą
listę identyfikatorów urządzeń (zgodnie z odpowiedzią SYNC).
Gdy użytkownicy wysyłają do Assistant polecenia sterowania Twoim
urządzeniem, Twoja usługa otrzymuje intencję
action.devices.EXECUTE.
Obsługa intencji QUERY
Odpowiedź QUERY zawiera pełny zestaw stanów każdej cechy obsługiwanej 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, "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); }
Więcej informacji znajdziesz w dokumentacji referencyjnej intencji QUERY.
Obsługa intencji EXECUTE
Podobnie jak w przypadku QUERY, pojedyncza intencja może być kierowana na wiele identyfikatorów urządzeń. Pojedyncza intencja EXECUTE może też zawierać kilka różnych poleceń wydanych grupie urządzeń. Na przykład wywołana intencja może ustawić jasność i kolor w grupie świateł lub ustawić różne kolory dla poszczególnych świateł. Odpowiedź EXECUTE powinna zwracać nowy stan urządzenia po wykonaniu.
Gdy stan urządzenia użytkownika się zmieni, użyj funkcji Report State. Może to być spowodowane na przykład intencją EXECUTE lub lokalną zmianą stanu (np. ręcznym przełączeniem włącznika światła).
Dzięki temu Google Home Graph jest 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 intencji EXECUTE.
Odpowiedzi dotyczące stanu
Odpowiedzi QUERY i EXECUTE zawierają pole status, które informuje o wyniku żądania. Każda odpowiedź dotycząca stanu może mieć jedną z tych wartości:
SUCCESS: żądanie zostało zrealizowane.OFFLINE: urządzenie docelowe jest offline lub niedostępne.EXCEPTIONS: z żądaniem jest powiązany problem lub alert.ERROR: żądanie nie powiodło się z powodu odpowiedniego kodu błęduerrorCode.
Więcej informacji o ERROR i EXCEPTIONS znajdziesz w sekcjach
Obsługa błędów i wyjątków oraz
Błędy i wyjątki.