Когда пользователи взаимодействуют с 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.
Обработка намерений 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 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" }] } }; });
Джава
@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
см. в разделах Обработка ошибок и исключений и Ошибки и исключения .