क्वेरी और एक्ज़ीक्यूट करें

जब उपयोगकर्ता, 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,
        "status": "SUCCESS"
      },
      "456": {
        "on": true,
        "online": true,
        "status": "SUCCESS",
        "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,
          status: "SUCCESS"
        },
        456: {
          on: true,
          online: true,
          status: "SUCCESS",
          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("status", "SUCCESS");
                }
              });
          put(
              "456",
              new HashMap<String, Object>() {
                {
                  put("on", true);
                  put("online", true);
                  put("status", "SUCCESS");
                  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 के बारे में ज़्यादा जानकारी के लिए, गड़बड़ियों और अपवादों को मैनेज करना और गड़बड़ियां और अपवाद लेख पढ़ें.