שאילתה וביצוע

כשמשתמשים מבצעים אינטראקציה עם Google Assistant כדי לשלוח שאילתה לגבי המצב הנוכחי של מכשיר, המילוי שלכם מקבל כוונה מסוג action.devices.QUERY שמכילה רשימה של מזהי מכשירים (כפי שסופקו על ידי התגובה של SYNC). ה-fulfillment מקבל Intent מסוג action.devices.EXECUTE כשמשתמשים שולחים פקודות אל Assistant כדי לשלוט במכשיר.

טיפול ב-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);
}

למידע נוסף, קראו את מאמרי העזרה בנושא Intent של QUERY.

טיפול ב-EXECUTE כוונות חיפוש

בדומה ל-QUERY, Intent יחיד יכול לטרגט כמה מזהי מכשירים. כוונה אחת של EXECUTE יכולה גם להכיל כמה פקודות נפרדות שניתנות לקבוצת מכשירים. לדוגמה, כוונה מופעלת יכולה להגדיר גם את הבהירות וגם את הצבע בקבוצת נורות, או להגדיר כמה נורות, כל אחת בצבע אחר. התגובה של EXECUTE צריכה להחזיר את המצב החדש של המכשיר אחרי הביצוע.

משתמשים ב-Report State כשמצב המכשיר של המשתמשים משתנה. לדוגמה, בגלל Intent של 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);
}

למידע נוסף, קראו את מאמרי העזרה בנושא Intent של EXECUTE.

תגובות סטטוס

התשובות של QUERY ו-EXECUTE כוללות את השדה status כדי לדווח על תוצאת הבקשה. כל תגובת סטטוס יכולה לספק אחד מהערכים הבאים:

  • ‫SUCCESS: הבקשה בוצעה בהצלחה.
  • ‫OFFLINE: מכשיר היעד במצב אופליין או שאי אפשר להגיע אליו מסיבה אחרת.
  • ‫EXCEPTIONS: יש בעיה או התראה שקשורה לבקשה.
  • ‫ERROR: הבקשה נכשלה עם errorCode תואם.

למידע נוסף על ERROR ו-EXCEPTIONS, קראו את המאמרים טיפול בשגיאות ובחריגות ושגיאות וחריגות.