طلب البحث والتنفيذ

عندما يتفاعل المستخدمون مع Google Assistant لطلب البحث عن القيمة الحالية حالة الجهاز، فستتلقّى عملية التنفيذ الغرض من action.devices.QUERY هو تضمين قائمة بأرقام تعريف الأجهزة (كما تم توفيرها في ردّ SYNC). تحصل طريقة الدفع التي تقدّمها على action.devices.EXECUTE هدف عندما يرسل المستخدمون أوامر إلى Assistant للتحكُّم في الخاص بك.

التعامل مع 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
          }
        }
      }
    }
  };
});
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);
}

لمزيد من المعلومات، يُرجى الاطّلاع على هدف 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"
      }]
    }
  };
});
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);
}

لمزيد من المعلومات، يُرجى الاطّلاع على EXECUTE. المستندات المرجعية للأهداف

الاستجابات عن الحالة

تتضمن ردودك QUERY وEXECUTE حقل status للإبلاغ عن نتيجة الطلب. يمكن أن يوفر كل رد على الحالة أيًا مما يلي القيم التالية:

  • SUCCESS: نجح الطلب.
  • OFFLINE: الجهاز المستهدف غير متصل بالإنترنت أو لا يمكن الوصول إليه.
  • EXCEPTIONS: هناك مشكلة أو تنبيه مرتبطان بالطلب.
  • ERROR: تعذَّرت تلبية الطلب مع errorCode المقابل.

بالنسبة إلى ERROR وEXCEPTIONS، يمكنك الاطّلاع على التعامل مع الأخطاء والاستثناءات الأخطاء والاستثناءات لمزيد من الأخطاء التفاصيل.