Quando os usuários interagem com Google Assistant para consultar o estado atual de um dispositivo, seu fulfillment recebe um
action.devices.QUERY intent que contém uma lista de IDs de dispositivos (conforme fornecido pela resposta SYNC).
Seu fulfillment recebe um
action.devices.EXECUTE intent
quando os usuários enviam comandos para Assistant para controlar o
dispositivo.
Processar intents QUERY
A resposta QUERY inclui um conjunto completo de estados para cada uma das características compatíveis com os dispositivos solicitados.
{ "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); }
Para mais informações, consulte a documentação de referência do intent QUERY.
Processar intents EXECUTE
Assim como QUERY, um único intent pode segmentar vários IDs de dispositivos. Um único intent EXECUTE também pode conter vários comandos distintos enviados a um grupo de dispositivos. Por exemplo, um intent acionado pode definir o brilho e a cor em um grupo de luzes ou definir várias luzes, cada uma com uma cor diferente. A resposta EXECUTE precisa retornar o novo estado do dispositivo após a execução.
Use Report State
quando o estado do dispositivo dos usuários mudar. Por exemplo, devido a um intent EXECUTE ou uma mudança de estado local (como acender um interruptor de luz manualmente).
Isso mantém Google Home Graph sincronizado com o serviço de nuvem.
{ "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); }
Para mais informações, consulte a EXECUTE
documentação de referência do intent.
Respostas de status
As respostas QUERY e EXECUTE incluem um campo status para informar o resultado da solicitação. Cada resposta de status pode fornecer um dos seguintes valores:
SUCCESS: a solicitação foi bem-sucedida.OFFLINE: o dispositivo de destino está off-line ou inacessível.EXCEPTIONS: há um problema ou alerta associado à solicitação.ERROR: a solicitação falhou com oerrorCodecorrespondente.
Para ERROR e EXCEPTIONS, consulte
Processar erros e exceções e
Erros e exceções para mais
detalhes.