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

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