Contact
Line : comsiam
Contact
Line : comsiam

Google Gemini สามารถช่วยเขียน Google Apps Script เพื่อทำงานอัตโนมัติกับ Google Sheets, Docs, Forms, Drive, Gmail, Calendar และบริการอื่นใน Google Workspace ได้ ตั้งแต่งานง่ายอย่างเพิ่มเมนูในชีต ส่งอีเมลอัตโนมัติ จัดการข้อมูล ไปจนถึงสร้าง Trigger, Custom Function และ Workflow ที่ทำงานตามเวลา
Google Apps Script ใช้ Modern JavaScript เป็นหลัก ทำให้คนที่มีพื้นฐาน JavaScript สามารถเริ่มต้นได้ไม่ยาก และ Google มี Code Editor บน Browser โดยตรง ไม่จำเป็นต้องติดตั้ง Runtime แยกเพื่อเริ่มเขียน Script
วิธีใช้ Gemini ให้มีประสิทธิภาพควรระบุให้ชัดว่า Script จะทำงานกับ Google App ใด ข้อมูลอยู่ตรงไหน ต้องการให้เกิดอะไร และ Script ควรถูกเรียกด้วยวิธีใด เช่น Run เอง, กดปุ่ม, onEdit() หรือ Time-driven Trigger จากนั้นจึงให้ Gemini สร้าง Code ทีละ Feature และทดสอบด้วยข้อมูลจริงที่ไม่สำคัญก่อนนำไปใช้กับระบบงานจริง
Google Apps Script คือแพลตฟอร์มพัฒนา Application และ Automation ของ Google ที่ใช้ JavaScript และทำงานบน Server ของ Google
สามารถใช้เขียน Script เพื่อเชื่อมบริการ Google Workspace เช่น
ตัวอย่างงานที่นิยมทำ ได้แก่
ข้อดีสำคัญคือไม่จำเป็นต้องตั้ง Server เองสำหรับงาน Automation ขนาดเล็กจำนวนมาก
Gemini สามารถช่วยได้ตั้งแต่ก่อนเริ่มเขียน Code
เช่น
อธิบาย Workflow และแบ่งขั้นตอนให้
เปลี่ยน Requirement เป็น Apps Script
ช่วยอธิบาย Function และ Google Service ที่ใช้
ช่วยอ่าน Error Message และหา Root Cause
ลด Code ซ้ำและแบ่ง Function
ช่วยออกแบบ onEdit(), onOpen() หรือ Time-driven Trigger
สร้าง Function สำหรับใช้ใน Google Sheets
ช่วยเขียน UrlFetchApp เพื่อเรียก External API
ช่วยค้นหา API Key ที่ Hard-code หรือ Permission ที่กว้างเกินความจำเป็น
จึงสามารถใช้ Gemini เป็น Pair Programmer สำหรับ Apps Script ได้ค่อนข้างครบวงจร
ไม่ควรพิมพ์เพียง
“เขียน Apps Script ให้หน่อย”
ควรให้ Context เช่น
“ช่วยเขียน Google Apps Script สำหรับ Google Sheets
ข้อมูล:
เป้าหมาย:
เมื่อ Status ใน Column D ถูกเปลี่ยนเป็น Completed ให้บันทึกเวลาปัจจุบันลง Column E
ข้อกำหนด:
Prompt แบบนี้ทำให้ Gemini มีข้อมูลมากพอที่จะสร้าง Script ได้ตรงกว่า
หากต้องการเขียน Script สำหรับ Spreadsheet สามารถเปิด Google Sheets ที่ต้องการ แล้วเข้าสู่ Apps Script Editor ตามเมนูที่ Google Sheets มีให้
จากนั้นจะเห็น Project สำหรับเขียน Script
ตัวอย่าง Code พื้นฐาน
function helloWorld() {
Logger.log("Hello World");
}
กด Run เพื่อทดสอบ Function
ในการ Run ครั้งแรก Function ที่ใช้บริการซึ่งต้องมีสิทธิ์อาจขอให้ผู้ใช้ Authorize ตาม Scope ที่ Script ต้องการ
สมมติต้องการเขียนคำว่า Hello ลง A1
Prompt
“เขียน Apps Script สำหรับ Google Sheets ให้ใส่ข้อความ Hello ลง Cell A1 ของ Active Sheet”
ตัวอย่าง Code
function writeHello() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange("A1").setValue("Hello");
}
สามารถถาม Gemini ต่อว่า
“อธิบาย SpreadsheetApp, getActiveSpreadsheet(), getActiveSheet(), getRange() และ setValue() ทีละส่วน”
วิธีนี้เหมาะกับมือใหม่มากกว่าการ Copy Code โดยไม่รู้ว่าแต่ละ Method ทำอะไร
สมมติต้องการอ่าน A2:C10
function readData() {
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet();
const values = sheet
.getRange("A2:C10")
.getValues();
Logger.log(values);
}
getValues() จะคืนข้อมูลเป็น Array แบบสองมิติ
สามารถถาม Gemini
“อธิบายโครงสร้าง Array ที่ได้จาก getValues() และแสดงตัวอย่างว่า Row กับ Column ถูกเก็บอย่างไร”
การเข้าใจ Array มีความสำคัญมากเมื่อเริ่มทำ Automation กับข้อมูลหลาย Row
หากต้องเขียนข้อมูลหลาย Cell ไม่ควรเรียก setValue() ทีละ Cell โดยไม่จำเป็น
สามารถเตรียมข้อมูลเป็น Array แล้วใช้ setValues()
ตัวอย่าง
function writeProducts() {
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getActiveSheet();
const products = [
["Router", 1500],
["Switch", 2500],
["Access Point", 3200],
];
sheet
.getRange(2, 1, products.length, 2)
.setValues(products);
}
Prompt ที่ควรใช้
“เขียน Apps Script สำหรับเขียนข้อมูล Array 2 มิติลง Google Sheets ในครั้งเดียว และหลีกเลี่ยงการเขียน Cell ทีละ Row ถ้าไม่จำเป็น”
ช่วยให้ Code มีประสิทธิภาพกว่า
Apps Script ที่วน Loop แล้วอ่านหรือเขียน Cell ทีละรายการสามารถทำงานช้าได้
ตัวอย่างแนวคิดที่ไม่เหมาะกับข้อมูลจำนวนมาก
for (let row = 2; row <= 1000; row++) {
const value = sheet.getRange(row, 1).getValue();
Logger.log(value);
}
วิธีที่เหมาะกว่าในหลายกรณีคืออ่านช่วงข้อมูลครั้งเดียว
const values = sheet
.getRange(2, 1, 999, 1)
.getValues();
แล้วประมวลผล Array ใน Memory
Prompt
“Refactor Apps Script นี้เพื่อลดการเรียก Spreadsheet Service ใน Loop โดยใช้ Batch Read/Write ถ้าเป็นไปได้”
นี่เป็นหนึ่งในแนวทางที่มีประโยชน์มากเมื่อใช้ Gemini Optimize Apps Script
Apps Script สามารถสร้าง Function สำหรับใช้ใน Google Sheets คล้าย Formula ได้
ตัวอย่าง
function SALE_PRICE(price, discountPercent) {
return price * (1 - discountPercent / 100);
}
จากนั้นใช้ใน Sheet
=SALE_PRICE(A2,B2)
Prompt
“สร้าง Google Sheets Custom Function ชื่อ SALE_PRICE รับราคาและเปอร์เซ็นต์ส่วนลด แล้วคืนราคาหลังหักส่วนลด พร้อมตรวจ Input”
ข้อควรระวังคือ Custom Function มีข้อจำกัดของ Apps Script และไม่เหมาะกับทุกงาน Automation
ไม่ควรอาศัย Active Sheet เสมอไป หาก Script ต้องทำงานกับ Sheet เฉพาะเจาะจง
ตัวอย่าง
function getOrdersSheet() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName("Orders");
if (!sheet) {
throw new Error('Sheet "Orders" not found');
}
return sheet;
}
Prompt
“เขียน Apps Script ให้ใช้ Sheet ชื่อ Orders เท่านั้น และถ้าไม่มี Sheet นี้ให้ Throw Error ที่เข้าใจง่าย”
วิธีนี้ลดความเสี่ยง Script เขียนข้อมูลผิด Sheet
onEdit(e) เป็น Simple Trigger สำหรับ Google Sheets ที่ทำงานเมื่อผู้ใช้แก้ไขค่าใน Spreadsheet ตามเงื่อนไขของ Trigger
ตัวอย่าง
function onEdit(e) {
const range = e.range;
const sheet = range.getSheet();
if (sheet.getName() !== "Orders") {
return;
}
if (range.getColumn() !== 4 || range.getRow() < 2) {
return;
}
if (range.getValue() !== "Completed") {
return;
}
sheet
.getRange(range.getRow(), 5)
.setValue(new Date());
}
Code นี้ตรวจ
ก่อนทำงาน
ดีกว่า Trigger ที่ทำงานทุกครั้งโดยไม่ Filter Event
Google ระบุว่า Simple Trigger เช่น
onOpen(e)
onEdit(e)
มีข้อจำกัดบางอย่าง โดยเฉพาะการเรียก Service ที่ต้อง Authorization
และ Simple Trigger มีข้อจำกัดด้านเวลาการทำงาน
ดังนั้นอย่าถือว่า onEdit() เหมาะกับทุก Automation
หากต้องใช้บริการที่ต้อง Permission เพิ่ม อาจต้องใช้ Installable Trigger แทน
Installable Trigger มีความสามารถมากกว่า Simple Trigger และสามารถเรียก Service ที่ต้อง Authorization ได้ตามเงื่อนไขของระบบ
ตัวอย่าง Trigger ได้แก่
Prompt
“งานนี้ต้องส่ง Gmail หลังมี Form Submit ช่วยอธิบายก่อนว่าควรใช้ Simple Trigger หรือ Installable Trigger แล้วจึงสร้าง Code”
การให้ Gemini เลือก Trigger จาก Requirement ช่วยลดปัญหา Script เขียนถูกแต่ Trigger ไม่มี Permission เพียงพอ
Apps Script สามารถทำงานอัตโนมัติตามเวลา
ตัวอย่าง Use Case
Trigger สามารถตั้งผ่าน Apps Script Editor ได้
Google ระบุขั้นตอนโดยทั่วไปว่า
Prompt
“ฉันต้องการให้ Function createDailyReport ทำงานทุกวัน ช่วยอธิบายวิธีตั้ง Time-driven Trigger และข้อจำกัดที่ควรรู้”
Apps Script สามารถทำงานกับ Gmail ได้ตาม Service และ Permission ที่เกี่ยวข้อง
ตัวอย่างแนวคิด
function sendNotification() {
GmailApp.sendEmail(
"example@example.com",
"Order completed",
"Your order has been completed."
);
}
แต่สำหรับระบบจริงไม่ควร Hard-code Recipient หาก Email มาจาก Spreadsheet
สามารถอ่าน Email จากข้อมูลแทน
สิ่งสำคัญคือการส่ง Email มี Quota และ Authorization ที่ต้องคำนึงถึง
จึงไม่ควรสร้าง Loop ส่ง Email จำนวนมากโดยไม่ตรวจข้อจำกัดของ Apps Script และบัญชีที่ใช้
สมมติ
A = Name
B = Email
C = Status
Prompt
“เขียน Apps Script อ่านข้อมูลจาก Sheet Customers แล้วส่ง Email เฉพาะ Row ที่ Status เป็น Pending
ข้อกำหนด:
Requirement เรื่อง ห้ามส่งซ้ำ สำคัญมาก
เพราะ Automation Email ที่ไม่มี State Management สามารถส่งซ้ำหลายครั้งได้
Apps Script สามารถทำงานร่วมกับ Google Forms และ Form Submission ได้
Use Case เช่น
Google Form
↓
ผู้ใช้ Submit
↓
Apps Script Trigger
↓
อ่าน Response
↓
สร้างเอกสาร
↓
ส่ง Email
Prompt
“ออกแบบ Apps Script Workflow หลัง Google Form Submit
ยังไม่ต้องเขียน Code ให้ระบุ Trigger, Input, Output, Permission และ Error Case ก่อน”
เมื่อ Architecture ชัดแล้วค่อยสร้าง Function
Google Apps Script สามารถสร้างและแก้ Google Docs ได้
Use Case เช่น
Workflow
Google Sheets
↓
Apps Script
↓
Template
↓
Google Docs
↓
PDF
สามารถสั่ง Gemini
“สร้าง Apps Script อ่าน Name และ Order ID จาก Google Sheets แล้วสร้าง Google Docs จาก Template โดยแทน Placeholder”
เช่น Template
Customer: {{CUSTOMER}}
Order: {{ORDER_ID}}
จากนั้น Script ใช้ Replace Text ตาม Logic ที่กำหนด
Apps Script สามารถช่วยจัดการ File และ Folder ใน Drive ได้
ตัวอย่างงาน
Prompt
“เขียน Apps Script สร้าง Folder สำหรับแต่ละ Customer แต่ห้ามสร้างซ้ำถ้ามี Folder ชื่อนั้นอยู่แล้ว”
ควรคิดเรื่อง Duplicate และ Permission ก่อนทุกครั้ง
Apps Script สามารถเชื่อม Google Calendar ได้
Use Case เช่น
Prompt
“เขียน Apps Script อ่าน Meeting จาก Sheet แล้วสร้าง Calendar Event โดยใช้ Date, Start Time, End Time และ Title จากแต่ละ Row
ก่อนเขียน Event ให้ตรวจว่ามี Event เดิมหรือไม่เพื่อป้องกัน Duplicate”
Calendar Automation ควรออกแบบ Idempotency ให้ดี ไม่เช่นนั้นการ Run Script ซ้ำอาจสร้าง Event ซ้ำ
Automation ที่ดีควรคิดว่า
ถ้า Script ถูก Run ซ้ำ จะเกิดอะไรขึ้น
ตัวอย่าง Script ส่ง Email
ถ้ารัน 2 ครั้ง
ผู้ใช้ได้รับ Email 2 ฉบับหรือไม่
Script สร้าง Calendar
รัน 2 ครั้ง
Event ซ้ำหรือไม่
Script สร้าง Invoice
รัน 2 ครั้ง
Invoice ซ้ำหรือไม่
Prompt ที่ควรเพิ่มคือ
“ออกแบบ Script ให้ Run ซ้ำได้โดยไม่สร้างข้อมูลซ้ำ”
นี่เป็น Requirement สำคัญที่ผู้ใช้มักลืมบอก AI
หาก Sheet มีข้อมูลหลายหมื่น Row ไม่ควรเขียน Script แบบ
อ่าน 1 Cell
เขียน 1 Cell
อ่านอีก 1 Cell
เขียนอีก 1 Cell
หลายพันครั้งถ้าไม่จำเป็น
ควรพิจารณา
อ่าน Range
↓
Process Array
↓
เขียนผลกลับเป็น Batch
Prompt
“Optimize Apps Script นี้โดยลดจำนวน Calls ไปยัง Spreadsheet Service และใช้ Batch Operation”
นอกจากนี้ Apps Script มี Quotas และข้อจำกัดการทำงาน จึงควรออกแบบ Script ขนาดใหญ่โดยคำนึงถึงปริมาณงานด้วย
สำคัญ
Google Apps Script มี Quotas สำหรับบางบริการและการทำงานต่าง ๆ ซึ่งสามารถเปลี่ยนแปลงได้ตามนโยบายและประเภทบัญชี
หากระบบต้อง
ควรตรวจ Quota ปัจจุบันก่อนออกแบบ Production Workflow
อย่าให้ Geminiสมมติว่า Apps Script สามารถ Run งานจำนวนไม่จำกัด
Apps Script สามารถเรียก External HTTP API ผ่าน UrlFetchApp
ตัวอย่าง
function fetchData() {
const response = UrlFetchApp.fetch(
"https://api.example.com/data"
);
const data = JSON.parse(
response.getContentText()
);
Logger.log(data);
}
สำหรับระบบจริงควรเพิ่ม
Prompt
“เขียน Apps Script เรียก REST API และตรวจ HTTP Status ก่อน Parse JSON พร้อม Error Handling”
ตัวอย่างที่ไม่ควรทำ
const API_KEY = "REAL_SECRET_KEY";
โดยเฉพาะ Project ที่แชร์กับคนอื่น
ควรออกแบบ Secret Management ตามระดับความสำคัญของ Credential และ Environment
สำหรับข้อมูล Configuration บางประเภท Apps Script มี PropertiesService ให้ใช้เก็บ Key-Value ตาม Scope ที่เหมาะสม
ตัวอย่าง
function getApiKey() {
const apiKey = PropertiesService
.getScriptProperties()
.getProperty("API_KEY");
if (!apiKey) {
throw new Error("API_KEY is not configured");
}
return apiKey;
}
อย่างไรก็ตาม หาก Credential มีความสำคัญสูง ควรพิจารณาระบบ Secret Management และสิทธิ์การเข้าถึง Project อย่างเหมาะสม ไม่ควรถือว่าการย้าย String ออกจาก Source Code เพียงอย่างเดียวแก้ Security ครบทุกกรณี
Apps Script ที่ใช้
อาจต้อง Authorization ตามบริการ
ก่อนให้ผู้ใช้จำนวนมาก Authorize Script ควรตรวจว่า Script ขอ Scope เท่าที่จำเป็นหรือไม่
Prompt
“Review Apps Script นี้และระบุ Google Services ที่ใช้ รวมถึง Permission ที่อาจต้องขอ โดยหลีกเลี่ยง Scope ที่ไม่จำเป็น”
หลัก Least Privilege ควรถูกนำมาใช้กับ Automation เช่นเดียวกับ Application ประเภทอื่น
เรื่องนี้สำคัญโดยเฉพาะ Installable Trigger
Google ระบุว่า Installable Trigger จะทำงานภายใต้ Authorization ของผู้ที่สร้าง Trigger
ตัวอย่าง
Admin A สร้าง Trigger
User B เปิด Spreadsheet
Trigger ยังสามารถทำงานภายใต้ Account ของผู้สร้าง Trigger ตามเงื่อนไขของ Apps Script
ดังนั้นก่อน Deploy Workflow ในองค์กรควรเข้าใจ Ownership และ Authorization ให้ชัด
e คืออะไรเมื่อ Trigger ทำงาน Apps Script สามารถส่ง Event Object เข้า Function
เช่น
function onEdit(e) {
Logger.log(e.range.getA1Notation());
}
e อาจมี Context เช่น
ขึ้นอยู่กับ Trigger
อย่าเขียน
function onEdit() {
แล้วค่อย Query ข้อมูลทุกอย่างใหม่ถ้า Event Object มีข้อมูลที่ต้องการอยู่แล้ว
Prompt
“ใช้ข้อมูลจาก Event Object ให้มากที่สุด เพื่อลดการอ่าน Spreadsheet ซ้ำโดยไม่จำเป็น”
มือใหม่มักกด Run
onEdit
จาก Apps Script Editor
แต่เมื่อ Run ด้วยมือ Function จะไม่ได้รับ Event Object แบบเดียวกับเหตุการณ์ Edit จริง
ทำให้ Code เช่น
e.range
เกิด Error เพราะ e ไม่มีค่า
วิธี Test ที่เหมาะคือแก้ Cell ใน Spreadsheet จริง หรือสร้าง Test Function พร้อม Event Mock อย่างระมัดระวังตามงาน
หากเกิด Error ให้ Gemini ตรวจว่า Function ต้องการ Event Object หรือไม่ก่อนแก้ Logic
หาก Script Error ควรส่ง
Prompt
“Apps Script นี้เกิด Error
Error:
[ข้อความ]
Trigger:
onEdit(e)
Expected:
[สิ่งที่ควรเกิด]
Actual:
[สิ่งที่เกิด]
อย่า Rewrite Script ก่อน ให้หา Root Cause และอธิบายว่า Error เกี่ยวข้องกับ Trigger, Authorization, Data หรือ Logic”
วิธีนี้ช่วยลดการแก้ Code แบบเดา
ปัญหาที่พบบ่อย เช่น
อาจเกิดจาก Object ไม่มีค่า หรือ Run Trigger Function แบบ Manual
Script ยังไม่ได้รับ Permission ที่จำเป็น
อาจเกี่ยวข้องกับการเรียก Service หรือ Quota
Script ทำงานนานเกินข้อจำกัดที่เกี่ยวข้อง
Row หรือ Column ไม่ถูกต้อง
ชื่อ Sheet ไม่ตรง
API ตอบข้อมูลที่ไม่ใช่ JSON ตามที่คาด
Gemini ช่วยวิเคราะห์ได้ แต่ควรส่ง Error เต็ม ๆ
สมมติมี Business Logic
function calculateDiscount(price, percent) {
return price * (1 - percent / 100);
}
สามารถสร้าง Test ง่าย ๆ
function testCalculateDiscount() {
const result = calculateDiscount(1000, 20);
if (result !== 800) {
throw new Error(
`Expected 800 but got ${result}`
);
}
Logger.log("Test passed");
}
Prompt
“แยก Business Logic ออกจาก Spreadsheet Service เพื่อให้ Function สามารถ Test ได้ง่าย”
นี่เป็น Design ที่ดีมากสำหรับ Apps Script ที่เริ่มใหญ่ขึ้น
ตัวอย่างที่ไม่ควรให้ทุก Logic อยู่ใน Function เดียว
อ่าน Sheet
คำนวณ
ส่ง Email
แก้ Sheet
สร้าง Drive File
ทั้งหมดรวมกัน
ควรแยกเป็น
readOrders()
calculateTotals()
sendEmail()
updateStatus()
createReport()
Prompt
“Refactor Apps Script นี้โดยแยก Business Logic, Spreadsheet Access และ Email Sending เป็น Function คนละ Responsibility”
ทำให้ Debug และ Test ง่ายขึ้น
Prompt ที่เหมาะคือ
“Review Apps Script นี้ด้าน:
ยังไม่ Rewrite Code ให้จัดอันดับปัญหาก่อน”
จากนั้นเลือกแก้ทีละจุด
ไม่ควรให้ Gemini Rewrite Automation ที่ใช้งานจริงทั้ง Project ในครั้งเดียว
Automation บางงานอาจถูก Run พร้อมกัน เช่น
อาจเกิด Race Condition
Apps Script มี Service สำหรับ Lock ตาม Use Case ที่เหมาะสม
Prompt
“Script นี้สามารถถูกเรียกพร้อมกันหลาย Execution ช่วยตรวจว่ามี Race Condition หรือไม่ และต้องใช้ LockService หรือควรแก้ Design แบบอื่น”
ไม่จำเป็นต้องใช้ Lock ทุก Script แต่ควรคิดเรื่อง Concurrent Execution เมื่อมีข้อมูล Shared
สามารถเก็บ Configuration หรือ State ขนาดเล็กในรูป Key-Value
เช่น
ตัวอย่าง
function saveLastRow(row) {
PropertiesService
.getScriptProperties()
.setProperty("LAST_ROW", String(row));
}
อ่าน
function getLastRow() {
return PropertiesService
.getScriptProperties()
.getProperty("LAST_ROW");
}
ไม่ควรใช้ Spreadsheet Cell เป็นที่เก็บ Internal State ทุกอย่างหากไม่จำเป็น
ถ้า Script เรียกข้อมูลซ้ำบ่อย สามารถพิจารณา Cache ตาม Use Case
ตัวอย่าง
Prompt
“ข้อมูลนี้ถูกเรียกทุกครั้งแต่เปลี่ยนวันละครั้ง ช่วยตรวจว่าควรใช้ CacheService หรือไม่ และอธิบาย Cache Invalidation”
การเพิ่ม Cache โดยไม่มี Strategy อาจทำให้ข้อมูลเก่า ดังนั้นต้องกำหนด Expiration และ Source of Truth ให้ชัด
Automation ที่ทำงานเองตาม Trigger ต้องมี Log ที่ช่วยตรวจปัญหา
ควรบันทึกข้อมูลที่มีประโยชน์ เช่น
Execution start
Rows processed: 120
Emails sent: 15
Rows skipped: 105
Errors: 2
แต่ไม่ควร Log
Prompt
“เพิ่ม Logging สำหรับ Debug แต่ห้าม Log Credential หรือข้อมูล Sensitive”
ตัวอย่าง Workflow
Row 10
Status = Pending
↓
Send Email
↓
Status = Sent
แต่ถ้า Script ส่ง Email สำเร็จ แล้ว Error ก่อนเปลี่ยน Status เป็น Sent
Run ครั้งต่อไปอาจส่งซ้ำ
จึงควรคิดเรื่อง Transaction-like Workflow หรือ Unique Identifier ตาม Use Case
Prompt
“ตรวจ Automation นี้ว่ามีสถานการณ์ใดทำให้ Email ส่งซ้ำได้ และเสนอ Design ที่ลด Duplicate โดยไม่ซ่อน Error”
นี่เป็นระดับการใช้ Gemini ที่มีประโยชน์กว่าการขอเพียง Code
ใช้แนวคิดคล้ายกัน
อาจเก็บ
eventId
กลับลง Sheet หลังสร้าง Event
ก่อนสร้างใหม่ให้ตรวจ State
อย่าใช้เพียง Event Title เป็น Unique Key หาก Title สามารถซ้ำได้
ควรออกแบบ Identifier ตามข้อมูลจริง
ถ้าสร้าง Invoice จากแต่ละ Row อาจเก็บ
documentId
fileUrl
generatedAt
หลังสร้าง
จากนั้น Script ตรวจว่ามี Document ID แล้วหรือไม่ก่อนสร้างใหม่
ทำให้ Run Script ซ้ำได้ปลอดภัยขึ้น
Apps Script สามารถ Publish Web App ได้
Function สำคัญ เช่น
function doGet(e) {
return ContentService
.createTextOutput("Hello");
}
หรือใช้ HTML Service สำหรับ UI
Simple Trigger Guide ของ Google ระบุว่า doGet(e) ทำงานเมื่อมี HTTP GET Request ไปยัง Web App และ doPost(e) ทำงานเมื่อได้รับ HTTP POST
Prompt
“สร้าง Apps Script Web App Version แรกที่ตอบ JSON ด้วย doGet(e) และยังไม่เพิ่ม Authentication จนกว่าจะอธิบาย Security Model ก่อน”
สำหรับ Web App จริงต้องคิด
ก่อน Deploy
ตัวอย่าง
function doGet() {
const data = {
status: "ok",
message: "Hello",
};
return ContentService
.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
จากนั้นสามารถใช้ Apps Script เป็น Endpoint สำหรับ Use Case เบื้องต้นได้
แต่ไม่ควรถือว่าเป็น Architecture ที่เหมาะกับ API ขนาดใหญ่ทุกระบบ
ได้ในเชิง Architecture เพราะ Apps Script สามารถเรียก External REST API ด้วย HTTP Request
จึงสามารถออกแบบ
Google Sheets
↓
Apps Script
↓
Gemini API
↓
AI Response
↓
Google Sheets
ตัวอย่าง Use Case
อย่างไรก็ตาม การใช้ Gemini API มีเรื่อง
ที่ต้องพิจารณาแยกต่างหาก
ไม่ควรเก็บ Secret แบบ
Sheet1!A1 = REAL_API_KEY
เพราะคนที่เห็น Spreadsheet อาจเข้าถึง Key ได้
และไม่ควร Hard-code Key ลง Source Code ที่แชร์
ควรใช้ Secret Handling ตาม Security Model ของ Project
หัวข้อการเขียน Apps Script กับ Gemini API ควรตรวจ Documentation API ปัจจุบันทุกครั้ง เพราะ Endpoint, Model และ Parameter สามารถเปลี่ยนได้
Gemini Canvas รองรับการสร้างและแก้ Code
สามารถใช้ Prompt เช่น
“สร้าง Google Apps Script สำหรับ Sheets ที่อ่าน Order แล้วสร้าง Daily Report”
จากนั้นแก้ต่อเป็นรอบ
“แยก Function อ่านข้อมูลออกจาก Function คำนวณ”
“เพิ่ม Error Handling”
“ตรวจ Trigger”
“ลด Service Calls”
“เพิ่ม Logging”
Canvas เหมาะกับการ Draft และ Review Code แต่ Apps Script จริงควรนำไป Run และทดสอบใน Apps Script Environment เพราะ Canvas ไม่ได้แทน Permission, Trigger และ Runtime จริงของ Google Apps Script
แม้ Apps Script ใช้ Modern JavaScript แต่ Environment ไม่ใช่ Browser JavaScript หรือ Node.js แบบเดียวกันทุกอย่าง
ตัวอย่าง Browser API บางชนิดอาจไม่มีใน Server-side Apps Script Environment
ในทางกลับกัน Apps Script มี Service เฉพาะ เช่น
SpreadsheetApp
DriveApp
GmailApp
CalendarApp
DocumentApp
FormApp
UrlFetchApp
ดังนั้น Prompt ควรระบุ
“นี่คือ Google Apps Script ไม่ใช่ Browser JavaScript และไม่ใช่ Node.js”
ช่วยลดโอกาสได้ Code ที่ใช้ API ผิด Environment
ไม่ควรสมมติว่า Apps Script ทำงานเหมือน Node.js Project ปกติ
หาก Gemini สร้าง Code เช่น
const package = require("some-package");
ให้หยุดตรวจทันทีว่า Environment และ Build Workflow รองรับหรือไม่
สำหรับ Apps Script Editor โดยตรงควรใช้ API และ Library ที่รองรับใน Environment ของ Apps Script
ถ้าใช้ Toolchain ภายนอกจะเป็นอีก Workflow หนึ่ง
AI สามารถสร้าง Method ที่ดูเหมือนจริงแต่ไม่มีใน Apps Script
ตัวอย่าง Gemini อาจเสนอ
SpreadsheetApp.sendEmail()
ทั้งที่การส่ง Email ควรใช้ Service ที่เกี่ยวข้อง ไม่ใช่เดาจากชื่อ
Prompt ที่มีประโยชน์คือ
“ตรวจ Method ทุกตัวใน Code ว่าเป็น Apps Script API จริง หากไม่แน่ใจให้ระบุว่าต้องตรวจ Documentation แทนการสร้าง Method เอง”
ก่อนใช้ Production ควรเทียบกับ Documentation ของ Google
ถ้า Script ทำงานกับ
ควรสร้าง Test Spreadsheet หรือ Copy ก่อน
Workflow
Production Sheet
↓
Create Test Copy
↓
Run Script
↓
Check Result
↓
Fix
↓
Run Again
↓
Deploy to Production
อย่าใช้ข้อมูลจริงเป็นสนามทดลอง Version แรก
ถ้าต้องลบ Row ตามเงื่อนไข
อย่าเริ่มจาก Delete
ให้ Gemini สร้าง
แสดง Row ที่จะถูกลบ
นับจำนวน
ให้ตรวจ
ค่อยเปิด Delete Mode
Prompt
“สร้าง Dry Run Mode สำหรับ Script นี้ โดยแสดงรายการ Row ที่จะถูกลบแต่ยังไม่ลบจริง”
เหมาะกับ Automation ที่มีความเสี่ยง
ไม่ควรถือว่าปลอดภัย 100%
AI อาจสร้าง Script ที่
ทุก Script ควรถูก Review ก่อน Authorize โดยเฉพาะ Script ที่เข้าถึง Gmail, Drive หรือข้อมูลธุรกิจสำคัญ
AI อาจสร้าง Node.js หรือ Browser JavaScript
Gemini ต้องเดา
เสี่ยงแก้ผิด Sheet
Performance อาจไม่ดี
Trigger อาจทำงานไม่ได้ตามที่คาด
ไม่มี Event Object จริง
Email, Event หรือ Document ถูกสร้างซ้ำ
เสี่ยง Secret รั่ว
Automation อาจหยุดเมื่อใช้งานจริง
เสี่ยงข้อมูลเสีย
แนวทางที่แนะนำคือ
Sheets, Docs, Gmail หรือ Calendar
Script ต้องทำอะไร
Sheet, Column, Range และ Header
Manual, onEdit, Form Submit หรือ Time-driven
Input → Process → Output
ทำ Feature เดียวก่อน
ยังไม่ใช้ Production
Script ขอสิทธิ์อะไร
Run ซ้ำแล้วเกิดอะไร
จัดการ Failure
Batch Operation ตามความเหมาะสม
โดยเฉพาะงานจำนวนมาก
แต่ไม่ Log Secret
ไม่ใช่กด Run อย่างเดียว
หลังตรวจครบ
สำหรับ Workflow Automation ของ comsiam วิธีนี้ช่วยลดความเสี่ยงจาก Script ที่ AI สร้างแล้วไปแก้ข้อมูลหรือส่งข้อความโดยไม่ตั้งใจ เพราะทุกขั้นสามารถตรวจสอบได้ก่อนเปิด Trigger ให้ทำงานจริง
“เขียน Apps Script อ่านข้อมูล A2:E100 ครั้งเดียวแล้วคืนเป็น Array”
“เขียนข้อมูลหลาย Row ด้วย setValues() แทนการเขียน Cell ทีละรายการ”
“สร้าง onEdit(e) ทำงานเฉพาะ Sheet Orders, Column D และ Row 2 เป็นต้นไป”
“ออกแบบ Installable Trigger หลัง Form Submit และอธิบาย Permission”
“ส่ง Email เฉพาะ Row Pending และป้องกันการส่งซ้ำ”
“สร้าง Calendar Event จาก Sheets และเก็บ Event ID ป้องกัน Duplicate”
“สร้าง Google Docs จาก Template และแทน Placeholder จาก Sheet”
“ใช้ UrlFetchApp เรียก REST API พร้อมตรวจ Status และ JSON Error”
“ลด Spreadsheet Service Calls ใน Loop และใช้ Batch Read/Write”
“ตรวจ Script นี้ด้าน Trigger, Permission, Quota, Duplicate, Security และ Error Handling ก่อนใช้งานจริง”
ได้ Gemini สามารถช่วยสร้าง อธิบาย Debug และ Refactor Apps Script ซึ่งใช้ JavaScript และ Google Workspace Services ได้
Google ระบุว่า Apps Script ใช้ Modern JavaScript และมี Built-in Libraries สำหรับบริการ Google Workspace หลายรายการ
ไม่จำเป็นสำหรับการเริ่มต้นทั่วไป Google มี Code Editor บน Browser และ Script ทำงานบน Server ของ Google
ได้ แต่ต้องระบุ Sheet, Column และเงื่อนไขให้ชัด รวมถึงเข้าใจข้อจำกัดของ Simple Trigger และ Event Object
สามารถช่วยเขียน Code และอธิบายวิธีเลือก Simple หรือ Installable Trigger ได้ โดย Installable Trigger รองรับ Event เพิ่มและสามารถเรียกบริการที่ต้อง Authorization ได้มากกว่า Simple Trigger
ไม่ควรใช้ทันทีโดยไม่ Test ต้องตรวจ API, Permission, Trigger, Quota, Duplicate และผลกระทบต่อข้อมูลก่อนเปิดใช้งานจริง
วิธีใช้ Gemini เขียน Google Apps Script ให้ได้ผลดีที่สุดคือเริ่มจาก Google App → Requirement → Data Structure → Trigger → Code → Test → Permission → Error Handling → Quota → Deploy
Gemini สามารถช่วยสร้าง Automation สำหรับ Google Sheets, Docs, Forms, Gmail, Drive และ Calendar รวมถึง Custom Function, Trigger และ Web App ได้ แต่ต้องระบุ Environment ให้ชัดว่าเป็น Google Apps Script เพื่อป้องกัน AI สร้าง Browser JavaScript หรือ Node.js Code ที่ใช้ไม่ได้กับ Apps Script โดยตรง
สำหรับ Google Sheets ควรอ่านและเขียนข้อมูลแบบ Batch เมื่อเหมาะสม แทนการเรียก Service ทีละ Cell จำนวนมาก และ Automation ที่สามารถ Run ซ้ำต้องออกแบบป้องกัน Email, Event หรือ Document ซ้ำตั้งแต่ต้น
Trigger ก็เป็นอีกเรื่องสำคัญ Simple Trigger และ Installable Trigger มีความสามารถและข้อจำกัดต่างกัน จึงควรเลือกจาก Permission และ Event ที่ต้องการจริง
แนวทางของ comsiam คือใช้ Gemini เป็นผู้ช่วยสร้าง Draft และ Review Apps Script แต่ก่อนเปิด Automation จริงต้องตรวจ Code, Authorization, Trigger, Quota และผลลัพธ์กับ Test Data ให้เรียบร้อยเสมอ