ค้นหาและดําเนินการ

เมื่อผู้ใช้โต้ตอบกับ Google Assistant เพื่อค้นหาสถานะปัจจุบันของอุปกรณ์ การดำเนินการตามคำขอของคุณจะได้รับ Intent action.devices.QUERY ที่มีรายการรหัสอุปกรณ์ (ตามที่ระบุไว้ในคำตอบ SYNC) การดำเนินการตามคำขอของคุณจะได้รับaction.devices.EXECUTE Intent เมื่อผู้ใช้ส่งคำสั่งไปยัง Assistant เพื่อควบคุมอุปกรณ์

จัดการ Intent 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);
}

ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิงเกี่ยวกับ Intent QUERY

จัดการ Intent EXECUTE

เช่นเดียวกับ QUERY เจตนาเดียวสามารถกําหนดเป้าหมายรหัสอุปกรณ์ได้หลายรหัส EXECUTEIntent รายการเดียวอาจมีคําสั่งที่แตกต่างกันหลายรายการที่ส่งไปยังกลุ่มอุปกรณ์ ตัวอย่างเช่น เจตนาที่ทริกเกอร์อาจตั้งค่าทั้งความสว่างและสีให้กับกลุ่มหลอดไฟ หรือตั้งค่าหลอดไฟหลายดวงให้แต่ละดวงมีสีต่างกัน การตอบกลับEXECUTEควรแสดงสถานะใหม่ของอุปกรณ์หลังจากการดำเนินการ

ใช้ Report State เมื่อสถานะของอุปกรณ์ของผู้ใช้มีการเปลี่ยนแปลง เช่น เนื่องจากEXECUTE Intent หรือการเปลี่ยนแปลงสถานะในเครื่อง (เช่น การปิด/เปิดสวิตช์ไฟด้วยตนเอง) ซึ่งจะช่วยซิงค์ 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);
}

ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิงเกี่ยวกับ Intent ของ EXECUTE

การตอบกลับสถานะ

การตอบกลับ QUERY และ EXECUTE ของคุณจะมีฟิลด์ status เพื่อรายงานผลลัพธ์ของคําขอ การตอบกลับสถานะแต่ละรายการจะให้ค่าอย่างใดอย่างหนึ่งต่อไปนี้

  • SUCCESS: คำขอสำเร็จ
  • OFFLINE: อุปกรณ์เป้าหมายออฟไลน์อยู่หรือเข้าถึงไม่ได้
  • EXCEPTIONS: มีปัญหาหรือการแจ้งเตือนที่เชื่อมโยงกับคำขอ
  • ERROR: คำขอ errorCode ที่เกี่ยวข้องดำเนินการไม่สำเร็จ

สําหรับ ERROR และ EXCEPTIONS โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อจัดการข้อผิดพลาดและข้อยกเว้นและข้อผิดพลาดและข้อยกเว้น