PPURIPAT
HOME/BLOG
↩ BACK

สร้างระบบคิวร้านอาหารของคุณเอง — ไม่ต้องเขียนโค้ด (5 นาที)

แจกระบบคิว Queue Restaurant บน Google Apps Script + Sheets ฟรี 100% ลูกค้าสแกน QR กดปุ่มเดียวรับเลขคิว พนักงานเรียกคิวจากแดชบอร์ดล็อกรหัสผ่าน จอทีวีโชว์คิวที่กำลังเรียกแบบสด ตั้งเองได้ใน 5 นาที ไม่ต้องเขียนโค้ด

BY
PURIPAT
PUBLISHED
2026.07.18
READ TIME
4 MIN
WORDS
683
GHXIN
สร้างระบบคิวร้านอาหารของคุณเอง — ไม่ต้องเขียนโค้ด (5 นาที)
FIG. 01 — ลูกค้าสแกน QR กดปุ่มเดียว ได้เลขคิวทันทีSOURCE: AUTHOR
หน้าจอลูกค้าหลังกดรับคิว แสดงเลขคิวของคุณเป็น 1 และจำนวนคิวที่รออยู่ก่อนหน้า
หน้าจอลูกค้าหลังกดรับคิว แสดงเลขคิวของคุณเป็น 1 และจำนวนคิวที่รออยู่ก่อนหน้า
FIG. 01 — ลูกค้าสแกน QR กดปุ่มเดียว ได้เลขคิวทันที

Queue Restaurant คือระบบคิวสำหรับร้านอาหาร: ลูกค้าสแกน QR หน้าร้าน กดปุ่มเดียว ได้เลขคิว แล้วดูสถานะคิวของตัวเองอัปเดตสดอยู่บนมือถือได้เลยโดยไม่ต้องกดรีเฟรช ฝั่งร้านเรียกคิวถัดไปจากแดชบอร์ดที่ล็อกด้วยรหัสผ่าน ส่วนจอทีวีหรือแท็บเล็ตที่แปะไว้หน้าร้านก็โชว์ "กำลังเรียกคิว" ให้เห็นทั้งร้าน — ทั้งหมดนี้รันอยู่บน Google Apps Script + Google Sheets ล้วน ๆ

จุดที่ทำให้ระบบนี้ตั้งได้เร็ว: ไม่มีเซิร์ฟเวอร์ ไม่มีค่าฐานข้อมูล ไม่มีขั้นตอน build ใด ๆ Sheet หนึ่งไฟล์คือทั้งฐานข้อมูลคิวและตัวเก็บโค้ด แก้อะไรก็แก้ที่ Sheet เดียว

โค้ดทั้งหมด: ติดมากับ Sheet เทมเพลตด้านล่างอยู่แล้ว (container-bound script) ไม่ต้องไปโหลดที่ไหนแยก

ค่าใช้จ่าย: ศูนย์บาท ทั้งระบบวิ่งอยู่บน Google Apps Script + Sheets ซึ่งฟรีสำหรับปริมาณการใช้งานระดับร้านอาหารทั่วไป

สิ่งที่ระบบนี้ไม่มี (ตั้งใจตัดออก): ระบบจองคิวล่วงหน้า, การแจ้งเตือนผ่าน SMS/LINE, ประวัติคิวย้อนหลังแบบรายงาน, รองรับหลายสาขาในไฟล์เดียว — ถ้าต้องการฟีเจอร์พวกนี้ นี่ไม่ใช่ระบบสำหรับคุณ


§01ต้องมีอะไรก่อนเริ่ม

แค่ บัญชี Google ธรรมดา (ฟรี) เท่านั้น — ไม่ต้องลง Node.js ไม่ต้องรู้จัก terminal ไม่ต้องมีพื้นฐานเขียนโค้ดเลย


§02ขั้นตอนที่ 1: คัดลอก Sheet ต้นแบบ

เปิดลิงก์นี้ → คัดลอก Queue Restaurant มาใช้เอง

Google จะถามว่า "สร้างสำเนา?" (Make a copy) — กด "ตกลง" ได้เลย ระบบจะคัดลอกทั้ง Sheet และ โค้ดที่ผูกอยู่กับมันไปไว้ใน Google Drive ของคุณเอง ภายใต้บัญชีของคุณเอง ทำอะไรต่อจากนี้ในสำเนาของคุณจะไม่กระทบต้นฉบับเลย

ทำไมง่ายขนาดนี้

โค้ดทั้งหมดของระบบ "ติดมากับ Sheet" อยู่แล้ว (container-bound script) พอกด Make a copy โค้ดจะสำเนามาด้วยอัตโนมัติ ไม่ต้องไปโหลดโค้ดจากที่ไหนแยกต่างหาก


§03ขั้นตอนที่ 2: ตั้งรหัสผ่านพนักงาน

สำเนาของคุณต้องตั้งค่าอีกหนึ่งอย่างก่อนใช้งานได้: รหัสผ่านที่พนักงานจะพิมพ์เพื่อเข้าแดชบอร์ดเรียกคิว

  1. ในสำเนาใหม่ของคุณ ไปที่ Extensions → Apps Script
  2. เปิดไฟล์ Code.gs — เป็นไฟล์แรกในรายการ
  3. หาบรรทัดนี้ใกล้ ๆ ด้านบนของไฟล์:
    const STAFF_PASSCODE = '';
  4. พิมพ์รหัสผ่านที่ต้องการลงในเครื่องหมายคำพูด เช่น const STAFF_PASSCODE = '1234';
  5. กด Ctrl/Cmd+S เพื่อบันทึก
อยากเก็บรหัสผ่านไม่ให้ปนโค้ด

ไปที่ Project Settings → Script Properties แล้วเพิ่มคีย์ STAFF_PASSCODE ที่นั่นแทนได้เหมือนกัน แอปจะเช็กจุดนี้เป็นทางเลือกสำรอง ถ้าปล่อยบรรทัดใน Code.gs ว่างไว้


§04ขั้นตอนที่ 3: เผยแพร่เป็นเว็บแอปจริง

อยู่ใน Apps Script editor ต่อ:

  1. กด Deploy (มุมขวาบน) → New deployment
  2. กดไอคอนรูปเฟืองข้าง "Select type" → เลือก Web app
  3. Description: ใส่อะไรก็ได้ เช่น v1
  4. Execute as: Me
  5. Who has access: Anyone
  6. กด Deploy
เจอคำเตือน unverified app

ครั้งแรกที่ทำแบบนี้ Google จะโชว์คำเตือน "unverified app" — เป็นเรื่องปกติสำหรับสคริปต์ที่คุณ (หรือคนที่คุณเชื่อใจ) เขียนขึ้นเอง ซึ่งยังไม่ได้ผ่านการรีวิวจาก Google กด Advanced → Go to (ชื่อโปรเจกต์ของคุณ) (unsafe)Allow คุณกำลังอนุญาตให้สคริปต์ของคุณเองอ่าน/เขียน Sheet ของคุณเอง ไม่มีข้อมูลอะไรถูกส่งไปที่อื่น

คัดลอก Web app URL ที่ได้ตอนท้าย — นั่นคือลิงก์สำหรับลูกค้าถาวรของคุณ


§05ขั้นตอนที่ 4: ลองทั้ง 3 หน้าจอ

  • ลูกค้า: ใช้ Web app URL จากขั้นตอนที่ 3 ตรง ๆ
  • พนักงาน: ลิงก์เดิม แต่เติม ?page=staff ต่อท้าย แล้วใส่รหัสผ่านจากขั้นตอนที่ 2
  • บอร์ด / ทีวี: ลิงก์เดิม แต่เติม ?page=board ต่อท้าย

ลองสถานการณ์จริง: สมมติมีลูกค้ามาที่ร้าน 2 คนติดกัน คนแรกสแกนแล้วได้คิว 1 (ตาม FIG.01 ด้านบน) คนที่สองสแกนตามมาติด ๆ

หน้าจอลูกค้าคนที่สองหลังกดรับคิว แสดงเลขคิวของคุณเป็น 2 และอีก 1 คิวรอก่อนหน้า
หน้าจอลูกค้าคนที่สองหลังกดรับคิว แสดงเลขคิวของคุณเป็น 2 และอีก 1 คิวรอก่อนหน้า
FIG. 02 — ลูกค้าคนที่สองสแกน QR กดรับคิว ได้เลข 2 เห็นว่ามี 1 คิวรออยู่ก่อนหน้า

เปิดจอบอร์ดที่ฝั่งร้าน (ลิงก์ ?page=board) เอาไปแปะจอทีวีหรือแท็บเล็ตตรงไหนก็ได้ในร้าน ตอนยังไม่มีใครกดเรียก จะเห็นข้อความ "กำลังเรียกคิว" เฉย ๆ พร้อมปุ่มเลขคิวที่รอทั้งหมดด้านล่าง

จอบอร์ดฝั่งร้าน แสดงข้อความกำลังเรียกคิว พร้อมปุ่มเลขคิว 1 และ 2 ที่รออยู่
จอบอร์ดฝั่งร้าน แสดงข้อความกำลังเรียกคิว พร้อมปุ่มเลขคิว 1 และ 2 ที่รออยู่
FIG. 03 — จอบอร์ดฝั่งร้าน ก่อนพนักงานกดเรียกคิวแรก

ฝั่งพนักงานเปิดแดชบอร์ด (ลิงก์ ?page=staff ใส่รหัสผ่าน) จะเห็นรายการคิวทั้งหมดเรียงตามลำดับ กดปุ่ม "เรียกคิวถัดไป" คิวแรกจะเปลี่ยนสถานะเป็น called ทันที มีปุ่ม "เสร็จ" กับ "ข้าม" โผล่มาให้กดต่อในแถวนั้น

แดชบอร์ดพนักงาน หลังกดเรียกคิวถัดไป คิว 1 เปลี่ยนสถานะเป็น called พร้อมปุ่มเสร็จและข้าม
แดชบอร์ดพนักงาน หลังกดเรียกคิวถัดไป คิว 1 เปลี่ยนสถานะเป็น called พร้อมปุ่มเสร็จและข้าม
FIG. 04 — แดชบอร์ดพนักงาน กด "เรียกคิวถัดไป" คิว 1 เปลี่ยนเป็น called

ฝั่งลูกค้าคิว 1 ที่เปิดหน้าจอค้างไว้ตั้งแต่ตอนกดรับคิว จะเห็นข้อความเปลี่ยนเองแบบเกือบเรียลไทม์ ทันทีที่พนักงานกดเรียก โดยไม่ต้องกดรีเฟรชเอง

หน้าจอลูกค้าเปลี่ยนเป็นข้อความถึงคิวคุณแล้ว พร้อมไอคอนกระดิ่ง
หน้าจอลูกค้าเปลี่ยนเป็นข้อความถึงคิวคุณแล้ว พร้อมไอคอนกระดิ่ง
FIG. 05 — หน้าจอลูกค้าคิว 1 เปลี่ยนเป็น "ถึงคิวคุณแล้ว 🔔" ทันทีที่พนักงานกดเรียก

จอบอร์ดฝั่งร้านก็อัปเดตพร้อมกันเป็นเลขคิวที่กำลังเรียกอยู่ ให้ทุกคนในร้านเห็นตรงกัน

จอบอร์ดอัปเดตแสดงเลขคิว 1 กำลังเรียก พร้อมปุ่มคิวถัดไปที่รออยู่
จอบอร์ดอัปเดตแสดงเลขคิว 1 กำลังเรียก พร้อมปุ่มคิวถัดไปที่รออยู่
FIG. 06 — จอบอร์ดอัปเดตเป็น "กำลังเรียกคิว 1"

พอลูกค้าคิว 1 มารับบริการเสร็จ พนักงานกดปุ่ม "เสร็จ" ที่แถวนั้นในแดชบอร์ด ฝั่งลูกค้าจะเห็นข้อความขอบคุณปิดจบการรอคิว

หน้าจอลูกค้าแสดงข้อความขอบคุณที่ใช้บริการ หลังพนักงานกดเสร็จ
หน้าจอลูกค้าแสดงข้อความขอบคุณที่ใช้บริการ หลังพนักงานกดเสร็จ
FIG. 07 — พนักงานกด "เสร็จ" แล้วลูกค้าเห็นหน้าขอบคุณ

§06ขั้นตอนที่ 5: เอาไปใช้จริง

  • เอาลิงก์หน้าลูกค้าไปใส่ในเว็บสร้าง QR code ฟรี (หาได้ทั่วไป) แล้วปริ้นไปติดหน้าร้าน
  • Bookmark ลิงก์ ?page=staff ไว้ที่เครื่องหน้าเคาน์เตอร์ และ ?page=board ไว้ที่จอที่หันไปทางที่นั่งรอ

§07ถ้าใช้งานไม่ได้ ลองเช็กตรงนี้

อาการสาเหตุที่เป็นไปได้
ลูกค้าเจอหน้า login ของ Googleกลับไปดูขั้นตอนที่ 3 เช็กว่า "Who has access" ตั้งเป็น Anyone แล้ว ไม่ใช่ "Only myself"
มี pop-up "Authorization required" ตอนกดครั้งแรกปกติ เกิดแค่ครั้งเดียว และเห็นเฉพาะคุณในฐานะเจ้าของตอนทดสอบเท่านั้น
แก้โค้ดแล้วแต่ลิงก์จริงไม่เปลี่ยนทุกครั้งที่แก้โค้ดต้อง deploy ใหม่เสมอ: Deploy → Manage deployments → ไอคอนดินสอ → New version → Deploy ระบบนี้ไม่มี auto-publish เพราะไม่ได้ใช้ command line
ใส่รหัสผ่านถูกแล้วแต่ระบบไม่ยอมรับเช็กที่ STAFF_PASSCODE ใน Code.gs (หรือ Script Properties ถ้าใช้ทางนั้น) ว่าพิมพ์ผิดหรือเปล่า ระบบเช็กตัวพิมพ์เล็ก-ใหญ่ด้วย

§08ข้อจำกัดที่ควรรู้ก่อนใช้จริง

ระบบนี้อัปเดตสถานะด้วย polling ไม่ใช่ push จริง — ฝั่งลูกค้า poll ทุก ~7 วินาที ฝั่งบอร์ด poll ทุก ~5 วินาที ผ่าน google.script.run ธรรมดา ไม่มี WebSocket ไม่มี server-sent events เพราะ Apps Script ทำ push แบบนั้นไม่ได้ ผลคือทุกจุดอัปเดตจะ "ช้ากว่า" ระบบ full-stack จริงอยู่เสมอในหลักไม่กี่วินาที ไม่ใช่ทันทีที่พนักงานกดปุ่ม และเวลาลูกค้าสลับแท็บหรือพับหน้าจอ การ poll จะหยุดโดยตั้งใจ (ประหยัด execution quota) แล้วกลับมา poll ต่อตอนเปิดหน้าจอใหม่ ไม่ใช่บั๊ก

Apps Script มีเพดานจำนวน execution พร้อมกัน ต่อบัญชี (ประมาณ 30 ครั้งพร้อมกัน) และการออกเลขคิวใหม่ทุกครั้งต้องผ่าน LockService แบบ global lock เพื่อกันเลขคิวซ้ำ — เหมาะกับร้านอาหารทั่วไปที่ลูกค้ามาแบบทยอย ๆ แต่ถ้าร้านคุณมีจังหวะที่คนแห่มากดรับคิวพร้อมกันเป็นสิบ ๆ คนในเสี้ยววินาที มีโอกาสเจอ error "คิวหนาแน่น ลองอีกครั้ง" ได้บ้าง เพราะทุกคนต้องรอคิวเข้า lock ทีละคน

พูดสั้น ๆ: นี่ไม่ใช่สถาปัตยกรรมสำหรับงานที่ต้องการความเรียลไทม์แบบเป๊ะ ๆ หรือรองรับ concurrency สูง ถ้าจะทำแบบนั้นได้ดีจริง ต้องขยับไปเป็น full-stack ที่มี read/write ผ่าน API จริงแทน Google Sheet — เป็นคนละ trade-off กับของฟรีที่ตั้งบนเชลล์ Apps Script ตัวนี้ ถ้ามีคนสนใจเวอร์ชัน full-stack คอมเมนต์บอกไว้ได้ จะเขียนให้ดูในตอนถัดไป


§09ค่าใช้จ่ายและการดูแลระยะยาว

ศูนย์บาท ตลอดไป (สำหรับปริมาณการใช้งานระดับร้านอาหารทั่วไป) — Google Apps Script และ Sheets ฟรีทั้งหมด เนื่องจากสำเนาของคุณแยกออกจากต้นฉบับตั้งแต่วัน Make a copy โค้ดจะไม่อัปเดตให้อัตโนมัติ ถ้าอยากได้ฟีเจอร์ใหม่ ให้กลับมาดูโพสต์นี้อีกครั้ง — ถ้ามีอัปเดตสำคัญจะประกาศไว้ด้านบน

💬 ติดปัญหาระหว่าง setup คอมเมนต์ไว้ที่ Facebook Group ได้เลยครับ

— FIN —P. 01 / 01 · 683 WORDS
WRITTEN BY
P
Puripat
@PURIPAT · ENG / WRITER

Engineer, writer, occasional GPU-melter. Writes every Sunday about applied AI — agents, evals, and whatever broke that week.

SHARE THIS

If you got something out of this, share it with someone who's trying to ship their first agent.

← PREV
04 · เปลี่ยน PDF แคตตาล็อกของคุณให้พลิกได้แบบหนังสือจริง ๆ — ฟรี ไม่ต้องมีเซิร์ฟเวอร์
2026.07.18
NEXT →
05 · เอา QR Room View ไปใช้กับห้องเช่าของคุณเอง — แค่ Copy Sheet ไม่ต้องเขียนโค้ด
2026.07.18