לאחר יצירת פעולת smart home, השלב הבא הוא להוסיף פונקציונליות את מילוי הבקשה לעיבוד הכוונות של בית חכם ולהחזיר תשובות Google Assistant מזהה.
זיהוי המשתמש
נשלח בקשות על ידי Assistant
smart home מילוי ההזמנות של הפעולה באמצעות אסימון הגישה שסופק
על ידי שרת OAuth 2.0 בכותרת Authorization
.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
לפני שאתם מגיבים לבקשות, לוגיקת מילוי ההזמנות שלכם צריכה לוודא
פרטי הכניסה של האסימון הזה חוקיים וקובעים את חשבון המשתמש המשויך. אם המיקום
אסימון הגישה לא חוקי, מילוי הבקשה צריך להחזיר
שגיאת HTTP 401 Unauthorized
.
הצגת רשימה של מכשירים והיכולות שלהם
Assistant שולח/ת
כוונת רכישה של action.devices.SYNC
בקשה לרשימת המכשירים המשויכים למשתמש הנתון
היכולות שלהם. מילוי ההזמנות חייב להחזיר מזהה ייחודי לכל משתמש ב:
השדה agentUserId
בתשובה SYNC
. המזהה הזה חייב להיות בלתי ניתן לשינוי
כדי לייצג את המשתמש בשירות הענן שלכם. לא מומלץ
לספק כתובות אימייל או מאפיינים אחרים בהתאם להגדרות שהמשתמש יכול
שינוי.
השדה devices
בתגובה SYNC
מכיל את כל המכשירים
המשתמש אישר ל-Assistant לגשת אל,
הסוגים והתכונות שהם
, ואת המאפיינים הנדרשים כדי להגדיר את התנהגות התכונה
במכשיר הספציפי הזה.
ה-Intent SYNC
מופעל במהלך קישור החשבונות או כשמשתמש
לסנכרן מחדש את המכשירים שלהם באופן ידני. אם המשתמשים רשימת מכשירים, נתמכים
של תכונות או של ערכי מאפיינים,
בקשת סנכרון כדי להפעיל
SYNC
ודיווח על העדכונים ל-Google.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.SYNC" }] }
JSON
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "agentUserId": "1836.15267389", "devices": [ { "id": "123", "type": "action.devices.types.OUTLET", "traits": [ "action.devices.traits.OnOff" ], "name": { "defaultNames": [ "My Outlet 1234" ], "name": "Night light", "nicknames": [ "wall plug" ] }, "willReportState": false, "roomHint": "kitchen", "deviceInfo": { "manufacturer": "lights-out-inc", "model": "hs1234", "hwVersion": "3.2", "swVersion": "11.4" }, "otherDeviceIds": [ { "deviceId": "local-device-id" } ], "customData": { "fooValue": 74, "barValue": true, "bazValue": "foo" } }, { "id": "456", "type": "action.devices.types.LIGHT", "traits": [ "action.devices.traits.OnOff", "action.devices.traits.Brightness", "action.devices.traits.ColorSetting" ], "name": { "defaultNames": [ "lights out inc. bulb A19 color hyperglow" ], "name": "lamp1", "nicknames": [ "reading lamp" ] }, "willReportState": false, "roomHint": "office", "attributes": { "colorModel": "rgb", "colorTemperatureRange": { "temperatureMinK": 2000, "temperatureMaxK": 9000 }, "commandOnlyColorSetting": false }, "deviceInfo": { "manufacturer": "lights out inc.", "model": "hg11", "hwVersion": "1.2", "swVersion": "5.4" }, "customData": { "fooValue": 12, "barValue": false, "bazValue": "bar" } } ] } }
Node.js
const {smarthome} = require('actions-on-google'); const app = smarthome(); // ... app.onSync((body, headers) => { // TODO Get devices for user return { requestId: body.requestId, payload: { agentUserId: "1836.15267389", devices: [{ id: "123", type: "action.devices.types.OUTLET", traits: [ "action.devices.traits.OnOff" ], name: { defaultNames: ["My Outlet 1234"], name: "Night light", nicknames: ["wall plug"] }, willReportState: false, roomHint: "kitchen", deviceInfo: { manufacturer: "lights-out-inc", model: "hs1234", hwVersion: "3.2", swVersion: "11.4" }, otherDeviceIds: [{ deviceId: "local-device-id" }], customData: { fooValue: 74, barValue: true, bazValue: "foo" } }, { id: "456", type: "action.devices.types.LIGHT", traits: [ "action.devices.traits.OnOff", "action.devices.traits.Brightness", "action.devices.traits.ColorSetting" ], name: { defaultNames: ["lights out inc. bulb A19 color hyperglow"], name: "lamp1", nicknames: ["reading lamp"] }, willReportState: false, roomHint: "office", attributes: { colorModel: 'rgb', colorTemperatureRange: { temperatureMinK: 2000, temperatureMaxK: 9000 }, commandOnlyColorSetting: false }, deviceInfo: { manufacturer: "lights out inc.", model: "hg11", hwVersion: "1.2", swVersion: "5.4" }, customData: { fooValue: 12, barValue: false, bazValue: "bar" } }] } }; });
Java
@NotNull @Override public SyncResponse onSync(@NotNull SyncRequest syncRequest, @Nullable Map<?, ?> map) { Payload payload = new Payload(); payload.setAgentUserId("1836.15267389"); payload.setDevices( new Device[] { new Device.Builder() .setId("123") .setType("action.devices.types.OUTLET") .addTrait("action.devices.traits.OnOff") .setName( Collections.singletonList("My Outlet 1234"), "Night light", Collections.singletonList("Wall plug")) .setWillReportState(true) .setDeviceInfo("lights-out-inc", "hs1234", "3.2", "11.4") .setCustomData( new JSONObject() .put("fooValue", 74) .put("barValue", true) .put("bazValue", "foo")) .build(), new Device.Builder() .setId("456") .setType("action.devices.types.LIGHT") .addTrait("action.devices.traits.OnOff") .addTrait("action.devices.traits.Brightness") .addTrait("action.devices.traits.ColorTemperature") .addTrait("action.devices.traits.ColorSpectrum") .setName( Collections.singletonList("Lights Out Inc. bulb A19 color hyperglow"), "Lamp", Collections.singletonList("Reading lamp")) .setWillReportState(true) .setDeviceInfo("Lights Out Inc.", "hg11", "1.2", "5.4") .setCustomData( new JSONObject() .put("fooValue", 12) .put("barValue", false) .put("bazValue", "bar")) .build(), }); return new SyncResponse(syncRequest.getRequestId(), payload); }
מידע נוסף זמין ב-Intent SYNC
מסמכי עזר.