Stock Inventory Line Bot

ตอบกลับข้อมูลสินค้าคงคลังผ่าน LINE โดยการอัพเดตสต็อกผ่าน Google sheet
โปรเจกต์นี้เป็นการพัฒนา LINE Bot เพื่อให้สามารถ ตอบคำถามเกี่ยวกับสินค้าคงคลังแบบอัตโนมัติ โดยผู้ใช้เพียงพิมพ์ชื่อสินค้าผ่าน LINE Bot ระบบจะค้นหาข้อมูลในฐานข้อมูล (Google Sheets) แล้วตอบกลับด้วยจำนวนคงเหลือทันที

เนื่องจากปัญหาที่พบเจอเวลาที่พนักงานใน Store หลายคนขายสินค้าให้กับลูกค้าแต่ไม่สามารถตรวจสอบ stock สินค้าได้ว่ามีรุ่นอะไรและจำนวนเท่าไร เราจึงได้ดำเนินการทำ LINE Bot เพื่อให้ตรวจสอบได้ทุกที่ทุกเวลา เพื่อง่ายและสะดวกต่อการนำเสนอสินค้าให้กับลูกค้ามากขึ้น


Objective

  • เพิ่มความสะดวกในการตรวจสอบสต็อกสินค้าโดยไม่ต้องเปิดไฟล์หรือระบบหลังบ้าน
  • ใช้งานได้ง่ายผ่าน LINE ที่คนทั่วไปคุ้นเคย และเป็น App ที่คนทำงานใช้งานมาก
  • เหมาะสำหรับร้านค้าขนาดเล็กหรือทีมขายที่ต้องการข้อมูลแบบรวดเร็ว

Technology ที่เราได้นำมาใช้งานจะต้องเป็นแบบฟรีเป็นหลัก เพื่อง่ายต่อการนำไปต่อยอดได้ เช่น LINE Messaging API, Google Apps Script, Google Sheets


Workflow Diagram

ภาพด้านบนแสดงกระบวนการทำงานของระบบ Stock Inventory LINE Bot ซึ่งประกอบด้วย 3 องค์ประกอบหลัก ได้แก่:

  1. Google Sheets
    ใช้เป็นฐานข้อมูลหลักในการจัดเก็บรายการสินค้าและจำนวนคงเหลือในแต่ละรายการ
  2. Google Apps Script
    ทำหน้าที่เป็นตัวกลาง (Middleware) เชื่อมระหว่าง LINE และ Google Sheets โดย:
    • รับข้อความจากผู้ใช้ผ่าน LINE API (Webhook)
    • ประมวลผลข้อความ เช่น การค้นหาคำสำคัญ
    • ดึงข้อมูลจาก Google Sheets ผ่าน REST API
    • ส่งข้อความตอบกลับผู้ใช้ผ่าน LINE API
  3. LINE Platform
    เป็นช่องทางหลักที่ผู้ใช้สามารถโต้ตอบกับระบบได้ง่าย ๆ เพียงพิมพ์ชื่อสินค้าที่ต้องการตรวจสอบ

Workflow Steps

  1. ผู้ใช้ส่งข้อความ (เช่น “iPhone” หรือ “กาแฟ”) ผ่านแอป LINE app
  2. LINE ส่งข้อความดังกล่าวมายัง Google Apps Script ผ่าน Webhook
  3. Apps Script ประมวลผลข้อความและค้นหาข้อมูลใน Google Sheets
  4. ✅ เมื่อพบข้อมูลที่ตรงกัน → ระบบจะดึงจำนวนคงเหลือและส่งกลับไปยัง LINE
  5. ผู้ใช้จะได้รับข้อความตอบกลับทันที เช่น “📦 กาแฟ จำนวนคงเหลือ: 12”

❌ หากไม่พบสินค้าใดที่ตรงกับคำค้น ระบบจะตอบกลับว่าไม่พบข้อมูล


Development Process

1. Planning วางแผนระบบ
กำหนดเป้าหมาย และวาง Flow เชื่อม LINE → Apps Script → Google Sheets

2. Database Setup เตรียมฐานข้อมูล
สร้าง Google Sheets สำหรับเก็บรายการสินค้าและจำนวนคงเหลือ เราใช้สามารถใช้งานกับ Database โดยตรงก็ได้ เช่น AWS Cloud หรือ Database + OpenAI API(เสียเงิน) ก็สามารถทำได้ เราใช้งาน Google Sheets เพราะง่ายและสะดวกต่อธุรกิจขนาดเล็ก และสามารถทำงานได้หลากหลายแบบ เหมาะสำหรับคนที่ทำงาน Excel ก็สามารถทำได้เพียงแต่เราต้องอัพเดต Google Sheets ทุกวัน
โดย Google Sheets ของเราจะแยกหน้า Data กับ API เพื่อเวลาเราอัพเดตอัพเฉพาะแค่หน้า Data และใช้งานฟังก์ชั่น =QUERY() ในหน้า API เพื่อดึงข้อมูลที่จำเป็นจากหน้า Data และใช้ในการส่ง API

3. Coding with Apps Script เขียนโค้ด
เริ่มจากรับข้อความจาก LINE → ค้นข้อมูลใน Google Sheets → ส่งข้อความตอบกลับทาง LINE โดยโค้ดที่เราจะเขียนกันจะเป็น Javascript บน App Script(doPost(e)) ซึ่งเรามี Templates code ให้ทุกคนไปใช้งานและปรับแต่งได้ง่าย เพื่อนำไปใช้งานที่หลากหลายมากขึ้น

Code App Script(doPost(e))
function doPost(e) {
  // JSON payload from LINE Webhook.
  const json = JSON.parse(e.postData.contents);

  // Handle only text messages
  if (!json.events[0].message || json.events[0].message.type !== "text") {
    return ContentService.createTextOutput("Ignore non-text message");
  }

  // Retrieves the message content and the token needed to send a reply.
  const userMessage = json.events[0].message.text.toLowerCase(); //LowerCase()
  const replyToken = json.events[0].replyToken;

  // Open Google Sheet (replace with your own Sheet ID and Sheet name)
  const ss = SpreadsheetApp.openById("YOUR_SHEET_ID_HERE"); //www.docs...d/<ID sheet>/edit
  const sheet = ss.getSheetByName("API"); //Name Page on Google Sheet
  const data = sheet.getDataRange().getValues();
  
  // Removes special characters and creates a flexible keyword pattern using RegEx.
  const cleaned = userMessage.replace(/[^\w\sก-๙]/gi, "").toLowerCase();
  const words = cleaned.split(/\s+/);
  const keywordPattern = words.map(w => `(?=.*${w})`).join("");

  let result = "";

  // Loops through the spreadsheet to find products matching all keywords.
  try {
    const regex = new RegExp(keywordPattern, "i");

    for (let i = 1; i < data.length; i++) {
      const productName = data[i][0];   // column A = productName
      const stock = data[i][1];         // column B = stock

      // If a match is found, creates a stock reply message.
      if (regex.test(productName)) {
        result += `📦 ${productName}\nจำนวนคงเหลือ: ${stock}\n`; //Customize the message the bot will reply to.
      }
    }
  } catch (err) {
    Logger.log("❗ Regex error: " + err);
    result = "";
  }

  //If no match is found, shows a friendly fallback message.
  if (!result) {
    result = "😕 ไม่พบสินค้าที่คุณค้นหา\nลองพิมพ์ชื่อหรือรุ่นให้ชัดเจน เช่น 'iPhone 13', 'iPad Air 11'"; 
  } //Customize the message the bot will reply to.

  // Send Response to LINE User
  const replyPayload = {
    replyToken: replyToken,
    messages: [{ type: "text", text: result }]
  };

  const headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_CHANNEL_ACCESS_TOKEN"
  }; //Token of Line Developers

  // Send Reply via LINE API
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", {
    method: "post",
    headers: headers,
    payload: JSON.stringify(replyPayload)
  });

  return ContentService.createTextOutput("OK");
}

สามารถใช้งาน Code นี้เป็น Templates ในการนำไปใช้งานได้เลย โดยเปลี่ยนเฉพาะ YOUR_SHEET_ID_HERE เป็น ID Google Sheet ของตัวเองได้เลยดูได้จากลิ้งของ Google Sheet ได้เลย จะอยู่ระหว่าง www….d/<id google sheet>/edit……
const sheet = ss.getSheetByName(“API“) เปลี่ยนชื่อหน้า Page ตามหน้าที่เราต้องการได้เลยเราใช้หน้า API

ต่อไปเลื่อนลงมามาเพิ่มและเลือก column ในหน้า Page กัน โดยการสร้างตำแปรมาเก็บข้อมูลที่ดึงจาก column สามารถเพิ่มได้เช่น const price = data[i][2]; ดึงค่ามาจาก column C แถว A เริ่มนับ 0 เป็นค่าแสดง Priceราคาสินค้า นั้นเอง

ต่อไปเราปรับแต่งหน้าที่ Bot จะตอบกลับกรณีที่มีสินค้าหรือข้อมูลที่เราต้องการใน Google Sheet กัน
เราปรับแต่งข้อความใน `..ข้อความ..` และใส่ค่าตัวแปรที่เก็บข้อมูลจาก column ลงได้ เช่น ${price} เพื่อแสดงค่าบนข้อความที่ Bot ตอบเรานั้นเอง (\n คือขึ้นย่อหน้าใหม่)

เมื่อแก้ไขกรณีที่หาข้อมูลเจอ ก็ต้องไปต่อกรณีที่ไม่พบเจอข็อมูลกัน สามารถแก้ไขได้เหมือนเดิมเลย ถึงแม้เราจะทำงานกรองข้อมูลโดยการตั้ง Lowercase for input จาก User และใช้งาน RegEx เพื่อหาให้แม่นยําขึ้น แต่บ้างครั้งก็มี Error จาก User ได้เหมือนกันควรมีการแจ้งเตือนเพื่อให้ User ใช้งานได้ต่อเนื่องและถูกต้อง

สุดท้ายเราต้องไปเอา CHANNEL_ACCESS_TOKEN ของ LINE Developers เพื่อมาใส่ใน code เพื่อให้ Bot ส่งข้อมูลไปกลับได้อย่างถูกต้องกัน สามารถใช้ Line Login ได้เลย

4. LINE API Integration เชื่อมต่อกับ LINE
สมัคร LINE Developers ตั้งค่า Webhook เชื่อม LINE กับ Apps Script Web App
เมื่อเข้ามา สามารถใช้ Line Login ได้เลย และควร สมัคร Line OA เพื่อสร้างบัญชีสำหรับ Bot ก่อน
โดยกรอกข้อมูลเป็น

  • ชื่อบัญชี : Bot
  • อีเมล์ : xxxxxx@xxxx.com
  • ประเภทธุรกิจ: สามารถเลือกได้เลยเราเลือก ธุรกิจบริการ

เมื่อเราได้ Line OA มาแล้วให้เข้าไปที่ LINE Developers กด Console Login และสร้าง Providers ตั้งชื่อ และกด Setting เพื่อเข้าไปเอา Provider ID นำไปใส่ในบัญชี Line OA หน้า Chat -> Messaging API กดใช้ Messaging API จะมี Providers ขึ้นให้เลือกแต่ถ้าไม่ขึ้นก็ใส่ Provider ID เพื่อเชื่อม API channel ต่อกับ Line OA ที่เราสร้างจะมีขึ้นมา

กลับมาที่ Console LINE Developers จะมี Line OA Bot ขึ้นมาให้เรากดเข้าไปไปที่หน้า Messaging API เลื่อนลงที่ Channel access token กด Issue เพื่อจะได้ Token
นำไปใส่ใน Apps Script ตรง YOU_CHANNEL_ACCESS_TOKEN และกด Deploy > Manage deployments กด New เลือก Web App และกรอก เลือก Anyone เพื่อเป็นสาธารณะ และกด Deploy Google จะขอสิทธิ์ → กดยอมรับทั้งหมด เราจะได้ URL https://script.google.com/macros/s/AKf…/exec ให้นำไปใส่ที่ LINE Developers > Messaging API > Webhook settings

  • Description: LINE Webhook
  • Execute as: Me
  • Who has access: Anyone

เมื่อใส่ URL แล้วกด Verify กดติ๊ก Use webhook เลื่อนลงมาปิด Auto-reply messages ก็เสร็จสิ้น Bot พร้อมทำงานแล้ว

5. Testing ทดสอบระบบจริง
ตรวจสอบการตอบกลับทั้งกรณีเจอ/ไม่เจอสินค้า พอเราเลื่อนหน้า Messaging API ขึ้นมาจะเจอ QR code สามารถเข้าถึง Bot ใน Line ได้ทันที เราไปทดสอบกัน

เราได้ทดสอบอยู่ในระดับที่ดีใช้งานได้สะดวก แต่เพียงแค่ต้องอัพเดต Google Sheet ทุกวันเท่านั้น


Scalability & Integration

จากโปรเจกต์ Stock Inventory LINE Bot นี้ ยังสามารถต่อยอดได้อีกหลากหลายแนวทาง เช่น การเชื่อมต่อกับฐานข้อมูลจริง (เช่น MySQL, Firebase, หรือ AWS RDS) เพื่อรองรับการจัดการข้อมูลจำนวนมาก หรือทำระบบหลายผู้ใช้งาน (multi-user) ได้อย่างมีประสิทธิภาพมากขึ้น

นอกจากนี้ ยังสามารถนำ OpenAI API, ML model หรือโมเดลภาษาต่าง ๆ เข้ามาเสริม เพื่อให้ Bot สามารถ เข้าใจคำถามของผู้ใช้ในรูปแบบที่หลากหลายขึ้น, แนะนำสินค้าอัตโนมัติ, หรือช่วยสรุปข้อมูลเชิงวิเคราะห์จากพฤติกรรมการใช้งานได้

ตัวอย่างการประยุกต์ใช้งาน

  • 🛒 Retail: แนะนำสินค้า ตรวจสต็อกแบบเรียลไทม์ แจ้งเตือนผ่าน LINE
  • 🏥 Healthcare: เช็กเวชภัณฑ์ ตอบคำถามเกี่ยวกับยาอัตโนมัติ
  • 🏗️ Manufacturing: ตรวจวัตถุดิบ สั่งเบิก เชื่อม ERP
  • 🏨 Hospitality: ตรวจของใช้ พนักงานพิมพ์ชื่อของ ระบบแจ้งจำนวน
  • 📦 Logistics / E-Commerce: แยกคลังสินค้า ตอบสถานะออเดอร์ ใช้ AI วิเคราะห์

สิ่งเหล่านี้จะเปลี่ยนระบบ Bot จากแค่ “ผู้ตอบคำถามเรื่องสต็อก” ให้กลายเป็น ผู้ช่วยอัจฉริยะด้านธุรกิจ ที่สามารถวิเคราะห์ข้อมูล ตอบคำถาม และเสนอแนะสิ่งที่มีประโยชน์ได้ในอนาคต และไม่ใช้เพียงแค่ทาง Line เท่านั้นที่สามารถดำเนินการได้ เราสามารถทำได้บน Website ,App และ User Interface ได้อีกมากมายเลยซึ่งทำให้การทำงาน และใช้ชีวิตสะดวกมากขึ้นเกิดบริการและ ธุรกิจใหม่มากมาย


Report PDF : Stock Inventory Line Bot

GitHub Project : Stock Line Bot


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *