Thông báo cho phép Hành động smart home của bạn sử dụng Google Assistant để cho người dùng biết về các sự kiện hoặc thay đổi liên quan đến thiết bị. Bạn có thể triển khai thông báo để cảnh báo để người dùng kịp thời nắm bắt các sự kiện trên thiết bị, chẳng hạn như khi có người ở cửa hoặc báo cáo về thay đổi trạng thái thiết bị theo yêu cầu, chẳng hạn như khi chốt khoá cửa đã tương tác thành công hoặc bị kẹt.
Hành động smart home của bạn có thể gửi các loại sau thông báo cho người dùng:
Thông báo chủ động: Cảnh báo cho người dùng về smart home sự kiện trên thiết bị mà không có bất kỳ yêu cầu nào trước đó của người dùng đối với thiết bị của họ, chẳng hạn như tiếng chuông cửa.
Phản hồi tiếp theo: Thông báo xác nhận rằng một yêu cầu ra lệnh trên thiết bị đã thành công hay không thành công, ví dụ như khi khoá cửa. Sử dụng những cảnh báo này cho các lệnh trên thiết bị mà mất thời gian để hoàn thành. Câu trả lời nối tiếp chỉ được hỗ trợ khi yêu cầu lệnh thiết bị được gửi từ loa thông minh và thiết bị thông minh màn hình.
Assistant gửi những thông báo này cho người dùng dưới dạng các thông báo trên loa thông minh và màn hình thông minh. Thông báo chủ động được tắt theo mặc định. Người dùng có thể bật hoặc tắt tất cả các thông báo chủ động từ Google Home app (GHA).
Các sự kiện kích hoạt thông báo
Khi các sự kiện trên thiết bị xảy ra, quá trình thực hiện Hành động của bạn sẽ gửi một yêu cầu thông báo cho Google. Thiết bị có đặc điểm mà Hành động smart home của bạn hỗ trợ xác định loại sự kiện thông báo có sẵn và mà bạn có thể đưa vào các thông báo đó.
Sau đây là các đặc điểm hỗ trợ thông báo chủ động:
Đặc điểm | Sự kiện |
---|---|
ObjectDetection | Các đối tượng mà thiết bị phát hiện, chẳng hạn như khi một khuôn mặt đã được nhận dạng phát hiện thấy ở ngoài cửa. Ví dụ: "Alice và Bob đang ở cửa trước." |
RunCycle | Thiết bị hoàn thành một chu kỳ. Ví dụ: "Chu trình giặt của máy giặt đã hoàn tất." |
SensorState | Thiết bị phát hiện thấy trạng thái cảm biến được hỗ trợ. Ví dụ: "Máy phát hiện khói phát hiện thấy khói." |
Các đặc điểm sau hỗ trợ trả lời theo dõi:
Đặc điểm | Sự kiện |
---|---|
LockUnlock | Trạng thái hoàn thành và thay đổi trạng thái sau khi thực thi
Lệnh thiết bị action.devices.commands.LockUnlock . Cho
ví dụ: "Cửa trước đã bị khoá" hoặc "Cửa trước bị kẹt."
|
NetworkControl | Trạng thái hoàn thành và thay đổi trạng thái sau khi thực thi
Lệnh thiết bị action.devices.commands.TestNetworkSpeed . Cho
ví dụ: "Quá trình kiểm tra tốc độ mạng của bạn đã hoàn tất. Tốc độ tải xuống trên
bộ định tuyến tại văn phòng hiện là 80,2 Kb/giây và tốc độ tải lên là 9,3 Kb/giây."
|
OpenClose | Trạng thái hoàn thành và thay đổi trạng thái sau khi thực thi
Lệnh thiết bị action.devices.commands.OpenClose . Cho
ví dụ: "Cửa trước đã mở" hoặc "Không thể mở cửa trước".
|
Mọi loại thiết bị đều hỗ trợ thông báo về các tính năng tương ứng.
Xây dựng thông báo cho Hành động trong nhà thông minh của bạn
Thêm thông báo vào Hành động smart home của bạn theo các giai đoạn sau:
- Cho Google biết liệu thông báo có được bật từ
Ứng dụng thiết bị smart home. Người dùng bật hoặc tắt thông báo
trong ứng dụng của bạn, hãy gửi yêu cầu
SYNC
để thông báo cho Google về việc thay đổi thiết bị. - Khi một sự kiện hoặc thay đổi trạng thái có liên quan trên thiết bị xảy ra kích hoạt một
hãy gửi yêu cầu thông báo bằng cách gọi hàm
API Report State
reportStateAndNotification
. Nếu trạng thái thiết bị đã thay đổi, bạn có thể gửi cả trạng thái và tải trọng thông báo cùng nhau trong Report State và cuộc gọi Thông báo.
Các phần sau đây sẽ trình bày chi tiết hơn về các bước này.
Cho biết liệu thông báo có được bật trong ứng dụng của bạn hay không
Người dùng có thể chọn xem họ có muốn nhận thông báo chủ động bằng bật tính năng này trong GHA. Trong ứng dụng dành cho smart home thiết bị, bạn cũng có thể tuỳ ý thêm chức năng cho để người dùng chuyển đổi rõ ràng thông báo từ thiết bị, ví dụ: từ phần cài đặt ứng dụng của bạn.
Cho Google biết rằng bạn đã bật thông báo trên thiết bị bằng cách thực hiện
lệnh gọi Request SYNC (Yêu cầu SYNC)
để cập nhật dữ liệu của thiết bị. Bạn nên gửi một yêu cầu SYNC
như thế này bất cứ khi nào
người dùng thay đổi cài đặt này trong ứng dụng của bạn.
Trong câu trả lời của SYNC
, hãy gửi một trong những thông tin cập nhật sau:
- Nếu người dùng bật thông báo rõ ràng là bật trong ứng dụng trên thiết bị của bạn hoặc nếu bạn
không cung cấp tuỳ chọn bật/tắt, hãy đặt
devices.notificationSupportedByAgent
thuộc tính sangtrue
. - Nếu người dùng tắt thông báo một cách rõ ràng trong ứng dụng trên thiết bị, hãy đặt
devices.notificationSupportedByAgent
thuộc tính sangfalse
.
Đoạn mã sau đây cho thấy ví dụ về cách đặt phản hồi SYNC của bạn:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
Gửi yêu cầu thông báo đến Google
Để kích hoạt thông báo trên Assistant, phương thức thực hiện gửi một tải trọng thông báo đến Google Home Graph thông qua Report State và lệnh gọi Notification API.
Bật Google HomeGraph API
-
Trong Google Cloud Console, hãy chuyển đến trang HomeGraph API.
Truy cập trang API HomeGraph - Chọn dự án khớp với mã dự án smart home của bạn.
- Nhấp vào BẬT.
Tạo Khoá tài khoản dịch vụ
Hãy làm theo những hướng dẫn sau để tạo khoá tài khoản dịch vụ trên Google Cloud Console:
-
Trong Google Cloud Console, hãy chuyển đến trang Tạo khoá tài khoản dịch vụ.
Chuyển đến trang Tạo khoá tài khoản dịch vụ - Trong danh sách Tài khoản dịch vụ, hãy chọn Tài khoản dịch vụ mới.
- Trong trường Tên tài khoản dịch vụ, hãy nhập tên.
- Trong trường Mã tài khoản dịch vụ, hãy nhập một mã.
Trong danh sách Vai trò, hãy chọn Tài khoản dịch vụ > Người tạo mã thông báo cho tài khoản dịch vụ.
Đối với Loại khoá, hãy chọn JSON.
- Nhấp vào Tạo. Tệp JSON chứa khoá của bạn tải xuống máy tính của bạn.
Gửi thông báo
Thực hiện cuộc gọi yêu cầu thông báo bằng
devices.reportStateAndNotification
.
Yêu cầu JSON của bạn phải bao gồm eventId
. Đây là một mã nhận dạng duy nhất được tạo bởi
nền tảng của bạn cho sự kiện kích hoạt thông báo. eventId
sẽ
là mã nhận dạng ngẫu nhiên khác nhau mỗi khi bạn gửi yêu cầu thông báo.
Trong đối tượng notifications
mà bạn truyền vào lệnh gọi API, hãy thêm một
Giá trị priority
xác định cách hiển thị thông báo. Thông tin
Đối tượng notifications
có thể bao gồm các trường khác nhau tuỳ thuộc vào thiết bị
đặc điểm cơ thể.
Hãy làm theo một trong các đường dẫn sau để thiết lập tải trọng và gọi API:
Gửi tải trọng thông báo chủ động
Để gọi API, hãy chọn một trong các thẻ sau:
HTTP
API Home Graph cung cấp một điểm cuối HTTP
- Sử dụng tệp JSON của tài khoản dịch vụ đã tải xuống để tạo một trang web JSON Mã thông báo (JWT). Để biết thêm thông tin, hãy xem Xác thực bằng tài khoản dịch vụ.
- Lấy mã truy cập OAuth 2.0 bằng
https://www.googleapis.com/auth/homegraph
phạm vi đang sử dụng OAuth2l: - Tạo yêu cầu JSON bằng
agentUserId
. Dưới đây là yêu cầu JSON mẫu cho Report State và Notification: - Kết hợp Report State, Notification JSON và mã thông báo trong yêu cầu POST qua HTTP
yêu cầu đến điểm cuối Google Home Graph. Sau đây là ví dụ về cách
để thực hiện yêu cầu trong dòng lệnh bằng cách sử dụng
curl
, như một bài kiểm thử:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "ObjectDetection": { "priority": 0, "detectionTimestamp": 1534875126750, "objects": { "named": [ "Alice" ], "unclassified": 2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
API Home Graph cung cấp điểm cuối gRPC
- Tải định nghĩa dịch vụ vùng đệm giao thức cho API Home Graph.
- Làm theo tài liệu dành cho nhà phát triển gRPC để tạo mã ứng dụng khách cho một trong các ngôn ngữ được hỗ trợ.
- Gọi phương thức ReportStateAndNotification.
Node.js
Ứng dụng Node.js của API Google cung cấp các mối liên kết cho API Home Graph.
- Khởi động dịch vụ
google.homegraph
bằng Thông tin xác thực mặc định của ứng dụng. - Gọi phương thức
reportStateAndNotification
bằng ReportStateAndNotificationRequest. Phương thức này trả vềPromise
có ReportStateAndNotificationResponse.
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { ObjectDetection: { priority: 0, detectionTimestamp: 1534875126750, objects: { named: ['Alice'], unclassified: 2 } } } } } } } });
Java
Thư viện ứng dụng API HomeGraph cho Java cung cấp các liên kết cho API Home Graph.
- Khởi động
HomeGraphApiService
bằng Thông tin xác thực mặc định của ứng dụng. - Gọi phương thức
reportStateAndNotification
bằngReportStateAndNotificationRequest
. Phương thức này trả về mộtReportStateAndNotificationResponse
.
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Build device notification payload. Map<?, ?> notifications = Map.of( "ObjectDetection", Map.of( "priority", 0, "detectionTimestamp", 1534875126, "objects", Map.of("named", List.of("Alice"), "unclassifed", 2))); // Send notification. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", notifications)))); homegraphService.devices().reportStateAndNotification(request);
Gửi một tải trọng phản hồi tiếp theo
Tải trọng cho một phản hồi tiếp theo chứa trạng thái của yêu cầu, lỗi
mã cho lỗi sự kiện (nếu có) và followUpToken
hợp lệ,
được cung cấp trong yêu cầu ý định EXECUTE
. Bạn phải sử dụng followUpToken
trong vòng năm phút để duy trì tính hợp lệ và để liên kết đúng câu trả lời
với yêu cầu ban đầu.
Đoạn mã sau đây cho thấy một tải trọng yêu cầu EXECUTE
mẫu có
Trường followUpToken
.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123", }], "execution": [{ "command": "action.devices.commands.TestNetworkSpeed", "params": { "testDownloadSpeed": true, "testUploadSpeed": false, "followUpToken": "PLACEHOLDER" } }] }] } }] };
Google chỉ sử dụng followUpToken
để xuất thông báo trên thiết bị
mà người dùng đã tương tác ban đầu và không truyền phát đến tất cả
thiết bị của người dùng.
Để gọi API, hãy chọn một trong các thẻ sau:
HTTP
API Home Graph cung cấp một điểm cuối HTTP
- Sử dụng tệp JSON của tài khoản dịch vụ đã tải xuống để tạo một trang web JSON Mã thông báo (JWT). Để biết thêm thông tin, hãy xem Xác thực bằng tài khoản dịch vụ.
- Lấy mã truy cập OAuth 2.0 bằng
https://www.googleapis.com/auth/homegraph
phạm vi đang sử dụng OAuth2l: - Tạo yêu cầu JSON bằng
agentUserId
. Dưới đây là yêu cầu JSON mẫu cho Report State và Notification: - Kết hợp Report State, Notification JSON và mã thông báo trong yêu cầu POST qua HTTP
yêu cầu đến điểm cuối Google Home Graph. Sau đây là ví dụ về cách
để thực hiện yêu cầu trong dòng lệnh bằng cách sử dụng
curl
, như một bài kiểm thử:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "NetworkControl": { "priority": 0, "followUpResponse": { "status": "SUCCESS", "followUpToken": "PLACEHOLDER", "networkDownloadSpeedMbps": 23.3, "networkUploadSpeedMbps": 10.2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
API Home Graph cung cấp một điểm cuối gRPC
- Tải định nghĩa dịch vụ vùng đệm giao thức cho API Home Graph.
- Làm theo tài liệu dành cho nhà phát triển gRPC để tạo mã ứng dụng khách cho một trong các ngôn ngữ được hỗ trợ.
- Gọi phương thức ReportStateAndNotification.
Node.js
Ứng dụng Node.js của API Google cung cấp các mối liên kết cho API Home Graph.
- Khởi động dịch vụ
google.homegraph
bằng Thông tin xác thực mặc định của ứng dụng. - Gọi phương thức
reportStateAndNotification
bằng ReportStateAndNotificationRequest. Phương thức này trả vềPromise
có ReportStateAndNotificationResponse.
const followUpToken = executionRequest.inputs[0].payload.commands[0].execution[0].params.followUpToken; const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { NetworkControl: { priority: 0, followUpResponse: { status: 'SUCCESS', followUpToken, networkDownloadSpeedMbps: 23.3, networkUploadSpeedMbps: 10.2, } } } } } } } });
Java
Thư viện ứng dụng API HomeGraph cho Java cung cấp các liên kết cho API Home Graph.
- Khởi động
HomeGraphApiService
bằng Thông tin xác thực mặc định của ứng dụng - Gọi phương thức
reportStateAndNotification
bằngReportStateAndNotificationRequest
. Phương thức này trả về mộtReportStateAndNotificationResponse
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Extract follow-up token. ExecuteRequest.Inputs executeInputs = (Inputs) executeRequest.getInputs()[0]; String followUpToken = (String) executeInputs .getPayload() .getCommands()[0] .getExecution()[0] .getParams() .get("followUpToken"); // Build device follow-up response payload. Map<?, ?> followUpResponse = Map.of( "NetworkControl", Map.of( "priority", 0, "followUpResponse", Map.of( "status", "SUCCESS", "followUpToken", followUpToken, "networkDownloadSpeedMbps", 23.3, "networkUploadSpeedMbps", 10.2))); // Send follow-up response. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", followUpResponse)))); homegraphService.devices().reportStateAndNotification(request);
Ghi nhật ký
Thông báo hỗ trợ ghi nhật ký sự kiện như đã nêu trong bài viết Truy cập nhật ký sự kiện bằng tính năng Ghi nhật ký trên đám mây. Các nhật ký này rất hữu ích trong việc kiểm tra và duy trì chất lượng thông báo trong Hành động của bạn.
Sau đây là giản đồ của một mục nhập notificationLog
:
Thuộc tính | Mô tả |
---|---|
requestId |
Mã yêu cầu thông báo. |
structName |
Tên của cấu trúc thông báo, chẳng hạn như "ObjectDetection". |
status |
Cho biết trạng thái của thông báo. |
Trường status
bao gồm nhiều trạng thái có thể cho biết lỗi trong
tải trọng thông báo. Một số tính năng trong số này có thể chỉ hoạt động trên những Hành động có
chưa được phát hành công khai.
Ví dụ về các trạng thái:
Trạng thái | Mô tả |
---|---|
EVENT_ID_MISSING |
Cho biết rằng trường eventId bắt buộc bị thiếu.
|
PRIORITY_MISSING |
Cho biết rằng có trường priority bị thiếu.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
Cho biết rằng thuộc tính notificationSupportedByAgent của thiết bị thông báo được cung cấp trong SYNC là sai.
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
Cho biết rằng người dùng chưa bật thông báo trên thiết bị thông báo trong GHA. Trạng thái này chỉ có trên những Hành động chưa ra mắt chính thức. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
Cho biết rằng người dùng chưa chỉ định thiết bị thông báo cho Nhà/Cấu trúc. Trạng thái này chỉ có trên những Hành động chưa ra mắt chính thức. |
Ngoài các trạng thái chung có thể áp dụng cho mọi thông báo, trường status
cũng có thể bao gồm các trạng thái theo đặc điểm riêng (ví dụ: OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING
).