Когда пользователи взаимодействуют с Google Assistant для запроса текущего состояния устройства, ваше выполнение получает намерение action.devices.QUERY
, содержащее список идентификаторов устройств (как указано в вашем ответе SYNC
). Ваше выполнение получает намерение action.devices.EXECUTE
, когда пользователи отправляют команды Assistant для управления вашим устройством.
Обработка намерений QUERY
Ваш ответ QUERY
включает полный набор состояний для каждой характеристики, поддерживаемой запрошенными устройствами.
{ "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 } } } } }; });
Ява
@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); }
Дополнительные сведения см. в справочной документации по намерению QUERY
.
Обработка намерений EXECUTE
Как и в случае с QUERY
, одно намерение может быть нацелено на несколько идентификаторов устройств. Одно намерение EXECUTE
может также содержать несколько отдельных команд, данных группе устройств. Например, сработавшее намерение может установить как яркость, так и цвет для группы источников света или установить для нескольких источников света разные цвета. Ваш ответ EXECUTE
должен возвращать новое состояние устройства после выполнения.
Используйте Report State при изменении состояния устройства пользователя. Например, из-за намерения EXECUTE
или изменения локального состояния (например, при ручном включении выключателя). Благодаря этому Google Home Graph синхронизируется с вашим облачным сервисом.
{ "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" }] } }; });
Ява
@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); }
Дополнительные сведения см. в справочной документации по намерению EXECUTE
.
Статусные ответы
Ваши ответы QUERY
и EXECUTE
включают поле status
, в котором сообщается результат запроса. Каждый ответ о состоянии может предоставлять одно из следующих значений:
-
SUCCESS
: Запрос выполнен успешно. -
OFFLINE
: целевое устройство не в сети или недоступно по какой-либо причине. -
EXCEPTIONS
: С запросом связана проблема или предупреждение. -
ERROR
: Запрос не выполнен с соответствующимerrorCode
.
Дополнительные сведения об ERROR
и EXCEPTIONS
см. в разделах Обработка ошибок и исключений и Ошибки и исключения .