本頁說明如何在資訊卡或對話方塊訊息中加入小工具和 UI 元素 方便使用者與 Google Chat 應用程式互動,例如: 當使用者按下按鈕或提交資訊時
您可以使用 Card Builder 設計及預覽即時通訊應用程式的 JSON 資訊卡訊息:
開啟資訊卡建立工具必要條件
已啟用互動功能的 Google Chat 應用程式。如要建立 互動式 Chat 應用程式,請完成下列其中一個快速入門導覽課程 在要使用的應用程式架構中:
- 含有 Google Cloud Functions 的 HTTP 服務
- Google Apps Script
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
新增按鈕
ButtonList
小工具
會顯示一組按鈕按鈕可以顯示文字
圖示,或使用文字和圖示每項
Button
敬上
支援
OnClick
個動作
發生在使用者點擊按鈕時產生的狀況例如:
針對無障礙功能,按鈕支援替代文字。
新增可執行自訂函式的按鈕
以下資訊卡包含包含兩個按鈕的 ButtonList
小工具。
點選一個按鈕,即可在新分頁中開啟 Google Chat 開發人員說明文件。
其他按鈕會執行名為 goToView()
的自訂函式,並傳遞
viewType="BIRD EYE VIEW"
參數。
新增採用質感設計樣式的按鈕
以下說明在不同 Material Design 按鈕中顯示一組按鈕。 。
如要套用 Material Design 樣式,請勿加入「color」屬性。
新增自訂顏色和已停用的按鈕
您可以透過設定 "disabled": "true"
來避免使用者點選按鈕。
以下內容顯示包含兩個 ButtonList
小工具的資訊卡
按鈕。點選其中一個按鈕會用到
Color
欄位
自訂按鈕背景
顏色。另一個按鈕也會透過 Disabled
欄位停用,
防止使用者點選按鈕並執行函式。
新增有圖示的按鈕
以下內容顯示了由包含兩個圖示的 ButtonList
小工具組成的資訊卡
Button
個小工具。點選其中一個按鈕會用到
knownIcon
敬上
] 欄位顯示 Google Chat 的內建電子郵件圖示。另一個按鈕會使用
iconUrl
欄位,即可顯示
「自訂圖示小工具」。
新增含有圖示和文字的按鈕
以下內容顯示包含提示的 ButtonList
小工具的資訊卡
使用者傳送電子郵件第一個按鈕會顯示電子郵件圖示和
第二個按鈕會顯示文字。使用者可以按一下圖示或文字
執行 sendEmail
函式的按鈕。
新增溢位選單
Overflow menu
敬上
,以提供更多選項和動作。有了
提供了更多選項,而且不會影響資訊卡的介面,確保
簡潔有條的設計
新增方塊清單
ChipList
小工具能以多元且引人注目的方式顯示資訊。
使用方塊清單呈現標記、類別或其他相關資料
讓使用者更容易瀏覽您的內容並進行互動
新增可選取的 UI 元素
SelectionInput
小工具
提供了一組可選取的項目,例如核取方塊、圓形按鈕、切換按鈕
或下拉式選單您可以使用這個小工具
向使用者收集經過定義與標準化的資料。收集未定義的資料
請改為使用 TextInput
小工具。
SelectionInput
小工具支援建議功能,協助使用者輸入一致
以及變更動作
Actions
此事件會在選項輸入欄位發生變更時 (例如使用者
選取或取消選取項目。
即時通訊應用程式可以接收及處理所選項目的值。 如要進一步瞭解如何使用表單輸入功能,請參閱 處理使用者輸入的資訊。
本節提供使用 SelectionInput
小工具的資訊卡範例。
這些範例使用不同類型的區段輸入:
新增核取方塊
下圖顯示的對話方塊會要求使用者指定
可透過 SelectionInput
小工具
使用核取方塊:
新增圓形按鈕
下圖顯示的對話方塊會要求使用者指定
透過 SelectionInput
小工具使用
圓形按鈕:
新增切換鈕
下圖顯示的對話方塊會要求使用者指定
透過 SelectionInput
小工具接觸專業或私人資訊
使用外接切換裝置:
新增下拉式選單
下圖顯示的對話方塊會要求使用者指定
透過 SelectionInput
小工具使用
下拉式選單:
新增複選選單
以下將顯示一個對話方塊,要求使用者選取聯絡人 加入多選選單:
針對複選選單使用資料來源
下一節說明如何使用複選選單填入資料 從動態來源 (如 Google Workspace 應用程式或外部資料) 來源。
Google Workspace 的資料來源
您可以透過以下資料來源,為複選選單填入項目: Google Workspace:
- 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
}
}
}
}
}
}
Google Workspace 以外的資料來源
複選選單也可以填入第三方或外部資料的項目 來源。舉例來說,您可以使用複選選單,協助使用者 客戶關係管理 (CRM) 系統提供的銷售待開發客戶清單。
如要使用外部資料來源,請使用 externalDataSource
欄位
請指定從資料來源傳回項目的函式。
如要減少傳送至外部資料來源的要求次數,您可以加入
使用者輸入內容前,系統會在複選選單中顯示建議項目
。舉例來說,您可以填入最近搜尋的聯絡人
內容。如要填入外部資料來源的建議項目,請指定
SelectionItem
敬上
如需儲存大量結構化物件
建議使用 Cloud Bigtable
下方程式碼顯示
使用者的外部聯絡人群組根據預設,選單會顯示一位聯絡人
然後執行 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 個項目。
如要自動完成項目,您必須建立函式來查詢外部資料 當使用者在複選選單中打字時,傳回項目。 函式必須執行以下動作:
- 傳遞代表使用者與選單互動的事件物件。
- 找出互動事件的
invokedFunction
敬上 值與externalDataSource
欄位的函式相符。 - 函式相符時,從外部資料傳回建議項目
來源。如要根據使用者輸入的內容建議項目,請取得
autocomplete_widget_query
金鑰。這個值代表使用者輸入的內容 。
以下程式碼會自動完成外部資料資源中的項目。使用
Chat 應用程式會根據
觸發 getContacts
函式時:
Apps Script
Node.js
新增可讓使用者輸入文字的欄位
TextInput
小工具
提供可讓使用者輸入文字的欄位。
小工具支援建議功能,可讓使用者輸入統一的資料並在變更時提供建議
Actions
敬上
這個事件會在文字輸入欄位發生變更時執行,例如使用者新增或
正在刪除文字。
如果需要收集使用者的抽像或不明資料,請使用這個
「TextInput
」小工具。如要收集使用者的指定資料,請使用
SelectionInput
敬上
如要處理使用者輸入的文字,請參閱 處理使用者輸入的資訊。
以下是由 TextInput
小工具組成的資訊卡:
讓使用者選擇日期和時間
DateTimePicker
小工具
可讓使用者輸入日期、時間,或兩者同時
時間。或者,使用者也可以使用挑選器選取日期和時間。如果使用者輸入內容
日期或時間無效,挑選器會顯示錯誤訊息,提示使用者輸入內容
正確的資訊
如要處理使用者輸入的日期和時間值,請參閱 處理使用者輸入的資訊。
以下內容顯示包含三種不同類型的資訊卡
「DateTimePicker
」小工具:
驗證輸入至資訊卡的資料
本頁面說明如何驗證輸入至資訊卡 action
的資料
和小工具
舉例來說,您可以驗證文字輸入欄位是否包含
或包含特定字元數的字元,或是包含特定字元的數量。
設定動作所需的小工具
卡片的 action
中,
將動作需要的小工具名稱加入其 requiredWidgets
清單。
如果此處列出的小工具在叫用這項動作時沒有任何值, 那麼表單動作就會取消提交
如果為動作設定了 "all_widgets_are_required": "true"
,則所有小工具
執行這項操作
在複選功能中設定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
}
]
}
}
]
}
]
}
設定文字輸入小工具的驗證設定
在 textInput
小工具的驗證欄位,可以指定
文字輸入小工具
設定文字輸入小工具的字元限制
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
}
}
}
]
}
]
}
設定文字輸入小工具的輸入類型
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 UI 不會顯示任何錯誤訊息,但 Chat 應用程式或 資訊卡產生非預期的結果例如資訊卡訊息 顯示。
雖然 Chat UI 中可能不會顯示錯誤訊息, 提供描述性錯誤訊息和記錄資料,協助您修正錯誤 。如需觀看說明, 偵錯及修正錯誤,請參閱 疑難排解並修正 Google Chat 錯誤。