Zapytanie i wykonanie

Gdy użytkownicy wchodzą w interakcję z aplikacją Google Assistant, aby przesłać zapytanie dotyczące bieżącego zgodnie ze stanem urządzenia, realizacja otrzymuje intencja action.devices.QUERY zawierająca lista identyfikatorów urządzeń (na podstawie odpowiedzi SYNC). Twoja realizacja otrzyma Zamiar action.devices.EXECUTE gdy użytkownicy wysyłają do Assistant polecenia pozwalające sterować urządzenia.

Obsługa intencji QUERY

Odpowiedź QUERY zawiera pełny zestaw stanów każdej z cech obsługiwane przez żądane urządzenia.

Prośba
{
    "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);
}

Więcej informacji znajdziesz w intencji QUERY. dokumentacji referencyjnej.

Obsługa intencji EXECUTE

Podobnie jak w przypadku QUERY, jedna intencja może być kierowana na wiele identyfikatorów urządzeń. Jeden Intencja EXECUTE może też zawierać wiele różnych poleceń podanych grupie urządzeń. Na przykład wywołana intencja może ustawiać zarówno jasność, jak i kolor na grupie lampek lub ustawić poszczególne lampy w innym kolorze. Twoje Odpowiedź EXECUTE powinna zwrócić nowy stan urządzenia po

Użyj formatu Report State gdy stan danych użytkownika zmian urządzenia. Na przykład ze względu na atrybut EXECUTE intencja lub lokalna zmiana stanu (np. ręczne przestawienie włącznika). Dzięki temu usługa Google Home Graph będzie synchronizowana z usługą w chmurze.

Prośba
{
    "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);
}

Więcej informacji: EXECUTE dokumentacji dotyczącej intencji.

Odpowiedzi dotyczące stanu

Odpowiedzi QUERY i EXECUTE zawierają pole status, które wskazuje w wyniku żądania. Każda odpowiedź dotycząca stanu może zawierać jeden z tych elementów: wartości:

  • SUCCESS: prośba została zrealizowana.
  • OFFLINE: urządzenie docelowe jest offline lub jest niedostępne z innego powodu.
  • EXCEPTIONS: wystąpił problem lub alert związany z prośbą.
  • ERROR: nie udało się zrealizować żądania: errorCode.

W przypadku ERROR i EXCEPTIONS zobacz Obsługa błędów i wyjątków oraz Więcej informacji o błędach i wyjątkach .