Lorsque les utilisateurs interagissent avec Google Assistant to query the current
state of a device, your fulfillment receives an
action.devices.QUERY
intent containing a
list of device IDs (as provided by your SYNC
response).
Your fulfillment receives an
action.devices.EXECUTE
intent
when users send commands to Assistant to control your
device.
Gérer QUERY
intents
Votre réponse QUERY
inclut un ensemble complet d'états pour chacune des caractéristiques compatibles avec 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 }, "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); }
Pour en savoir plus, consultez la documentation de référence sur l'intent QUERY
.
Gérer EXECUTE
intents
Comme pour QUERY
, un même intent peut cibler plusieurs ID d'appareils. Un même intent EXECUTE
peut également contenir plusieurs commandes distinctes attribué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 sur chacune 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 des utilisateurs change. par exemple en raison d'un intent EXECUTE
ou d'un changement d'état local (par exemple, en actionnant manuellement un interrupteur).
Cela permet de conserver Google Home Graph synchronized with your cloud service.
{ "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 de l'intent EXECUTE
.
Réponses d'état
Vos réponses QUERY
et EXECUTE
incluent un champ status
pour signaler 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 leerrorCode
correspondant.
Pour ERROR
et EXCEPTIONS
, consultez Gérer les erreurs et les exceptions et Erreurs et exceptions pour en savoir plus.