การประยุกต์ใช้งาน Appscript ตอบกลับ Google Form ด้วยอีเมลอัตลักษณ์

หลักการและเหตุผล
ปัจจุบันคณะได้ใช้งาน Google Form สำหรับแบบสอบถามต่างๆ ทั้งภายในคณะและ ภายนอกคณะ เนื่องจากใช้งานง่ายและไม่ซับซ้อน ไม่จำเป็นต้องมีบุคลลากรสายไอที หรือ เจ้าหน้าที่คอมพิวเตอร์เขียนโปรแกรมสร้างแบบฟอร์มให้ ก็สามารถสร้างแบบสอบถามด้วย Google Form เพื่อสอบถามข้อมูลต่าง ๆ ได้ง่าย แต่หากต้องการที่จะปรับแต่ง หรือ ต้องการที่จะเพิ่มฟังค์ชั่นต่างๆ นอกเหนือจากที่ระบบมีให้จะเป็นเรื่องยากที่จะพัฒนา ทำให้แบบฟอร์มที่สอบถาม ไม่มีความเป็น อัตลักษณ์ของคณะ จึงเกิดแนวคิดการพัฒนา ระบบตอบกลับอีเมลอัติโนมัติด้วย Google Form โดยใช้งาน Appscript
วัตถุประสงค์
- เพื่อใส่ความเป็นอัตลักษณ์ของคณะใน อีเมลที่ตอบกลับ
- ความสวยงาม
- ความเป็นมืออาชีพ
- คงความง่ายต่อการใช้งาน
กระบวนงานหรือขั้นตอนการดําเนินงาน
- สร้าง Google Form เพื่อสร้างแบบสอบถาม
- บันทึกข้อมูลลง Google Sheet
- เพิ่มคอลัมป์เพื่อเช็คว่า ตอบกลับอีเมลนี้แล้วหรือยัง ?
- ใน Google Sheet เมนู ส่วนขยาย -> Appscript เพื่อเขียนโค๊ต
- เขียนโค๊ต Javascript เพื่อตอบกลับอีเมล หลักการคือ
- เขียนฟังค์ชั่นลูป รายชื่อใน Google Sheet ทั้งหมด
- เช็คสถานะว่าส่งอีเมล์แล้วหรือยัง
- หากยังไม่ส่งให้เรียกฟังค์ชั่น โหลดข้อมูลเนื้อหา
- นำเนื้อหาที่โหลด ใส่ใน Template Email ก่อนส่งอีเมล
- เมื่อส่งอีเมลแล้วให้ปรับสถานะเป็น ส่งอีเมลแล้ว
กำหนดตัวแปล
const SpreadsheetID = "ID Sheet"; const SheetName = "Sheet Nmae"; const SheetContent = "content"; // sheet name
Function Main
function myFunction() { let ss = SpreadsheetApp.openById(SpreadsheetID); let sheet = ss.getSheetByName(SheetName); let columnToCheck = sheet.getRange("A:A").getValues(); let lastRow = getLastRowSpecial(columnToCheck); let dataRange = sheet.getRange(1,1, lastRow, sheet.getLastColumn()); let dataValues = dataRange.getValues(); let lastItem = dataValues.length - 1; // console.log(dataValues[lastItem]) if(sendEmailToUser(dataValues[lastItem])){ sheet.getRange("D"+dataValues.length).setValue('ส่งอีเมลแล้ว'); } }
Function sendEmailToUser
function sendEmailToUser(data_arr){ if(data_arr[3] !== "ส่งอีเมลแล้ว"){ let ss = SpreadsheetApp.openById(SpreadsheetID); let sheet_content = ss.getSheetByName(SheetContent); // อ้างอิง Content let data_content = sheet_content.getRange("A1:D2").getValues() console.log(data_arr) const richTextValue = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName(SheetContent) .getRange('B2') .getRichTextValue(); // แปลงเนื้อหาจาก cell เป็น HTML const runs = richTextValue.getRuns(); var htmlBody = runs.map((run) => getRunAsHtml(run)).join(''); htmlBody = htmlBody.replace(/\n/g, '<br>'); let inline_image = '' if(inline_image !== ""){ MailApp.sendEmail({ // ส่งอีเมล name:data_content[1][4], to: data_arr[1], // ดึงค่าจากช่อง อีเมล subject: data_content[1][0], // ดึงค่าจากช่อง ปัญหาที่แจ้ง htmlBody: htmlBody, // ดึงค่าจากช่อง การตอบกลับของเรา attachments: listOfFiles, inlineImages: inline_image, // noReply: true, replyTo: 'noreply.kkbs@gmail.com' }); } return true; } }
Function getRunAsHtml
const getRunAsHtml = (richTextRun) => { const richText = richTextRun.getText(); // Returns the rendered style of text in a cell. const style = richTextRun.getTextStyle(); // Returns the link URL, or null if there is no link // or if there are multiple different links. const url = richTextRun.getLinkUrl(); const styles = { color: style.getForegroundColor(), 'font-family': style.getFontFamily(), 'font-size': `${style.getFontSize()}pt`, 'font-weight': style.isBold() ? 'bold' : '', 'font-style': style.isItalic() ? 'italic' : '', 'text-decoration': style.isUnderline() ? 'underline' : '', }; // Gets whether or not the cell has strike-through. if (style.isStrikethrough()) { styles['text-decoration'] = `${styles['text-decoration']} line-through`; } const css = Object.keys(styles) .filter((attr) => styles[attr]) .map((attr) => [attr, styles[attr]].join(':')) .join(';'); const styledText = `<span style='${css}'>${richText}</span>`; return url ? `<a href='${url}'>${styledText}</a>` : styledText; };
ผลลัพธ์ที่ได้
การนําไปใช้ประโยชน์
- สามารถนำไปประยุกต์ใช้กับ Google Form ได้
ความต่อเนื่อง
empty
บทเรียนที่ได้รับ
- ความสนใจของผู้ที่ตอบกลับอีเมล
ปัจจัยความสําเร็จ
- ความเข้าถึงง่าย ใช้งานง่ายของ Google Sheet
ผู้รับผิดชอบ


ความสอดคล้อง
- การบริหารจัดการคณะด้วยเทคโนโลยี
- การพัฒนานักศึกษา
รูปแบบขององค์ความรู้
Share Practice (การแบ่งปันแนวปฏิบัติ)
กลุ่มเป้าหมาย
- บุคลากรสายสนับสนุนของคณะฯ
ระยะเวลาดำเนินงานและสถานที่
empty