В этом руководстве описаны распространенные ошибки, связанные с картами , с которыми вы можете столкнуться, и способы их устранения.
Используйте конструктор карточек для разработки и предварительного просмотра карточных сообщений JSON для приложений чата:
Откройте конструктор карточекКак появляются ошибки карты
Ошибки карты проявляются по-разному:
- Часть карточки, например виджет или компонент, не отображается и не отображается неожиданным образом.
- Вся карточка не отображается.
- Диалог закрывается, не открывается или не загружается.
Если вы столкнулись с подобным поведением, это означает, что в карточке вашего приложения возникла ошибка.
Для справки: рабочее, безошибочное сообщение и диалог карты
Прежде чем рассматривать примеры ошибочных карточек, сначала рассмотрите это сообщение и диалог рабочей карты. Чтобы проиллюстрировать каждый пример ошибки и ее исправление, JSON этой карточки изменяется путем добавления ошибок.
Безошибочное сообщение карты
Вот рабочее, безошибочное карточное сообщение с подробной контактной информацией, которое включает заголовок, разделы и виджеты, такие как оформленный текст и кнопки:
Диалог без ошибок
Вот работающий, безошибочный диалог, который создает контакт путем сбора информации от пользователей, имеет нижний колонтитул и редактируемые виджеты, такие как ввод текста, переключатели и кнопки:
Ошибка: часть карты не отображается.
Иногда карты отображаются, но часть карты, которую вы ожидали увидеть, не отображается; вероятные причины:
- Отсутствует обязательное поле JSON.
- Поле JSON написано с ошибкой или неправильно написано с заглавной буквы.
Причина: отсутствует обязательное поле JSON.
В этом примере ошибка: отсутствует обязательное поле JSON title
. В результате карта отображается, но части карты, которые должны появиться, не отображаются. Может быть сложно предсказать, как будут отображаться карточки, если обязательные поля опущены.
Чтобы исправить эту ошибку, добавьте необходимое поле JSON; в этом примере title
.
Чтобы узнать, требуется ли поле JSON, см. справочную документацию Cards v2 . В этом примере обратитесь к описанию поля title
в CardHeader
.
Вот два примера:
Пример 1. Если указать subtitle
, но пропустить обязательный title
весь заголовок станет пустым:
![Заголовок этой карточки не отображается, поскольку отсутствует обязательное поле «Заголовок».](https://developers-dot-devsite-v2-prod.appspot.com/static/workspace/chat/images/troubleshoot/troubleshoot-cards-missing-required-entity-header-title-1.png?authuser=5&hl=ru)
title
. Просмотр ошибочного фрагмента JSON карты
Ошибка: в header
отсутствует обязательное поле title
.
. . . "header": { "subtitle": "Software Engineer" } . . .
Посмотреть правильный фрагмент JSON карточки
Исправлено: обязательное поле title
является частью спецификации header
.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer" } . . .
Пример 2. Если указать subtitle
, imageUrl
, imageType
и imageAltText
, но пропустить обязательный title
, изображение будет отображаться должным образом, но не субтитр:
![Заголовок этой карточки не отображается, поскольку отсутствует обязательное поле «Заголовок».](https://developers-dot-devsite-v2-prod.appspot.com/static/workspace/chat/images/troubleshoot/troubleshoot-cards-missing-required-entity-header-title-2.png?authuser=5&hl=ru)
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 карточки
Исправлено: обязательное поле title
является частью спецификации header
.
. . . "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 карты со справочным документом карты .
![Заголовок этой карточки не отображается, поскольку отсутствует обязательное поле «Заголовок».](https://developers-dot-devsite-v2-prod.appspot.com/static/workspace/chat/images/troubleshoot/troubleshoot-cards-imageURL-instead-of-imageUrl.png?authuser=5&hl=ru)
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 карточки
Исправлено: поле imageUrl
правильно пишется с заглавной буквы.
. . . "header": { "title": "Sasha", "subtitle": "Software Engineer", "imageUrl": "https://developers.google.com/chat/images/quickstart-app-avatar.png", "imageType": "CIRCLE", "imageAltText": "Avatar for Sasha", } . . .
Ошибка: карточка не отображается целиком.
Иногда сама карта не появляется; вероятные причины:
- Виджет
ButtonList
указан неверно. - Виджет
CardFixedFooter
имеет неправильно указанную кнопку.
Причина: Неверно указан buttonList
или cardFixedFooter
Если сообщение или диалоговое окно карты содержит неправильно указанный виджет ButtonList
или виджет CardFixedFooter
с неправильно указанными кнопками, вся карточка не отображается, и на ее месте ничего не появляется. Неверные спецификации могут включать отсутствующие поля, поля с неправильным написанием или заглавными буквами, а также неправильно структурированный JSON, например отсутствующую запятую, кавычку или фигурную скобку.
Чтобы исправить эту ошибку, сверьте JSON карты со справочным документом карты . В частности, сравните любые виджеты ButtonList
с руководством по виджетам ButtonList
.
Пример. В руководстве по виджетам ButtonList
передача неполного действия onClick
в первую кнопку предотвращает отрисовку всей карточки.
Просмотр ошибочного фрагмента JSON карты
Ошибка: для объекта onClick
не указаны поля, поэтому вся карточка не отображается.
. . . { "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", } ], } } }, ], }, } . . .
Ошибка: диалоговое окно закрывается, зависает или не открывается.
Если диалоговое окно неожиданно закрывается, не загружается или не открывается, вероятной причиной является проблема с интерфейсом карты.
Вот наиболее распространенные причины:
- Виджет
CardFixedFooter
не имеетprimaryButton
. - Кнопка в виджете
CardFixedFooter
не имеет действияonClick
или ее действиеonClick
указано неверно. - В виджете
TextInput
отсутствует полеname
.
Причина: CardFixedFooter
не имеет primaryButton
В диалогах с виджетом CardFixedFooter
необходимо указать primaryButton
с текстом и цветом. Если вы пропустите primaryButton
или установите его неправильно, весь диалог не появится.
Чтобы исправить эту ошибку, убедитесь, что виджет CardFixedFooter
содержит правильно указанный primaryButton
.
Просмотр ошибочного фрагмента JSON карты
Ошибка: для объекта fixedFooter
не указано поле primaryButton
, из-за чего диалоговое окно не загружается и не открывается.
. . . "fixedFooter": { "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Посмотреть правильный фрагмент JSON карточки
Исправлено: fixedFooter
теперь указано поле primaryButton
, поэтому диалоговое окно работает должным образом.
. . . "fixedFooter": { "primaryButton": { "text": "Submit", "color": { "red": 0, "blue": 1, "green": 0 }, "onClick": { . . . }, "secondaryButton": { . . . } } } . . .
Причина: неверная настройка onClick
в FixedFooter
В диалогах с виджетом CardFixedFooter
неправильное указание параметра onClick
для любой кнопки или его пропуск, что приводит к закрытию, сбою загрузки или открытию диалога.
Чтобы исправить эту ошибку, убедитесь, что каждая кнопка имеет правильно указанный параметр onClick
.
Просмотр ошибочного фрагмента JSON карты
Ошибка: объект primaryButton
имеет поле onClick
с массивом параметров с ошибкой, из-за чего диалоговое окно не загружается и не открывается.
. . . "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
с правильно написанным массивом параметров, поэтому диалоговое окно работает должным образом.
. . . "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 карточки
Исправлено: в textInput
теперь указано поле name
, поэтому диалоговое окно работает должным образом.
. . . { "textInput": { "label": "Name", "type": "SINGLE_LINE", "name": "contactName" } } . . .
Действия открытия, отправки или отмены диалогового окна не выполняются при использовании асинхронной архитектуры приложения.
Если ваше приложение чата возвращает сообщение об ошибке Could not load dialog. Invalid response returned by bot.
при работе с диалоговыми окнами это может быть связано с тем, что ваше приложение использует асинхронную архитектуру , например Cloud Pub/Sub или метод Create Message API.
Для открытия, отправки или отмены диалога требуется синхронный ответ от приложения чата с DialogEventType
. Соответственно, диалоги не поддерживаются приложениями, созданными с использованием асинхронной архитектуры .
В качестве обходного пути рассмотрите возможность использования сообщения на карточке вместо диалога.
Другие ошибки карточек и диалогов
Если исправления, описанные на этой странице, не устраняют ошибку, связанную с картой, в вашем приложении, запросите журналы ошибок приложения . Запрос журналов может помочь найти ошибки в JSON карты или коде приложения, а журналы содержат описательные сообщения об ошибках, которые помогут вам их исправить.
Связанные темы
Чтобы узнать, как исправить ошибки приложения Google Chat, см. разделы «Устранение неполадок и исправление приложения Google Chat» и «Отладка приложений Chat» .