• พิมพ์คำที่อยู่ในใจ เช่น “หมดเวลาชำระ” “ปล่อยโต๊ะ” “เครดิต”
← กลับแอป
อ้างอิง· ความหมายของทุกปุ่ม สถานะ และค่า

งานอัตโนมัติของระบบ (cron)

งาน 3 อย่างที่รันเอง ทำอะไร บ่อยแค่ไหน และจะเห็นอะไรถ้ามันหยุด

อัปเดตล่าสุด 2026-09-16 · เวอร์ชันแอป 0.1.0

งานอัตโนมัติ 10 อย่างตั้งไว้ใน vercel.json (Vercel Cron) ทุกงานเรียก /api/cron/... พร้อม Authorization: Bearer CRON_SECRET — ถ้าไม่ตั้ง CRON_SECRET งานจะเปิดเฉพาะนอก production

งานความถี่ทำอะไร
expire-holdsทุกนาทีการจอง “รอชำระมัดจำ” ที่พ้นเวลาชำระ + ผ่อนผัน → “หมดเวลาชำระ” โต๊ะว่าง · นับการทิ้งการจองของเบอร์ (ครบ 3 ครั้งติด → บล็อก 60 นาที) · Audit “หมดเวลากันโต๊ะ” / “บล็อกเบอร์ (อัตโนมัติ)” · คิวข้อความ LINE “หมดเวลาชำระมัดจำ” ให้การจองที่ผูกไว้ · ปิดรายการรอคิวที่ถึงเวลาปิดรับจอง (“หมดเวลา”) และแจ้ง “โต๊ะว่างแล้ว” ให้รายการรอคิวของคืนที่เพิ่งมีโต๊ะว่าง · POS: บิลที่ลูกค้าเปิดเองจาก QR ในช่วงรับเงินก่อนและไม่มีการชำระภายใน 15 นาที (นับจากสั่งครั้งล่าสุด) → ยกเลิก (VOID) Audit “บิล QR หมดเวลาชำระ” · ร้านที่มีบิลลูกค้าจ่ายแล้ว (มีเลขคิว ยังเปิดอยู่) แต่เครื่องแคชเชียร์เงียบเกิน 3 นาที → แจ้งเตือนเด้งเจ้าของร้าน “เครื่องแคชเชียร์ออฟไลน์” ทันทีและย้ำทุก 10 นาที (venues.cashier_offline_notified_at ล้างเมื่อหายค้าง)
retry-slipsทุก 5 นาทีสลิปที่ค้างเพราะระบบตรวจสลิปล่ม/โควตาหมด/ธนาคารยังไม่ยืนยัน (≤ 20 ใบ/รอบ เก่าก่อน ทีละใบ รอ Thunder ได้ถึง 60 วิ/ใบ) ตารางลองใหม่ต่อสลิป: ทุก 5 นาที ×12 → ทุก 30 นาที ×24 → ทุก 60 นาที ×24 (~37 ชม.) แล้วหยุด (ใบยังอยู่ในคิว + แจ้งเตือนพนักงาน) · เจอ Thunder ล่ม 3 ใบติดจะหยุดรอบนั้นทันที (stoppedEarly) · ผ่าน → “รอเช็คอิน” Audit “ยืนยันอัตโนมัติ (สลิปผ่าน)” + ข้อความ LINE “จองสำเร็จ” · พบว่าสลิปยืนยันการจองอื่นไปแล้ว → ปฏิเสธการจองอัตโนมัติ Audit “ปฏิเสธ” โดย reverify:thunder + ข้อความ LINE
review-remindersทุก 5 นาทีร้านที่คิวสลิปยังมีใบค้าง และ push ล่าสุดเก่ากว่า 5 นาที → push “ยังมีสลิปรอตรวจ N ใบ” ถึงทีมงานที่เปิดแจ้งเตือน (ADR-0007)
nightly-summaryทุก 15 นาทีหลังจุดเปลี่ยนวันของร้าน (ค่าเริ่มต้น 06:00) → push “สรุปคืนที่ผ่านมา” ถึงเจ้าของร้านที่เปิดรับ 1 ครั้งต่อร้านต่อคืน (ข้ามคืนที่ไม่มีการจอง และร้านที่ถูกระงับ)
line-outboxทุกนาที(1) คิวข้อความ “อีก N นาทีโต๊ะจะถูกปล่อย” ให้การจองรอชำระที่ผูก LINE ซึ่งเหลือ ≤ 5 นาทีก่อนหมดผ่อนผันและยังไม่มีสลิปรอตรวจ (2) ปิดรายการรอคิวที่ถึงเวลาปิดรับจอง (3) แจ้ง “โต๊ะว่างแล้ว” ให้รายการรอคิวที่ผูก LINE ของคืนที่มีโต๊ะว่างและยังก่อนปิดรับจอง — ทุกคนพร้อมกัน ครั้งเดียว (4) ส่งข้อความที่ค้างในคิว ≤ 50 ข้อความ/รอบ ลองใหม่ 1 นาที → 5 → 15 → 1 ชม. → 6 ชม. แล้วหยุด (FAILED) · ลูกค้าบล็อก OA → เลิกส่งทุกการจองของคนนั้น · ร้านตก FREE/สวิตช์ปิด → ข้าม (SKIPPED)
night-remindersทุก 15 นาทีตั้งแต่ 12:00 (เวลาร้าน) ของวันที่มีคืนจอง → ข้อความ “คืนนี้ … มารับโต๊ะภายใน … น.” ถึงการจอง “รอเช็คอิน” ที่ผูก LINE ของร้าน PRO ครั้งเดียวต่อการจอง แล้วส่งคิวต่อทันที (≤ 100)
pos-totalsทุก 5 นาทีบิล POS ที่ถูกแตะจากมือถือพนักงาน/ลูกค้า/หลังบ้าน (totals_stale) → คำนวณยอดใหม่จากเหตุการณ์ (≤ 500 บิล/รอบ)
pos-usageทุกวัน 20:45 UTC (03:45 น. ไทย)นับเหตุการณ์ POS + การรับเงิน, เอกสารภาษี และไบต์ที่ซิงก์ ของเดือนนี้และเดือนก่อน ต่อร้าน → pos_usage (ดูที่ Platform → “ต้นทุน POS”) ใช้ตั้งราคา POS ภายหลัง
pos-nightsทุกชั่วโมงสร้าง “คืน” (Service Date) ของวันนี้และพรุ่งนี้ล่วงหน้าให้ทุกร้านที่ขายผ่านแอปแคชเชียร์ — เครื่องที่ออฟไลน์ตอนข้ามวันจึงยังเปิดบิลได้ (ADR-0022)
purge-slipsทุกวัน 04:30 UTC (11:30 น. ไทย)ลบ รูป สลิปมัดจำที่เก็บครบ 90 วัน และรูปสลิปค่าบริการที่เก็บครบ 1 ปี (≤ 200 รูป/รอบ/ชนิด) เก็บยอด/เลขอ้างอิง/ผลตรวจไว้ · ยกเลิกคำสั่งซื้อค่าบริการที่ไม่แนบสลิปใน 24 ชั่วโมง · ลบรายการรอคิวที่จบแล้วเกิน 90 วัน และประวัติข้อความ LINE เกิน 90 วัน · ลบบัญชีที่สมัครแล้ว ไม่ยืนยันอีเมล เกิน 30 วันและยังไม่ผูกกับร้าน/คำขอ/ห้องแชทใด ๆ (≤ 200 บัญชี/รอบ ลงบันทึกกิจกรรมของแพลตฟอร์มทุกครั้ง — บัญชีที่ยืนยันอีเมลแล้วไม่ถูกลบไม่ว่าจะนานแค่ไหน) · ล้างตารางนับจำกัดอัตราที่เก่ากว่า 24 ชั่วโมง

หมายเหตุ

  • expire-holds ยังถูกเรียกแบบ lazy เมื่อลูกค้าเปิดใบจอง/กดจอง และเมื่อพนักงานเปิดหน้าคืนนี้ ดังนั้นแม้ cron หยุด ลูกค้าจะยังไม่เห็นโต๊ะค้างนาน แต่การนับบล็อกเบอร์อาจช้า
  • ข้อความ LINE ส่วนใหญ่ถูกส่ง ทันทีหลัง action (ลูกค้าแนบสลิป / พนักงานอนุมัติ-ย้าย-ยกเลิก) โดยไม่รอ cron — cron line-outbox เป็นตัวเก็บตกและตัวลองใหม่ ถ้าหยุด ข้อความจะช้าแต่ไม่หาย (ยกเว้น “อีก N นาที” และ “โต๊ะว่างแล้ว” ที่มาจาก cron เท่านั้น)
  • retry-slips ไม่ลองใหม่กรณี “ไม่พบรายการโอน / สลิปปลอม” และ “ไฟล์ไม่ใช่รูป” (ลูกค้าต้องแก้เอง)
  • รันเองในเครื่อง: curl -H "Authorization: Bearer $CRON_SECRET" http://localhost:3000/api/cron/expire-holds (ทุกงานตอบ JSON สรุปจำนวนที่ทำ เช่น line-outbox ตอบ sent/failed/skipped/retried)

ถ้า cron หยุด

อาการสาเหตุตรวจที่
โต๊ะสีเหลือง “รอชำระ” ค้างนานเกิน 40 นาทีบนผังที่ไม่มีใครเปิดexpire-holds ไม่รันVercel → Project → Cron Jobs → log; CRON_SECRET ใน env ตรงกับที่ Vercel ส่ง
สลิปค้าง “ระบบตรวจสลิปล่ม (จะลองใหม่อัตโนมัติ)” ไม่เปลี่ยนเป็นชั่วโมงretry-slips ไม่รัน หรือ Thunder ยังล่มlog เดียวกัน; การ์ด Thunder ของร้าน
เจ้าของร้านไม่ได้ “สรุปคืนที่ผ่านมา” ตอนเช้าnightly-summary ไม่รัน หรือปิดรับใน “บัญชีของฉัน”log; การ์ดร้านใน “บัญชีของฉัน”
ลูกค้าไม่ได้ข้อความ LINE “โต๊ะว่างแล้ว” / “อีก N นาที”line-outbox ไม่รัน หรือโควตา LINE หมดlog; การ์ด LINE ใน “ตั้งค่าแพลตฟอร์ม” (ตั้งค่า LINE)
รูปสลิปเก่ากว่า 90 วันยังอยู่purge-slips ไม่รันlog; ไม่กระทบผู้ใช้ทันที

Cron ตอบ 401 {"error":"unauthorized"} เมื่อ secret ไม่ตรง

หัวข้อที่เกี่ยวข้อง

หน้านี้ช่วยได้ไหม