Cuando los usuarios interactúan con Google Assistant para consultar el estado
de un dispositivo, tu entrega recibe un
El intent action.devices.QUERY
que contiene un
una lista de IDs de dispositivos (como la proporciona tu respuesta de SYNC
).
Tu entrega recibe un
Intent action.devices.EXECUTE
cuando los usuarios envían comandos a Assistant para controlar tu
dispositivo.
Cómo controlar intents QUERY
Tu respuesta de QUERY
incluye un conjunto completo de estados para cada una de las características.
compatibles con los 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 obtener más información, consulta el intent QUERY
.
documentación de referencia.
Cómo controlar intents EXECUTE
Al igual que QUERY
, un solo intent puede orientarse a varios IDs de dispositivos. Un solo
El intent EXECUTE
también puede contener varios comandos distintos proporcionados a un grupo.
de dispositivos. Por ejemplo, un intent activado puede establecer tanto el brillo como el color
en un grupo de luces o establecer
varias luces para cada una de un color diferente. Tu
La respuesta EXECUTE
debe mostrar el nuevo estado del dispositivo después de
ejecución.
Usa Report State.
cuando el estado de la configuración cambios en los dispositivos. Por ejemplo, debido a un EXECUTE
o un cambio de estado local (como presionar manualmente un interruptor de luz).
Esto mantiene Google Home Graph sincronizado con tu servicio en la nube.
{ "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 obtener más información, consulta la EXECUTE
.
la documentación de referencia de intents.
Respuestas de estado
Tus respuestas de QUERY
y EXECUTE
incluyen un campo status
para informar la
resultado de la solicitud. Cada respuesta de estado puede proporcionar uno de los siguientes
valores:
SUCCESS
: La solicitud se realizó correctamente.OFFLINE
: El dispositivo de destino no tiene conexión o es inaccesible.EXCEPTIONS
: Hay un problema o una alerta asociados con la solicitud.ERROR
: La solicitud falló con elerrorCode
correspondiente.
Para ERROR
y EXCEPTIONS
, consulta
Soluciona errores y excepciones
Errores y excepciones para ver más errores
más detalles.