Gdy użytkownicy wchodzą w interakcję z firmą Google Assistant
to query the current
state of a device, your fulfillment receives an
action.devices.QUERY
intent containing a
list of device IDs (as provided by your SYNC
response).
Your fulfillment receives an
action.devices.EXECUTE
intent
when users send commands to
Assistant to control your
device.
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 referencyjnej intencji QUERY
.
Obsługa EXECUTE
intencji
Podobnie jak w przypadku QUERY
, jedna intencja może być kierowana na wiele identyfikatorów urządzeń. Intencja EXECUTE
może też zawierać wiele różnych poleceń przypisanych do grupy urządzeń. Na przykład wyzwolona reguła może ustawiać jasność i kolor grupy światła lub ustawić dla każdego z nich inny kolor. Odpowiedź EXECUTE
powinna zwrócić po wykonaniu działania nowy stan urządzenia.
Używaj interfejsu Report State
w przypadku zmiany stanu urządzenia użytkownika. Na przykład ze względu na intencję EXECUTE
lub zmianę stanu lokalnego (np. ręczne przełączenie przełącznika światła).
Dzięki temu Google Home Graph
synchronized with your cloud service.
{ "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 EXECUTE
.
Stan odpowiedzi
Twoje odpowiedzi QUERY
i EXECUTE
zawierają pole status
, w którym możesz zgłosić wynik żądania. Każda odpowiedź o stanie może zawierać jedną z tych wartości:
SUCCESS
: żądanie zostało zrealizowane.OFFLINE
: urządzenie docelowe jest offline lub w inny sposób jest nieosiągalne.EXCEPTIONS
: z prośbą jest powiązany problem lub alert.ERROR
: nie udało się wysłać żądania z odpowiednimerrorCode
.
Aby uzyskać więcej informacji na temat ERROR
i EXCEPTIONS
, zapoznaj się z artykułami Obsługa błędów i wyjątków oraz Błędy i wyjątki.