Hướng dẫn này mô tả các lỗi thường gặp liên quan đến thẻ mà bạn có thể gặp phải và cách khắc phục.
Sử dụng Trình tạo thẻ để thiết kế và xem trước giao diện người dùng cũng như tính năng nhắn tin cho ứng dụng Chat:
Mở Trình tạo thẻCách lỗi thẻ xuất hiện
Lỗi thẻ có thể biểu hiện theo một số cách:
- Một phần của thẻ, chẳng hạn như tiện ích hoặc thành phần, không xuất hiện hoặc hiển thị theo cách không mong muốn.
- Toàn bộ thẻ không xuất hiện.
- Hộp thoại đóng, không mở hoặc không tải.
Nếu bạn gặp phải hành vi như vậy, tức là thẻ của ứng dụng có lỗi.
Để tham khảo: thông báo thẻ và hộp thoại hoạt động, không có lỗi
Trước khi xem xét các ví dụ về thẻ không chính xác, trước tiên, hãy xem xét thông báo và hộp thoại thẻ đang hoạt động này. Để minh hoạ từng lỗi mẫu và cách khắc phục, JSON của thẻ này được sửa đổi bằng cách đưa ra lỗi.
Thông báo thẻ không có lỗi
Sau đây là thông báo thẻ hoạt động, không có lỗi, nêu chi tiết thông tin liên hệ có tiêu đề, mục và tiện ích như văn bản và nút được trang trí:
Hộp thoại không có lỗi
Dưới đây là hộp thoại hoạt động, không có lỗi, tạo một người liên hệ bằng cách thu thập thông tin từ người dùng, có chân trang và các tiện ích có thể chỉnh sửa như nhập văn bản, nút chuyển và nút:
Lỗi: Một phần của thẻ không xuất hiện
Đôi khi, thẻ hiển thị nhưng một phần của thẻ mà bạn dự kiến sẽ thấy lại không xuất hiện; có thể là do:
- Thiếu trường JSON bắt buộc.
- Một trường JSON bị viết sai chính tả hoặc viết hoa không chính xác.
Nguyên nhân: Thiếu trường JSON bắt buộc
Trong lỗi ví dụ này, thiếu trường JSON bắt buộc title
. Do đó, thẻ hiển thị nhưng các phần của thẻ dự kiến sẽ xuất hiện lại không xuất hiện. Bạn có thể khó dự đoán cách thẻ hiển thị khi bỏ qua các trường bắt buộc.
Để khắc phục lỗi này, hãy thêm trường JSON bắt buộc; trong ví dụ này là title
.
Để tìm hiểu xem trường JSON có bắt buộc hay không, hãy xem tài liệu tham khảo về Cards v2. Trong ví dụ này, hãy tham khảo nội dung mô tả về trường title
trên CardHeader
.
Dưới đây là hai ví dụ:
Ví dụ 1: Việc chỉ định subtitle
nhưng bỏ qua title
bắt buộc sẽ khiến toàn bộ tiêu đề xuất hiện trống:
Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Thiếu trường bắt buộc title
trong header
.
. . . "header": { "subtitle": "Software Engineer" } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: Trường bắt buộc title
là một phần của quy cách header
.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer" } . . .
Ví dụ 2: Việc chỉ định subtitle
, imageUrl
, imageType
và imageAltText
nhưng bỏ qua title
bắt buộc sẽ khiến hình ảnh hiển thị như mong đợi nhưng không phải phụ đề:
Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Thiếu trường bắt buộc title
trong header
.
. . . "header": { "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: Trường bắt buộc title
là một phần của quy cách header
.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Nguyên nhân: JSON được viết hoa hoặc đánh vần không chính xác
Trong lỗi ví dụ này, tệp JSON của thẻ bao gồm tất cả các trường bắt buộc, nhưng một trường, imageUrl
được viết hoa không chính xác là imageURL
(chữ hoa R
chữ hoa L
), gây ra lỗi: hình ảnh mà trường này trỏ đến không hiển thị.
Để khắc phục lỗi này và các lỗi tương tự, hãy sử dụng định dạng JSON chính xác. Trong trường hợp này, imageUrl
là chính xác. Khi không chắc chắn, hãy kiểm tra JSON thẻ dựa trên tài liệu tham khảo về thẻ.
Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Trường imageURL
viết hoa không chính xác. Giá trị này phải là imageUrl
.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageURL": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: Trường imageUrl
được viết hoa chính xác.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Lỗi: Toàn bộ thẻ không xuất hiện
Đôi khi, thẻ này không xuất hiện; có thể là do một trong những nguyên nhân sau:
- Tiện ích
ButtonList
được chỉ định không chính xác. - Tiện ích
CardFixedFooter
có nút được chỉ định không chính xác.
Nguyên nhân: Chỉ định buttonList
hoặc cardFixedFooter
không chính xác
Nếu một thông báo thẻ hoặc hộp thoại có chứa một tiện ích ButtonList
hoặc tiện ích CardFixedFooter
được chỉ định không chính xác với các nút được chỉ định không chính xác, thì toàn bộ thẻ sẽ không hiển thị và không có gì xuất hiện ở vị trí của thẻ đó. Thông số kỹ thuật không chính xác có thể bao gồm thiếu trường, trường bị sai chính tả hoặc viết hoa không đúng cách hoặc JSON có cấu trúc không chính xác, chẳng hạn như thiếu dấu phẩy, dấu ngoặc kép hoặc dấu ngoặc nhọn.
Để khắc phục lỗi này, hãy kiểm tra JSON thẻ theo tài liệu tham khảo về thẻ. Cụ thể, hãy so sánh mọi tiện ích ButtonList
với hướng dẫn về tiện ích ButtonList
.
Ví dụ: Trong hướng dẫn về tiện ích ButtonList
, việc truyền một thao tác onClick
chưa hoàn tất trong nút đầu tiên sẽ ngăn toàn bộ thẻ hiển thị.
Xem đoạn mã JSON thẻ bị lỗi
Lỗi: Đối tượng onClick
không có trường nào được chỉ định, vì vậy, toàn bộ thẻ sẽ không xuất hiện.
. . . { "buttonList": { "buttons": [ { "text": "Share", "onClick": { } } }, { "text": "Edit", "onClick": { "action": { "function": "goToView", "parameters": [ { "key": "viewType", "value": "EDIT", } ], } } }, ], }, } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: Đối tượng onClick
hiện có trường openLink
, vì vậy, thẻ sẽ xuất hiện như dự kiến.
. . . { "buttonList": { "buttons": [ { "text": "Share", "onClick": { "openLink": { "url": "https://example.com/share", } } }, { "text": "Edit", "onClick": { "action": { "function": "goToView", "parameters": [ { "key": "viewType", "value": "EDIT", } ], } } }, ], }, } . . .
Lỗi: Hộp thoại đóng, bị treo hoặc không mở
Nếu một hộp thoại đóng bất ngờ, không tải được hoặc không mở được, thì nguyên nhân có thể là do giao diện thẻ của hộp thoại đó gặp vấn đề.
Sau đây là những lý do phổ biến nhất:
- Tiện ích
CardFixedFooter
không cóprimaryButton
. - Một nút trong tiện ích
CardFixedFooter
không có hành độngonClick
hoặc hành độngonClick
của nút đó được chỉ định không chính xác. - Tiện ích
TextInput
bị thiếu trườngname
.
Nguyên nhân: CardFixedFooter
không có primaryButton
Trong hộp thoại có tiện ích CardFixedFooter
, bạn phải chỉ định primaryButton
có cả văn bản và màu sắc. Việc bỏ qua primaryButton
hoặc đặt không chính xác sẽ khiến toàn bộ hộp thoại không xuất hiện.
Để khắc phục lỗi này, hãy đảm bảo tiện ích CardFixedFooter
có primaryButton
được chỉ định chính xác.
Xem đoạn mã JSON thẻ bị lỗi
Lỗi: Đối tượng fixedFooter
không có trường primaryButton
được chỉ định, khiến hộp thoại không tải hoặc mở được.
. . . "fixedFooter": { "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: fixedFooter
hiện có một trường primaryButton
được chỉ định, vì vậy hộp thoại hoạt động như mong đợi.
. . . "fixedFooter": { "primaryButton": { "text": "Submit", "color": { "red": 0, "blue": 1, "green": 0 }, "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Nguyên nhân: Chế độ cài đặt onClick
không chính xác trong FixedFooter
Trong hộp thoại có tiện ích CardFixedFooter
, việc chỉ định chế độ cài đặt onClick
trên bất kỳ nút nào không chính xác hoặc bỏ qua chế độ cài đặt này sẽ khiến hộp thoại đóng, không tải hoặc không mở.
Để khắc phục lỗi này, hãy đảm bảo mỗi nút đều có chế độ cài đặt onClick
được chỉ định chính xác.
Xem đoạn mã JSON thẻ bị lỗi
Lỗi: Đối tượng primaryButton
có trường onClick
với mảng "parameters" bị sai chính tả, khiến hộp thoại không tải hoặc mở được.
. . . "fixedFooter": { "primaryButton": { "text": "Submit", "color": { "red": 0, "blue": 1, "green": 0 }, "onClick": { "action": { "function": "setLanguageType", "parrammetters": [ { "key": "languageType", "value": "C++" } ] } } }, "secondaryButton": { "text": "Cancel", "onClick": { "action": { "function": "reset" } } } } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: Đối tượng primaryButton
có trường onClick
với mảng "parameters" được viết chính xác, vì vậy hộp thoại hoạt động như mong đợi.
. . . "fixedFooter": { "primaryButton": { "text": "Submit", "color": { "red": 0, "blue": 1, "green": 0 }, "onClick": { "action": { "function": "setLanguageType", "parameters": [ { "key": "languageType", "value": "C++" } ] } } }, "secondaryButton": { "text": "Cancel", "onClick": { "action": { "function": "reset" } } } } . . .
Nguyên nhân: TextInput
không có name
Nếu một hộp thoại bao gồm một tiện ích TextInput
loại trừ trường name
, thì hộp thoại đó sẽ không hoạt động như mong đợi. Cửa sổ có thể đóng, mở nhưng không tải được hoặc không mở.
Để khắc phục lỗi này, hãy đảm bảo mỗi tiện ích TextInput
đều có một trường name
thích hợp. Đảm bảo mỗi trường name
trong thẻ là duy nhất.
Xem đoạn mã JSON thẻ bị lỗi
Lỗi: Đối tượng textInput
không có trường name
được chỉ định, khiến hộp thoại đóng, không tải hoặc không mở được.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", } } . . .
Xem đoạn mã JSON chính xác của thẻ
Khắc phục: textInput
hiện có một trường name
được chỉ định, vì vậy hộp thoại hoạt động như mong đợi.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", "name": "contactName" } } . . .
Các thao tác mở, gửi hoặc huỷ hộp thoại không thành công với cấu trúc ứng dụng không đồng bộ
Nếu ứng dụng Chat trả về thông báo lỗi Could not load dialog. Invalid response returned by bot.
khi xử lý hộp thoại, thì có thể là do ứng dụng sử dụng cấu trúc không đồng bộ, chẳng hạn như Cloud Pub/Sub hoặc phương thức API Create Message (Tạo tin nhắn).
Để mở, gửi hoặc huỷ hộp thoại, bạn cần có phản hồi đồng bộ từ ứng dụng Chat bằng DialogEventType
.
Do đó, các ứng dụng được xây dựng bằng cấu trúc không đồng bộ sẽ không hỗ trợ hộp thoại.
Để khắc phục, hãy cân nhắc sử dụng thông báo thẻ thay vì hộp thoại.
Các lỗi khác về thẻ và hộp thoại
Nếu các biện pháp khắc phục được mô tả trên trang này không giải quyết được lỗi liên quan đến thẻ mà ứng dụng của bạn gặp phải, hãy truy vấn nhật ký lỗi của ứng dụng. Việc truy vấn nhật ký có thể giúp tìm lỗi trong JSON thẻ hoặc mã ứng dụng. Ngoài ra, nhật ký còn bao gồm thông báo lỗi mô tả để giúp bạn khắc phục lỗi.
Chủ đề có liên quan
Để được trợ giúp khắc phục lỗi ứng dụng Google Chat, hãy xem bài viết Khắc phục sự cố và khắc phục ứng dụng Google Chat và Gỡ lỗi ứng dụng Chat.