Quando gli utenti interagiscono con Google Assistant per eseguire query sull'attuale
di un dispositivo, l'evasione degli ordini
intent action.devices.QUERY
contenente un
elenco di ID dispositivo (come fornito dalla tua risposta SYNC
).
Il tuo evasione ordine riceve un
Intenzione di action.devices.EXECUTE
quando gli utenti inviano comandi a Assistant per controllare le tue
dispositivo.
Gestisci QUERY
intent
La tua risposta QUERY
include un insieme completo di stati per ciascuno dei tratti
supportata dai dispositivi richiesti.
{ "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); }
Per maggiori informazioni, consulta l'intent QUERY
documentazione di riferimento.
Gestisci EXECUTE
intent
Come nel caso di QUERY
, un singolo intent può scegliere come target più ID dispositivo. Un singolo
L'intent EXECUTE
può anche contenere più comandi distinti forniti a un gruppo
di dispositivi. Ad esempio, un intent attivato potrebbe impostare sia la luminosità che il colore
su un gruppo di luci, oppure di impostare più luci ciascuna su un colore diverso. Il tuo
La risposta EXECUTE
dovrebbe restituire il nuovo stato del dispositivo dopo il
dell'esecuzione.
Utilizza Report State
quando lo stato dell'utente modifiche ai dispositivi. Ad esempio, a causa di un EXECUTE
l'intenzione o un cambiamento di stato locale (ad esempio l'apertura manuale di un interruttore della luce).
In questo modo, Google Home Graph rimane sincronizzato con il tuo servizio cloud.
{ "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); }
Per ulteriori informazioni, consulta la EXECUTE
documentazione di riferimento per intent.
Risposte relative allo stato
Le tue risposte di QUERY
e EXECUTE
includono un campo status
per segnalare
il risultato della richiesta. Ogni risposta dello stato può fornire uno dei seguenti elementi:
valori:
SUCCESS
: la richiesta è andata a buon fine.OFFLINE
: il dispositivo di destinazione è offline o non è comunque raggiungibile.EXCEPTIONS
: alla richiesta è associato un problema o un avviso.ERROR
: la richiesta non è andata a buon fine e il valore corrispondente èerrorCode
.
Per ERROR
e EXCEPTIONS
, vedi
Gestire errori ed eccezioni e
Errori ed eccezioni per ulteriori informazioni
i dettagli.