คู่มือนี้อธิบายวิธีสร้างการ์ดการกำหนดค่าที่ช่วยให้ผู้ใช้ปรับแต่งและระบุข้อมูลสำหรับขั้นตอนใน Google Workspace Flows ได้
โดยทั่วไปแล้ว หากต้องการสร้างการ์ดการกำหนดค่า คุณจะต้องสร้างอินเทอร์เฟซของการ์ดเหมือนกับที่สร้างสำหรับส่วนเสริมอื่นๆ ของ Google Workspace หากต้องการความช่วยเหลือในการสร้างอินเทอร์เฟซการ์ดการกำหนดค่า โปรดดูข้อมูลต่อไปนี้
- เครื่องมือสร้างการ์ด ซึ่งเป็นเครื่องมือแบบอินเทอร์แอกทีฟที่ ช่วยคุณสร้างและกำหนดการ์ด
- การ์ดใน เอกสารประกอบข้อมูลอ้างอิงของ Google Workspace Add-ons API
- บริการการ์ด ซึ่งเป็น บริการ Apps Script ที่ช่วยให้สคริปต์กำหนดค่าและสร้าง การ์ดได้
- อินเทอร์เฟซแบบการ์ดใน เอกสารสำหรับนักพัฒนาส่วนเสริมของ Google Workspace
วิดเจ็ตการ์ดบางรายการมีฟังก์ชันและฟีเจอร์พิเศษเฉพาะ Workspace Flows ซึ่งมีรายละเอียดอยู่ในคู่มือนี้
กำหนดการ์ดการกำหนดค่า
กำหนดการ์ดการกำหนดค่าทั้งในไฟล์ Manifest ของ Apps Script และในโค้ด
ตัวอย่างต่อไปนี้แสดงวิธีสร้างการ์ดการกำหนดค่าที่ขอให้ผู้ใช้ เลือกพื้นที่ทำงาน Google Chat
แก้ไขไฟล์ Manifest
กำหนด workflowElements ในไฟล์ Manifest
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Sample add-on",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/gsuite_addons/v6/web-24dp/logo_gsuite_addons_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "actionElement",
"state": "ACTIVE",
"name": "Chat space selector",
"description": "Lets the user select a space from Google Chat",
"workflowAction": {
"inputs": [
{
"id": "chooseSpace",
"description": "Choose a Chat space",
"cardinality": "SINGLE",
"dataType": {
"basicType": "STRING"
}
}
],
"onConfigFunction": "onConfigSpacePicker",
"onExecuteFunction": "onExecuteCalculate"
}
}
]
}
}
}
แก้ไขโค้ด
ในโค้ดแอปพลิเคชัน ให้ส่งคืนการ์ด
Apps Script
/**
* Generates and displays a configuration card to choose a Chat space
*/
function onConfigSpacePicker() {
var card = {
"sections": [
{
"header": "Choose a Chat space",
"widgets": [
{
"selectionInput": {
"name": "value1",
"label": "First value",
"type": "MULTI_SELECT",
"platformDataSource": {
"hostAppDataSource": {
"workflowDataSource": {
"includeVariables": true,
"type": "SPACE"
}
}
}
}
}
]
}
]
};
return {
"action": {
"navigations": [{
"push_card": card
}]
}
};
}
ตั้งค่าการเติมข้อความอัตโนมัติสำหรับวิดเจ็ตอินพุต
คุณสามารถกำหนดค่าการเติมข้อความอัตโนมัติสำหรับวิดเจ็ต
SelectionInput เพื่อช่วยให้ผู้ใช้เลือกจากรายการตัวเลือกได้ ตัวอย่างเช่น หากผู้ใช้เริ่มพิมพ์ Atl สำหรับเมนูที่แสดงเมืองในสหรัฐอเมริกา องค์ประกอบของคุณจะสามารถแนะนำ Atlanta โดยอัตโนมัติก่อนที่ผู้ใช้จะพิมพ์เสร็จ คุณสามารถป้อนรายการอัตโนมัติได้สูงสุด 100 รายการ
คำแนะนำการเติมข้อความอัตโนมัติอาจมาจากแหล่งข้อมูลต่อไปนี้
- การเติมข้อความอัตโนมัติฝั่งเซิร์ฟเวอร์: ระบบจะป้อนคำแนะนำจากแหล่งข้อมูลของบุคคลที่สาม หรือแหล่งข้อมูลภายนอกที่คุณกำหนด
- ข้อมูล Google Workspace: ระบบจะสร้างคำแนะนำจากแหล่งที่มาของ Google Workspace เช่น ผู้ใช้ Google Workspace หรือพื้นที่ Google Chat
การเติมข้อความอัตโนมัติฝั่งเซิร์ฟเวอร์
คุณกำหนดค่าวิดเจ็ต
SelectionInputเพื่อให้คำแนะนำการเติมข้อความอัตโนมัติจากแหล่งข้อมูลภายนอก
ได้ เช่น คุณช่วยให้ผู้ใช้เลือกจากรายชื่อผู้มีโอกาสเป็นลูกค้าได้จากระบบการจัดการลูกค้าสัมพันธ์ (CRM)
หากต้องการใช้การเติมข้อความอัตโนมัติฝั่งเซิร์ฟเวอร์ คุณต้องทำดังนี้
- กำหนดแหล่งข้อมูล: ในวิดเจ็ต
SelectionInputให้เพิ่มDataSourceConfigที่ระบุRemoteDataSourceการกำหนดค่านี้ชี้ไปยังฟังก์ชัน Apps Script ที่ ดึงคำแนะนำในการเติมข้อความอัตโนมัติ - ใช้ฟังก์ชันเติมข้อความอัตโนมัติ: ฟังก์ชันนี้จะทริกเกอร์เมื่อผู้ใช้พิมพ์ในช่องป้อนข้อมูล ฟังก์ชันควรค้นหาแหล่งข้อมูลภายนอกตามข้อมูลที่ผู้ใช้ป้อนและแสดงรายการคำแนะนำ
ตัวอย่างต่อไปนี้แสดงวิธีกำหนดค่า
SelectionInput
วิดเจ็ตสำหรับการเติมข้อความอัตโนมัติฝั่งเซิร์ฟเวอร์
Apps Script
// In your onConfig function:
var multiSelect1 =
CardService.newSelectionInput()
.setFieldName("value1")
.setTitle("Server Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.addDataSourceConfig(
CardService.newDataSourceConfig()
.setRemoteDataSource(
CardService.newAction().setFunctionName('getAutocompleteResults')
)
)
.addDataSourceConfig(
CardService.newDataSourceConfig()
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
))
)
);
// ... add widget to card ...
จัดการคำขอเติมข้อความอัตโนมัติ
ฟังก์ชันที่ระบุใน
setFunctionName (เช่น getAutocompleteResults) จะได้รับออบเจ็กต์เหตุการณ์เมื่อผู้ใช้พิมพ์ในช่อง ฟังก์ชันนี้ต้องมีคุณสมบัติดังนี้
- ตรวจสอบ
event.workflow.elementUiAutocomplete.invokedFunctionเพื่อให้แน่ใจว่าตรงกับชื่อฟังก์ชันที่คาดไว้ - รับข้อมูลที่ผู้ใช้ป้อนจาก
event.workflow.elementUiAutocomplete.query - ค้นหาแหล่งข้อมูลภายนอกโดยใช้การค้นหา
- แสดงคำแนะนำได้สูงสุด 100 รายการในรูปแบบที่ต้องการ
ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชัน handleAutocompleteRequest()
เพื่อแสดงคำแนะนำตามคำค้นหาของผู้ใช้
Apps Script
function handleAutocompleteRequest(event) {
var invokedFunction = event.workflow.elementUiAutocomplete.invokedFunction;
var query = event.workflow.elementUiAutocomplete.query;
if (invokedFunction != "getAutocompleteResults" || query == undefined || query == "") {
return {};
}
// Query your data source to get results based on the query
var autocompleteResponse = [
{
"text": query + " option 1",
"value": query + "_option1",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
},
{
"text": query + " option 2",
"value": query + "_option2",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png",
"bottom_text": "subtitle of option 2"
},
{
"text": query + " option 3",
"value": query + "_option3",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
}
];
var response = {
"action": {
"modify_operations": [
{
"update_widget": {
"selection_input_widget_suggestions": {
"suggestions": autocompleteResponse
}
}
}
]
}
};
return response;
}
// In your onConfig function, handle the autocomplete event
function onConfigAutocompleteTest(event) {
// Handle autocomplete request
if (event.workflow && event.workflow.elementUiAutocomplete) {
return handleAutocompleteRequest(event);
}
// ... rest of your card building logic ...
}
การเติมข้อความอัตโนมัติของข้อมูล Google Workspace
นอกจากนี้ คุณยังป้อนคำแนะนำในการเติมข้อความอัตโนมัติจากข้อมูลภายในสภาพแวดล้อม Google Workspace ของผู้ใช้ได้ด้วย โดยทำดังนี้
- ผู้ใช้ Google Workspace: ป้อนข้อมูลผู้ใช้ภายในองค์กร Google Workspace เดียวกัน
- พื้นที่ใน Google Chat: แสดงพื้นที่ใน Google Chat ที่ผู้ใช้เป็นสมาชิก
หากต้องการกำหนดค่า ให้ตั้งค่า
PlatformDataSource
ในวิดเจ็ต
SelectionInput
โดยระบุ
WorkflowDataSourceType
เป็น USER หรือ SPACE
Apps Script
// User Autocomplete
var multiSelect2 =
CardService.newSelectionInput()
.setFieldName("value2")
.setTitle("User Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
.setType(CardService.WorkflowDataSourceType.USER)
))
);
// Chat Space Autocomplete
var multiSelect3 =
CardService.newSelectionInput()
.setFieldName("value3")
.setTitle("Chat Space Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
.setType(CardService.WorkflowDataSourceType.SPACE)
))
);
ตัวอย่าง: การรวมประเภทการเติมข้อความอัตโนมัติ
ตัวอย่างต่อไปนี้แสดงonConfigฟังก์ชันที่สร้างการ์ดที่มีวิดเจ็ต SelectionInput 3 รายการ ซึ่งแสดงการเติมข้อความอัตโนมัติฝั่งเซิร์ฟเวอร์ ผู้ใช้ และพื้นที่
Apps Script
function onConfigAutocompleteTest(event) {
// Handle autocomplete request
if (event.workflow && event.workflow.elementUiAutocomplete) {
return handleAutocompleteRequest(event);
}
// Server-side autocomplete widget
var multiSelect1 =
CardService.newSelectionInput()
.setFieldName("value1")
.setTitle("Server Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.addDataSourceConfig(
CardService.newDataSourceConfig()
.setRemoteDataSource(
CardService.newAction().setFunctionName('getAutocompleteResults')
)
)
.addDataSourceConfig(
CardService.newDataSourceConfig()
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
))
)
);
// User autocomplete widget
var multiSelect2 =
CardService.newSelectionInput()
.setFieldName("value2")
.setTitle("User Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
.setType(CardService.WorkflowDataSourceType.USER)
))
);
// Space autocomplete widget
var multiSelect3 =
CardService.newSelectionInput()
.setFieldName("value3")
.setTitle("Chat Space Autocomplete")
.setType(CardService.SelectionInputType.MULTI_SELECT)
.setMultiSelectMaxSelectedItems(3)
.setPlatformDataSource(
CardService.newPlatformDataSource()
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
.setType(CardService.WorkflowDataSourceType.SPACE)
))
);
var sectionBuilder =
CardService.newCardSection()
.addWidget(multiSelect1)
.addWidget(multiSelect2)
.addWidget(multiSelect3);
var card =
CardService.newCardBuilder()
.addSection(sectionBuilder)
.build();
return card;
}
function handleAutocompleteRequest(event) {
var invokedFunction = event.workflow.elementUiAutocomplete.invokedFunction;
var query = event.workflow.elementUiAutocomplete.query;
if (invokedFunction != "getAutocompleteResults" || query == undefined || query == "") {
return {};
}
// Query your data source to get results
var autocompleteResponse = [
{
"text": query + " option 1",
"value": query + "_option1",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
},
{
"text": query + " option 2",
"value": query + "_option2",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png",
"bottom_text": "subtitle of option 2"
},
{
"text": query + " option 3",
"value": query + "_option3",
"start_icon_uri": "https://developers.google.com/workspace/add-ons/images/person-icon.png"
}
];
var response = {
"action": {
"modify_operations": [
{
"update_widget": {
"selection_input_widget_suggestions": {
"suggestions": autocompleteResponse
}
}
}
]
}
};
return response;
}
ฟีเจอร์เฉพาะของ Workspace Flows
วิดเจ็ตการ์ดบางรายการมีฟังก์ชันและฟีเจอร์พิเศษเฉพาะ Workspace Flows ตามรายละเอียดที่ระบุไว้ที่นี่
TextInput และ SelectionInput
วิดเจ็ต TextInput และ SelectionInput มีฟีเจอร์เฉพาะของ Workspace Flows ดังนี้
includeVariables: พร็อพเพอร์ตี้บูลีนที่ให้ผู้ใช้เลือกตัวแปรจากขั้นตอนก่อนหน้าtype: ค่าที่แจงนับซึ่งเติมข้อความอัตโนมัติในคำแนะนำ ค่าที่รองรับ มีดังนี้USER: แสดงคำแนะนำการเติมข้อความอัตโนมัติสำหรับบุคคลในรายชื่อติดต่อของ ผู้ใช้SPACE: แสดงคำแนะนำในการเติมข้อความอัตโนมัติสำหรับพื้นที่ทำงานใน Google Chat ที่ผู้ใช้เป็นสมาชิก
เมื่อตั้งค่าทั้ง includeVariables และ type ช่องป้อนข้อมูลจะรวมประสบการณ์ของทั้ง 2 อย่าง
เข้าด้วยกัน ผู้ใช้สามารถเลือกตัวแปรของ type ที่ตรงกันจากเมนูแบบเลื่อนลง
และดูคำแนะนำการเติมข้อความอัตโนมัติสำหรับตัวแปรนั้นได้
-
รูปที่ 1: ผู้ใช้ตรวจสอบคำแนะนำที่เติมข้อความอัตโนมัติเมื่อเลือกพื้นที่ -
รูปที่ 2: ผู้ใช้เลือกตัวแปรเอาต์พุตของขั้นตอนก่อนหน้าจากเมนูแบบเลื่อนลง ➕ตัวแปร
ข้อควรพิจารณาและข้อจำกัดเกี่ยวกับบัตร
การนำทางการ์ด เช่น
popCard(),pushCard()และupdateCard()ไม่รองรับในส่วนเสริมที่ขยาย โฟลว์เมื่อใช้
SelectionInputในเครื่องมือเลือกตัวแปร วิดเจ็ตจะรองรับเฉพาะ"type": "MULTI_SELECT"ในส่วนอื่นๆ ของการ์ดการกำหนดค่าSelectionInputรองรับค่าทั้งหมดของSelectionType
หัวข้อที่เกี่ยวข้อง
- สร้างขั้นตอน
- ตัวแปรอินพุต
- ตรวจสอบตัวแปรอินพุต
- ตัวแปรเอาต์พุต
- บันทึกกิจกรรมและข้อผิดพลาด
- ออบเจ็กต์เหตุการณ์ของโฟลว์