This guide describes common card -related errors that you might encounter, and how to fix them.
Используйте конструктор карточек для разработки и предварительного просмотра сообщений и пользовательских интерфейсов для чат-приложений:
Откройте конструктор карточек.Как появляются ошибки на карте
Ошибки в работе банковских карт проявляются несколькими способами:
- Часть карточки, например, виджет или компонент, либо не отображается, либо отображается неожиданным образом.
- Вся карточка не отображается.
- Диалоговое окно закрывается, не открывается или не загружается.
If you encounter behavior like this, it means there's an error with your app's card.
Для справки: работающее, безошибочное сообщение и диалоговое окно для открытки.
Before examining erroneous card examples, first consider this working card message and dialog. To illustrate each example error and its fix, this card's JSON is modified by introducing errors.
Сообщение на открытке без ошибок
Вот рабочий, безошибочный шаблон сообщения для открытки с контактной информацией, включающий заголовок, разделы и виджеты, такие как декоративный текст и кнопки:
Диалог без ошибок
Here's the working, error-free dialog that creates a contact by collecting information from users, featuring a footer, and editable widgets like text input and switches, and buttons:
Ошибка: Часть карточки не отображается
Sometimes cards render, but part of a card that you expected to see doesn't appear; the likely causes are:
- Отсутствует обязательное поле JSON.
- В поле JSON допущена орфографическая ошибка или неправильно написаны заглавные буквы.
Причина: Отсутствует обязательное поле JSON.
В этом примере ошибки отсутствует обязательное поле JSON, title . В результате карточка отображается, но те части карточки, которые должны отображаться, не отображаются. Предсказать, как будут отображаться карточки, если отсутствуют обязательные поля, может быть сложно.
Чтобы исправить эту ошибку, добавьте необходимое поле JSON; в этом примере это title .
Чтобы узнать, является ли поле JSON обязательным, см. справочную документацию Cards v2 . В этом примере обратитесь к описанию поля title в CardHeader .
Вот два примера:
Пример 1: Если указать subtitle , но не указать обязательный title , весь заголовок будет отображаться пустым:

title , is missing. Просмотреть ошибочный фрагмент JSON-кода карты
Error: A required field, title , is missing from header .
. . . "header": { "subtitle": "Software Engineer" } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Исправлено: обязательное поле title теперь является частью спецификации header .
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer" } . . .
Пример 2: Указание subtitle , imageUrl , imageType и imageAltText без обязательного title приводит к отображению изображения, как и ожидалось, но не подзаголовка:

title , но изображение отображается как ожидалось. Просмотреть ошибочный фрагмент JSON-кода карты
Ошибка: В header отсутствует обязательное поле title .
. . . "header": { "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Fixed: The required field, title , is part of the header specification.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Причина: Неправильное написание или написание JSON-файла с заглавной буквы.
В этом примере ошибки JSON-файл карточки содержит все необходимые поля, за исключением одного поля, imageUrl , которое написано с неправильной заглавной буквы как imageURL (заглавная R заглавная L ), что приводит к ошибке: изображение, на которое оно указывает, не отображается.
Чтобы исправить эту и другие подобные ошибки, используйте правильный формат JSON. В данном случае imageUrl указан корректно. В случае сомнений, сравните JSON-код карты с документом-справочником карты .

title , но изображение отображается как положено. Просмотреть ошибочный фрагмент JSON-кода карты
Ошибка: Поле imageURL написано с неправильным регистром. Правильное написание — imageUrl .
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageURL": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Fixed: The field imageUrl is capitalized correctly.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Ошибка: не отображается вся карточка целиком.
Sometimes the card itself doesn't appear; the likely causes are:
- Виджет
ButtonListуказан некорректно. - В виджете
CardFixedFooterнеправильно указана кнопка.
Причина: Неправильно указан buttonList или cardFixedFooter
Если в карточке сообщения или диалоговом окне содержится неправильно указанный виджет ButtonList или виджет CardFixedFooter с неправильно указанными кнопками, вся карточка не отображается, и на её месте ничего не появляется. Неправильные спецификации могут включать в себя отсутствующие поля, поля с неправильным написанием или регистром букв, а также неправильно структурированный JSON, например, отсутствующую запятую, кавычку или фигурную скобку.
Для исправления этой ошибки сравните JSON-файл карточки с документом-справочником по карточкам . В частности, сравните все виджеты ButtonList с руководством по виджетам ButtonList .
Пример: В руководстве по виджету ButtonList передача неполного действия onClick в первой кнопке препятствует отображению всей карточки.
Просмотреть ошибочный фрагмент JSON-кода карты
Error: The onClick object has no fields specified, so the entire card doesn't appear.
. . . { "buttonList": { "buttons": [ { "text": "Share", "onClick": { } } }, { "text": "Edit", "onClick": { "action": { "function": "goToView", "parameters": [ { "key": "viewType", "value": "EDIT", } ], } } }, ], }, } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Исправлено: Объект onClick теперь имеет поле openLink , поэтому карточка отображается должным образом.
. . . { "buttonList": { "buttons": [ { "text": "Share", "onClick": { "openLink": { "url": "https://example.com/share", } } }, { "text": "Edit", "onClick": { "action": { "function": "goToView", "parameters": [ { "key": "viewType", "value": "EDIT", } ], } } }, ], }, } . . .
Ошибка: Диалоговое окно закрывается, зависает или не открывается.
Если диалоговое окно неожиданно закрывается, не загружается или не открывается, вероятная причина — проблема с интерфейсом карточки.
Вот наиболее распространенные причины:
- The
CardFixedFooterwidget has noprimaryButton. - У кнопки в виджете
CardFixedFooterотсутствует действиеonClick, или же действиеonClickуказано некорректно. - В виджете
TextInputотсутствует полеname.
Причина: CardFixedFooter отсутствует primaryButton
В диалоговых окнах с виджетом CardFixedFooter необходимо указать primaryButton с текстом и цветом. Отсутствие указания primaryButton или ее неправильная настройка приведут к тому, что диалоговое окно не отобразится полностью.
Чтобы исправить эту ошибку, убедитесь, что виджет CardFixedFooter содержит правильно указанную primaryButton .
Просмотреть ошибочный фрагмент JSON-кода карты
Error: The fixedFooter object has no primaryButton field specified, causing the dialog to fail to load or open.
. . . "fixedFooter": { "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Исправлено: Теперь в fixedFooter указано поле primaryButton , поэтому диалоговое окно работает как ожидалось.
. . . "fixedFooter": { "primaryButton": { "text": "Submit", "color": { "red": 0, "blue": 1, "green": 0 }, "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Причина: Неправильная настройка onClick в FixedFooter
В диалоговых окнах с виджетом CardFixedFooter неправильное указание параметра onClick для любой кнопки или его отсутствие может привести к закрытию диалогового окна, невозможности его загрузки или невозможности его открытия.
To fix this error, make sure each button includes a correctly specified onClick setting.
Просмотреть ошибочный фрагмент JSON-кода карты
Ошибка: В объекте primaryButton поле onClick содержит неправильно написанный массив `parameters`, что приводит к невозможности загрузки или открытия диалогового окна.
. . . "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" } } } } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Исправлено: Объект primaryButton имеет поле onClick с правильно написанным массивом `parameters`, поэтому диалоговое окно работает как ожидалось.
. . . "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" } } } } . . .
Причина: TextInput нет name
Если диалоговое окно содержит виджет TextInput , который исключает поле name , диалоговое окно будет работать не так, как ожидается. Оно может закрыться, открыться, но не загрузиться, или вообще не открыться.
Чтобы исправить эту ошибку, убедитесь, что каждый виджет TextInput содержит соответствующее поле name . Убедитесь, что каждое поле name на карточке уникально.
Просмотреть ошибочный фрагмент JSON-кода карты
Ошибка: В объекте textInput не указано поле name , что приводит к закрытию диалогового окна, невозможности его загрузки или открытия.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", } } . . .
Просмотрите правильный фрагмент JSON-файла карты.
Fixed: The textInput now has a name field specified, so the dialog works as expected.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", "name": "contactName" } } . . .
Dialog open, submit, or cancel actions fail with an asynchronous app architecture
Если ваше приложение для чата выдает сообщение об ошибке Could not load dialog. Invalid response returned by bot. при работе с диалогами , это может быть связано с тем, что ваше приложение использует асинхронную архитектуру , например, Cloud Pub/Sub или метод Create Message API.
Для открытия, отправки или отмены диалога требуется синхронный ответ от приложения чата с типом DialogEventType . Соответственно, диалоги не поддерживаются приложениями, построенными на асинхронной архитектуре .
В качестве обходного пути можно использовать сообщение в виде карточки вместо диалогового окна.
Другие ошибки карточек и диалоговых окон.
Если описанные на этой странице решения не устраняют ошибку, связанную с картой, в вашем приложении, запросите журналы ошибок приложения . Запрос журналов поможет найти ошибки в JSON-файле карты или коде приложения, а также содержит подробные сообщения об ошибках, которые помогут вам их исправить.
Связанные темы
For help fixing Google Chat app errors, see Troubleshoot and fix Google Chat app and Debug Chat apps .