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