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 các lỗi đó.
Sử dụng Trình tạo thẻ để thiết kế và xem trước giao diện người dùng và giao diện nhắn tin cho các ứng dụng Chat:
Mở Trình tạo thẻCách lỗi thẻ xuất hiện
Lỗi thẻ xuất hiện theo nhiều 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.
- Một 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ư thế này, tức là thẻ của ứng dụng có lỗi.
Để tham khảo: thông báo và hộp thoại thẻ hoạt động, không có lỗi
Trước khi xem xét các ví dụ về thẻ bị lỗi, trước tiên, hãy xem xét thông báo và hộp thoại thẻ hoạt động này. Để minh hoạ từng lỗi ví dụ và cách khắc phục, JSON của thẻ này được sửa đổi bằng cách đưa vào các lỗi.
Thông báo thẻ không có lỗi
Dưới đâ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 đề, các phần 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ư trường nhập văn bản và nút chuyển, cũng như các 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 mong đợi không xuất hiện; các nguyên nhân có thể là:
- Thiếu trường JSON bắt buộc.
- Trường JSON bị sai chính tả hoặc viết hoa không đúng.
Nguyên nhân: Thiếu trường JSON bắt buộc
Trong ví dụ về lỗi này, thiếu trường JSON bắt buộc là title. Do đó, thẻ hiển thị, nhưng các phần của thẻ dự kiến sẽ xuất hiện thì không. Bạn có thể khó dự đoán cách thẻ hiển thị khi các trường bắt buộc bị bỏ qua.
Để 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 Thẻ phiên bản 2. Trong ví dụ này, hãy tham khảo phần mô tả của 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 dưới dạng trống:
title.Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Thiếu trường bắt buộc là title trong header.
. . . "header": { "subtitle": "Software Engineer" } . . .
Xem đoạn mã JSON của thẻ chính xác
Đã khắc phục: Trường bắt buộc là title là một phần của thông số kỹ thuật 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 hiển thị phụ đề:
title, nhưng hình ảnh hiển thị như mong đợi.Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Thiếu trường bắt buộc là 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 của thẻ chính xác
Đã khắc phục: Trường bắt buộc là title là một phần của thông số kỹ thuật 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 bị sai chính tả hoặc viết hoa không đúng
Trong ví dụ về lỗi này, JSON của thẻ bao gồm tất cả các trường cần thiết, nhưng một trường là imageUrl được viết hoa không đúng thành imageURL (chữ R viết 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 của thẻ dựa trên tài liệu tham khảo về thẻ.
title, nhưng hình ảnh hiển thị như mong đợi.Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Trường imageURL được viết hoa không đúng. Trường 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 của thẻ chính xác
Đã khắc phục: Trường imageUrl được viết hoa đúng.
. . . "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, chính thẻ không xuất hiện; các nguyên nhân có thể là:
- Tiện ích
ButtonListwidget được chỉ định không đúng. - Tiện ích
CardFixedFooterwidget có một nút được chỉ định không đúng.
Nguyên nhân: buttonList hoặc cardFixedFooter được chỉ định không đúng
Nếu thông báo hoặc hộp thoại thẻ bao gồm một tiện ích ButtonList được chỉ định không đúng hoặc một tiện ích CardFixedFooter có các nút được chỉ định không đúng, thì toàn bộ thẻ sẽ không hiển thị và không có gì xuất hiện ở vị trí đó. Thông số kỹ thuật không chính xác có thể bao gồm các trường bị thiếu, các trường bị sai chính tả hoặc viết hoa không đúng, hoặc JSON có cấu trúc không đúng, 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 của thẻ dựa trên 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 hành động onClick không đầy đủ trong nút đầu tiên sẽ ngăn toàn bộ thẻ hiển thị.
Xem đoạn mã JSON của 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ẻ 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 của thẻ chính xác
Đã khắc phục: Đối tượng onClick hiện có trường openLink, vì vậy, thẻ xuất hiện như mong đợi.
. . . { "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 đột ngột, không tải được hoặc không mở, thì nguyên nhân có thể là do vấn đề với giao diện thẻ của hộp thoại đó.
Dưới đây là những lý do phổ biến nhất:
- Tiện ích
CardFixedFooterwidget không cóprimaryButton. - Một nút trong tiện ích
CardFixedFooterkhông có hành độngonClickhoặc hành độngonClickcủa nút đó được chỉ định không đúng. - Tiện ích
TextInputwidget 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. Việc bỏ qua primaryButton hoặc đặt không đúng sẽ ngăn toàn bộ hộp thoại xuất hiện.
Để khắc phục lỗi này, hãy đảm bảo tiện ích CardFixedFooter bao gồm một primaryButton được chỉ định đúng.
Xem đoạn mã JSON của 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 của thẻ chính xác
Đã khắc phục: fixedFooter hiện có 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: 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 cài đặt onClick trên bất kỳ nút nào không chính xác hoặc bỏ qua cài đặt đó sẽ khiến hộp thoại đó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 nút đều có một cài đặt onClick được chỉ định đúng.
Xem đoạn mã JSON của thẻ bị lỗi
Lỗi: Đối tượng primaryButton có trường onClick với một 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 của thẻ chính xác
Đã khắc phục: Đối tượng primaryButton có trường onClick với một mảng `parameters` được viết đúng chính tả, 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 tiện ích TextInput loại trừ trường name, thì hộp thoại sẽ không hoạt động như mong đợi. Hộp thoại 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 của 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 được hoặc không mở được.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", } } . . .
Xem đoạn mã JSON của thẻ chính xác
Đã khắc phục: textInput hiện có 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 kiến trúc ứng dụng không đồng bộ
Nếu ứng dụng Chat của bạn trả về thông báo lỗi
Could not load dialog. Invalid response returned by bot. trong khi làm việc với
các hộp thoại, thì có thể là do ứng dụng của bạn
sử dụng kiến trúc không đồng bộ, chẳng hạn như
Cloud Pub/Sub hoặc phương thức
Create Message API.
Việc mở, gửi hoặc huỷ một hộp thoại yêu cầu
phản hồi đồng bộ từ một ứng dụng Chat có
DialogEventType.
Theo đó, các hộp thoại không được hỗ trợ bởi các ứng dụng
được xây dựng bằng kiến trúc không đồng bộ .
Để khắc phục, hãy cân nhắc sử dụng a 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 cách 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 của thẻ hoặc mã ứng dụng và nhật ký bao gồm các thông báo lỗi mô tả để giúp bạn khắc phục cá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à sửa lỗi ứng dụng Google Chat và Gỡ lỗi ứng dụng Chat.