Lorsque les utilisateurs interagissent avec Google Assistant pour interroger l'état actuel d'un appareil, votre fulfillment reçoit un intent action.devices.QUERY contenant une liste d'ID d'appareil (fournis par votre réponse SYNC).
Votre fulfillment reçoit un intent action.devices.EXECUTE lorsque les utilisateurs envoient des commandes à Assistant pour contrôler votre appareil.
Gérer les intents QUERY
Votre réponse QUERY inclut un ensemble complet d'états pour chacun des traits acceptés par les appareils demandés.
{ "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); }
Pour en savoir plus, consultez la documentation de référence sur l'intent QUERY.
Gérer les intents EXECUTE
Comme pour QUERY, un seul intent peut cibler plusieurs ID d'appareil. Un seul intent EXECUTE peut également contenir plusieurs commandes distinctes données à un groupe d'appareils. Par exemple, un intent déclenché peut définir à la fois la luminosité et la couleur d'un groupe de lumières, ou définir plusieurs lumières, chacune sur une couleur différente. Votre réponse EXECUTE doit renvoyer le nouvel état de l'appareil après l'exécution.
Utilisez Report State lorsque l'état de l'appareil de l'utilisateur change. Par exemple, en raison d'un intent EXECUTE ou d'un changement d'état local (comme l'activation manuelle d'un interrupteur).
Cela permet de synchroniser Google Home Graph avec votre service 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); }
Pour en savoir plus, consultez la documentation de référence sur l'intent EXECUTE.
Réponses d'état
Vos réponses QUERY et EXECUTE incluent un champ status pour indiquer le résultat de la requête. Chaque réponse d'état peut fournir l'une des valeurs suivantes :
SUCCESS: la requête a abouti.OFFLINE: l'appareil cible est hors connexion ou inaccessible.EXCEPTIONS: un problème ou une alerte sont associés à la requête.ERROR: la requête a échoué avec leerrorCodecorrespondant.
Pour en savoir plus sur ERROR et EXCEPTIONS, consultez Gérer les erreurs et les exceptions et Erreurs et exceptions.