本页介绍了如何向卡片添加微件和界面元素 让用户可以与您的 Google Chat 应用互动,例如 点击某个按钮或提交信息。
Chat 应用可以使用以下 Chat 界面 制作互动卡片的方法如下:
当用户与卡片互动时,Chat 扩展应用可以使用 以便对它们进行相应处理和响应有关详情,请参阅 收集和处理 Google Chat 用户的信息。
使用卡片构建器设计和预览聊天应用的消息功能和界面:
打开卡片制作工具前提条件
一款已启用互动功能的 Google Chat 应用。要创建 交互式 Chat 应用,请完成以下快速入门之一 针对您要使用的应用架构:
- 将 HTTP 服务与 Google Cloud Functions 搭配使用
- Google Apps 脚本
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
添加按钮
通过
ButtonList
widget
会显示一组按钮。按钮可以显示文字、
或同时添加文字和图标每个
Button
支持
OnClick
操作
用户点击该按钮后发生的情况例如:
为了确保无障碍,按钮支持替代文本。
添加可运行自定义函数的按钮
下面是一个卡片,由带有两个按钮的 ButtonList
widget 组成。
只需点击一下按钮,即可在新标签页中打开 Google Chat 开发者文档。通过
另一个按钮会运行一个名为 goToView()
的自定义函数,并将
viewType="BIRD EYE VIEW"
参数。
添加采用 Material Design 样式的按钮
下面显示了一组采用不同 Material Design 按钮的按钮 样式。
要应用 Material Design 样式,请勿添加“color”属性。
添加一个带有自定义颜色和已停用按钮的按钮
您可以通过设置 "disabled": "true"
禁止用户点击按钮。
以下代码显示了一张卡片,该卡片由一个 ButtonList
widget 组成,其中包含两个
按钮。一个按钮使用
Color
字段
自定义按钮的背景
color 决定。另一个按钮可通过 Disabled
字段停用,该字段显示
可以防止用户点击按钮并执行函数。
添加带图标的按钮
以下代码显示了一张卡片,该卡片由一个 ButtonList
widget 和两个图标组成
Button
widget。一个按钮使用
knownIcon
字段以显示 Google Chat 的内置电子邮件图标。另一个按钮使用
iconUrl
字段可显示
自定义图标 widget。
添加带有图标和文本的按钮
以下代码显示了一张由 ButtonList
widget 组成的卡片,用于提示
用户发送电子邮件。第一个按钮显示一个电子邮件图标,
第二个按钮会显示文字。用户可以点击图标或文本
按钮运行 sendEmail
函数。
为可收起的部分自定义按钮
自定义用于收起和展开 卡片。从一系列图标或图片中进行选择,直观地表示 部分的内容,使用户能够更轻松地理解 信息。
添加菜单
通过
Overflow menu
可在聊天卡片中使用,以提供其他选项和操作。它让
您可以提供更多选项,而不会使卡片界面杂乱无章
简洁有序的设计
添加条状标签列表
ChipList
微件提供了一种功能多样且具有视觉吸引力的信息显示方式。
使用条状标签列表来表示标签、类别或其他相关数据,
使用户可以更轻松地浏览您的内容并与内容互动
收集用户信息
本部分介绍了如何添加用于收集信息(如 文本或选择的内容
要了解如何处理用户输入,请参阅 收集和处理 Google Chat 用户的信息。
收集文字
TextInput
widget
提供了一个字段,供用户输入文本。通过
微件支持提供建议,以帮助用户输入统一的数据,
也就是
Actions
当文本输入字段发生变化(例如用户添加或
删除文本。
如果您需要从用户那里收集抽象或未知数据,请使用此
TextInput
widget。要从用户那里收集定义的数据,请使用
SelectionInput
微件。
以下是由 TextInput
widget 组成的卡片:
收集日期或时间
通过
DateTimePicker
widget
允许用户输入日期和/或时间
。用户也可以使用该选择器选择日期和时间。如果用户输入
日期或时间无效,选择器就会显示错误,以提示用户输入
信息。
下面显示了一张卡片,该卡片包含三种不同类型的
DateTimePicker
widget:
允许用户选择内容
SelectionInput
widget
提供一组可选择的项,例如复选框、单选按钮、开关,
或下拉菜单。您可以使用以下微件
从用户那里收集经过定义的标准化数据。收集未定义的数据
请改用 TextInput
widget。
SelectionInput
widget 支持建议,以帮助用户输入制服
以及更改时操作,
Actions
选择输入字段(例如用户
选择或取消选择某项内容。
Chat 扩展应用可以接收和处理所选项目的价值。 如需详细了解如何使用表单输入,请参阅 处理用户输入的信息。
本部分提供了使用 SelectionInput
widget 的卡片示例。
这些示例使用不同类型的部分输入:
添加复选框
下面显示了一张卡片,要求用户指定
是职业联系人和/或个人联系人,并且使用 SelectionInput
widget
使用复选框:
添加单选按钮
下面显示了一张卡片,要求用户指定
某个 SelectionInput
微件使用
单选按钮:
添加开关
下面显示了一张卡片,要求用户指定
使用 SelectionInput
widget
使用开关:
添加下拉菜单
下面显示了一张卡片,要求用户指定
某个 SelectionInput
微件使用
下拉菜单:
添加多选菜单
下面显示了一张卡片,要求用户选择联系人 执行以下操作:
您可以使用以下数据为多选菜单填充内容 来源:
- Google Workspace 用户:您只能填充 同一个 Google Workspace 组织中的用户。
- Chat 聊天室:用户在多选模式下输入内容的内容 菜单只能查看和选择他们所属的聊天室 Google Workspace 组织。
如需使用 Google Workspace 数据源,请指定
platformDataSource
字段。与其他选择输入类型不同,您可以省略
SectionItem
因为这些选择项
Google Workspace。
以下代码显示了 Google Workspace 用户的多选菜单。
为了填充用户,选择输入会将 commonDataSource
设置为 USER
:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"commonDataSource": "USER"
}
}
}
以下代码显示了 Chat 的多选菜单
空格。要填充聊天室,选择输入会指定
hostAppDataSource
字段。多选菜单还会设置
从 defaultToCurrentSpace
更改为 true
,这会将当前聊天室设为默认聊天室
选项:
JSON
{
"selectionInput": {
"name": "spaces",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"platformDataSource": {
"hostAppDataSource": {
"chatDataSource": {
"spaceDataSource": {
"defaultToCurrentSpace": true
}
}
}
}
}
}
多选菜单还可以填充来自第三方或外部数据的内容 来源。例如,您可以使用多选菜单来帮助用户从 来自客户关系管理 (CRM) 系统的潜在客户列表。
要使用外部数据源,您可以使用 externalDataSource
字段
指定一个从数据源返回商品的函数。
为了减少对外部数据源的请求数量,您可以
在用户输入内容之前出现在多选菜单中的建议项
菜单。例如,您可以将最近搜索过的联系人
用户。要通过外部数据源填充建议的内容,请指定
SelectionItem
对象的操作。
以下代码显示了
用户的外部联系人集。菜单默认显示一位联系人
并运行函数 getContacts
,以从
外部数据源:
JSON
{
"selectionInput": {
"name": "contacts",
"type": "MULTI_SELECT",
"label": "Selected contacts",
"multiSelectMaxSelectedItems": 5,
"multiSelectMinQueryLength": 2,
"externalDataSource": {
"function": "getContacts"
},
"items": [
{
"text": "Contact 3",
"value": "contact-3",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"bottomText": "Contact three description",
"selected": false
}
]
}
}
对于外部数据源,您还可以自动补全用户启动的内容
输入文字。例如,如果用户开始输入Atl
美国城市的菜单,
Chat 应用可以在用户之前先行自动建议 Atlanta
完成输入。您最多可以自动补全 100 项。
如需自动补全内容,请创建一个用于查询外部数据的函数 source 和返回项;每当用户在多选菜单中输入内容时,它便会返回相应项。通过 函数必须执行以下操作:
- 传递表示用户与菜单的互动的事件对象。
- 确定互动事件的
invokedFunction
值与externalDataSource
字段中的函数匹配。 - 当函数匹配时,从外部数据返回建议项
来源。要根据用户类型来建议商品,请获取
autocomplete_widget_query
键。该值表示用户 。
以下代码会自动填充外部数据资源中的内容。使用
例如,Chat 应用会根据
当触发 getContacts
函数时:
Apps 脚本
Node.js
验证输入到卡片的数据
本页介绍了如何验证输入到卡片的 action
的数据
和微件。
例如,您可以验证文本输入字段是否包含
或包含一定数量的字符。
设置操作所需的微件
在卡片的 action
中,
将操作所需的 widget 名称添加到其 requiredWidgets
列表中。
如果此处列出的任何微件在调用此操作时都没有值, 表单操作提交就会被取消。
为操作设置 "all_widgets_are_required": "true"
后,所有 widget
卡中的重要文件。
在多选模式下设置 all_widgets_are_required
操作
JSON
{
"sections": [
{
"header": "Select contacts",
"widgets": [
{
"selectionInput": {
"type": "MULTI_SELECT",
"label": "Selected contacts",
"name": "contacts",
"multiSelectMaxSelectedItems": 3,
"multiSelectMinQueryLength": 1,
"onChangeAction": {
"all_widgets_are_required": true
},
"items": [
{
"value": "contact-1",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 1",
"bottomText": "Contact one description",
"selected": false
},
{
"value": "contact-2",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 2",
"bottomText": "Contact two description",
"selected": false
},
{
"value": "contact-3",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 3",
"bottomText": "Contact three description",
"selected": false
},
{
"value": "contact-4",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 4",
"bottomText": "Contact four description",
"selected": false
},
{
"value": "contact-5",
"startIconUri": "https://www.gstatic.com/images/branding/product/2x/contacts_48dp.png",
"text": "Contact 5",
"bottomText": "Contact five description",
"selected": false
}
]
}
}
]
}
]
}
在 dateTimePicker 中设置 all_widgets_are_required
操作
JSON
{
"sections": [
{
"widgets": [
{
"textParagraph": {
"text": "A datetime picker widget with both date and time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_and_time",
"label": "meeting",
"type": "DATE_AND_TIME"
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just date:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_date_only",
"label": "Choose a date",
"type": "DATE_ONLY",
"onChangeAction":{
"all_widgets_are_required": true
}
}
},
{
"textParagraph": {
"text": "A datetime picker widget with just time:"
}
},
{
"divider": {}
},
{
"dateTimePicker": {
"name": "date_time_picker_time_only",
"label": "Select a time",
"type": "TIME_ONLY"
}
}
]
}
]
}
在下拉菜单中设置 all_widgets_are_required
操作
JSON
{
"sections": [
{
"header": "Section Header",
"collapsible": true,
"uncollapsibleWidgetsCount": 1,
"widgets": [
{
"selectionInput": {
"name": "location",
"label": "Select Color",
"type": "DROPDOWN",
"onChangeAction": {
"all_widgets_are_required": true
},
"items": [
{
"text": "Red",
"value": "red",
"selected": false
},
{
"text": "Green",
"value": "green",
"selected": false
},
{
"text": "White",
"value": "white",
"selected": false
},
{
"text": "Blue",
"value": "blue",
"selected": false
},
{
"text": "Black",
"value": "black",
"selected": false
}
]
}
}
]
}
]
}
为文本输入 widget 设置验证
在textInput
中
微件的验证字段,它可以指定
此文本输入 widget。
为文本输入微件设置字符数限制
JSON
{
"sections": [
{
"header": "Tell us about yourself",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "favoriteColor",
"label": "Favorite color",
"type": "SINGLE_LINE",
"validation": {"character_limit":15},
"onChangeAction":{
"all_widgets_are_required": true
}
}
}
]
}
]
}
设置文本输入 widget 的输入类型
JSON
{
"sections": [
{
"header": "Validate text inputs by input types",
"collapsible": true,
"uncollapsibleWidgetsCount": 2,
"widgets": [
{
"textInput": {
"name": "mailing_address",
"label": "Please enter a valid email address",
"type": "SINGLE_LINE",
"validation": {
"input_type": "EMAIL"
},
"onChangeAction": {
"all_widgets_are_required": true
}
}
},
{
"textInput": {
"name": "validate_integer",
"label": "Please enter a number",
"type": "SINGLE_LINE",
"validation": {
"input_type": "INTEGER"
}
}
},
{
"textInput": {
"name": "validate_float",
"label": "Please enter a number with a decimal",
"type": "SINGLE_LINE",
"validation": {
"input_type": "FLOAT"
}
}
}
]
}
]
}
问题排查
当 Google Chat 应用或 card 会返回错误, 聊天界面会显示一条内容为“出了点问题”的消息。 或“无法处理您的请求”。有时,Chat 界面 不会显示任何错误消息,但 Chat 应用或 卡片会产生意外结果;例如,卡片消息 。
虽然 Chat 界面中可能不会显示错误消息, 提供描述性错误消息和日志数据,以帮助您修正错误 启用 Chat 应用的错误日志记录时。如需观看方面的帮助, 请参阅 排查并修正 Google Chat 错误。