ผสม Vertex AI เข้า Apps Script ทำ AI-Powered Inventory Bot ใน Google Sheets | Chontechhub

ผสม Vertex AI เข้า Apps Script ทำ AI-Powered Inventory Bot ใน Google Sheets | Chontechhub
Chontechhub
Tutorial · Google Cloud & AI

ผสม Vertex AI เข้า Apps Script ทำ AI-Powered Inventory Bot ใน Google Sheets

10 เมษายน 2569 12 min read Chontechhub Editorial
Google Sheets
Database & UI
Apps Script
Backend Logic
Vertex AI
Gemini API
Architecture — Google Sheets → Apps Script → Vertex AI (Gemini)
Chontechhub Editorial
Google Cloud & AI Tutorial · qr4tech.com
Tutorial
01

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 การขาย

02

ทำไมต้อง Stack นี้ — ตัวเลขที่น่าสนใจ

Google Sheets มีผู้ใช้งานกว่า 900 ล้านคนทั่วโลก และเป็นเครื่องมือที่คนไทยในภาคธุรกิจคุ้นเคยมากที่สุดเครื่องมือหนึ่ง เมื่อผสมกับ Vertex AI ที่รองรับภาษาไทยได้ดี — เราได้ inventory system ที่ learning curve ต่ำมาก↗ Gemini API Ref

$0
Server Cost
Apps Script = free hosting
<50
Lines of Code
Core bot logic
~1s
Response Time
Gemini Flash model
900M+
Sheets Users
Global user base

เปรียบเทียบ: ระบบสต็อกแบบต่าง ๆ

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 ฟรีที่เข้าใจภาษาไทย

03

สร้าง Bot ทีละขั้น — จากศูนย์ถึงใช้งานจริง

Step 1
สร้าง Google Sheet โครงสร้างสต็อก
สร้าง Sheet ชื่อ “Inventory” มีคอลัมน์: SKU, ชื่อสินค้า, จำนวน, ราคา/หน่วย, มูลค่ารวม, อัปเดตล่าสุด — แล้วสร้าง Sheet “ChatBot” เป็นช่องพิมพ์คำสั่ง
Step 2
เปิด Apps Script และเชื่อม Vertex AI
Extensions → Apps Script → เขียนฟังก์ชันเรียก Gemini API ผ่าน UrlFetchApp พร้อมตั้ง system prompt ให้เข้าใจ inventory commands
Step 3
เขียน Core Logic — Parse & Execute
ให้ Gemini แปลงคำสั่งภาษาไทยเป็น JSON action แล้ว Apps Script execute ตาม — เพิ่มแถว, ลบ, แก้ไข, ค้นหา
Step 4
เพิ่ม Trigger & Sidebar UI
ตั้ง onEdit trigger ให้ทำงานอัตโนมัติเมื่อพิมพ์คำสั่ง หรือสร้าง sidebar ด้วย HTML Service เป็น chat interface
Step 5
ทดสอบ & ปรับ Prompt
ทดสอบกับคำสั่งจริงหลากหลายรูปแบบ ปรับ system prompt ให้เข้าใจบริบทสินค้าของคุณ

Step 2: ฟังก์ชันเชื่อมต่อ Vertex AI (Gemini)

Apps Script — VertexAI.gs
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

Apps Script — SystemPrompt.gs
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

Apps Script — BotLogic.gs
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 ทำงานอัตโนมัติ

Apps Script — Trigger.gs
// ทำงานทุกครั้งที่พิมพ์ใน 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;
    }
  }
}
04

เหมาะกับใคร ไม่เหมาะกับใคร

ทุกเครื่องมือมีขอบเขต — การเลือกใช้ Sheets + AI Bot ต้องเข้าใจทั้งจุดแข็งและจุดอ่อนก่อนตัดสินใจ นี่คือ 2 มุมมองที่ต้องชั่งน้ำหนัก

เหมาะมากสำหรับ SME
ไม่มีค่า server — ใช้ได้ฟรีหรือแทบฟรี (Gemini Flash ราคาถูกมาก)
ไม่ต้องฝึกพนักงาน — ทุกคนรู้จัก Google Sheets อยู่แล้ว
สั่งงานภาษาไทยได้ทันที — ไม่ต้องจำ UI หรือปุ่มกด
ตั้งค่าภายใน 30 นาที — copy-paste โค้ดแล้วใช้ได้เลย
ข้อจำกัดที่ต้องรู้
ไม่เหมาะกับหลักหมื่น SKU — Sheets มีขีดจำกัดที่ ~10 ล้าน cells
ไม่มี ACID transaction — 2 คนแก้พร้อมกันอาจ conflict
AI อาจเข้าใจผิดบางครั้ง — ต้องมีระบบยืนยันก่อน execute
Apps Script มี quota — 6 นาที/run, 90 นาที/วัน (free tier)

Stack นี้ไม่ได้มาแทน ERP ระดับองค์กร — แต่สำหรับร้านค้า ร้านอาหาร หรือธุรกิจขนาดเล็กที่ยังจัดการสต็อกบน Excel อยู่ มันคือการกระโดดจากยุคก่อนเข้าสู่ AI ด้วยต้นทุนที่ต่ำที่สุด

— มุมมอง Pragmatic
05

ต่อยอดอย่างไร — จาก 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

← Back to Blog