Interroger et exécuter

Lorsque les utilisateurs interagissent avec Google Assistant pour interroger la version actuelle d'un appareil, votre traitement reçoit une Intent action.devices.QUERY contenant un Liste des ID d'appareils (telle que fournie par votre réponse SYNC) Votre fulfillment reçoit une Intent action.devices.EXECUTE lorsque les utilisateurs envoient des commandes à Assistant pour contrôler appareil.

Gérer les intents QUERY

Votre réponse QUERY inclut un ensemble complet d'états pour chacune des caractéristiques compatibles avec les appareils demandés.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
    "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 l'intent QUERY. documentation de référence.

Gérer les intents EXECUTE

Comme pour QUERY, un même intent peut cibler plusieurs ID d'appareils. Une seule L'intent EXECUTE peut également contenir plusieurs commandes distinctes transmises à un groupe d'appareils. Par exemple, un intent déclenché peut définir à la fois la luminosité et la couleur. sur un groupe de lumières, ou régler plusieurs lumières chacune sur une couleur différente. Votre La réponse EXECUTE doit renvoyer le nouvel état de l'appareil après la l'exécution.

Utiliser Report State lorsque l'état modifications apportées aux appareils. Par exemple, en raison d'une EXECUTE ou un changement d'état local (par exemple, en actionnant manuellement un interrupteur). Cela permet de maintenir la synchronisation de Google Home Graph avec votre service cloud.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Demander
{
    "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 le EXECUTE documentation de référence sur les intents.

Réponses sur l'état

Vos réponses QUERY et EXECUTE incluent un champ status permettant de signaler le du résultat de la demande. Chaque réponse d'état peut fournir l'un des éléments suivants : :

  • SUCCESS: la requête a abouti.
  • OFFLINE: l'appareil cible est hors connexion ou inaccessible.
  • EXCEPTIONS: un problème ou une alerte est associé à la requête.
  • ERROR: la requête a échoué avec le errorCode correspondant.

Pour ERROR et EXCEPTIONS, consultez Gérer les erreurs et les exceptions Erreurs et exceptions pour en savoir plus plus de détails.