Quando os usuários interagem com Google Assistant para consultar o estado atual de um dispositivo, seu fulfillment recebe um intent action.devices.QUERY
contendo uma lista de IDs de dispositivos (conforme fornecido pela resposta SYNC
).
Seu fulfillment recebe uma intent
action.devices.EXECUTE
quando os usuários enviam comandos para o Assistant controlar seu
dispositivo.
Processar intents do QUERY
Sua 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 }, "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); }
Para mais informações, consulte a documentação de referência de intenção QUERY
.
Processar intents do EXECUTE
Assim como QUERY
, uma única intent pode segmentar vários IDs de dispositivo. Uma única intent
EXECUTE
também pode conter vários comandos distintos dados a um grupo
de dispositivos. Por exemplo, uma intent acionada 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 de 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 uma intenção EXECUTE
ou uma mudança de estado local, como acender um interruptor de luz manualmente.
Isso mantém o Google Home Graph sincronizado com seu 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 documentação de referência de intenção do EXECUTE
.
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 oerrorCode
correspondente.
Para ERROR
e EXCEPTIONS
, consulte
Como lidar com erros e exceções e
Erros e exceções para mais
detalhes.