Sau khi bạn tạo một Hành động smart home, bước tiếp theo là thêm chức năng trong phương thức thực hiện của bạn để xử lý các ý định của nhà thông minh và trả về phản hồi Google Assistant nhận ra.
Xác định người dùng
Assistant đưa ra yêu cầu cho tài khoản của bạn
Phương thức thực hiện hành động smart home bằng mã truy cập được cung cấp
bởi máy chủ OAuth 2.0 trong tiêu đề Authorization
.
POST /fulfillment HTTP/1.1 Host: smarthome.example.com Content-Type: application/json Authorization: Bearer ACCESS_TOKEN
Trước khi phản hồi bất kỳ yêu cầu nào, logic thực hiện của bạn phải xác minh rằng
thông tin đăng nhập mã thông báo này hợp lệ và xác định tài khoản người dùng được liên kết. Nếu
mã truy cập không hợp lệ, phương thức thực hiện sẽ trả về một
Lỗi HTTP 401 Unauthorized
.
Liệt kê thiết bị và chức năng của thiết bị
Assistant sẽ gửi một
action.devices.SYNC
ý định của bạn
phương thức thực hiện để yêu cầu danh sách thiết bị liên kết với người dùng cụ thể và
khả năng của mình. Phương thức thực hiện đơn hàng của bạn phải trả về một mã nhận dạng duy nhất cho mỗi người dùng trong
trường agentUserId
của phản hồi SYNC
. Mã này phải là mã không thể thay đổi
để đại diện cho người dùng với dịch vụ đám mây của bạn. Bạn không nên
cung cấp địa chỉ email hoặc các thuộc tính khác dựa trên chế độ cài đặt mà người dùng có thể
thay đổi.
Trường devices
trong phản hồi SYNC
của bạn chứa tất cả thiết bị mà
người dùng đã cấp quyền cho Assistant truy cập,
loại và đặc điểm của chúng
và các thuộc tính cần thiết để định cấu hình hành vi của đặc điểm cho
thiết bị cụ thể đó.
Ý định SYNC
được kích hoạt trong quá trình liên kết tài khoản hoặc khi một người dùng
sẽ đồng bộ hoá lại thiết bị của họ theo cách thủ công. Nếu phần mềm danh sách thiết bị, được hỗ trợ
đặc điểm hoặc giá trị thuộc tính thay đổi, sử dụng
Yêu cầu đồng bộ hoá để kích hoạt một yêu cầu mới
ý định SYNC
và báo cáo nội dung cập nhật cho 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); }
Để biết thêm thông tin, hãy xem ý định SYNC
tài liệu tham khảo.