پرس و جو کنید و اجرا کنید

هنگامی که کاربران برای پرس و جو کردن وضعیت فعلی یک دستگاه با Google Assistant تعامل می کنند، انجام شما یک هدف action.devices.QUERY حاوی لیستی از شناسه های دستگاه (همانطور که توسط پاسخ SYNC ارائه شده است) دریافت می کند. هنگامی که کاربران برای کنترل دستگاه شما دستوراتی را به Assistant ارسال می کنند، اجرای شما یک هدف action.devices.EXECUTE دریافت می کند.

مقاصد QUERY مدیریت کنید

پاسخ QUERY شما شامل مجموعه ای کامل از وضعیت ها برای هر یک از ویژگی های پشتیبانی شده توسط دستگاه های درخواستی است.

درخواست کنید
{
    "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
          }
        }
      }
    }
  };
});
جاوا
@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);
}

برای اطلاعات بیشتر، به مستندات مرجع QUERY مراجعه کنید.

مقاصد EXECUTE را مدیریت کنید

مشابه QUERY ، یک هدف واحد می‌تواند چندین شناسه دستگاه را هدف قرار دهد. یک هدف EXECUTE ممکن است شامل چندین دستور مجزا نیز باشد که به گروهی از دستگاه ها داده می شود. به عنوان مثال، یک هدف تحریک شده ممکن است هم روشنایی و هم رنگ را روی گروهی از نورها تنظیم کند، یا چندین نور را هر کدام روی یک رنگ متفاوت تنظیم کند. پاسخ EXECUTE شما باید وضعیت جدید دستگاه را پس از اجرا برگرداند.

هنگامی که وضعیت دستگاه کاربران تغییر می کند، از Report State استفاده کنید. به عنوان مثال، به دلیل یک هدف EXECUTE یا تغییر حالت محلی (مانند چرخاندن دستی کلید چراغ). این باعث می شود Google Home Graph با سرویس ابری شما همگام شود.

درخواست کنید
{
    "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"
      }]
    }
  };
});
جاوا
@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);
}

برای اطلاعات بیشتر، به مستندات مرجع EXECUTE intent مراجعه کنید.

پاسخ های وضعیت

پاسخ های QUERY و EXECUTE شما شامل یک فیلد status برای گزارش نتیجه درخواست است. هر پاسخ وضعیت می تواند یکی از مقادیر زیر را ارائه دهد:

  • SUCCESS : درخواست با موفقیت انجام شد.
  • OFFLINE : دستگاه هدف آفلاین است یا غیرقابل دسترسی است.
  • EXCEPTIONS : یک مشکل یا هشدار مرتبط با درخواست وجود دارد.
  • ERROR : درخواست با errorCode مربوطه ناموفق بود.

برای ERROR و EXCEPTIONS ، برای جزئیات بیشتر به Handle errors and Exceptions و Errors and Exceptions مراجعه کنید.