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

כשמשתמשים יוצרים אינטראקציה עם Google Assistant כדי לשלוח שאילתה על במכשיר, מילוי הבקשה מקבל Intent של action.devices.QUERY שמכיל רשימה של מזהי מכשירים (כפי שסופקה בתשובתך SYNC). מילוי ההזמנה מקבל action.devices.EXECUTE Intent כשמשתמשים שולחים פקודות אל 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
      },
      "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 מסמכי עזר.

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

בדומה ל-QUERY, כוונת רכישה יחידה יכולה לטרגט כמה מזהי מכשירים. סינגל אובייקט ה-Intent EXECUTE עשוי גם להכיל מספר פקודות ייחודיות שניתנו לקבוצה של מכשירים. לדוגמה, כשמפעילים Intent, המערכת יכולה להגדיר גם בהירות וגם צבע. על קבוצת מנורות, או להגדיר כמה מנורות לצבע אחר. שלך תגובת 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. מסמכי עזר של Intent.

תגובות בסטטוס

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

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

מידע על ERROR ו-EXCEPTIONS זמין בכתובת טיפול בשגיאות ובחריגים וגם שגיאות וחריגים למידע נוסף פרטים.