প্রশ্ন এবং সঞ্চালন

যখন ব্যবহারকারীরা কোনো ডিভাইসের বর্তমান অবস্থা জানতে 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
        }
      }
    }
  }
}
নোড.জেএস
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
          }
        }
      }
    }
  };
});
জাভা
@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"
      }
    ]
  }
}
নোড.জেএস
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 ইন্টেন্ট রেফারেন্স ডকুমেন্টেশন দেখুন।

স্থিতির প্রতিক্রিয়া

আপনার QUERY এবং EXECUTE রেসপন্সগুলোতে অনুরোধের ফলাফল জানানোর জন্য একটি status ফিল্ড থাকে। প্রতিটি স্ট্যাটাস রেসপন্স নিম্নলিখিত মানগুলোর মধ্যে যেকোনো একটি প্রদান করতে পারে:

  • SUCCESS : অনুরোধটি সফল হয়েছে।
  • OFFLINE : লক্ষ্য ডিভাইসটি অফলাইন অথবা অন্য কোনো কারণে নাগালের বাইরে।
  • EXCEPTIONS : অনুরোধটির সাথে কোনো সমস্যা বা সতর্কতা যুক্ত আছে।
  • ERROR : সংশ্লিষ্ট errorCode কারণে অনুরোধটি ব্যর্থ হয়েছে।

ERROR এবং EXCEPTIONS সম্পর্কে আরও বিস্তারিত জানতে ‘ত্রুটি ও ব্যতিক্রম পরিচালনা’ এবং ‘ত্রুটি ও ব্যতিক্রম’ দেখুন।