ผสม Vertex AI เข้า Apps Script ทำ AI-Powered Inventory Bot ใน Google Sheets
Inventory Bot ที่สั่งงานด้วยภาษาไทยใน Google Sheets
ลองจินตนาการว่าคุณพิมพ์ลงใน Google Sheets ว่า “เพิ่ม iPhone 16 Pro Max 50 เครื่อง ราคาเครื่องละ 48,900” แล้ว Bot ก็เข้าใจทันที — เพิ่มแถวใหม่, คำนวณมูลค่ารวม, อัปเดตสต็อก — ทั้งหมดนี้โดยไม่ต้องเปิดหน้าจอใหม่ ไม่ต้องเรียนใช้ซอฟต์แวร์ใหม่ ไม่ต้องจ่ายค่า SaaS รายเดือน
นั่นคือสิ่งที่เราจะสร้างกันในบทความนี้ — AI-Powered Inventory Bot ที่ผสม 3 ส่วนประกอบหลักของ Google เข้าด้วยกัน: Google Sheets เป็นทั้งฐานข้อมูลและหน้าจอ, Apps Script เป็น backend logic, และ Vertex AI (Gemini API) เป็นสมองที่เข้าใจภาษาธรรมชาติ↗ Vertex AI Docs
ความสวยงามของ stack นี้คือ — ทุกอย่างอยู่ใน Google ecosystem ไม่ต้องตั้ง server, ไม่ต้อง deploy, ไม่ต้องจัดการ infrastructure ใด ๆ ทั้งสิ้น เหมาะกับ SME ไทยที่ต้องการระบบจัดการสต็อกอัจฉริยะแต่ไม่อยากลงทุนกับระบบ ERP ราคาแพง
สิ่งที่ Bot ทำได้: เพิ่ม/ลด/แก้ไขสินค้าด้วยภาษาไทย — ถามสต็อกคงเหลือ — แจ้งเตือนสินค้าใกล้หมด — สรุปยอดรายวัน/รายสัปดาห์ — แนะนำการสั่งซื้อเพิ่มจาก pattern การขาย
ทำไมต้อง Stack นี้ — ตัวเลขที่น่าสนใจ
Google Sheets มีผู้ใช้งานกว่า 900 ล้านคนทั่วโลก และเป็นเครื่องมือที่คนไทยในภาคธุรกิจคุ้นเคยมากที่สุดเครื่องมือหนึ่ง เมื่อผสมกับ Vertex AI ที่รองรับภาษาไทยได้ดี — เราได้ inventory system ที่ learning curve ต่ำมาก↗ Gemini API Ref
เปรียบเทียบ: ระบบสต็อกแบบต่าง ๆ
| Feature | Sheets + AI Bot | ERP (SAP/Oracle) | SaaS (Zoho/etc.) |
|---|---|---|---|
| ค่าใช้จ่าย/เดือน | ~$0-5 | $500-10,000+ | $20-200 |
| เวลาตั้งค่า | 30 นาที | 3-12 เดือน | 1-7 วัน |
| สั่งด้วยภาษาไทย | ได้ทันที | ต้อง customize | บางตัว |
| รองรับ SKU | หลักพัน | ไม่จำกัด | หลักหมื่น |
| Multi-user | ได้ (Google sharing) | Enterprise-grade | ได้ |
สำหรับร้านค้า SME ที่มีสินค้า 50–2,000 SKU วิธีนี้คือ sweet spot ที่ลงทุนน้อยที่สุดแต่ได้ AI มาช่วยจัดการสต็อกเต็มรูปแบบ
— Chontechhub Analysis
Google Sheets เป็นฐานข้อมูล, Apps Script เป็น backend, Vertex AI เป็นสมอง — รวมกันได้ inventory system ฟรีที่เข้าใจภาษาไทย
สร้าง Bot ทีละขั้น — จากศูนย์ถึงใช้งานจริง
Step 2: ฟังก์ชันเชื่อมต่อ Vertex AI (Gemini)
const PROJECT_ID = 'your-gcp-project-id'; const LOCATION = 'asia-southeast1'; // Bangkok region const MODEL = 'gemini-2.0-flash'; function callGemini(prompt) { const url = `https://${LOCATION}-aiplatform.googleapis.com/v1/` + `projects/${PROJECT_ID}/locations/${LOCATION}/` + `publishers/google/models/${MODEL}:generateContent`; const payload = { contents: [{ role: 'user', parts: [{ text: prompt }] }], systemInstruction: { parts: [{ text: getSystemPrompt() }] }, generationConfig: { temperature: 0.1, responseMimeType: 'application/json' } }; const options = { method: 'post', contentType: 'application/json', headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }, payload: JSON.stringify(payload), muteHttpExceptions: true }; const res = UrlFetchApp.fetch(url, options); const json = JSON.parse(res.getContentText()); return JSON.parse( json.candidates[0].content.parts[0].text ); }
สังเกต: เราใช้ ScriptApp.getOAuthToken() แทนการใส่ API key ตรง ๆ — Apps Script จะใช้ OAuth ของ Google Account ที่ login อยู่โดยอัตโนมัติ ไม่ต้อง manage credentials เอง แต่ต้องเปิด Vertex AI API ใน GCP project ก่อน↗ GCP Setup
Step 3: System Prompt ที่สอนให้ Gemini เข้าใจ Inventory Commands
function getSystemPrompt() { return `คุณคือ Inventory Bot สำหรับจัดการสต็อกสินค้า ตอบเป็น JSON เท่านั้น ไม่ต้องอธิบายเพิ่ม รูปแบบ JSON: { "action": "add" | "remove" | "update" | "query" | "summary", "product": "ชื่อสินค้า", "quantity": number | null, "price": number | null, "message": "ข้อความตอบกลับภาษาไทย" } ตัวอย่าง: - "เพิ่ม iPhone 16 50 เครื่อง ราคา 35000" → {"action":"add","product":"iPhone 16", "quantity":50,"price":35000, "message":"เพิ่ม iPhone 16 จำนวน 50 เครื่อง ราคา 35,000 บาท/เครื่อง เรียบร้อยแล้ว"} - "สินค้าไหนใกล้หมด?" → {"action":"query","product":null, "quantity":null,"price":null, "message":"กำลังตรวจสอบสินค้าที่เหลือน้อย..."} - "สรุปยอดวันนี้" → {"action":"summary","product":null, "quantity":null,"price":null, "message":"กำลังสรุปข้อมูลสต็อก..."} `; }
Core Logic: Execute คำสั่งจาก Gemini ลง Google Sheets
function processCommand(userInput) { const ss = SpreadsheetApp.getActiveSpreadsheet(); const inv = ss.getSheetByName('Inventory'); const chat = ss.getSheetByName('ChatBot'); // 1. ส่งคำสั่ง + ข้อมูลสต็อกปัจจุบันให้ Gemini const currentData = inv.getDataRange().getValues(); const prompt = `สต็อกปัจจุบัน:\n${JSON.stringify(currentData)}\n\nคำสั่ง: ${userInput}`; const result = callGemini(prompt); // 2. Execute ตาม action switch (result.action) { case 'add': inv.appendRow([ generateSKU(), result.product, result.quantity, result.price, result.quantity * result.price, new Date() ]); break; case 'remove': removeProduct(inv, result.product, result.quantity); break; case 'query': // Gemini ตอบจาก currentData ที่ส่งไปใน prompt break; case 'summary': // Gemini สรุปจาก currentData break; } // 3. แสดงผลใน ChatBot sheet chat.appendRow([new Date(), userInput, result.message]); return result.message; }
Prompt Tips: ส่ง currentData (สต็อกปัจจุบัน) ไปกับทุก request เพื่อให้ Gemini ตอบคำถามอย่าง “สินค้าไหนใกล้หมด?” ได้อย่างแม่นยำ ข้อจำกัดคือ Sheet ไม่ควรมีเกิน ~2,000 แถว เพราะจะชนขีดจำกัด context window ของ Gemini Flash
Step 4: ตั้ง Trigger ให้ Bot ทำงานอัตโนมัติ
// ทำงานทุกครั้งที่พิมพ์ใน ChatBot sheet function onEdit(e) { const sheet = e.source.getActiveSheet(); if (sheet.getName() !== 'ChatBot') return; const col = e.range.getColumn(); const row = e.range.getRow(); // Column A = คำสั่ง (user input) if (col === 1 && e.value) { const reply = processCommand(e.value); sheet.getRange(row, 2).setValue(reply); } } // Helper: สร้าง SKU อัตโนมัติ function generateSKU() { return 'SKU-' + Date.now().toString(36).toUpperCase(); } // Helper: ลบ/ลดจำนวนสินค้า function removeProduct(sheet, name, qty) { const data = sheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { if (data[i][1].includes(name)) { const newQty = Math.max(0, data[i][2] - qty); sheet.getRange(i + 1, 3).setValue(newQty); sheet.getRange(i + 1, 5).setValue(newQty * data[i][3]); sheet.getRange(i + 1, 6).setValue(new Date()); break; } } }
เหมาะกับใคร ไม่เหมาะกับใคร
ทุกเครื่องมือมีขอบเขต — การเลือกใช้ Sheets + AI Bot ต้องเข้าใจทั้งจุดแข็งและจุดอ่อนก่อนตัดสินใจ นี่คือ 2 มุมมองที่ต้องชั่งน้ำหนัก
Stack นี้ไม่ได้มาแทน ERP ระดับองค์กร — แต่สำหรับร้านค้า ร้านอาหาร หรือธุรกิจขนาดเล็กที่ยังจัดการสต็อกบน Excel อยู่ มันคือการกระโดดจากยุคก่อนเข้าสู่ AI ด้วยต้นทุนที่ต่ำที่สุด
— มุมมอง Pragmatic
ต่อยอดอย่างไร — จาก Bot ง่าย ๆ สู่ระบบที่ใหญ่ขึ้น
Bot ที่เราสร้างเป็น MVP (Minimum Viable Product) — ใช้เวลาไม่ถึงชั่วโมงก็มีระบบจัดการสต็อกที่เข้าใจภาษาไทย แต่จุดที่น่าตื่นเต้นจริง ๆ คือสิ่งที่ต่อยอดได้
1. เชื่อม LINE Notify — แจ้งเตือนสินค้าใกล้หมด
เพิ่มฟังก์ชัน checkLowStock() ที่รันทุกเช้า ตรวจสินค้าที่เหลือต่ำกว่า threshold แล้วส่งแจ้งเตือนผ่าน LINE Notify — ใช้ UrlFetchApp เรียก LINE API ได้ตรง ๆ จาก Apps Script
2. เพิ่ม Sheet “Sales Log” — วิเคราะห์แนวโน้ม
บันทึกทุก transaction ลง sheet แยก แล้วให้ Gemini วิเคราะห์ว่า “สัปดาห์นี้ iPhone ขายเท่าไหร่?” หรือ “สินค้าไหนขายดีขึ้น?” ได้ทันที
3. สร้าง Web App — ให้พนักงานหลายคนใช้พร้อมกัน
Apps Script สามารถ deploy เป็น Web App ได้ — สร้างหน้าเว็บง่าย ๆ ด้วย HTML Service ให้พนักงานหน้าร้านสแกนบาร์โค้ดแล้วอัปเดตสต็อกผ่านมือถือ↗ Web Apps Guide
4. ย้ายไป Cloud SQL เมื่อโตจนเกิน Sheets
เมื่อธุรกิจโตจนมีสินค้าหลายพัน SKU — ย้ายข้อมูลไป Cloud SQL แล้วให้ Apps Script เป็น middleware เรียก SQL แทน Sheets API ได้โดยไม่ต้องเปลี่ยน UI↗ Cloud SQL Docs
คำแนะนำสำหรับนักพัฒนาไทย: เริ่มจาก Sheets + Gemini Flash สำหรับ prototype — ถ้าลูกค้าพอใจ ค่อยอัปเกรดเป็น Cloud SQL + Gemini Pro — เก็บ Architecture เดิมไว้ได้เกือบทั้งหมด ไม่ต้องเริ่มใหม่จากศูนย์
สิ่งที่เราเชื่อ: อนาคตของ software สำหรับ SME ไทยไม่ใช่ ERP หลายล้านบาท — แต่เป็น AI agent ที่วิ่งอยู่ข้างในเครื่องมือที่ทุกคนมีอยู่แล้ว อย่าง Google Sheets, LINE, หรือ Excel ระบบที่ดีที่สุดคือระบบที่ไม่ต้องสอนพนักงานใหม่ — แค่พิมพ์ภาษาไทยก็ทำงานได้
References
- [1] Google Cloud — Vertex AI Gemini API Reference
- [2] Google Developers — Apps Script Spreadsheet Service Reference
- [3] Google Cloud — Setting Up Your Cloud Environment for Vertex AI
- [4] Google Developers — Web Apps with Apps Script
- [5] Google Cloud — Cloud SQL Documentation
- [6] Google Developers — Apps Script Triggers