Когда пользователи взаимодействуют с Google Assistant , чтобы узнать текущее состояние устройства, ваш механизм выполнения получает намерение action.devices.QUERY
, содержащее список идентификаторов устройств (полученных в ответе SYNC
). Когда пользователи отправляют Assistant команды для управления вашим устройством, ваш механизм выполнения получает намерение action.devices.EXECUTE
Обработка намерений 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
см. разделы Обработка ошибок и исключений и Ошибки и исключения .