В этом руководстве рассказывается, как приложения Google Chat могут собирать и обрабатывать информацию от пользователей, создавая поля ввода в интерфейсах на основе карточек.
Приложения Chat запрашивают у пользователей информацию для выполнения действий в Chat или за его пределами, в том числе следующими способами:
- Настройте параметры. Например, чтобы пользователи могли настраивать уведомления или добавлять приложение Chat в одну или несколько чат-групп.
- Создавать или изменять информацию в других приложениях Google Workspace. Например, разрешите пользователям создавать мероприятия в Google Календаре.
- Предоставлять пользователям доступ к ресурсам в других приложениях или веб-сервисах и возможность их изменять. Например, приложение Chat может помочь пользователям обновить статус запроса в службу поддержки прямо из чат-группы.
Требования
HTTP
Приложение Google Chat, которое получает и обрабатывает действия пользователей. Чтобы создать его, выполните краткое руководство по HTTP.
Apps Script
Приложение Google Chat, которое получает и обрабатывает действия пользователей. Чтобы создать такой скрипт, выполните инструкции по началу работы с Apps Script.
Как создавать формы с помощью карточек
Чтобы собирать информацию, приложения Chat создают формы и их поля ввода, а затем встраивают их в карточки. Чтобы показывать пользователям карточки, приложения Chat могут использовать следующие интерфейсы Chat:
- Сообщения, содержащие одну или несколько карточек.
- Главные страницы – карточка, которая появляется на вкладке Главная в прямых переписках с приложением Chat.
- Диалоговые окна – карточки, которые открываются в новом окне из сообщений и на главных страницах.
Приложения для Chat могут создавать карточки с помощью следующих виджетов:
Виджеты для ввода данных, которые запрашивают информацию у пользователей. При необходимости вы можете добавить проверку для виджетов ввода формы, чтобы пользователи вводили и форматировали информацию правильно. В чат-приложениях можно использовать следующие виджеты ввода данных:
- Текстовые запросы
(
textInput) для свободной формы или предложенного текста. - Элементы выбора (
selectionInput) – это элементы интерфейса, которые можно выбрать, например флажки, переключатели и раскрывающиеся меню. Виджеты выбора также могут заполнять и предлагать элементы из данных Google Workspace (например, чат-группы) или динамического источника данных. Подробнее о том, как добавить раскрывающееся меню и как добавить меню с возможностью выбора нескольких вариантов… - Окна выбора даты и времени
(
dateTimePicker) для ввода даты и времени.
- Текстовые запросы
(
Кнопка, чтобы пользователи могли отправлять значения, введенные в карточку. После того как пользователь нажмет кнопку, приложение Chat сможет обработать полученную информацию.
В примере ниже карточка собирает контактную информацию с помощью текстового поля, выбора даты и времени и выбора варианта:
Другие примеры интерактивных виджетов, которые можно использовать для сбора информации, приведены в статье Как создать интерактивную карточку или диалоговое окно.
Как добавить раскрывающееся меню
Чтобы настроить элементы выбора или разрешить пользователям выбирать один элемент из динамического источника данных, приложения Chat могут использовать раскрывающиеся меню, которые являются одним из типов виджетов SelectionInput. Например, на карточке ниже показано раскрывающееся меню, в котором пользователи могут выбирать контакты из списка:
Вы можете заполнить раскрывающееся меню данными из следующих источников:
- Данные Google Workspace, в том числе пользователи или чат-группы.
- Внешние источники данных, например реляционная база данных.
Как заполнять объекты из источника данных Google Workspace
Чтобы заполнить объекты из источников данных Google Workspace, например пользователей Google Workspace, укажите поле platformDataSource в объекте DataSourceConfig. В отличие от других типов входных данных для выбора, объекты SelectionItem не указываются, поскольку эти элементы выбора динамически извлекаются из Google Workspace.
В приведенном ниже коде показано раскрывающееся меню пользователей Google Workspace:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "contacts",
"type": "DROPDOWN",
"label": "Select contact from organization",
"data_source_configs": [
{
"platformDataSource": {
"commonDataSource": "USER"
},
"min_characters_trigger": 1
}
]
}
}
]
}
]
}
Как заполнять сведения о товарах из внешнего источника данных
В раскрывающихся меню также могут быть элементы из стороннего или внешнего источника данных. Чтобы использовать внешний источник данных, укажите поле remoteDataSource в объекте DataSourceConfig, который содержит функцию, запрашивающую и возвращающую элементы из источника данных.
Чтобы уменьшить количество запросов к внешнему источнику данных, вы можете добавить в раскрывающееся меню предлагаемые элементы, которые будут показываться до того, как пользователь начнет вводить текст. Чтобы заполнить список рекомендуемых товаров из внешнего источника данных, укажите статические объекты SelectionItem.
В приведенном ниже примере кода показано раскрывающееся меню, которое запрашивает и заполняет элементы из внешнего источника данных:
JSON
{
"sections": [
{
"header": "Section Header",
"widgets": [
{
"selectionInput": {
"name": "crm_leads",
"type": "DROPDOWN",
"label": "Select CRM Lead",
"data_source_configs": [
{
"remoteDataSource": {
"function": "getCrmLeads"
},
"min_characters_trigger": 2
}
],
"items": [
{
"text": "Suggested Lead 1",
"value": "lead-1"
}
]
}
}
]
}
]
}
Полный пример того, как возвращать предложенные товары, приведен в разделе Предлагайте товары для выбора.
Как добавить меню с возможностью выбора нескольких вариантов
Чтобы настроить элементы выбора или разрешить пользователям выбирать элементы из динамического источника данных, приложения Chat могут использовать меню с множественным выбором, которые являются одним из типов виджетов SelectionInput. Например, на карточке ниже показано меню с возможностью выбора нескольких вариантов, в котором пользователи могут динамически выбирать контакты из списка:
В меню с возможностью выбора нескольких вариантов можно добавить элементы из следующих источников данных:
- Данные Google Workspace, в том числе пользователи или чат-группы, в которых состоит пользователь. В меню будут показываться только объекты из той же организации Google Workspace.
- Внешние источники данных, например реляционная база данных. Например, меню с множественным выбором можно использовать, чтобы помочь пользователю выбрать потенциальных клиентов из списка в системе управления взаимоотношениями с клиентами (CRM).
Как заполнять объекты из источника данных Google Workspace
Чтобы использовать источники данных Google Workspace, укажите поле platformDataSource
в виджете SelectionInput. В отличие от других типов входных данных для выбора, объекты SelectionItem не указываются, поскольку эти элементы выбора динамически извлекаются из Google Workspace.
В приведенном ниже коде показано меню с возможностью выбора нескольких пользователей Google Workspace.
Чтобы заполнить список пользователей, в поле выбора задайте для commonDataSource значение USER:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"commonDataSource": "USER"
}
}
}
В приведенном ниже коде показано меню с возможностью выбора нескольких чат-групп. Чтобы заполнить поля, в качестве входных данных для выбора указывается поле hostAppDataSource. В меню с несколькими вариантами выбора также задается значение defaultToCurrentSpace, равное true, благодаря чему текущая чат-группа становится вариантом по умолчанию в меню:
JSON
{
"selectionInput": {
"name": "spaces",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"hostAppDataSource": {
"chatDataSource": {
"spaceDataSource": {
"defaultToCurrentSpace": true
}
}
}
}
}
}
Как заполнять сведения о товарах из внешнего источника данных
Кроме того, меню с множественным выбором могут заполняться элементами из стороннего или внешнего источника данных. Чтобы использовать внешний источник данных, укажите поле externalDataSource в виджете SelectionInput, содержащем функцию, которая запрашивает и возвращает элементы из источника данных.
Чтобы уменьшить количество запросов к внешнему источнику данных, вы можете добавить в меню с множественным выбором предлагаемые варианты, которые будут показываться до того, как пользователь начнет вводить текст. Например, вы можете заполнить список недавно найденных контактов для пользователя. Чтобы заполнить список рекомендуемых товаров из внешнего источника данных, укажите статические объекты SelectionItem.
В приведенном ниже фрагменте кода показано меню с возможностью выбора нескольких вариантов, которое запрашивает и заполняет элементы из внешнего источника данных:
Node.js
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Python
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Java
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Apps Script
В этом примере отправляется сообщение с карточкой, для чего возвращается JSON-код карточки. Вы также можете использовать сервис карточек Apps Script.
Полный пример того, как возвращать предложенные товары, приведен в разделе Предлагайте товары для выбора.
Как получать данные от интерактивных виджетов
Когда пользователь нажимает кнопку, запускается действие приложения Chat с информацией о взаимодействии. В объекте commonEventObject полезной нагрузки события объект formInputs содержит все значения, введенные пользователем.
Вы можете получить значения из объекта event.commonEventObject.formInputs.WIDGET_NAME, где WIDGET_NAME – это поле name, которое вы указали для виджета.
Значения возвращаются в виде определенного типа данных для виджета.
Ниже показана часть объекта события, в которой пользователь ввел значения для каждого виджета:
{
"commonEventObject": { "formInputs": {
"contactName": { "stringInputs": {
"value": ["Kai 0"]
}},
"contactBirthdate": { "dateInput": {
"msSinceEpoch": 1000425600000
}},
"contactType": { "stringInputs": {
"value": ["Personal"]
}}
}}
}
Чтобы получить данные, приложение Chat обрабатывает объект события и извлекает значения, которые пользователи вводят в виджеты. В таблице ниже показано, как получить значение для определенного виджета ввода формы. В таблице для каждого виджета указан тип данных, который он принимает, где хранится значение в объекте события и пример значения.
| Виджет ввода формы | Тип входных данных | Входное значение из объекта события | Пример значения |
|---|---|---|---|
textInput |
stringInputs |
event.commonEventObject.formInputs.contactName.stringInputs.value[0] |
Kai O |
selectionInput |
stringInputs |
Чтобы получить первое или единственное значение, event.commonEventObject.formInputs.contactType.stringInputs.value[0] |
Personal |
dateTimePicker, в котором можно указать только даты. |
dateInput |
event.commonEventObject.formInputs.contactBirthdate.dateInput.msSinceEpoch. |
1000425600000 |
После получения данных приложение Chat может:
- Для карточек с меню с множественным выбором заполняйте или предлагайте элементы на основе того, что пользователь вводит в меню.
- Перенести данные на другую карточку, чтобы пользователь мог проверить информацию или перейти к следующему разделу формы.
- Ответьте пользователю и подтвердите, что он успешно заполнил форму.
Предлагать варианты выбора
Если на карточке есть меню с возможностью выбора нескольких вариантов или раскрывающееся меню, содержащее элементы из внешнего источника данных, приложение Chat может возвращать предложенные элементы на основе того, что пользователи вводят в меню. Например, если пользователь начинает вводить Atl для меню, в котором перечислены города США, приложение Chat может автоматически предложить Atlanta до того, как пользователь закончит ввод. Приложение Chat может предлагать до 100 объектов.
Чтобы предлагать и динамически заполнять элементы в поле выбора, виджет SelectionInput на карточке должен указывать функцию, которая запрашивает внешний источник данных. Для меню с множественным выбором нужно указать поле externalDataSource. Для раскрывающихся меню нужно указать поле remoteDataSource в объекте DataSourceConfig.
Вы также можете указать, сколько символов должен ввести пользователь, прежде чем меню предложит варианты. Для меню с множественным выбором задайте поле multiSelectMinQueryLength. Для раскрывающихся меню задайте поле min_characters_trigger в элементе DataSourceConfig.
Чтобы возвращать предложенные объекты, функция должна:
- Обрабатывать объект события, который приложение Chat получает, когда пользователи вводят текст в меню.
- Из объекта события получите значение, которое ввел пользователь. Оно представлено в поле
event.commonEventObject.parameters["autocomplete_widget_query"]. - Отправьте запрос к источнику данных, используя введенное пользователем значение, чтобы получить одно или несколько значений
SelectionItemsи предложить их пользователю. - Чтобы вернуть предложенные элементы, верните объект
RenderActionsс объектомmodifyCard.
В следующем примере кода показано, как приложение Chat динамически предлагает элементы в меню с множественным выбором на карточке. Когда пользователь вводит текст в меню, функция или конечная точка, указанная в поле externalDataSource виджета, отправляет запрос к внешнему источнику данных и предлагает варианты, которые пользователь может выбрать.
Node.js
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Python
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Java
Замените FUNCTION_URL конечной точкой HTTP, которая запрашивает внешний источник данных.
Apps Script
В этом примере отправляется сообщение с карточкой, для чего возвращается JSON-код карточки. Вы также можете использовать сервис карточек Apps Script.
Как перенести данные на другую карту
После того как пользователь отправит информацию с карточки, вам может понадобиться вернуть дополнительные карточки, чтобы:
- Разделите длинную форму на несколько разделов, чтобы пользователям было удобнее ее заполнять.
- Предоставьте пользователям возможность просматривать и подтверждать информацию с первой карточки, чтобы они могли проверить свои ответы перед отправкой.
- Динамически заполните оставшиеся части формы. Например, чтобы предложить пользователям создать встречу, приложение Chat может сначала показать карточку с запросом причины встречи, а затем заполнить другую карточку с доступным временем на основе типа встречи.
Чтобы перенести введенные данные с первой карточки, создайте виджет button с помощью actionParameters, содержащего виджет name и значение, введенное пользователем, как показано в следующем примере:
Node.js
Замените FUNCTION_URL конечной точкой HTTP, которая обрабатывает нажатия кнопок.
Python
Замените FUNCTION_URL конечной точкой HTTP, которая обрабатывает нажатия кнопок.
Java
Замените FUNCTION_URL конечной точкой HTTP, которая обрабатывает нажатия кнопок.
Apps Script
В этом примере отправляется сообщение с карточкой, для чего возвращается JSON-код карточки. Вы также можете использовать сервис карточек Apps Script.
Когда пользователь нажимает на кнопку, ваше приложение Chat получает объект события, из которого можно получить данные.
Как ответить на отправленную форму
После получения данных из сообщения с карточкой или диалогового окна приложение Chat отвечает, подтверждая получение или возвращая ошибку.
В следующем примере приложение Chat отправляет текстовое сообщение, чтобы подтвердить, что оно успешно получило форму, отправленную из сообщения с карточкой.
Node.js
Python
Java
Apps Script
В этом примере отправляется сообщение с карточкой, для чего возвращается JSON-код карточки. Вы также можете использовать сервис карточек Apps Script.
Чтобы обработать и закрыть диалоговое окно, вы возвращаете объект RenderActions, который указывает, хотите ли вы отправить подтверждающее сообщение, обновить исходное сообщение или карточку или просто закрыть диалоговое окно. Подробнее о том, как закрыть диалоговое окно…
Устранение неполадок
В этом разделе приведены инструкции по устранению неполадок, связанных с определенными кодами ошибок и поведением диалоговых окон в Chat во время выполнения.
При взаимодействии с диалоговым окном возвращается ошибка "При вызове дополнения возникла неизвестная ошибка"
Если при взаимодействии с диалоговым окном вы видите журналы ошибок с сообщением "Неизвестная ошибка при вызове дополнения" и кодом 13, это обычно указывает на внутреннюю ошибку или на то, что конечная точка HTTP приложения Chat не смогла обработать запрос или вернуть действительный ответ.
Чтобы устранить эту ошибку:
- Проверьте журналы конечной точки HTTP на наличие необработанных исключений или сбоев.
- Убедитесь, что конечная точка отвечает на запросы в течение 30 секунд. Если выполнение конечной точки занимает больше 30 секунд, Chat не может обработать ответ и взаимодействие завершается неудачно. Подробнее об ограничении частоты запросов и рекомендациях…
- Убедитесь, что конечная точка возвращает действительный ответ. Для отправки диалогового окна конечная точка должна возвращать объект
RenderActionsв правильном формате JSON. Если ответ неправильно сформирован или не содержит обязательных полей, взаимодействие с диалоговым окном может завершиться неудачно.
Если приложение Google Chat или карточка возвращает ошибку, в интерфейсе Chat появляется сообщение "Что-то пошло не так". или "Не удалось обработать запрос". Иногда в интерфейсе Chat не показывается сообщение об ошибке, но приложение Chat или карточка выдает неожиданный результат, например не появляется сообщение на карточке.
Хотя в интерфейсе Chat может не показываться сообщение об ошибке, при включенном ведении журнала ошибок для приложений Chat вам будут доступны подробные сообщения об ошибках и данные журнала, которые помогут устранить неполадки. Чтобы узнать, как просматривать, отлаживать и исправлять ошибки, ознакомьтесь с разделом Устранение неполадок в Google Chat.
Статьи по теме
- Посмотрите пример приложения Contact Manager – приложения Chat, которое предлагает пользователям заполнить форму обратной связи в сообщениях на карточках и диалоговых окнах.
- Как открыть интерактивные диалоговые окна
Приложения Chat, не являющиеся дополнениями: чтение данных, введенных пользователями в формы на карточках
Ниже приведена документация по приложениям Chat, которые не являются дополнениями Google Workspace. Чтобы перенести приложение Chat, которое не является дополнением, ознакомьтесь со статьей Как преобразовать приложение Google Chat в дополнение Google Workspace.
Как создавать формы с помощью карточек
Пример приложения Chat, которое не является дополнением и использует форму обратной связи с текстовым полем, инструментом выбора даты и времени и полем выбора, приведен в следующем коде:
Node.js
Python
Java
Apps Script
Как получать данные от интерактивных виджетов
Когда пользователь нажимает кнопку, приложения Chat, которые не являются дополнениями, получают событие взаимодействия в зависимости от местоположения кнопки:
Если кнопка находится в сообщении или диалоговом окне, приложения Chat, которые не являются дополнениями, получают событие взаимодействия
CARD_CLICKED, содержащее информацию о взаимодействии. Полезная нагрузка событий взаимодействияCARD_CLICKEDсодержит объектcommon.formInputs(event.common.formInputs) со всеми значениями, которые вводит пользователь.Вы можете получить значения из объекта
common.formInputs.WIDGET_NAME, где WIDGET_NAME – это полеname, указанное для виджета. Значения возвращаются в виде определенного типа данных для виджета (представленного как объектInputs).Ниже показана часть события взаимодействия
CARD_CLICKED, в которой пользователь ввел значения для каждого виджета:HTTP
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }Если кнопка находится на главной странице, приложения Chat, которые не являются дополнениями, получают событие взаимодействия
SUBMIT_FORM. Полезная нагрузка события взаимодействия содержит объектcommonEventObject.formInputs(event.commonEventObject.formInputs) со всеми значениями, которые ввел пользователь.Вы можете получить значения из объекта
commonEventObject.formInputs.WIDGET_NAME, где WIDGET_NAME – это полеname, указанное для виджета. Значения возвращаются в виде определенного типа данных для виджета (представленного как объектInputs).Ниже показана часть события взаимодействия
SUBMIT_FORM, в которой пользователь ввел значения для каждого виджета:HTTP
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }
Чтобы получить данные, приложение Chat, не являющееся дополнением, обрабатывает событие взаимодействия и получает значения, которые пользователи вводят в виджеты. В таблице ниже показано, как получить значение для определенного виджета ввода формы. Для каждого виджета в таблице указаны тип данных, который принимает виджет, место хранения значения в событии взаимодействия и пример значения.
| Виджет ввода формы | Тип входных данных | Значение, полученное из события взаимодействия | Пример значения |
|---|---|---|---|
textInput |
stringInputs |
event.common.formInputs.contactName.stringInputs.value[0] |
Kai O |
selectionInput |
stringInputs |
Чтобы получить первое или единственное значение, event.common.formInputs.contactType.stringInputs.value[0] |
Personal |
dateTimePicker, в котором можно указать только даты. |
dateInput |
event.common.formInputs.contactBirthdate.dateInput.msSinceEpoch. |
1000425600000 |
Как перенести данные на другую карту
Чтобы перенести введенные данные с исходной карточки в приложение Chat, которое не является дополнением, создайте виджет button с actionParameters, содержащими name виджета и значение, введенное пользователем, как показано в следующем примере:
Node.js
Python
Java
Apps Script
Когда пользователь нажимает на кнопку, приложение Chat, которое не является дополнением, получает событие взаимодействия CARD_CLICKED, из которого вы можете получить данные.
Как ответить на отправленную форму
В следующем примере приложение Chat, которое не является дополнением, отправляет текстовое сообщение, чтобы подтвердить, что оно успешно получило форму, отправленную из диалогового окна или карточки:
Node.js
Python
Java
Apps Script
Чтобы обработать и закрыть диалоговое окно в приложении Chat, которое не является дополнением, верните объект ActionResponse, в котором указано, хотите ли вы отправить подтверждающее сообщение, обновить исходное сообщение или карточку или просто закрыть диалоговое окно. Подробнее о том, как закрыть диалоговое окно…