কোয়েরি ও এক্সিকিউট করা

ব্যবহারকারীরা যখন কোনও ডিভাইসের বর্তমান অবস্থা সম্পর্কে জিজ্ঞাসা করার জন্য 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-এর জন্য, সমস্যা ও ব্যতিক্রম ম্যানেজ করা এবং সমস্যা ও ব্যতিক্রম দেখুন।