
§01แจกฟรี — จดรายรับรายจ่ายผ่าน LINE
สำหรับ Blog นี้จะแจกระบบ จดจ่าย Bot เป็นการจดรายรับ-รายจ่าย โดยเน้นวิธีง่ายๆ ไม่ได้ใช้ tech มากมาย เพื่อเป็นการเรียนรู้พื้นฐานก่อนที่จะไปทำท่ายากต่อไป ในบล็อกนี้แค่ copy โค้ดไปวางใน Google Apps Script ของตัวเอง ก็พร้อมใช้เลยครับ
ถ้าอยากรู้ว่าบอทนี้ถูกสร้างขึ้นมายังไงทีละขั้นตอน — ถ้ามีคนสนใจเยอะ จะเล่าให้ฟังตั้งแต่เริ่มจนจบในบล็อกถัดไป หรือใครใจร้อนอยากเรียนรู้เองได้ที่ CLAUDE.md เลยครับ
§02ทำงานยังไงคร่าวๆ
ทั้งระบบรันอยู่ใน Google Apps Script ตัวเดียว ไม่มี server แยก ไม่มี database แยก ไม่มี AI ไม่มี OCR — เป็น rule-based ล้วนๆ ทุกอย่างจบภายในคำขอเดียว ไม่มี queue ไม่มี background job
- LINE ส่งข้อความเข้า webhook — พิมพ์อะไรในแชท LINE จะยิง event เข้า
doPost(e)ของ Apps Script ทันที - Parser แยกรายการ — พิมพ์หลายรายการคั่นด้วยจุลภาคหรือขึ้นบรรทัดใหม่ได้ (เช่น
ข้าว 100, น้ำ 50) ระบบแยกเป็นรายการย่อยแล้วอ่านทีละอัน โดยดึง ตัวเลขตัวสุดท้าย ในแต่ละรายการมาเป็นจำนวนเงิน ส่วนที่เหลือคือคำอธิบาย ถ้าขึ้นต้นด้วย+จะถูกตีเป็นรายรับ - จับคู่หมวดหมู่จาก Sheet — เทียบคำอธิบายกับ sheet
Categoriesแบบ substring match ได้หมวดหมู่กลับมา และถ้าแถวนั้นตั้ง type เป็น income ระบบจะสลับเป็นรายรับให้อัตโนมัติแม้ไม่ใส่+— จุดนี้แก้ที่ Sheet ตรงๆ ได้เลย ไม่ต้องแตะโค้ด - บันทึกลง Sheet — แต่ละรายการกลายเป็นแถวใหม่ใน sheet
Records(เวลา, คำอธิบาย, จำนวนเงิน, ประเภท, หมวดหมู่, ข้อความดิบ) - ตอบกลับพร้อมยอดรวม — ก่อนตอบ ระบบรวมยอดรับ/จ่ายของเดือนนี้ (นับตาม timezone Asia/Bangkok) แล้วตอบกลับทันทีด้วย LINE reply message ซึ่งฟรีและไม่กินโควต้า push
พิมพ์ปุ๊บ เห็นแถวใหม่ใน Sheet ปั๊บ — ไม่มีอะไรซับซ้อนกว่านี้แล้ว
§03สิ่งที่ต้องมีก่อน
- บัญชี Google (สำหรับสร้าง Sheet + Apps Script)
- บัญชี LINE Official Account พร้อม Messaging API channel และ channel access token (ตัวยาว จาก tab Messaging API ใน LINE Developers Console)
§04ขั้นตอน
-
สร้างโปรเจกต์ใหม่: เปิด Google Sheets ใหม่ →
Extensions→Apps Script -
Copy โค้ด: เปิดไฟล์
dist/Code.gsใน repo นี้บน GitHub → กด Raw → เลือกทั้งหมด copy → กลับไปที่ Apps Script editor → ลบโค้ดเดิมในไฟล์Code.gsทั้งหมด → วางโค้ดที่ copy มาแทน -
ใส่ token ของตัวเอง: หาบรรทัดแรกๆ ที่เขียนว่า
const LINE_CHANNEL_ACCESS_TOKEN = '';แก้เป็น token จริงของคุณ เช่น
const LINE_CHANNEL_ACCESS_TOKEN = 'your-real-token-here';⚠️ ห้าม เอาไฟล์ที่มี token จริงไป commit ขึ้น git หรือแชร์ต่อสาธารณะเด็ดขาด — ถ้าจะแชร์โค้ดต่อ ให้ลบ token ออกก่อน
-
ตั้ง timezone: ⚙️ (Project Settings) → General settings → Time zone → เลือก
(GMT+07:00) Bangkok— จำเป็นสำหรับให้ยอดรวมรายเดือนคำนวณถูกช่วงเวลา -
Deploy เป็น Web app: ปุ่ม
Deploy→New deployment→ เลือกประเภทWeb app→- Execute as:
Me - Who has access:
Anyone— ⚠️ ต้องเลือก "Anyone" เฉยๆ ไม่ใช่ "Anyone with Google account" (สองอันนี้หน้าตาคล้ายกันมากแต่ทำงานคนละแบบ — ถ้าเลือกผิดบอทจะเงียบ ไม่ตอบอะไรเลย) - กด
Deployแล้ว copy URL ที่ลงท้ายด้วย/exec
- Execute as:
-
เชื่อม LINE webhook: ไปที่ LINE Developers Console → channel ของคุณ → tab
Messaging API→ ช่องWebhook URL→ วาง URL จากข้อ 5 → กดVerify→ เปิดสวิตช์Use webhook💡 ถ้า Verify ขึ้น error แปลกๆ เกี่ยวกับ redirect (เช่น 302) ทั้งที่ตั้งค่าถูกทุกอย่าง — บางครั้งเป็นแค่ปุ่ม Verify ที่เข้มงวดเรื่อง redirect มากกว่าการส่งข้อความจริง ลองแอดบอทเป็นเพื่อนแล้วส่งข้อความจริงดูก่อนจะสรุปว่าพัง
หน้าจอ LINE Developers Console ช่อง Webhook URL พร้อมปุ่ม Verify
FIG. 02 — ช่อง Webhook ใน LINE Developers Console -
ปิด auto-reply: ใน LINE Official Account Manager → ตั้งค่าแชท → ปิด auto-reply / greeting message (ไม่งั้นบอทจะตอบซ้อนกับข้อความอัตโนมัติ)
-
ทดสอบ: แอดบอทเป็นเพื่อน (QR code ใน LINE Developers Console) แล้วพิมพ์
ข้าว 200— ควรได้คำตอบกลับมาพร้อมหมวดหมู่และยอดรวมเดือนนี้ และมีแถวใหม่โผล่ใน Google Sheet ที่ผูกกับสคริปต์ -
สำหรับรายรับจะใช้ keyword ที่ดักไว้ เช่น
เงินเดือน 20000

§05ปรับแต่งได้ตรงไหน
- เพิ่ม/แก้หมวดหมู่ — ไปที่ sheet
Categoriesเพิ่มแถวkeyword | category | typeได้เลย เช่นชาไข่มุก | เครื่องดื่ม | expense— ไม่ต้องแตะโค้ด ไม่ต้อง deploy ใหม่ พิมพ์ปุ๊บระบบจับหมวดหมู่ถูกทันที - ทำให้คำไหนกลายเป็นรายรับอัตโนมัติ — ตั้ง
typeของแถวนั้นในCategoriesเป็นincome(เช่น เงินเดือน, ค่าคอม) ผู้ใช้ไม่ต้องจำใส่+ทุกครั้ง - จดหลายรายการทีเดียว — คั่นด้วยจุลภาคหรือขึ้นบรรทัดใหม่ เช่น
ข้าว 100, น้ำ 50หรือพิมพ์คนละบรรทัด บอทแยกให้เองแล้วตอบเป็น bullet list พร้อมยอดรวมท้ายข้อความ - อยากแก้รูปแบบคำตอบ หรือเพิ่มคอลัมน์ใน
Records— แก้ตรงนี้ต้องลงโค้ดในCode.gsเอง เพราะเป็น logic ไม่ใช่ data — ถ้าอยากรู้ว่าโค้ดส่วนไหนทำอะไร รอติดตามบล็อกถัดไปที่จะเล่าเบื้องหลังการสร้างทั้งหมด

§06ข้อจำกัด
ระบบนี้ตั้งใจทำให้ง่ายและฟรีที่สุด เลยมีข้อแลกเปลี่ยนที่ควรรู้ก่อนใช้จริง:
- ใช้คนเดียว — ไม่มีระบบแยกผู้ใช้หรือ auth ถ้าแชร์บอทตัวเดียวกันหลายคนพิมพ์ ยอดจะถูกรวมเป็นก้อนเดียวกันหมด
- ไม่มี AI ไม่มี OCR — อ่านใบเสร็จไม่ได้ ต้องพิมพ์รายการเองทุกครั้ง เป็น rule-based ล้วนๆ ตามที่ตั้งใจไว้ตั้งแต่แรก
- อ่านทั้งชีตทุกครั้งที่คำนวณยอดรวม — โอเคสำหรับใช้งานส่วนตัวที่มีข้อมูลหลักร้อย-หลักพันแถว แต่ไม่เหมาะกับการ scale เป็นระบบหลายคนใช้พร้อมกัน
- ติดโควต้าฟรีของ Google Apps Script — ใช้คนเดียวสบายๆ ไม่มีทางชน แต่ถ้าจะเอาไปทำอะไรที่เรียกถี่มากๆ ควรเช็ค quota ของบัญชีตัวเองก่อน
- รับได้แค่ข้อความ — รูปภาพ, สติกเกอร์, เสียง, ตำแหน่ง จะได้แค่คำตอบแจ้งว่าใช้งานไม่ได้ ไม่มีการประมวลผลใดๆ เพิ่มเติม
§07ถ้าไม่ทำงาน
- บอทเงียบทั้งที่ Verify ผ่าน → เช็ค auto-reply (ข้อ 7) และเช็คว่า token ในโค้ดถูกต้อง (ตัวยาวจาก Messaging API tab ไม่ใช่ channel secret)
- Verify ไม่ผ่านเลย → เช็คว่าเลือก "Anyone" ไม่ใช่ "Anyone with Google account" (ข้อ 5)
- ยอดรวมเดือนผิด → เช็ค timezone (ข้อ 4)
§08สรุป
Blog นี้เป็น step ง่ายๆ ที่เราได้เรียนรู้การทำงานของ Sheets และ Apps Script เชื่อมต่อกับ LINE แบบง่ายที่สุด หวังเป็นอย่างยิ่งว่าผู้อ่านจะได้รับความรู้ไปต่อยอด ทำระบบที่ซับซ้อนมากขึ้นได้
เนื้อหาถัดไป
- 🎯 เบื้องหลังการสร้าง: เล่าทีละขั้นตอนว่าบอทนี้ถูก build ขึ้นมายังไงตั้งแต่ศูนย์ ด้วย Claude Code
💬 ถ้ามีคำถาม comment ใต้วิดีโอ หรือเปิด issue ใน GitHub repo ครับ
Engineer, writer, occasional GPU-melter. Writes every Sunday about applied AI — agents, evals, and whatever broke that week.
If you got something out of this, share it with someone who's trying to ship their first agent.
