Sorgu ve yürütme

Kullanıcılar mevcut bilgileri sorgulamak için Google Assistant ile durumu hakkında daha fazla bilgi action.devices.QUERY amacı şunu içerir: cihaz kimliklerinin listesi (SYNC yanıtınızda belirtildiği şekilde). Sipariş karşılama işleminiz bir action.devices.EXECUTE amacı kullanıcılar, ayarlarınızı kontrol etmek için Assistant adresine komut gönderdiğinde olanak tanır.

QUERY niyetini işleyin

QUERY yanıtınız, özelliklerin her biri için tam bir durum grubu içerir desteklenen cihazlardır.

İstek
{
    "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);
}

Daha fazla bilgi için QUERY amacına bakın referans belgeler.

EXECUTE niyetini işleyin

QUERY özelliğine benzer şekilde, tek bir amaç da birden fazla cihaz kimliğini hedefleyebilir. Tek EXECUTE intent, bir gruba verilen birden fazla farklı komut da içerebilir cihazlar. Örneğin, tetiklenen bir amaç hem parlaklığı hem de rengi ayarlayabilir. ya da birden fazla ışığı farklı renklere ayarlayabilirsiniz. Sizin EXECUTE yanıtı, şu süreden sonra cihazın yeni durumunu döndürecektir: birkaç adım var.

Report State kullanın kullanıcının durumu, Cihaz değişiklikleri. Örneğin, EXECUTE nedeniyle amaç veya yerel durum değişikliği (ör. bir ışık anahtarını manuel olarak çevirmek). Böylece Google Home Graph, bulut hizmetinizle senkronize edilir.

İstek
{
    "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);
}

Daha fazla bilgi için EXECUTE başlıklı makaleyi inceleyin. intent referans belgelerine bakın.

Durum yanıtları

QUERY ve EXECUTE yanıtlarınızdastatus karar vermemiz gerekir. Her durum yanıtı aşağıdakilerden birini sağlayabilir değerleri:

  • SUCCESS: İstek başarılı oldu.
  • OFFLINE: Hedef cihaz çevrimdışı veya başka bir şekilde erişilemez durumda.
  • EXCEPTIONS: İstekle ilişkili bir sorun veya uyarı var.
  • ERROR: İstek, ilgili errorCode ile başarısız oldu.

ERROR ve EXCEPTIONS için şuraya bakın: Hataları ve istisnaları ele alma ve Daha fazla bilgi için hatalar ve istisnalar bolca fırsat sunuyor.