Quando os usuários interagem com o Google Assistant para consultar o
estado de um dispositivo, o fulfillment recebe uma
intent action.devices.QUERY
contendo um
lista de IDs de dispositivos (conforme fornecida pela resposta SYNC
).
Seu fulfillment recebe um
Intenção action.devices.EXECUTE
quando os usuários enviam comandos ao Assistant para controlar o
dispositivo.
Processar intents QUERY
Sua resposta de QUERY
inclui um conjunto completo de estados para cada uma das características
suportado pelos 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 intent QUERY
.
documentação de referência.
Processar intents EXECUTE
Semelhante à QUERY
, uma única intent pode ser direcionada a vários IDs de dispositivo. Um único
A intent EXECUTE
também pode conter vários comandos distintos fornecidos a um grupo.
de dispositivos. Por exemplo, uma intent acionada pode definir brilho e cor
em um grupo de luzes ou defina várias luzes para cada cor diferente. Seu
A resposta EXECUTE
precisa retornar o novo estado do dispositivo depois que o
execução.
Usar Report State
quando o estado da conexão mudanças no dispositivo. Por exemplo, devido a um evento EXECUTE
ou uma mudança de estado local (como acender manualmente um interruptor de luz).
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 EXECUTE
documentação de referência da intent.
Respostas de status
Suas respostas QUERY
e EXECUTE
incluem um campo status
para informar o
resultado da solicitação. Cada resposta de status pode fornecer uma das seguintes opções
valores:
SUCCESS
: a solicitação foi bem-sucedida.OFFLINE
: o dispositivo de destino está off-line ou inacessível.EXCEPTIONS
: há um problema ou um alerta associado à solicitação.ERROR
: a solicitação falhou com oerrorCode
correspondente.
Para ERROR
e EXCEPTIONS
, consulte
Lidar com erros e exceções e
Erros e exceções para mais informações
detalhes.