- ปิด Google Sheets : GASWS1
- เมนู Tools > Script Editor…
- เมนู File > New > Script File
ตั้งชื่อ: myscript6 - สร้าง function MailMerge4() ตามนี้
function MailMerge4() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Salary")), TemplateID='1bjpQnJikYMGYNaJQhetpZpkHyjI7iqBqDufprzMSo4k', header = "A1:G1", data="A2:G6", dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), emailaddress= "", subject = "", docUrl = ""; for (var i=0 ; i < dataRows.length ; i++) { emailText=""; subject = "[ลับ] กองคลัง : แจ้งการโอนเงินให้คุณ " + dataRows[i][0] + " " + dataRows[i][1]; var id =DriveApp.getFileById(TemplateID).makeCopy(subject).getId(), doc=DocumentApp.openById(id), docBody=doc.getBody(); for (var j = 0 ; j < numColumns -1 ; j++) { docBody.replaceText('{' + headerRow[0][j] + '}' , dataRows[i][j]); } emailaddress=dataRows[i][2]; doc.addViewer( emailaddress); docUrl=doc.getUrl(); doc.saveAndClose(); var attachment = DocumentApp.openById(id); MailApp.sendEmail( emailaddress, subject , "เปิดอ่านเอกสารลับได้ที่ \n" + docUrl ); try { dataRows[i][numColumns-1] = new Date(); } catch (e) { dataRows[i][numColumns-1] = e.message; } } SalarySheet.getRange(data).setValues(dataRows); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > MailMerge4
- สร้าง function MailMerge5() ตามนี้
function MailMerge5() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Salary")), TemplateID='1WzzAwF5cDtQD0kcrLKRdP0ZO6-6MCqc_VXRUxzgq_gI', header = "A1:H1", data="A2:H6", dataRows = SalarySheet.getRange(data).getValues(), headerRow = SalarySheet.getRange(header).getValues(), numColumns = SalarySheet.getRange(header).getNumColumns(), emailaddress= "", subject = "", docUrl = ""; for (var i=0 ; i < dataRows.length ; i++) { emailText=""; subject = "[ลับสุดยอดดดดด] กองคลัง : แจ้งเอกสารลับให้คุณ " + dataRows[i][0] + " " + dataRows[i][1]; var id =DriveApp.getFileById(TemplateID).makeCopy(subject).getId(), doc=DocumentApp.openById(id), docBody=doc.getBody(); for (var j = 0 ; j < numColumns -1 ; j++) { docBody.replaceText('{' + headerRow[0][j] + '}' , dataRows[i][j]); } emailaddress=dataRows[i][2]; doc.addViewer( emailaddress); docUrl=doc.getUrl(); doc.saveAndClose(); var now = new Date(); MailApp.sendEmail( emailaddress, subject , "เปิดอ่านเอกสารลับสุดยอดได้ที่ \n" + docUrl ); try { dataRows[i][numColumns-2] = id; dataRows[i][numColumns-1] = now; } catch (e) { dataRows[i][numColumns-1] = e.message; } } SalarySheet.getRange(data).setValues(dataRows); ScriptApp.newTrigger('destroySecretDocument') .timeBased() .after(2 * 60 * 1000) .create(); }
- สร้าง function destroySecretDocument() ตามนี้
function destroySecretDocument() { var ss = SpreadsheetApp.getActiveSpreadsheet(), SalarySheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Salary")), DataRange=SalarySheet.getDataRange().getValues(); for(var i=1; i< DataRange.length; i++){ var id=DataRange[i][6]; var emailAddress=DataRange[i][2]; DocumentApp.openById(id).removeEditor(emailAddress); DriveApp.removeFile(DriveApp.getFileById(id)); } }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
เมนู Run > MailMerge5
Category: Automation System
-
การส่งไฟล์แบบ Top Secret!
-
วิธีกู้ไฟล์ที่ถูก Ransomware จับไปเรียกค่าไถ่
Ransomware หรือ โปรแกรมเรียกค่าไถ่ไฟล์ต่างๆ โดยการเข้ารหัสไฟล์เหล่านั้น ทำให้ไม่สามารถเปิดใช้งานได้อีก นอกจากจะยอมเสียค่าไถ่ให้กับผู้ร้ายด้วยเงินสกุล Bitcoin โปรแกรมเหล่านี้จะมาจากการติดตั้ง หรือถูกหลอกให้ติดตั้ง ผ่านทางเว็บไซต์ “อโคจร” ต่างๆ Software เถื่อน ละเมิดลิขสิทธิ์ทั้งหลาย และที่มีบ่อยมากคือ มาจาก “จดหมายหลอกลวง (Phishing)” ซึ่งทำให้ติดเชื้อได้อย่างง่ายดาย
ข้อมูลเพิ่มเติม
https://www.thaicert.or.th/alerts/user/2015/al2015us001.html
เมื่อติด หรือ โดนเรียกค่าไถ่ เรียกได้ว่า ยากมากหรือแทบเป็นไปไม่ได้ที่จะกู้คืนโดยการ Decrypt หรือถอดรหัสกลับคืน
มีวิธีการเดียวที่ทำได้เลยคือ “กู้คืนจากไฟล์สำรองไว้” บนระบบปฏิบัติการ Microsoft Windows เอง ก็สามารถทำได้ โดยผู้ใช้จะต้อง “ตั้งค่าการสำรองข้อมูล” ไว้ก่อน จึงจะสามารถกู้คืนได้ แต่หากเครื่องคอมพิวเตอร์เครื่องนั้นเสียหาย ก็จะไม่สามารถกู้คืนได้อีกเลย
แต่ยังมีวิธีการ “สำรองและกู้คืน” ที่ง่าย ปลอดภัย และแม้ว่าเครื่องคอมพิวเตอร์จะเสียหายอย่างไร ก็จะสามารถ “กู้คืนข้อมูลได้” นั่นคือการใช้งาน Google Drive ในการสำรองข้อมูล โดยผู้ที่มี Google Account หรือ Gmail สามารถใช้งานได้ทันที โดยมีพื้นที่ให้ 15 GB (รวมกับการเก็บ email) ส่วนผู้ใช้ในมหาวิทยาลัยสงขลานคริทนร์ จะได้ใช้ Google Apps for Education ซึ่งมีพื้นที่ในการจัดเก็บ “Unlimited” หรือไม่มีขีดจำกัดเลยทีเดียว (เบื้องต้นจะเห็นพื้นที่จัดเก็บ 10 TB — 10,000 GB)
Google Drive เป็นพื้นที่จัดเก็บข้อมูลบนก้อนเมฆ หรือ Cloud Storage ผู้ใช้ของ Google Account สามารถเข้าถึงได้ที่ https://drive.google.com เมื่อทำการลงชื่อเข้าใช้งาน (Sign In) แล้วก็จะสามารถมองเห็นข้อมูลบนระบบ สามารถสร้าง Folder และ Upload ไฟล์ขึ้นไปเก็บได้ และสามารถเข้าถึงได้จากทั้ง เครื่องคอมพิวเตอร์ และ Smartphone ได้จากทุกแห่งทั่วโลก ดังภาพที่ 1 (โดยต้องมีระบบ Internet เข้าถึงนะ)
ภาพที่ 1: Google Drive บนระบบ Google Apps for Education ของมหาวิทยาลัยสงขลานครินทร์
ในที่นี้ จะแสดงวิธีการ สร้างโฟล์เดอร์ชื่อว่า “เอกสารสำคัญ” ไว้บน Google Drive เพื่อใช้ในการสำรองไฟล์สำคัญไว้ ขั้นตอนคือ คลิกที่ New > Folder แล้วตั้งชื่อว่า “เอกสารสำคัญ” แล้วคลิกปุ่ม Create ดังภาพที่ 2
ภาพที่ 2: สร้างโฟล์เดอร์ชื่อว่า “เอกสารสำคัญ” ไว้บน Google Drive
ส่วนการทำงานเพื่อ Backup ข้อมูลบนเครื่องคอมพิวเตอร์ไปเก็บไว้บนระบบ Google Drive อัตโนมัติ ทำได้โดยติดตั้งโปรแกรม “Google Drive” บนเครื่องคอมพิวเตอร์ แล้วตั้งค่าให้ Sync ข้อมูลกับโฟลเดอร์ “MyGoogleDrive” ใน My Documents ของเครื่องคอมพิวเตอร์ ดังวิธีการต่อไปนี้
- Google Drive สามารถดาว์นโหลดได้จาก https://www.google.com/drive/download/
- เมื่อติดตั้งเรียบร้อยแล้วให้ลงชื่อเข้าใช้ และคลิก Next ไปเรื่อยๆ ดังภาพที่ 3
ภาพที่ 3: คลิก “ถัดไป” จนถึงหน้าจอสุดท้าย - หน้าจอสุดท้าย คลิก “การตั้งค่าขั้นสูง” ดังภาพที่ 4
ภาพที่ 4: คลิก “การตั้งค่าขั้นสูง” - คลิก “เปลี่ยน” แล้วสร้าง MyGoogleDrive ไว้ใน My Documents ดังภาพที่ 5
ภาพที่ 5: สร้าง MyGoogleDrive ไว้ใน My Documents - ต่อไป เลือก “เลือกเฉพาะโฟล์เดอร์เหล่านี้” แล้ว เอาเฉพาะ “เอกสารสำคัญ” แล้วคลิก “เริ่มการซิงค์” ดังภาพที่ 6
ภาพที่ 5: เลือกเฉพาะ “เอกสารสำคัญ” - สักครู่ระบบก็จะทำการ Sync เมื่อเสร็จสิ้น จะได้ผลดังภาพที่ 6
ภาพที่ 6: Sync “เอกสารสำคัญ” เสร็จแล้ว
ให้นำเอกสารสำคัญต่างๆมาใส่ไว้ใน “เอกสารสำคัญนี้” ระบบก็จะทำการ Sync ขึ้นไปบน Google Drive แล้ว และ การแก้ไขเปลี่ยนแปลงไฟล์ในโฟล์เดอร์นี้ จะถูกสำรองเอาไว้
ต่อไป มาดูกันว่า เมื่อมีการแก้ไขไฟล์เอกสารชื่อ “doc1.docx” ระบบ Google Drive จะสำรองข้อมูลเอาไว้ให้ตลอด และสามารถกู้คืนรุ่นของเอกสารได้ ดังภาพที่ 7
ภาพที่ 7: แสดงเวลากับการแก้ไขข้อความ
สิ่งที่ Google Drive สำรองไว้ให้ สามารถดูได้จากการ คลิกขวาที่ไฟล์นั้นๆ แล้วเลือก “Manage Version” ดังภาพที่ 8
ภาพที่ 8: การเลือก Manage Versions
จากนั้น สามารถหากต้องการย้อนเวลา ไปเอาไฟล์นี้ ขณะที่ยังมีข้อความและรูปภาพ ก็คลิกที่เวลา 14:56 แล้วเลือก Download ออกมาทับไฟล์เดิม หรือ เก็บไว้ที่อื่นบนเครื่องคอมพิวเตอร์ก็ได้ ดังภาพที่ 9
ภาพที่ 9: เลือก Version 2 ที่บันทึกเมื่อเวลา 14:56 แล้ว download ไฟล์ออกมา
ผลที่ได้คือ ไฟล์เดิมที่มีข้อความและภาพ ที่บันทึกเมื่อเวลา 14:56 ดังภาพที่่ 10
ภาพที่ 10: ไฟล์ที่ถูกแก้ไขไปแล้ว ก็สามารถกู้กลับมาได้
ในกรณีที่ไฟล์นี้ ถูก “ลบ” ทิ้ง ไม่ว่าจะโดยตั้งใจ หรือ ถูก Ransomware ลบทิ้งแล้วเหลือไว้แต่ไฟล์ที่เปิดไม่ได้ก็ตาม ดังภาพที่ 11 ก็สามารถกู้กลับมาได้
ภาพที่ 11: ไฟล์ doc1.docx ถูกลบหายไปจาก “เอกสารสำคัญ” บนเครื่องคอมพิวเตอร์แล้ว
การกู้ไฟล์ที่ถูกลบไปแล้ว ต้องทำจากบน Google Drive ผ่านทางเว็บเบราเซอร์ โดยเข้าไปใน “เอกสารสำคัญ” แล้วคลิกตัว i ด้านขวามือบน แล้วคลิกที่คำว่า Activity จะพบว่า มีการลบ หรือจริงๆแล้วคือการย้ายไฟล์ไปลง Bin นั่นเอง ดังภาพที่ 12
ภาพที่ 12: แสดงให้เห็นว่าไฟล์ที่ถูกลบ ไปเก็บอยู่ใน Bin ของ Google Drive
การกู้ไฟล์นี้คืนมา ก็เพียงคลิกที่ชื่อไฟล์ doc1.docx แล้วคลิกรูปแว่นขยาย จากนั้นระบบจะนำไปสู่ Bin หลังจากนั้น ให้คลิกขวาที่ doc1.docx แล้วเลือก Restore ตามภาพที่ 13:
ภาพที่ 13: วิธีการ Restore ไฟล์ doc1.docx
ผลก็คือ ได้ไฟล์ที่ถูกลบทิ้งกลับคืนมา ดังภาพที่ 14
ภาพที่ 14: การกู้ไฟล์เสร็จสมบูรณ์
หวังว่าจะเป็นประโยชน์ครับ
-
Shell Script : Grouping and Summation
มี Log ขนาดใหญ่ แล้ว ต้องการจะวิเคราะห์ข้อมูลของนาทีที่ผ่านมา เลือกเฉพาะรูปแบบที่ต้องการด้วยคำสั่ง
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'
ได้ผลมาประมาณนี้
ต้องการเอาข้อมูล X และ Y จากรูปแบบนี้ from=<X> และ nrcpt=Y ใช้ความรู้จาก Shell Script: Extract exact pattern from string ใช้คำสั่งต่อไปนี้
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p'
ได้ผลมาประมาณนี้
ต้องการจับกลุ่มตาม คอลัมน์ที่ 1 แล้วหาผลรวมของคอลัมน์ที่ 2 ในแต่ละกลุ่ม ใช้คำสั่ง
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p' | awk 'BEGIN{FS=OFS=":"}{a[$1]+=$2}END{ for (i in a) print i,a[i]}'
ได้ผลดังนี้
Reference:
http://unix.stackexchange.com/questions/169215/group-by-and-sum-in-shell-script-without-awk
-
Shell Script : Extract exact pattern from string
มี string ดังนี้ ในตัวแปร line
line=’Apr 18 06:04:57 webmail squirrelmail: Message sent via webmail: by username.s (psu.ac.th) at 41.203.69.5 on 04/17/2015 23:04:57: Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th Total 9 recipients Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th’
ต้องการค่าที่อยู่ระหว่าง Total … recipients
ใช้คำสั่งนี้
total=$(echo $line | sed -n ‘s/.*Total \([[:digit:]]*\) recipients.*/\1/p’)
ตัวแปร $total จะมีค่า 9 ตามที่ต้องการ
อธิบาย
คำสั่ง
sed -n ‘s/PATTERN/&/p’
จะแสดงข้อความที่ตรงกับ Pattern เท่านั้น ไม่แสดงข้อความอย่างอื่่นReference:
http://www.grymoire.com/Unix/Sed.html#uh-15 -
วิธีใช้ Google Sheets เปลี่ยนแปลงข้อมูลผู้ใช้จำนวนมากบน GAFE
[บทความนี้ สำหรับผู้ที่มี Admin Privilege ขึ้นไป]
วิธีใช้ Google Sheets สร้าง Account ใหม่ลงใน Sub Organization ของ GAFE
เมื่อต้องการแก้ไขข้อมูลของผู้ใช้จำนวนมาก ได้แก่
- ตั้งรหัสผ่านใหม่
- ไม่บังคับให้เปลี่ยนรหัสผ่านในครั้งแรกที่เข้าระบบ
- ย้าย Organization Unit ไปอยู่ภายใต้ /Students
ใน Admin Console ของ Google Apps จะมีเครื่องมือ Users เพื่อใช้ในการจัดการผู้ใช้
แต่เครื่องมือที่มีอยู่ มีข้อจำกัด คือ ไม่สามารถเขียนเงื่อนไขในการกรองเอาเฉพาะ Email Address ของผู้ใช้ที่ต้องการได้
ดังนั้นจึงต้องใช้วิธีการ Download Users ทั้งหมดออกมาก่อน
เลือก Download all users … แล้วกดปุ่ม OK
จะได้ไฟล์ UserData-psu.ac.th-20141110.csv (ชื่ออาจจะแตกต่างกันไปในแต่ละโดเมน) ให้ Save ไว้ในเครื่องคอมพิวเตอร์ก่อน แล้ว Upload ไปเก็บไว้บน Google Drive แล้วเปิดด้วย Google Sheets จากนั้นเลือกคอลัมน์ A แล้วคลิกขวาเลือก Copy ไปใส่ใน Google Sheets ใหม่
ใน Google Sheets ใหม่ ให้ Edit > Paste ข้อมูลมาลงไว้ในคอลัมน์ A เช่นกัน
จากนั้นในคอลัมน์ B2 ใส่สูตรว่า (นักศึกษาของมหาวิทยาลัยจะใช้ Login เป็นรหัสนักศึกษาซึ่งเป็นตัวเลขทั้งหมด จำนวน 7 หรือ 10 หลัก ตามด้วย @psu.ac.th) ดังนี้
)
จากนั้นให้ Copy สูตรดังกล่าวไปในคอลัมน์ B ทั้งหมด จะทำให้ ชื่อบัญชีของนักศึกษาเท่านั้นที่จะมีค่าเป็น Y ส่วนบุคลากรจะมีค่าเป็น N หลังจากนั้นให้ Filter โดยเลือกเฉพาะคอลัมน์ B ที่มีค่าเป็น Y ก็จะได้นักศึกษาทั้งหมด
แล้วทำการเลือกข้อมูลที่ได้ Copy เอาไว้แล้วสร้าง Google Sheets ใหม่อีกอันหนึ่ง ตั้งชื่อว่า Udate Users แล้วเอาข้อมูลดังกล่าวมาใส่ในคอลัมน์ A จากนั้นสร้าง B เป็น Organization Unit Path ที่ต้องการ แล้วสร้าง C เป็น Password ที่ต้องการตั้ง และ D เป็น Status
ต่อไป เป็นขั้นตอนการเขียน Google Apps Script
- สร้าง Google Apps Scripts ใน Google Sheets นี้ ด้วยเมนู Tools > Script Editor … จากนั้นเลือก Blank Project แล้วกดปุ่ม Close
- ตั้งชื่อโปรเจค UpdateUser แล้วใส่โค๊ดดังนี้ (ปรับค่า firstRow และ lastRow ให้เหมาะสมตามต้องการ)
- ถ้าลอง Run เลย จะเจอ Error อย่างนี้
คลิก Continue -> Accept -> Dismiss
เพราะยังไม่ได้ Enable API ไว้
- เนื่องจากการสร้าง Account ต้องใช้สิทธิ์ของ Admin ขึ้นไป และต้องใช้ Admin SDK Directory API ด้วย วิธีการคือใช้เมนู Resources -> Advanced Google Services แล้วเลือก Admin Directory API เป็น On
- จากนั้นคลิกที่ Google Developers Consol
ที่ Admin SDK ให้เปลี่ยน ON
- เมื่อ Run ใหม่ ก็จะได้ผลใน Google Sheets ตามภาพ
- ผลที่ได้คือสามารถย้ายนักศึกษาลงไปใน OU ที่เหมาะสมได้
หวังว่าจะเป็นประโยชน์ครับ
-
วิธีใช้ Google Sheets สร้าง Account ใหม่ลงใน Sub Organization ของ GAFE
[บทความนี้ สำหรับผู้ที่มี GAFE Admin Privilege ขึ้นไป]
ในการสร้างบัญชีผู้ใช้ใหม่บน GAFE นั้นทำได้หลายวิธี ได้แก่
- การสร้างทีละคนผ่าน Admin Console
- การสร้างทีละหลายๆคนด้วย CSV File
- การสร้างทีละหลายๆคนผ่าน Google Apps Directory Sync
เมื่อต้องการสร้างผู้ใช้จำนวนมาก เช่น 5,500 คน โดยต้องจัดแบ่งผู้ใช้ แยกลงไปในแต่ละ Sub Organization วิธีที่ 1. ทำได้แต่เป็นงานที่หนักมาก วิธีที่ 2. ทำไม่ได้ เพราะการใช้ CSV File ผ่าน Admin Console นั้นจะสร้างผู้ใช้รวมกันที่ Root Organization ไม่สามารถแยกลงไปใน Sub Organization ได้ ส่วนวิธีที่ 3. นั้นทำได้ แต่ต้องเข้าใจกระบวนการทำงานของ LDAP พอสมควร
ในบทความนี้ จะนำเสนอวิธีการที่ ทำได้ง่ายเหมือนการใช้ CSV แต่สามารถแยกลงไปใน Sub Organization ได้ ด้วย Google Sheets และ Google Apps Script ดังต่อไปนี้ (ขอยกตัวอย่างเพียง 5 Account เพื่อความสะดวก)
- สร้าง Google Sheets แล้วใส่ข้อมูล email, firstname, lastname, OU, password, status
- สร้าง Google Apps Scripts ใน Google Sheets นี้ ด้วยเมนู Tools > Script Editor … จากนั้นเลือก Blank Project แล้วกดปุ่ม Close
- ตั้งชื่อโปรเจค AddMultiAccountToSubOU แล้วใส่โค๊ดดังนี้
- ถ้าลอง Run เลย จะเจอ Error อย่างนี้
คลิก Continue -> Accept -> Dismiss
เพราะยังงไม่ได้ Enable API ไว้
- เนื่องจากการสร้าง Account ต้องใช้สิทธิ์ของ Admin ขึ้นไป และต้องใช้ Admin SDK Directory API ด้วย วิธีการคือใช้เมนู Resources -> Advanced Google Services แล้วเลือก Admin Directory API เป็น On
- จากนั้นคลิกที่ Google Developers Consol
ที่ Admin SDK ให้เปลี่ยน ON
- เมื่อ Run ใหม่ ก็จะได้ผลใน Google Sheets ตามภาพ
- และจะสามารถสร้างผู้ใช้ได้ตาม Sub Organization ที่ต้องการ
หวังว่าจะเป็นประโยชน์ครับ
-
วิธีการใช้ Google Sheets เป็นระบบเฝ้าระวังเว็บไซต์ (Website Monitoring) จากภายนอกองค์กร
ในการเฝ้าระวังบริการเว็บไซต์ขององค์กร (Website Monitoring) ผู้ดูแลระบบมักจะจัดทำจากภายในระบบเครือข่ายขององค์กร แต่ไม่ได้เฝ้าระวังจากภายนอกระบบเครือข่ายขององค์กร ทำให้ไม่ทราบว่าภายนอกสามารถเข้าถึงเว็บไซต์ดังกล่าวได้หรือไม่จาก “วิธีการใช้ Google Sheets เป็นฐานข้อมูล” ซึ่งได้กล่าวถึงพื้นฐานการพัฒนา Google Apps Script เพื่อใช้ต่อยอดความสามารถของ Google Sheets สามารถนำมาประยุกต์ใช้เพื่อเฝ้าระวังบริการเว็บไซต์จากภายนอกระบบเครือข่ายขององค์กรได้ (จาก Google Cloud Infrastructure เลยทีเดียว)
ขั้นตอนในการทำ
- ในโปรเจค ProjectMyDB สร้างไฟล์ monitoring.gs ดังภาพ
- ประกอบด้วย 3 ฟังก์ชัน คือ
function check_website(url) { var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); return response.getResponseCode(); } function doLog(timestamp, responseCode, timeDiff) { var ss = SpreadsheetApp.openByUrl('https://docs.google.com/a/psu.ac.th/spreadsheets/d/1HJmyqiBYC_AEATmdUWakLgHFyYGqSqeqSA8xEw-8o-c/edit'); SpreadsheetApp.setActiveSpreadsheet(ss); SpreadsheetApp.setActiveSheet(ss.getSheetByName("Log")); var activeSheet=ss.getActiveSheet(); activeSheet.appendRow([timestamp, responseCode, timeDiff]); } function getTime() { var startTime = new Date() ; var responseCode=check_website("http://www.psu.ac.th"); var endTime = new Date() ; var timeDiff = endTime-startTime; doLog(Utilities.formatDate(new Date(), "GMT+7", "yyyyMMdd-HHmmss") , responseCode , timeDiff); }
- check_website ใช้ UrlFetchApp เพื่อ url ของเว็บไซต์ แล้วรีเทิร์นผล Response Code ของ HTTP Protocol กลับไป
- doLog ใช้สำหรับเพิ่มค่า timestamp, responseCode และ timeDiff (เวลาในการตอบสนอง) ลงใน Sheet “Log” ใน Google Sheets ที่กำหนดไว้
- getTime ใช้คำนวนเวลาตั้งแต่เริ่มต้น แล้วเรียกใช้ฟังก์ชั่น check_website และ จับเวลาที่สิ้นสุด จากนั้นคำนวนเป็นเวลาในการตอบสนอง (timeDiff) แล้ว เรียกฟังก์ขัน doLog เพื่อเขียนข้อมูลต่อไป
- สร้าง Trigger ด้วยเมนู Resources > Current project’s triggers
- เลือกฟังก์ชัน getTime กำหนดเป็น Time-driven ทำงานในหน่วยนาที (Minute timmer) และ ทำงานทุกๆ 5 นาที แล้วกดปุ่ม Save
- ผลการทำงาน และการสร้าง Chart ประกอบทำให้สามารถเห็นแนวโน้มได้
จากตัวอย่างข้างต้น ทำให้เห็นว่า การใช้ Google Apps Script ร่วมกับ Google Sheet สามารถสร้างระบบเฝ้าระวังเว็บไซต์จากภายนอกองค์กรได้อย่างง่ายๆ และไม่มีค่าใช้จ่าย ทำให้เห็นภาพการใช้งานจากภายนอกได้เป็นอย่างดี
- ในโปรเจค ProjectMyDB สร้างไฟล์ monitoring.gs ดังภาพ
-
สร้างแบบฟอร์มลงทะเบียนออนไลน์ด้วย Google Form ให้ปิดการลงทะเบียนแบบอัตโนมัติเมื่อครบตามจำนวนที่ต้องการ
อีกหนึ่งปัญหาของการใช้งาน Google Form เพื่อสร้างแบบฟอร์มลงทะเบียนออนไลน์ ที่ผมได้เจอมากับตัวเองคือ ไม่สามารถจำกัดจำนวนผู้ที่มาลงทะเบียนแบบออนไลน์ได้ ทั้ง ๆ ที่การจัดอบรม/สัมมนาต่าง ๆ เราประกาศว่า “รับจำนวนจำกัด” จึงเป็นที่มาของการหาคำตอบในครั้งนี้ครับ ว่า…
“ทำอย่างไร ให้แบบฟอร์มลงทะเบียนออนไลน์ (Google Form)
สามารถปิดการลงทะเบียนได้
เมื่อมีผู้สมัครครบตามจำนวนที่ต้องการ ?”
** หมายเหตุ **
การใช้ Script : formLimiter v.1.0.2 นี้ จะสามารถใช้ได้กับ Google Spreadsheets “เวอร์ชั่นเก่า” เท่านั้นครับ เวอร์ชั่นปัจจุบัน ไม่สามารถใช้งานได้ เนื่องจาก Google ได้มีการเปลี่ยนแปลงการใช้งานของ Script ใหม่จาก Script Gallery ไปเป็น Add-ons ครับ
Script Gallery ==> Add-ons
ซึ่ง formLimitter นั้น ผู้พัฒนายังไม่ได้พัฒนาเข้าไปอยู่ใน Add-ons จึงทำให้หลาย ๆ ท่าน ที่สร้าง Google Spreadsheets ด้วยเวอร์ชั่นปัจจุบัน ไม่สามารถใช้งาน Script อันนี้ได้ครับ
ดังนั้น หากผู้ใช้งาน ต้องการใช้ Script ดังกล่าว แนะนำว่าให้สร้าง Google Spreadsheets ด้วยเวอร์ชั่นเก่า นะครับ สามารถเข้าไปสร้างผ่านลิงค์ด้านล่างนี้ได้เลยครับผม
goo.gl/pprjA5
1. ไปที่มุมมองของ View responses
จากนั้น คลิกเมนู Tools > เลือก Script gallery…
แล้วค้นหา Script ที่ชื่อว่า “formLimiter” ในช่อง Search แล้วคลิกปุ่ม Search
เมื่อปรากฎ “formLimiter v.1.0.2” ให้ดำเนินการติดตั้ง โดยคลิกปุ่ม Installคลิกปุ่ม Continue > ปุ่ม Accept > และปุ่ม Close เป็นอันเสร็จเรียบร้อย
2. จะเห็นว่ามีเมนูที่ชื่อว่า formLimiter ปรากฎเพิ่มขึ้นมาใหม่
จากนั้นให้ คลิกเมนู formLimiter > เลือก Run initial configuration เพื่อเปิดการใช้งาน Script
เมื่อเปิดการใช้งานเรียบร้อย เมนูย่อยจะเปลี่ยนไปดังภาพด้านล่าง ให้ คลิกเลือก Settings
3. ในส่วนนี้จะเป็นการกำหนดเงื่อนไขของการ “ปิดแบบฟอร์มการลงทะเบียนออนไลน์”
ซึ่งจะมีด้วยกัน 3 เงื่อนไขให้เลือกใช้ ดังนี้
3.1 date and time – ใช้ในกรณีที่กำหนดให้ปิดการลงทะเบียนเป็นช่วงของเวลา โดยไม่จำกัดจำนวนผู้สมัคร
3.2 max number of form response – ใช้ในกรณีที่ต้องการรับผู้สมัครแบบจำกัดจำนวน
3.3 spreadsheet cell value – ใช้ตรวจสอบเงื่อนไขตามค่าของข้อมูลใน cell
จะปิดการลงทะเบียนเมื่อข้อมูลใน cell ตรงกับค่าที่ได้กำหนดไว้
ในส่วนนี้ผมขอให้เลือกเป็น spreadsheet cell value นะครับ
โดยให้กำหนดเงื่อนไขในลักษณะดังนี้ช่องแรก ให้ระบุ Cell ที่ใช้เป็น “Sheet2!A1” และ
ช่องสอง ให้ระบุจำนวนที่ต้องการรับลงทะเบียน (ในที่นี้ผมกำหนดรับที่ 50 คน)
แนะนำว่า ให้นำเครื่องหมายถูกออก เนื่องจากระบบจะทำการส่งเมลทุกครั้งที่มีการลงทะเบียน
อาจทำให้เกิดอีเมลขยะจากการแจ้งเตือนเป็นจำนวนมากได้ (กรณีที่รับผู้สมัครจำนวนมาก)จากนั้น คลิกปุ่ม Save settings เป็นอันเสร็จสิ้น
4. ขณะนี้เรายังอยู่ในหน้าของ View response
ให้ทำการสร้าง “Sheet2” เพิ่มขึ้นอีกหนึ่ง เพื่อใช้ในการนับจำนวนผู้สมัคร (ดังภาพ)
โดยให้กำหนดเงื่อนไขใน Cell A1 ดังนี้=COUNTUNIQUE('Form Responses'!B2:B1000)
ในส่วนนี้จะเป็นการแก้ปัญหา กรณีที่ผู้สมัครลงทะเบียนซ้ำหลาย ๆ ครั้ง (ซึ่งมีอยู่บ่อยครั้ง)
เงื่อนไขนี้จะทำการนับจำนวนจากชื่อ-นามสกุลของผู้สมัคร หากซ้ำกันจะนับเป็น 1 คน
(*ยกเว้นในกรณีที่ผู้ลงทะเบียน พิมพ์ชื่อ-นามสกุลในแต่ละครั้ง ไม่เหมือนกัน)
เมื่อครบตามจำนวนที่กำหนดไว้ ระบบจะทำการปิดแบบฟอร์มลงทะเบียนโดยอัตโนมัติ
5. จากนั้นให้กลับมาที่มุมมองของ Edit questions ซึ่งเป็นหน้าเริ่มต้นของการสร้างแบบฟอร์ม
คลิกที่เมนู Response > เลือก Accepting responses
จากนั้นจะปรากฎ กล่อง This form has been turned off. ขึ้นมาให้
ซึ่งกล่องนี้จะปรากฎขึ้น เมื่อมีผู้สมัครลงทะเบียนครบตามจำนวนที่ได้กำหนดไว้
ดังนั้น ให้กำหนดข้อความแสดงการ “ปิดรับการลงทะเบียน” เพื่อแจ้งให้ผู้สนใจได้รับทราบ
ดังตัวอย่างข้อความในภาพ
เมื่อกำหนดข้อความดังกล่าวเสร็จเรียบร้อยแล้ว
ให้กลับไปคลิกที่เมนู Response > เลือก Accepting responses อีกครั้ง
เพื่อปิดกล่องดังกล่าว (หากไม่ปิด หน้าแบบฟอร์มลงทะเบียนจะมีลักษณะดังภาพด้านล่าง)
และทำให้ผู้สมัคร ไม่สามารถลงทะเบียนออนไลน์ได้ลักษณะของหน้าแบบฟอร์มลงทะเบียน เมื่อมีผู้สมัครลงทะเบียนครบตามจำนวนที่กำหนดไว้
-
สร้างแบบฟอร์มลงทะเบียนออนไลน์ด้วย Google Form ให้ตอบรับผ่านทางอีเมลโดยอัตโนมัติ
เนื่องจากว่ามีผู้สอบถามถึงการใช้งานแบบฟอร์มลงทะเบียนออนไลน์ แบบให้สามารถตอบรับผ่านทางอีเมลโดยอัตโนมัติไปยังผู้สมัครเมื่อเข้ามาลงทะเบียน ผมเห็นว่าน่าจะมีประโยชน์สำหรับ Admin หรือผู้ใช้งาน Google Form หลาย ๆ ท่าน จึงได้สรุปเป็นขั้นตอน ตามที่ผมได้ทำมา หวังว่าจะเป็นประโยชน์ให้กับทุก ๆ ท่านนะครับ
** หมายเหตุ **
เนื่องจาก Google ได้มีการเปลี่ยนแปลงการใช้งานของ Script ใหม่
จาก Script Gallery ไปเป็น Add-ons ครับScript Gallery ==> Add-ons
ซึ่งบทความที่ผมเขียนขึ้นนี้ ขออ้างอิงเมนูและการใช้งาน Google Spreadsheets เวอร์ชั่นเก่านะครับ
ดังนั้น หากผู้ใช้งาน ต้องการใช้งาน Google Spreadsheets เวอร์ชั่นเก่า สามารถเข้าไปสร้างผ่านลิงค์ด้านล่างนี้ได้เลยครับผมgoo.gl/pprjA5
1. คลิก Form เพื่อสร้างแบบฟอร์มลงทะเบียนออนไลน์
2. กำหนดรายละเอียดข้อมูลของแบบลงทะเบียนตามที่ต้องการ
(ในส่วนนี้จะไม่ขออธิบายรายละเอียดในการสร้างแบบฟอร์ม นะครับ)
3. คลิก View response เข้าสู่มุมมองของ View responses เพื่อกำหนดต่าง ๆ
4. คลิกเมนู Tools > เลือก Script manager… (เป็นส่วนจัดการ Script ต่าง ๆ)
จากนั้น คลิกปุ่ม New เพื่อสร้าง Script สำหรับการส่งอีเมลแบบอัตโนมัติ
ตั้งชื่อไฟล์ Script ใหม่ โดยใช้ชื่อว่า “sendEmail”
จากนั้น Copy Script ด้านล่างนี้ วางไว้ดังภาพข้างต้น
** ข้อมูลนี้เป็นข้อมูลจำลอง เพื่อให้สามารถเข้าใจในรายละเอียดของ Script ได้
เมื่อผู้ใช้งานนำไปใช้จริง สามารถแก้ไขรายละเอียดได้ตามความเหมาะสม **function sendEmail(e) {
var userEmail = e.values[4];
var firstName = e.values[1];
var trainingTitle = "อบรมการใช้โปรแกรม Smart Notebook sympodium & Smart board สำหรับการจัดการเรียนการสอนทางไกล";
var infoLink = "http://clpd.psu.ac.th/clpd_2012";
var emailAdd = "clpdpsu@psu.ac.th";
var subject = "ศูนย์ส่งเสริมและพัฒนาการเรียนรู้ ม.อ. : ตอบรับเข้าร่วมอบรมโครงการเชิงปฏิบัติการ"
var emailBody = "เรียนคุณ: "+firstName+"\n\n ท่านได้ทำการลงทะเบียนเข้าร่วมโครงการ"+
"หัวข้อ \"" + trainingTitle + "\""+
" ในวันพุธที่ 16 กรกฎาคม 2557 เวลา 09.00-16.00 น."+
" ณ ห้องอบรม ชั้น 8 อาคารศูนย์ทรัพยากรการเรียนรู้ อาคาร 1 มหาวิทยาลัยสงขลานครินทร์ วิทยาเขตหาดใหญ่"+
"\n ทางศูนย์ส่งเสริมและพัฒนาการเรียนรู้ มหาวิทยาลัยสงขลานครินทร์ ตอบรับการเข้าร่วมโครงการดังกล่าวแล้วค่ะ"+
"\n"+
"\n ติดตามการประกาศรายชื่อผู้มีสิทธิ์เข้าร่วมอบรมโครงการอีกครั้งได้ที่: " + infoLink +
"\n"+
"\n"+
"\nขอบคุณสำหรับการลงทะเบียนเข้าร่วมโครงการค่ะ"+
"\n"+
"\nศูนย์ส่งเสริมและพัฒนาการเรียนรู้ มหาวิทยาลัยสงขลานครินทร์"+
"\nโทรศัพท์ : 074-289203-4"+
"\nE-mail : " + emailAdd;
MailApp.sendEmail(userEmail , subject, emailBody);
}
หมายเหตุ
อักษรสีแดง คือ ข้อความที่สามารถแก้ไขได้
อักษรสีฟ้า คือ ชื่อตัวแปร ที่ใช้สำหรับเก็บค่าต่าง ๆ ที่กำหนดไว้
* สามารถปรับแก้ไข Script ได้ตามข้อมูลของแบบฟอร์มที่ได้สร้างขึ้น
ซึ่ง Script นี้ อ้างอิงตามแบบฟอร์มลงทะเบียนในข้อที่ 25. เมื่อกำหนดรายละเอียดข้อมูลการตอบรับ (Script) เสร็จเรียบร้อยแล้ว
จากนั้น คลิกเมนู Resources > เลือก Current Project’s triggers
และคลิก No triggers setup. Click here to add one now.
เลือก On form submit แล้วคลิกปุ่ม Save / ปุ่ม Continue และ ปุ่ม Accept
เป็นอันเสร็จสิ้นการสร้าง Script สำหรับการตอบรับอีเมลแบบอัตโนมัติ
คลิกปุ่ม Close (หากต้องการแก้ไข Script ให้คลิกปุ่ม Edit… ด้านบน)
6. ทดสอบการตอบรับการลงทะเบียน
ว่า Script ที่สร้างไว้ มีข้อมูลที่ถูกต้องและสามารถตอบรับทางอีเมลแบบอัตโนมัติได้ไปที่มุมมอง View live form เพื่อทดสอบการลงทะเบียนจริง
จากนั้นให้ตรวจสอบดูในมุมมอง View responses ว่ามีข้อมูลปรากฎให้เห็นหรือไม่
และตรวจสอบอีเมลที่ได้ระบุไว้ ว่ามีการตอบรับจากระบบหรือไม่
หมายเหตุ หากพบว่าไม่มีการส่งอีเมลโดยอัตโนมัติจากระบบ อาจต้องทำการตรวจสอบ Script ใหม่อีกครั้ง เพื่อตรวจหาข้อผิดพลาด