SOP · กิจกรรมรีวิวชิงรางวัล
Biopalm ✕ หาดใหญ่วิทยาลัย

ตั้งแต่ทำโปสเตอร์ → เปิดฟอร์ม → แจก → คัดผู้ชนะ → จ่ายรางวัล · ฉบับ 27 ส.ค. 2569

⚠️ 2 ข้อห้ามที่ทำแล้วพังทั้งงาน
1. ห้ามรัน buildAll ซ้ำ เมื่อแจกลิงก์ไปแล้ว → ได้ฟอร์มใบใหม่ QR บนโปสเตอร์ตายหมด
2. ห้ามลากฟอร์มเข้า Shared Drive → Google ปิดช่องอัปโหลดคลิปทันที

ขั้นตอนทั้งหมด

1

เตรียมของก่อนเริ่ม

  • ตรา รร. → LOGO/partners/ · โลโก้ Biopalm → LOGO/logo-hires.png
  • รูปพี่ปาม → LOGO/pam-poses/polo/ (⛔ สูทเทาห้ามใช้ ย้ายเข้า _TRASH แล้ว)
  • รูปพื้นหลัง → _assets/bg-photo.jpg (เนื้อเยื่อพืชย้อม teal)
  • ฟอนต์ Kanit + Anuphan → tools/_fonts/ (โหลดมาแล้ว ไม่ต้องโหลดซ้ำ)
2

สร้างงานพิมพ์~1 นาที

  • python3 _build/build_a4.py → A4 PNG 300dpi + PDF 1 หน้า
  • python3 _build/build_banner.py → banner 3 ขนาด (form/fb/wide)
  • python3 _build/build_poster.py → ชุด IG 1:1 4 ใบ
  • ทุกตัวใช้พื้นหลังร่วมกันจาก _build/bg_layers.py — แก้ที่เดียวเปลี่ยนทุกชิ้น
3

Deploy Google Formทำครั้งเดียว

  • เปิด Apps Script project (บัญชี jinna.office965)
  • ตั้ง FORCE_REBUILD = true → Run buildAll → เสร็จแล้วตั้งกลับเป็น false
  • สคริปต์จะ: สร้างฟอร์ม + ชีตผล + ย้ายชีตเข้า Shared Drive + แชร์ให้ biopalmam01 เป็น editor
  • ห้ามรัน buildAll ซ้ำถ้าแจกลิงก์ไปแล้ว — จะได้ฟอร์มใบใหม่ QR บนโปสเตอร์ตาย (มี guard กันไว้แล้ว)
  • แก้ฟอร์มที่แจกไปแล้ว ใช้ patchLive (openById) เท่านั้น
4

ตั้งค่าฟอร์มด้วยมือ~3 นาที

  • ช่องอัปโหลดคลิป — Apps Script สร้างไม่ได้ (Google ไม่เปิด API) ต้องเพิ่มเอง:
    การ์ด «อัปโหลดคลิปที่นี่» → กด + → เลือก File upload → Continue → ตั้งชื่อ ไฟล์คลิปวิดีโอ → Allow only specific file types = Video → Max file size = 100 MB
  • Banner หัวฟอร์ม — ไอคอนจานสี 🎨 → Header → Choose image → upload banner-form-1600x400.png
  • เช็ค Settings → Responses → Collect email addresses = ON
5

ใส่ลิงก์จริงลงงานพิมพ์10 วินาที

  • python3 _build/apply_form_url.py "<FORM URL>" --label "forms.gle/xxxx"
  • คำสั่งเดียว: แก้ QR + ข้อความลิงก์ใน A4 · IG · xlsx แล้ว render ใหม่ทั้งชุดให้เอง
  • ⚠️ สแกน QR ด้วยมือถือจริง 1 ครั้งก่อนสั่งปริ้น
6

แจกให้น้องวันแรก

  • เปิด xlsx ชีต «แคปชั่น+ข้อความส่ง» → ก๊อปข้อความไปวางได้เลย (ลิงก์เติมอัตโนมัติ)
  • ช่องทาง: โพสต์ IG/FB (carousel 4 ใบ) · ส่งไลน์กลุ่มห้อง (ผ่านครูที่ปรึกษา) · สตอรี่ · ปริ้น A4 ติดบอร์ด
  • 🔑 ไลน์กลุ่มห้องได้ผลกว่าโพสต์ IG อย่างเดียว — เด็กเห็นแน่นอน
7

ระหว่างเปิดรับทุกวัน

  • เช็คผลที่ 🔒 ชีตผล (ห้ามแชร์ออกนอกทีม มีชื่อ-เบอร์-อีเมลนักเรียน)
  • 30 ส.ค. ส่งข้อความเตือน «เหลืออีก 1 วัน» (มีในชีตแคปชั่น) — คนมักผัดเรื่องอัดคลิป
  • คลิปที่อัปเข้ามาอยู่ที่ แฟ้ม Drive — เช็คว่าเปิดดูได้จริง
8

ปิดรับ + คัดผู้ชนะ31 ส.ค.

  • เปิดฟอร์ม → แท็บ Responses → ปิด Accepting responses
  • เปิดชีตผล → Extensions → Apps Script → Run buildSummary
  • ได้ชีต «สรุปคัดเลือก» — ช่อง เข้าเกณฑ์ คิดจาก: มีคลิป + ติ๊กยินยอมครบ 2 ข้อ + เขียนรีวิว ≥20 ตัวอักษร
  • เลือก 10 คนจากคนที่ ✅ เข้าเกณฑ์ → กรอกช่อง «ผลตัดสิน» เอง
9

จ่ายรางวัล + ใช้คลิปหลังประกาศ

  • ทักผู้ชนะทาง LINE (ข้อความมีในชีตแคปชั่น) → ขอเลขพร้อมเพย์ / ออกรหัสส่วนลด
  • ไม่เก็บเลขบัญชีในฟอร์ม — ขอทางไลน์เฉพาะ 10 คนที่ได้รางวัล
  • 🔒 ก่อนเอาคลิปไปโปรโมท: ต้องติ๊กยินยอมครบ 2 ข้อเท่านั้น · น้องที่ดูอายุน้อย ควรโทรยืนยันผู้ปกครองอีกชั้น
  • ถ้ามีน้องขอถอนความยินยอม → ลบโพสต์ที่เผยแพร่ + ลบไฟล์ใน Drive + ทำเครื่องหมายในชีต

อยากแก้อะไร แก้ตรงไหน

อยากแก้แก้ที่ไฟล์หมายเหตุ
เปลี่ยนวันหมดเขต_build/build_a4.py ตัวแปร DEADLINE + build_banner.py + form/*.gs CFG.DEADLINEต้องแก้ทั้ง 3 ที่ แล้ว render ใหม่ · ฟอร์มที่ LIVE ต้องแก้คำอธิบายเองใน UI
เปลี่ยนจำนวน/มูลค่ารางวัลbuild_a4.py (การ์ดเหลือง) · build_banner.py (แถบล่าง) · *.gs DESCค้นคำว่า 500 / 1,000 / 10 รางวัล
เปลี่ยนลิงก์ฟอร์ม / QRpython3 _build/apply_form_url.py <URL>คำสั่งเดียวจบ แก้ทุกไฟล์ + render ใหม่
เปลี่ยนรูปพื้นหลังวางไฟล์ทับ _assets/bg-photo.jpg แล้ว render ใหม่ลบไฟล์นี้ = กลับไปใช้พื้นหลังวาดเอง (gradient + texture)
ปรับความเข้ม/เบลอพื้นหลัง_build/bg_layers.py.bgdark (ความมืด) · .bgphoto (blur)เข้มขึ้น = อ่านง่ายขึ้น แต่เห็นลายเซลล์น้อยลง
ขยับ/ย่อ-ขยายพี่ปามbuild_a4.py.pamA (bottom = สูงต่ำ, height = ขนาด)ล่างของตัวต้องจมหลังกรอบเหลือง ไม่งั้นดูลอย
เปลี่ยนรูปพี่ปามbuild_a4.pyIMG['pam_polo'] ชี้ไฟล์ใน _assets/⛔ ห้ามใช้ชุดสูทเทา (user สั่ง 27 ส.ค. 69)
แก้คำถามในฟอร์มform/*.gs แล้วรัน patchLive⛔ ห้ามรัน buildAll — จะได้ฟอร์มใหม่ ลิงก์เปลี่ยน
แก้แคปชั่น/ข้อความส่ง_build/build_link_table.py → ตัวแปร COPYรันไฟล์นั้นแล้ว xlsx อัปเดต
เพิ่ม/ย้ายลิงก์ในตาราง_build/build_link_table.pyLINKSต้องอัปเดตทุกครั้งที่มีลิงก์ใหม่

กับดักที่เจอมาแล้ว (อย่าเสียเวลาซ้ำ)

อาการสาเหตุทางแก้
ฟอร์มอยู่ Shared Drive → File upload ถูกปิดGoogle ไม่รองรับคำถาม File upload ในฟอร์มที่อยู่ Shared Drive (ปุ่มเป็นสีเทา กดไม่ได้)ฟอร์มต้องอยู่ My Drive ของ jinna · ย้ายเฉพาะชีตผลเข้า Shared Drive
Apps Script สร้างช่อง File upload ไม่ได้form.addFileUploadItem() ไม่มีจริง — Google ไม่เปิด API ตัวนี้เพิ่มด้วยมือใน Form UI ทุกครั้งหลัง rebuild (ดูขั้นตอนที่ 4)
รัน buildAll ซ้ำ = ได้ฟอร์มใบใหม่เกิดขึ้นจริง 3 รอบ · ลิงก์เปลี่ยนทุกครั้ง QR บนโปสเตอร์ที่ทำไว้ตายมี FORCE_REBUILD = false กันไว้แล้ว · แก้ฟอร์มเดิมใช้ patchLive
dropdown เลือก function ใน Apps Script ไม่ผูกกับตัวที่รันจริงเลือก patchLive แต่ระบบรัน buildAllเลือก function → Save ก่อน → ค่อยกด Run · ดู Execution log ยืนยันว่ารันตัวไหน
setRequireLogin(true) ใช้ไม่ได้เป็นฟีเจอร์ Google Workspace เท่านั้น บัญชี Gmail ธรรมดา errorไม่ต้องใช้ — ช่อง File upload บังคับ sign-in ให้อยู่แล้ว
Chrome pdf() ทำ A4 ออกมา 2 หน้าlayout กว้าง 1240 CSS px = 328 mm ล้นขอบ A4export PDF จาก PNG 2480×3508 (=A4 300dpi เป๊ะ) พร้อม assert เช็คขนาด
Browser pane เปลี่ยน viewport เอง คลิกไม่เข้าเป้าเจอตอนแก้ฟอร์มผ่าน automation — คลิกพลาดซ้ำ ๆงานคลิก UI ในฟอร์มให้ทำมือเร็วกว่า · automation ใช้กับ Apps Script/ไฟล์ในเครื่องพอ

เช็คก่อนแจกลิงก์

  1. สแกน QR บนโปสเตอร์ด้วยมือถือจริง → เข้าฟอร์มถูกใบ
  2. กรอกฟอร์มเองครบ 1 รอบ แล้วลบคำตอบทดสอบทิ้ง
  3. ติ๊กยินยอมแค่ข้อเดียวแล้วกดถัดไป → ต้องขึ้น error «ต้องติ๊กครบทั้ง 2 ข้อ»
  4. ช่องอัปโหลดคลิปกดได้ · ลองอัปไฟล์วิดีโอเล็ก ๆ ดูว่าเข้า Drive จริง
  5. เปิดฟอร์มในมือถือ → ข้อความไม่ล้น อ่านครบ
  6. ชีตผลมีคอลัมน์ครบ · biopalmam01 เปิดได้

ไฟล์ในโฟลเดอร์งาน

ที่อยู่คืออะไร
A4/โปสเตอร์ A4 — PNG 300dpi (ปริ้น) · PNG web (ส่งไลน์) · PDF 1 หน้า
banner/banner 3 ขนาด — form 1600×400 · fb 1640×624 · wide 1920×640
IG-FB-1080x1080/ชุดโพสต์ IG/FB 4 ใบ (ประกาศ · วิธีร่วม · คำถามคลิป · สแกนเลย)
form/*.gsซอร์ส Apps Script — buildAll (สร้าง) · patchLive (แก้) · buildSummary (คัดผู้ชนะ)
_build/สคริปต์ render ทั้งหมด + bg_layers.py (พื้นหลังกลาง) + apply_form_url.py
_assets/รูปที่ใช้จริง — พื้นหลัง · โลโก้ · ตรา รร. · พี่ปาม
ตารางรวมลิงก์_*.xlsx3 ชีต — อ่านก่อนใช้ · ตารางรวมลิงก์ · แคปชั่น+ข้อความส่ง