ส่วนเสริมส่วนใหญ่จะกำหนดให้ผู้ใช้ป้อนข้อมูลนอกเหนือจากการแสดงข้อมูล เมื่อสร้างส่วนเสริมแบบการ์ด คุณจะใช้วิดเจ็ตแบบอินเทอร์แอกทีฟ เช่น ปุ่ม รายการเมนูแถบเครื่องมือ หรือช่องทำเครื่องหมาย เพื่อขอข้อมูลจากผู้ใช้ที่ส่วนเสริม ของคุณต้องการ หรือให้ตัวควบคุมการโต้ตอบอื่นๆ ได้
การเพิ่มการดำเนินการลงในวิดเจ็ต
โดยส่วนใหญ่แล้ว คุณจะทำให้วิดเจ็ตโต้ตอบได้ด้วยการลิงก์วิดเจ็ตกับการดำเนินการที่เฉพาะเจาะจง และใช้ลักษณะการทำงานที่จำเป็นในฟังก์ชัน การเรียกกลับ ดูรายละเอียดได้ที่การดำเนินการของส่วนเสริม
ในกรณีส่วนใหญ่ คุณสามารถทําตามขั้นตอนทั่วไปนี้เพื่อกําหนดค่าวิดเจ็ตให้ ดําเนินการที่เฉพาะเจาะจงเมื่อเลือกหรืออัปเดตได้
- สร้างออบเจ็กต์
Actionโดยระบุฟังก์ชันเรียกกลับที่จะเรียกใช้ พร้อมกับพารามิเตอร์ที่จำเป็น - ลิงก์วิดเจ็ตกับ
Actionโดยเรียกใช้ฟังก์ชันตัวแฮนเดิลวิดเจ็ตที่เหมาะสม - ใช้ฟังก์ชันเรียกกลับ เพื่อกำหนดลักษณะการทำงานที่ต้องการ
ตัวอย่าง
ตัวอย่างต่อไปนี้จะตั้งค่าปุ่มที่แสดงการแจ้งเตือนผู้ใช้
หลังจากที่คลิกแล้ว การคลิกจะทริกเกอร์notifyUser()ฟังก์ชัน Callback
พร้อมอาร์กิวเมนต์ที่ระบุข้อความการแจ้งเตือน การส่งคืนบิลด์
ActionResponse
จะทำให้มีการแสดงการแจ้งเตือน
/**
* Build a simple card with a button that sends a notification.
* @return {Card}
*/
function buildSimpleCard() {
var buttonAction = CardService.newAction()
.setFunctionName('notifyUser')
.setParameters({'notifyText': 'Button clicked!'});
var button = CardService.newTextButton()
.setText('Notify')
.setOnClickAction(buttonAction);
// ...continue creating widgets, then create a Card object
// to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Constructs a
* notification action response and returns it.
* @param {Object} e the action event object
* @return {ActionResponse}
*/
function notifyUser(e) {
var parameters = e.parameters;
var notificationText = parameters['notifyText'];
return CardService.newActionResponseBuilder()
.setNotification(CardService.newNotification()
.setText(notificationText))
.build(); // Don't forget to build the response!
}
ออกแบบการโต้ตอบที่มีประสิทธิภาพ
เมื่อออกแบบการ์ดแบบอินเทอร์แอกทีฟ โปรดคำนึงถึงสิ่งต่อไปนี้
โดยปกติแล้ววิดเจ็ตแบบอินเทอร์แอกทีฟต้องมีเมธอดตัวแฮนเดิลอย่างน้อย 1 รายการเพื่อกำหนดลักษณะการทำงาน
ใช้ฟังก์ชันตัวแฮนเดิลวิดเจ็ต
setOpenLink()เมื่อมี URL และต้องการเปิดในแท็บเท่านั้น วิธีนี้ช่วยให้ไม่ต้องกำหนดออบเจ็กต์Actionและฟังก์ชัน Callback หากคุณต้องสร้าง URL ก่อน หรือทำขั้นตอนอื่นๆ เพิ่มเติมก่อนเปิด URL ให้กำหนดActionและใช้setOnClickOpenLinkAction()แทนเมื่อใช้ฟังก์ชันตัวแฮนเดิลวิดเจ็ต
setOpenLink()หรือsetOnClickOpenLinkAction()คุณต้องระบุออบเจ็กต์OpenLinkเพื่อกำหนด URL ที่จะเปิด นอกจากนี้ คุณยังใช้ออบเจ็กต์นี้ เพื่อระบุลักษณะการเปิดและปิดได้โดยใช้ enumOpenAsและOnCloseวิดเจ็ตมากกว่า 1 รายการสามารถใช้ออบเจ็กต์
Actionเดียวกันได้ อย่างไรก็ตาม คุณต้องกำหนดออบเจ็กต์Actionที่แตกต่างกันหากต้องการระบุพารามิเตอร์ที่แตกต่างกันสำหรับฟังก์ชัน Callbackทำให้ฟังก์ชันเรียกกลับเรียบง่าย บริการการ์ดจะจำกัดฟังก์ชันเรียกกลับให้มีเวลาดำเนินการสูงสุด 30 วินาที เพื่อให้ส่วนเสริมตอบสนองได้ หากการดำเนินการใช้เวลานานกว่านั้น UI ของส่วนเสริมอาจ อัปเดตการแสดงการ์ดอย่างไม่ถูกต้องเพื่อตอบสนองต่อ
Actionหากสถานะข้อมูลในแบ็กเอนด์ของบุคคลที่สามเปลี่ยนแปลงอันเป็นผลมาจากการโต้ตอบของผู้ใช้กับ UI ของส่วนเสริม เราขอแนะนำให้ส่วนเสริมตั้งค่าบิต "state changed" เป็น
trueเพื่อให้ระบบล้างแคชฝั่งไคลเอ็นต์ที่มีอยู่ ดูรายละเอียดเพิ่มเติมได้ที่คำอธิบายเมธอดActionResponseBuilder.setStateChanged()