📑 สารบัญ
เริ่มต้น
สร้างไฟล์ Google Sheets ใหม่
ไฟล์นี้คือฐานข้อมูลของระบบ เก็บกฎแจ้งเตือน สรุปยอด ปลายทาง และประวัติการส่ง รวมถึงชีตยอดขาย/ฟอร์มตัวอย่าง (ใช้ชีตของร้านแทนได้)
- เข้า sheets.new ด้วยบัญชี Google ที่จะใช้งานจริง (แนะนำบัญชีของร้าน ไม่ใช่บัญชีส่วนตัวพนักงาน)
- คลิกชื่อไฟล์มุมซ้ายบน แล้วตั้งชื่อ เช่น ยอดขายร้าน — LINE SalesFeed
ใส่ระบบ
วางไฟล์ Code.gs, Index.html และ appsscript.json
ชุดไฟล์ที่ได้รับมี 3 ไฟล์หลักที่ต้องวาง (โฟลเดอร์ tools และ GUIDE ไม่ต้องอัปโหลด)
- ในไฟล์ชีต ไปที่ ส่วนขยาย›Apps Script
- ตั้งชื่อโปรเจกต์มุมซ้ายบนเป็น Jabphap LINE SalesFeed (ชื่อนี้จะแสดงในหน้าขออนุญาตสิทธิ์)
- เปิดไฟล์ Code.gs ในหน้าแก้ไข กด Ctrl + A ลบโค้ดเดิม แล้ววาง Code.gs ที่ได้รับทั้งไฟล์ กด Ctrl + S
- กดปุ่ม + ข้างคำว่า “ไฟล์” › HTML ตั้งชื่อว่า
Index(ระบบจะเติม .html ให้เอง) ลบเนื้อหาเดิมแล้ววาง Index.html ทั้งไฟล์ กดบันทึก - ไปที่ ⚙ การตั้งค่าโปรเจกต์ ติ๊ก “แสดงไฟล์ Manifest ‘appsscript.json’ ในเครื่องมือแก้ไข” กลับมาเปิด appsscript.json วางทับทั้งไฟล์ แล้วบันทึก
Code.gs เรียกหน้าเว็บจากไฟล์ชื่อ Index ถ้าสะกดต่างไป หน้าเว็บจะเปิดไม่ขึ้น
เลื่อนดูบรรทัดสุดท้ายของ Code.gs และ Index.html ว่าวางครบ (Index.html ลงท้ายด้วย </html>)
appsscript.json ทำอะไร และระบบขอสิทธิ์อะไรบ้าง
กำหนดเขตเวลา Asia/Bangkok และระบุสิทธิ์ที่ใช้จริงเท่านั้น:
| ดู แก้ไข สร้างสเปรดชีต | อ่านแถวใหม่และสรุปยอดจากชีตของคุณ |
| เชื่อมต่อบริการภายนอก | ส่งข้อความผ่าน LINE Messaging API |
| จัดการทริกเกอร์ | ตรวจแถวใหม่ตามรอบ ส่งสรุปยอดตามเวลา และรับเหตุการณ์ส่ง Google Form |
| แสดงเมนูในชีต | เมนู Jabphap LINE SalesFeed ในไฟล์ชีต |
ทำครั้งเดียว
รันฟังก์ชัน setup เพื่อสร้างชีต
- ในหน้าแก้ไข Code.gs เลือกฟังก์ชัน
setupจากรายการด้านบน แล้วกด ▶ เรียกใช้ - ครั้งแรก Google จะขออนุญาตสิทธิ์ — ทำตามขั้นที่ 4 แล้วกดเรียกใช้
setupอีกครั้ง - เมื่อเสร็จ ดู บันทึกการดำเนินการ (Execution log) ด้านล่าง จะขึ้นข้อความ “ติดตั้ง Jabphap LINE SalesFeed เรียบร้อย”
ระบบจะสร้างชีตเหล่านี้ให้อัตโนมัติ (พร้อมข้อมูลตัวอย่างให้ลองใช้):
| ชีต | เก็บอะไร |
|---|---|
| ปลายทาง LINE | กลุ่ม/ผู้ใช้ที่รับข้อความ (เพิ่มอัตโนมัติเมื่อเชิญบอทเข้ากลุ่ม) |
| กฎแจ้งเตือน | ชีตที่ติดตาม เทมเพลต รูปแบบ เงื่อนไข ปลายทาง และแถวล่าสุดที่ตรวจแล้ว |
| สรุปยอดอัตโนมัติ | คอลัมน์วันที่/ยอด/แยกตาม ช่วงเวลา และเวลาส่ง |
| ประวัติการส่ง | ทุกข้อความ สถานะ และข้อมูลสำหรับส่งซ้ำ (เก็บล่าสุด ~8,000 แถว) |
| ยอดขาย | ชีตออเดอร์ตัวอย่าง (วันที่ เลขออเดอร์ ลูกค้า ช่องทาง สินค้า ยอดรวม ...) |
| แจ้งโอนเงิน (ฟอร์ม) | ตัวอย่างหน้าตาคำตอบ Google Form แจ้งโอนพร้อมลิงก์สลิป |
ใน Execution log จะมีข้อความ รหัสตั้งค่าครั้งแรก: 123456 ใช้รหัสนี้ตอนเปิดเว็บแอปครั้งแรกเพื่อตั้งรหัสผ่านผู้ดูแล (ลืมรหัสผ่านภายหลัง ให้รันฟังก์ชัน resetAdminPassword เพื่อรับรหัสใหม่)
ถ้าเผลอลบชีตหรือทริกเกอร์ หรืออัปเดตเวอร์ชันใหม่ ให้รัน setup อีกครั้ง ระบบจะสร้างเฉพาะส่วนที่ขาด ข้อมูลเดิมไม่หาย
ทำครั้งเดียว
อนุญาตสิทธิ์ให้ระบบ
เป็นเรื่องปกติของสคริปต์ที่ติดตั้งเองในบัญชีของคุณ ข้อมูลไม่ได้ถูกส่งไปที่อื่นนอกจาก LINE


เพราะสคริปต์เป็นของคุณเองและไม่ได้ส่งให้ Google ตรวจรับรอง สคริปต์ทำงานในบัญชีของคุณเท่านั้น
เปิดใช้งาน
เผยแพร่เป็นเว็บแอป
- มุมขวาบน กด ทำให้ใช้งานได้›การทำให้ใช้งานได้รายการใหม่
- กดรูปเฟือง ⚙ เลือก เว็บแอป
- ตั้งค่า เรียกใช้ในฐานะ: ฉัน และ ผู้มีสิทธิ์เข้าถึง: ทุกคน แล้วกด ทำให้ใช้งานได้
- คัดลอก URL ของเว็บแอป (ลงท้ายด้วย
/exec) เก็บไว้ หรือบุ๊กมาร์กในมือถือ




LINE ส่ง Webhook (ข้อความแชต การเพิ่มเพื่อน การกดปุ่ม) มาที่ URL นี้โดยไม่ได้ล็อกอิน Google ถ้าเลือกอย่างอื่น บอทจะไม่ตอบ หน้าจัดการทั้งหมดยังป้องกันด้วยรหัสผ่านผู้ดูแล และ Webhook ป้องกันด้วยรหัสลับใน URL
LINE
สร้าง LINE OA และเปิด Messaging API
- สร้าง LINE Official Account ที่ manager.line.biz (แพ็กเกจฟรีใช้ได้) หรือใช้ OA เดิมของร้าน
- ใน LINE OA Manager ไปที่ ตั้งค่า›Messaging API กด เปิดใช้ Messaging API เลือก/สร้าง Provider
- ไปที่ ตั้งค่า›การตอบกลับ ปิด ข้อความตอบกลับอัตโนมัติ และ ข้อความทักทาย ของ LINE (ให้ระบบนี้ตอบแทน) และเปิด Webhook
- เข้า LINE Developers Console › เลือก Channel › แท็บ Messaging API › เลื่อนลงไปที่ Channel access token (long-lived) กด Issue แล้วคัดลอก
- ในแท็บ Messaging API เปิด Allow bot to join group chats (หรือใน LINE OA Manager › ตั้งค่า › ตั้งค่าบัญชี › อนุญาตให้เข้าร่วมแชทกลุ่ม) เพื่อเชิญบอทเข้ากลุ่มได้
Apps Script อ่านส่วนหัว X-Line-Signature ไม่ได้ ระบบจึงป้องกัน Webhook ปลอมด้วย รหัสลับใน URL (?key=...) และกันเหตุการณ์ซ้ำด้วย webhookEventId แทน — ใส่เฉพาะ Channel access token ก็พอ
ใช้งานครั้งแรก
เชื่อมต่อ LINE และตั้งค่า Webhook
- เปิด URL เว็บแอป กรอก รหัสตั้งค่าครั้งแรก จาก Execution log แล้วตั้งรหัสผ่านผู้ดูแล
- ไปที่เมนู ตั้งค่า LINE วาง Channel access token แล้วกด บันทึกและทดสอบ — จะขึ้นชื่อ OA และโควตาข้อความของเดือน
- กดปุ่มคัดลอก Webhook URL (ลงท้ายด้วย
/exec?key=...) ไปวางที่ LINE Developers › Messaging API › Webhook settings › Edit › Update แล้วเปิดสวิตช์ Use webhook - ทดสอบ: ใช้มือถือเพิ่ม OA เป็นเพื่อน แล้วพิมพ์ อะไรก็ได้ (หรือเชิญบอทเข้ากลุ่ม แล้วพิมพ์ ยอดวันนี้) — บอทต้องตอบกลับ และหน้า ตั้งค่า LINE จะแสดง “Webhook ล่าสุด” เป็นเวลาปัจจุบัน
- เชิญ LINE OA เข้ากลุ่มทีมขาย/แพ็กของ/บัญชี กลุ่มจะขึ้นในหน้า กลุ่ม / ผู้รับ LINE เอง
- แก้กฎตัวอย่างให้ชี้ชีตยอดขายของร้าน (หรือคัดลอกข้อมูลมาวางในชีต “ยอดขาย”) เลือกปลายทาง แล้วกด ทดสอบส่งแถวล่าสุด
- ใช้กับ Google Form: เปิดฟอร์ม › แท็บคำตอบ › ลิงก์ไปยังชีต › เลือกไฟล์นี้ แล้วสร้างกฎที่ชี้ชีตคำตอบ (ชีตใหม่ชื่อ “การตอบแบบฟอร์ม 1”) — กดบันทึกในหน้าตั้งค่าหนึ่งครั้งเพื่อสร้างทริกเกอร์ฟอร์มถ้ายังไม่มี

เมื่อกด Verify ใน LINE Developers อาจขึ้นว่า The webhook returned an HTTP status code other than 200 (302 Found) เพราะ Apps Script ตอบทุกคำขอด้วยการเปลี่ยนเส้นทาง (redirect) แต่ สคริปต์ได้รับและประมวลผลเหตุการณ์แล้ว ข้อความจริงจากผู้ใช้จะเข้าครบ ให้ทดสอบด้วยการทักแชทจากมือถือตามข้อ 4 แทน (อย่าเปิด “Webhook redelivery” เพราะ LINE จะส่งซ้ำ — แม้ระบบจะกันซ้ำให้ก็ตาม)
เมนู ทดลองแชท ในเว็บแอปจำลองการคุยกับบอทได้ทันที (ไม่ส่งจริง ไม่เสียโควตา) เหมาะสำหรับเช็คข้อความก่อนเปิดใช้จริง
ดูแลระบบ
อัปเดตเวอร์ชันใหม่
- วาง Code.gs และ Index.html เวอร์ชันใหม่ทับของเดิม แล้วบันทึก
- รันฟังก์ชัน
setupอีกครั้ง (เพิ่มคอลัมน์/ชีตใหม่ถ้ามี ข้อมูลเดิมไม่หาย) - ไปที่ ทำให้ใช้งานได้›จัดการการทำให้ใช้งานได้ กดแก้ไข ✏ เลือก เวอร์ชัน: เวอร์ชันใหม่ แล้วกด ทำให้ใช้งานได้ — URL เดิมและ Webhook เดิมใช้ต่อได้ (ถ้าสร้าง “การทำให้ใช้งานได้รายการใหม่” จะได้ URL ใหม่ ต้องไปเปลี่ยน Webhook ใน LINE ด้วย)
ช่วยเหลือ
คำถามที่พบบ่อย
บอทไม่ตอบเลย
ตรวจตามลำดับ: (1) หน้า ตั้งค่า LINE เชื่อมต่อแล้ว (2) Webhook URL ใน LINE Developers ตรงกับในหน้าตั้งค่า รวม ?key= และเปิด Use webhook (3) เว็บแอปเผยแพร่แบบ “ทุกคน” (4) ถ้าแก้โค้ดต้องทำให้ใช้งานได้เป็น เวอร์ชันใหม่ (5) ดู “Webhook ล่าสุด” ว่ามีเวลาอัปเดตหรือไม่ ถ้าไม่มีแปลว่า LINE ส่งมาไม่ถึง
ขึ้น “Channel access token ไม่ถูกต้อง”
ออก token ใหม่ใน LINE Developers (long-lived) แล้ววางใหม่ ระวังเว้นวรรคหรือขึ้นบรรทัดใหม่ติดมา
บอทตอบซ้ำกับข้อความอัตโนมัติของ LINE
ปิด “ข้อความตอบกลับอัตโนมัติ” และ “ข้อความทักทาย” ใน LINE OA Manager › ตั้งค่า › การตอบกลับ
โควตาข้อความคืออะไร
แพ็กเกจฟรีของ LINE OA ส่งข้อความแบบ push/multicast ได้ประมาณ 300 ข้อความ/เดือน (นับตามจำนวนผู้รับ) การ ตอบกลับ (reply) ทันทีหลังลูกค้าทักไม่นับโควตา ดูยอดใช้ได้ที่หน้า ภาพรวม / ตั้งค่า LINE
ส่งเข้ากลุ่มใช้โควตาเท่าไร
LINE นับข้อความ push เข้ากลุ่มตามจำนวนสมาชิกในกลุ่ม เช่น กลุ่ม 10 คน ส่ง 1 ครั้ง = 10 ข้อความ ใช้ “รวมหลายแถว” หรือส่งเฉพาะออเดอร์ที่สำคัญเพื่อประหยัด ดูยอดใช้ที่หน้าภาพรวม (คำสั่ง “ยอดวันนี้” ในกลุ่มเป็นการตอบกลับ ไม่นับโควตา)
แทน LINE Notify ได้ไหม
ได้ LINE Notify ปิดบริการแล้ว ระบบนี้ใช้ LINE Messaging API ซึ่งเป็นช่องทางทางการผ่าน LINE OA ของร้าน
รูปสลิปจากฟอร์มไม่ขึ้นเป็นรูปในการ์ด
ไฟล์ที่อัปโหลดผ่าน Google Form อยู่ใน Drive ของเจ้าของฟอร์มและต้องล็อกอินจึงเปิดได้ LINE จึงแสดงเป็นปุ่ม “ดูสลิป” แทน คนในกลุ่มที่มีสิทธิ์เปิดไฟล์จะกดดูได้
ตั้งค่ากฎใหม่แล้วไม่ส่งแถวเดิม
ตั้งใจให้เป็นแบบนั้นเพื่อไม่ให้ส่งย้อนหลังทั้งชีต ถ้าต้องการส่งแถวเดิมด้วย ให้ติ๊ก “ส่งแถวเดิมที่มีอยู่แล้วทั้งหมดด้วย” ตอนสร้างกฎ
วันที่ในชีตเป็นข้อความ
รองรับทั้งค่าวันที่ของชีตและข้อความรูปแบบ วัน/เดือน/ปี (ค.ศ. หรือ พ.ศ.) เช่น 3/10/2569 14:30
เปิด URL แล้วขึ้น “ไม่พบสคริปต์ฟังก์ชัน: doGet” หรือหน้าขาว
ตรวจว่าวาง Code.gs ครบทั้งไฟล์ และมีไฟล์ HTML ชื่อ Index จากนั้นทำให้ใช้งานได้เป็นเวอร์ชันใหม่
ทริกเกอร์อัตโนมัติอยู่ที่ไหน
ใน Apps Script เมนูด้านซ้ายรูปนาฬิกา (ทริกเกอร์) จะเห็นทริกเกอร์ที่ setup สร้างไว้ ไม่ควรลบ หากเผลอลบให้รัน setup ใหม่