คู่มือใช้งานเต็มรูปแบบ

12 ขั้นตอน · 4 เฟส
จากสมัครจนรับเงิน

คู่มือนี้พาคุณจาก สมัคร → ตั้งค่าร้าน + VAT + ทีมงาน → เพิ่มสินค้าและรับสต๊อก → ออกบิลขาย → รับชำระเงิน + พิมพ์ใบกำกับภาษี + WHT → ขยายเป็นหน้าร้านออนไลน์ · ครบทุกขั้นในที่เดียว

Phase A

ตั้งค่าเริ่มต้น

ทำครั้งเดียวก่อนเริ่มขาย

ขั้นที่ 01/register

สมัครและยืนยันอีเมล

สร้างบัญชีร้าน · ใช้เวลาไม่ถึง 1 นาที

เริ่มต้นที่หน้า /register กรอกอีเมล + ตั้งรหัสผ่าน + ชื่อร้าน · ระบบจะสร้าง shop_code (3 ตัวอักษร เช่น ECB) ให้อัตโนมัติเพื่อใช้นำหน้าทุกเลขเอกสาร เช่น ECB-ORD-260521-001

  • รหัสผ่านต้อง ≥ 8 ตัวอักษร · ระบบโชว์ strength meter
  • ตั้งชื่อร้านเป็นภาษาไทยได้ปกติ
  • มี Cloudflare Turnstile ป้องกันบอท (กดผ่านเอง ไม่มี captcha รบกวน)
ยืนยันอีเมลก่อนเข้าระบบ
ระบบจะส่งอีเมลยืนยันจาก noreply@stax.store (ผ่าน Resend SMTP) · กดลิงก์ในอีเมล → ระบบจะพาเข้าสู่หน้าตั้งค่าร้านอัตโนมัติ
ขั้นที่ 02/onboarding

ตั้งค่าข้อมูลร้าน (Onboarding wizard)

โลโก้ · สาขา · เลขผู้เสียภาษี · เบอร์โทร

หลังยืนยันอีเมลครั้งแรก ระบบจะพาเข้าหน้า /onboarding วิซาร์ด 4 ขั้น (โลโก้ → ข้อมูลร้าน → สินค้าแรก → เสร็จ) — กรอกหรือกดข้ามได้ทั้งหมด

โลโก้ร้าน
JPG / PNG / WebP / SVG · ≤ 5 MB · ใช้แสดงในใบเสร็จและหน้าร้าน
สาขา
เช่น "สำนักงานใหญ่" หรือชื่อสาขา
เลขผู้เสียภาษี (13 หลัก)
ใช้พิมพ์ใบกำกับภาษีตามรูปแบบกรมสรรพากร
เบอร์โทรร้าน
แสดงในใบเสร็จและหน้าร้านสาธารณะ + ใช้สร้าง PromptPay QR
ครบครันได้ ไม่ครบก็เริ่มขายได้
ทุกฟิลด์ในขั้นนี้ optional · กลับมาเติมที่ /shop-settings ได้ตลอด
ขั้นที่ 03/shop-settings

ตั้งค่า VAT + WHT + PromptPay

สำคัญถ้าจะออกใบกำกับภาษีและรับโอน

ไปที่ /shop-settings → จัดการ 3 หมวด ก่อนเริ่มออกบิลแรก:

default_vat (%)
ตั้ง 7% ถ้าจดทะเบียน VAT · ตั้ง 0% ถ้ายังไม่จด — ค่านี้จะใช้กับทุกบิลใหม่อัตโนมัติ (แก้ในบิลได้)
default_wht_rate (%)
อัตราหัก ณ ที่จ่ายเริ่มต้น เช่น 3% (ค่าบริการ) หรือ 1% (รับจ้างทำของ) — ใช้กับลูกค้าที่ติด is_wht_eligible
PromptPay (tax_id หรือ phone)
ถ้ากรอก tax_id หรือ phone แล้ว ระบบจะสร้าง QR ตามมาตรฐาน EMVCo บนทุกใบเสร็จ — ลูกค้าสแกนจ่ายได้ทันที
Receipt footer + เลขที่ผู้เสียภาษี
ข้อความท้ายใบเสร็จ เช่น "ขอบคุณที่อุดหนุน 🙏" + ที่อยู่จดทะเบียน
VAT ต้องตั้งก่อนออกบิลแรก
เพราะ VAT ที่ใช้ตอน insert order จะถูกบันทึก snapshot ไว้ — เปลี่ยนหลังจากนั้น บิลเดิมจะไม่ถูกแก้ตาม

แนะนำ — เปิด 2FA ด้วย

ที่ /account/security สแกน QR ด้วย Google Authenticator / Authy / 1Password → ใส่รหัส 6 หลัก · หลังเปิดเสร็จ ระบบจะ pop popup สร้าง 10 รหัสกู้คืน (XXXX-XXXX) ให้ทันที — copy / download เก็บในที่ปลอดภัย

ใช้รหัสกู้คืน: ถ้ามือถือหาย ที่หน้า login กด "ใช้รหัสกู้คืนแทน" ในขั้น 2FA → ใส่รหัส → ระบบจะปิด 2FA ให้ → กลับเข้าระบบได้ → ค่อยเปิด 2FA ใหม่ที่อุปกรณ์ใหม่

ขั้นที่ 04Optional/team

เชิญทีมงาน

พนักงานหรือผู้จัดการ · กำหนด role

ถ้าทำงานคนเดียว ข้ามขั้นนี้ได้ · ถ้ามีพนักงาน 2+ คน ไปที่ /team → กด เชิญสมาชิก

อีเมลผู้รับเชิญ
ระบบสร้าง token + ลิงก์เชิญ — copy ส่งทาง LINE/อีเมล
display_name
ชื่อที่แสดงในระบบ เช่น "แอน — สาขาเซ็นทรัล"
role
owner / manager / staff — กำหนดสิทธิ์ตามตารางด้านล่าง

สิทธิ์ตาม role

ownerจัดการทุกอย่าง · เชิญ/ถอดสมาชิก · เปลี่ยนการตั้งค่าร้าน · โอนความเป็นเจ้าของ
managerจัดการสินค้า / สต๊อก / บิล / รายงาน · เห็นกำไร · ไม่เห็นการตั้งค่าหรือสมาชิก
staffขายสินค้า · ดูสต๊อก · ไม่เห็นรายงานกำไร · ไม่เห็นต้นทุน
สมาชิกใหม่ต้องสมัครก่อน
ผู้รับเชิญต้องสมัครบัญชี Stax ก่อนแล้วจึงกดลิงก์ accept_invite — ระบบจะผูก user เข้าร้านของคุณ (ไม่ต้องเปิดร้านใหม่)
Phase B

เตรียมของขาย

เพิ่มสินค้าและรับสต๊อกล็อตแรก

ขั้นที่ 05Optional/categories

เพิ่มหมวดหมู่สินค้า

จัดกลุ่มเพื่อรายงาน + filter

ไปที่ /categories กดปุ่ม เพิ่มหมวดหมู่ ตั้งชื่อภาษาไทย เช่น เสื้อผ้า · รองเท้า · เครื่องเขียน · แต่ละ category เป็น flat ไม่มี parent

  • ใช้ filter ในหน้า /products และ /reports
  • รายงานกำไรแยกตามหมวดหมู่ใน /reports → "กำไรตามหมวด"
  • ใส่ไม่ก็ได้ — สินค้าจะอยู่ "ไม่ระบุหมวด"
ขั้นที่ 06Optional/suppliers

เพิ่มซัพพลายเออร์

จำเป็นถ้าจะออกใบ PO

เมนู /suppliers เก็บข้อมูลผู้จำหน่าย · ใช้ออกใบสั่งซื้อ (PO) ในขั้นถัดไป

ชื่อซัพพลายเออร์
เช่น "บริษัท ABC ขายส่ง จำกัด"
ผู้ติดต่อ + เบอร์โทร + อีเมล
ใช้เวลาออก PO ส่งทางอีเมลได้
เลขผู้เสียภาษี
แสดงในเอกสาร PO + ใช้ออกใบหัก ณ ที่จ่ายซัพพลายเออร์
ที่อยู่จัดส่งของซัพพลายเออร์
พิมพ์บนเอกสาร PO
ข้ามได้ถ้าใช้ stock adjustment
ถ้ายังไม่อยากจัดการ PO รับสต๊อกแบบลัดผ่าน /stock-adjustments ได้เลย (จะไม่มีเอกสาร PO ให้ trace กลับ)
ขั้นที่ 07/products

เพิ่มสินค้า

SKU · ราคา · บาร์โค้ด · รูป · ตัวเลือก FEFO / Serial / BOM

ไปที่ /productsเพิ่มสินค้า · Dialog มี 4 tabs: พื้นฐาน · ราคา + บาร์โค้ด · รูปภาพ · สต๊อก & สูตร — กรอก tab พื้นฐานก่อน แล้วค่อยข้ามไป tab อื่นตามต้องการ

SKU
รหัสสินค้า unique เช่น TS-001 — ใช้พิมพ์บาร์โค้ด CODE128
ชื่อ + หมวดหมู่ + รูปสินค้า
รองรับหลายรูปต่อสินค้า (แตะรูปแรกตั้งเป็น cover)
ราคาขาย + ราคา wholesale (min qty)
multi-tier — ขายเยอะอัตโนมัติเป็นราคาส่ง
จุดสั่งซื้อใหม่ (low_stock_threshold)
เมื่อสต๊อกต่ำกว่านี้ จะเด้งแจ้งเตือนที่กระดิ่ง + ส่ง webhook

ตัวเลือกขั้นสูง (ตามแต่ละสินค้า)

is_serializedเปิดเมื่อต้องติดตามรายชิ้น (IMEI / serial number) — ตอนขายจะให้ assign serial
use_fefoเปิดเมื่อมีวันหมดอายุ — ระบบจะเลือกล็อตใกล้หมดอายุก่อน FIFO
is_compositeกำหนดสูตร 1 ชุด = A×2 + B×1 — ขายชุดแล้วหักสต๊อกของลูกตามอัตราส่วน
is_publicลูกค้าทั่วไปเห็นสินค้านี้ในหน้าร้าน /s/{shop_code} หรือไม่
เพิ่มทีละหลาย ๆ ตัว
มี xlsx import ที่ /import · โหลด template + ใส่ข้อมูล + อัพไฟล์ → upload สินค้าทีละ 100+ รายการในครั้งเดียว
ขั้นที่ 08/purchase-orders/new

รับสต๊อกล็อตแรก (PO)

สั่งซื้อจากซัพพลายเออร์ · รับเข้าเป็นล็อตใหม่

เปิด /purchase-orders/new เลือกซัพพลายเออร์ + เพิ่มสินค้าและจำนวน + ราคาทุนต่อหน่วย · กด สร้าง PO ระบบจะออกเลข {shop_code}-PO-YYMMDD-NNN

PO ใหม่จะอยู่สถานะ draft → กด ยืนยัน เพื่อล็อกราคา confirmed → เมื่อของมาส่ง กด รับของ ระบบจะสร้าง stock_batches ใหม่ 1 ล็อต ต่อ 1 SKU received

แต่ละล็อตเก็บราคาทุนแยก
ราคาทุนที่กรอกในขั้น "รับของ" คือต้นทุนที่ระบบจำไว้สำหรับล็อตนั้น — ตอนขายระบบจะหักจากล็อตเก่าก่อน (FIFO) หรือล็อตที่ใกล้หมดอายุก่อน (FEFO)

ทางลัด ไม่มีซัพพลายเออร์

ใช้ /stock-adjustments → เลือก "เพิ่ม" → กรอกสินค้า + จำนวน + ราคาทุน → ระบบสร้างล็อตให้ทันที (audit_log จะระบุว่ามาจาก adjustment ไม่ใช่ PO)
Phase C

ขาย + รับเงิน

วงจรหลักของร้าน — ทำซ้ำทุกวัน

ขั้นที่ 09Optional/customers

เพิ่มลูกค้า

จำเป็นเมื่อ: ขายส่ง / ออกใบกำกับภาษี / ติดตามเครดิต / WHT

ขายปลีก walk-in ไม่ต้องเพิ่มลูกค้า
ออกบิลโดยเว้น customer field ได้เลย · ใบเสร็จจะออกในนามร้านอย่างเดียว ข้ามไปขั้น 10 เลยถ้าทำร้านขายปลีกล้วน

ถ้าต้องบันทึก ไปที่ /customers → กด เพิ่มลูกค้า

ชื่อ + เบอร์ + อีเมล + ที่อยู่
ใช้พิมพ์ในใบกำกับภาษี
customer_type
retail / wholesale — wholesale จะได้ราคาส่งอัตโนมัติเมื่อซื้อถึง min_qty
เลขผู้เสียภาษี
จำเป็นถ้าออกใบกำกับภาษีให้นิติบุคคล
credit_limit
วงเงินสินเชื่อ — ระบบเตือนถ้าค้างชำระเกินวงเงิน
is_wht_eligible
เปิดเมื่อเป็นนิติบุคคลที่ต้องหัก ณ ที่จ่าย — ตอนสร้างบิลจะคำนวณ wht_amount อัตโนมัติ (ใช้ default_wht_rate จาก Phase A)
เปิดให้ลูกค้าใช้ portal เอง
ลูกค้าสมัครเองที่ /portal/register ใช้อีเมลตรงกับที่บันทึก → ระบบ auto-link · ลูกค้าจะเห็นบิลตัวเอง + สั่งของผ่าน cart ได้ (ออเดอร์ที่ลูกค้าสั่งเองจะอยู่สถานะ pending_approval รอเจ้าของกดอนุมัติ)
ขั้นที่ 10/quotes /orders/new

ออกใบเสนอราคา หรือ สร้างบิลขายเลย

Quote (PDF ส่งลูกค้า) → convert เป็นบิล · หรือออกบิลตรง

ทางที่ 1 — ออกใบเสนอราคาก่อน

เปิด /quotes/new เลือกลูกค้า + เพิ่มสินค้า + ส่วนลด + ระยะใช้ได้ (เช่น 30 วัน) · กด สร้าง → ระบบออกใบเสนอราคา PDF + เลขเอกสาร {shop_code}-QT-YYMMDD-NNN
เมื่อลูกค้าตกลง → ที่หน้าใบเสนอราคา กดปุ่ม แปลงเป็นบิลขาย ระบบจะเรียก convert_quote_to_order RPC สร้างออเดอร์ + รัน FIFO + บันทึก audit ในคลิกเดียว

ทางที่ 2 — ออกบิลขายเลย

เปิด /orders/new สแกนบาร์โค้ดหรือเลือกสินค้า + จำนวน + ลูกค้า + ส่วนลด + VAT + WHT · กด บันทึก

ตอนกดบันทึก ระบบจะรัน allocate_stock_fifo ภายใต้ FOR UPDATE lock — ป้องกันคนสองคนขายชิ้นเดียวกันพร้อมกัน · ทุก order_item จะ trace กลับล็อตที่ใช้ใน order_item_batches เพื่อรายงานกำไรต่อบิลตรงสตางค์

  • สินค้าที่ is_composite — เลือกชุด ระบบจะคำนวณสต๊อกของลูกใน background
  • ถ้าสต๊อกไม่พอ ระบบ throw INSUFFICIENT_STOCK พร้อมบอกล็อตที่เหลือ

กฎราคา + Bundle ลดอัตโนมัติ (ใหม่)

ทุกครั้งที่ cart หรือลูกค้าเปลี่ยน ระบบจะเรียก compute_price RPC ต่อแถว → ใช้ราคาดีที่สุด (ระหว่าง wholesale tier กับ pricing rule) · ใต้ราคาจะมี badge ลด ฿X · {rule_name}

ถ้า cart เข้ากับ bundle rule ที่ตั้งไว้ ระบบจะใส่ส่วนลดลงในช่อง "ส่วนลด" ให้เลย · banner เปลี่ยนเป็น ใส่ลดให้แล้ว · คุณแก้ราคา/ส่วนลดเองได้เสมอ — แก้แล้วระบบจะหยุด auto

เลือก Serial Number ใน /orders/new (ใหม่)

สินค้า is_serialized จะมีปุ่ม เลือก Serial (0/N) ใต้ชื่อสินค้า · กด → modal โหลด serial ที่ available · multi-select + filter · บังคับเลือกครบ qty ก่อนถึงจะ submit ได้

หลังบันทึกบิล ระบบจะเรียก assign_serials_to_order_item อัตโนมัติ — serial นั้นจะ flip status='sold' ผูกกับบิล

Composite linkage (order_item_components)

สินค้าประกอบ (is_composite) ถูก expand เป็นรายการลูกตอนสร้างบิล — แต่ระบบจะบันทึก linkage table order_item_components ไว้ด้วย ทำให้ refund, รายงานต่อ bundle, หรือ trace กลับ "ขายชุดอะไร" ทำได้

ขั้นที่ 11/orders/[id] · /payments

รับชำระเงิน + ใบเสร็จ / ใบกำกับภาษี / WHT

PromptPay QR · เงินสด · โอน · แนบสลิป · หัก ณ ที่จ่าย

ที่หน้าออเดอร์ /orders/[id] → กดปุ่ม บันทึกการชำระ

วิธีการชำระ
เงินสด · โอน · บัตร · PromptPay
จำนวนเงิน
รับบางส่วนได้ — ระบบ update payment_status อัตโนมัติ (unpaid / partial / paid)
Reference
เลขอ้างอิงรายการธนาคาร
แนบสลิป
รูป JPG / PNG ≤ 5 MB · เก็บใน shop-assets bucket · พื้นฐานของ AI สลิป verify ในอนาคต

พิมพ์ใบเสร็จ / ใบกำกับภาษี

กดปุ่ม พิมพ์ใบเสร็จ → เปิด /print/receipt/[orderId]
Query params: type=receipt | tax-invoice · format=a4 | thermal

  • a4 — เหมาะกับเครื่องพิมพ์ทั่วไป + เก็บเป็นเอกสาร
  • thermal — สำหรับเครื่องพิมพ์สลิป 58mm / 80mm
  • tax-invoice — แสดงเลข VAT 7% แยกออก + เลขผู้เสียภาษีทั้งร้านและลูกค้า
  • PromptPay QR แสดงท้ายใบเสร็จ (EMVCo) — ลูกค้าสแกนจ่ายได้ทันที

ภงด.3 / ภงด.53 (WHT)

ถ้าลูกค้าเปิด is_wht_eligible (Phase A ขั้นที่ 9) ตอนสร้างบิล ระบบจะคำนวณ wht_amount = subtotal × default_wht_rate อัตโนมัติ · ลูกค้าจ่ายเงินสุทธิ (หัก WHT) แล้วส่งใบหัก ณ ที่จ่ายให้คุณ

ปลายเดือนไปที่ /reports/wht → เลือกเดือน → กด Export CSV (UTF-8 BOM) → upload เข้าระบบ e-filing สรรพากรหรือส่งให้บัญชีของคุณยื่นต่อ

ดูประวัติได้ที่ /payments
ทุกการชำระมีหน้ารวมที่ /payments พร้อมคอลัมน์ ใบเสร็จ · ลูกค้า · วิธี · จำนวน · สลิป (thumbnail) · บัตรเครดิตแสดงเป็น VISA •••• 1234

รับชำระอัตโนมัติผ่าน Omise (บัตร + PromptPay)

ถ้าเปิดร้านออนไลน์ ไม่อยากเช็คสลิปเอง — เชื่อม Omise ที่ /shop-settings/payment

วิธีทำงาน: ลูกค้าเข้า /portal/shops/{shop_code} → เลือกบัตร/PromptPay → กดจ่าย · Omise charge เสร็จ → webhook ส่ง event ไป /api/omise/webhook/{shop_id} → ระบบ verify HMAC + insert payment row + flip orders.payment_status เป็น paid อัตโนมัติ

  • แต่ละร้านมี Omise account ของตัวเอง — เงินเข้าบัญชีร้านตรง Stax ไม่ถือเงิน
  • รองรับ Visa / Mastercard / JCB / AMEX · PromptPay QR (auto-verify)
  • TrueMoney Wallet · Internet Banking — ตามที่ Omise account เปิดไว้
  • ใบเสร็จแสดงรายละเอียดบัตร "VISA •••• 1234" ใน /print/receipt/[id]
  • Mode test (skey_test_) → ใช้บัตรจำลอง 4242 4242 4242 4242

หมายเหตุ: Stax เลือก architecture per-shop Omise เพื่อ ไม่ต้องขอ license e-Payment Service Provider จาก ธปท. — สำหรับ marketplace ที่ถือเงินแทนผู้อื่น ต้องมี license ตามพรบ.ระบบการชำระเงิน 2560

Phase D

ขยายธุรกิจ

เปิดทีละฟีเจอร์ตามความพร้อม

ขั้นที่ 12

เปิดหน้าร้าน + ฟีเจอร์ขั้นสูง

หน้าร้านสาธารณะ · custom domain · กฎราคา · ออเดอร์เกิดซ้ำ · API · stock-take · รายงาน

เมื่อร้านพร้อมขายแล้ว เปิดฟีเจอร์เพิ่มเติมตามใจ · แต่ละหัวข้อด้านล่างมี วิธีใช้ทีละขั้น · กดลิงก์ในแต่ละหัวข้อเพื่อไปหน้านั้นเลย

เปิดหน้าร้านสาธารณะ

/shop-settings
ทำอะไรเปิด URL สำหรับลูกค้าทั่วไป (ไม่ต้อง login) เข้ามาดูสินค้า + สั่งซื้อ
ใช้เมื่อไหร่ต้องการให้ลูกค้าใหม่เห็นสินค้าจาก Google search / Social media
วิธีใช้ทีละขั้น
  1. 1ไปที่ /shop-settings → เลื่อนหา card "หน้าร้านสาธารณะ" → toggle เปิด
  2. 2ใส่ banner_url (รูป cover) + storefront_about (คำอธิบายร้าน 1-2 ย่อหน้า)
  3. 3เลือก theme_color (สีหลักของหน้าร้าน)
  4. 4กดบันทึก → หน้าร้านพร้อมที่ stax.store/s/{shop_code} ทันที
  5. 5แต่ละสินค้ามี toggle is_public แยก — ที่ /products สามารถซ่อนสินค้าบางตัวจากหน้าร้านได้
💡 เคล็ดลับลูกค้าที่สั่งจากหน้าร้านสาธารณะ ออเดอร์จะเข้าสถานะ pending_approval → คุณกดอนุมัติที่ /orders → FIFO รันต่อ

ลิงก์ Google Maps ในหน้าติดต่อ

/shop-settings
ทำอะไรปุ่ม 'ดูแผนที่ / นำทาง' บนหน้า /s/{shop_code}/contact ลูกค้ากดเปิด Google Maps app นำทางไปที่ร้าน
ใช้เมื่อไหร่ร้านมีหน้าร้าน physical อยากให้ลูกค้าหาเจอง่าย
วิธีใช้ทีละขั้น
  1. 1เปิด Google Maps บนเบราว์เซอร์ → ค้นหาตำแหน่งร้านของคุณ
  2. 2ถ้าหมุดยังไม่อยู่ตำแหน่งที่ถูก → กดขวาที่ตำแหน่งจริง → "What's here" → ปักหมุดใหม่
  3. 3กดปุ่ม "Share" (รูปลูกศร) → tab "Send a link" → กด "Copy link"
  4. 4ไปที่ /shop-settings → field "ลิงก์ Google Maps (optional)" ใต้ "ที่อยู่ร้าน" → paste URL → บันทึก
  5. 5ตรวจที่ /s/{shop_code}/contact ดูปุ่ม "ดูแผนที่ / นำทาง"
💡 เคล็ดลับไม่ใส่ลิงก์ก็ได้ — ระบบจะ search จาก field 'ที่อยู่ร้าน' ให้อัตโนมัติ แต่ Google อาจ resolve ไม่ตรงเป๊ะกับที่อยู่ภาษาไทย

ผูก custom domain

/shop-settings/domains
ทำอะไรใช้ domain ของคุณเอง (เช่น shop.example.com) แทน /s/{shop_code} ของ Stax · SSL ผ่าน Vercel
ใช้เมื่อไหร่มี domain ของตัวเอง อยากให้ดูเป็นมืออาชีพ + brand recognition
วิธีใช้ทีละขั้น
  1. 1ไปที่ /shop-settings/domains → กด "เพิ่ม domain" → ใส่ hostname (เช่น shop.example.com)
  2. 2ระบบให้ TXT record (เช่น _stax-verify.shop.example.com → "stax-verify=abc123...")
  3. 3ไปที่ผู้ให้บริการ DNS ของคุณ (Cloudflare/GoDaddy/etc.) → เพิ่ม TXT record ตามที่ระบบให้
  4. 4กลับมาที่ Stax → กด "Verify" → ระบบ resolveTxt DNS เช็คว่าตรง → flag verified=true
  5. 5ระบบเรียก Vercel API เพิ่ม domain ลง project → SSL provision อัตโนมัติ (1-5 นาที)
  6. 6เพิ่ม CNAME ที่ DNS ของคุณ ชี้ไป cname.vercel-dns.com
💡 เคล็ดลับห้ามเปิด Cloudflare proxy (orange cloud) — SSL provisioning ของ Vercel จะ fail · เลือก 'DNS only' (gray cloud) เท่านั้น

Omise — รับชำระบัตร + PromptPay

/shop-settings/payment
ทำอะไรลูกค้าจ่ายผ่านบัตรเครดิต/PromptPay บน /portal · เงินเข้าบัญชีร้านตรง · ระบบ verify อัตโนมัติผ่าน webhook
ใช้เมื่อไหร่รับลูกค้าออนไลน์ ไม่อยากเช็คสลิปเอง + รองรับบัตรเครดิต
วิธีใช้ทีละขั้น
  1. 1สมัคร Omise account ที่ dashboard.omise.co (ฟรี · มี mode test ก่อน live)
  2. 2ที่ Omise → Settings → Keys → copy Public key + Secret key
  3. 3ที่ Omise → Webhooks → Add endpoint → paste https://stax.store/api/omise/webhook/{shop_id} → copy webhook signing secret
  4. 4ที่ Stax → /shop-settings/payment → paste 3 ค่า (public/secret/webhook) → กด "ทดสอบ + บันทึก"
  5. 5เลือก PromptPay source: "Omise" (auto-verify) หรือ "ของร้านเอง" (static QR ต้องเช็คสลิป)
  6. 6ลูกค้าเข้า /portal/shops/{shop_code} → เลือกบัตร → ใส่ข้อมูล → จ่าย · payment row + receipt แสดง "VISA •••• 1234"
💡 เคล็ดลับMode test ใช้บัตร 4242 4242 4242 4242 exp 12/30 cvc 123 ทดลอง flow ครบโดยไม่หักเงินจริง · เปลี่ยนเป็น live keys เมื่อพร้อมรับเงินจริง

LINE Official Account — chatbot + push

/shop-settings/line
ทำอะไรbot ตอบคำถาม FAQ · รับสลิปจากลูกค้าทาง LINE save อัตโนมัติ · ส่ง notification ออเดอร์ผ่าน push (template 4 แบบ)
ใช้เมื่อไหร่ใช้ LINE คุย/รับ order กับลูกค้าอยู่แล้ว — ทำให้ทุกอย่างเข้า Stax อัตโนมัติ
วิธีใช้ทีละขั้น
  1. 1สมัคร LINE Developers ที่ developers.line.biz → Create Provider → Messaging API channel
  2. 2ที่ tab "Basic settings" → copy Channel ID + Channel secret
  3. 3ที่ tab "Messaging API" → Issue "Channel access token (long-lived)" → copy
  4. 4ที่ Stax → /shop-settings/line → paste 3 ค่า → กด "ทดสอบ + บันทึก"
  5. 5กลับไป LINE Console → Webhook URL → paste URL ที่ Stax โชว์ → เปิด "Use webhook" → กด Verify
  6. 6ปิด LINE auto-reply ที่ OA Manager → Settings → Response settings (เปิด webhook แทน)
  7. 7แชร์ QR code ของ OA ให้ลูกค้า add เป็นเพื่อน → เริ่มทดสอบ
💡 เคล็ดลับลูกค้าส่ง 'สลิป' หรือ 'สินค้า' หรือ 'ออเดอร์' — bot ตอบ FAQ ตรงประเด็น · ส่งรูปสลิป → save ใน shop-assets/payments รอ verify · ปุ่ม 'แจ้งใน LINE' ที่ /orders/[id] ส่ง push 4 templates: ยืนยัน / พร้อมรับ / ส่งแล้ว / เตือนค้างชำระ

กฎราคาอัตโนมัติ + Bundle

/pricing-rules
ทำอะไรตั้งกฎราคาตามเงื่อนไข → /orders/new คำนวณราคาดีที่สุดให้อัตโนมัติ · bundle ใส่ส่วนลดให้เลย
ใช้เมื่อไหร่ทำโปรเมื่อซื้อเยอะ / โปรกลุ่มลูกค้า / โปรช่วงเวลา / bundle deal
วิธีใช้ทีละขั้น
  1. 1ไปที่ /pricing-rules → กด "เพิ่มกฎใหม่"
  2. 2เลือก rule_type: qty_tier (ซื้อจำนวน X+ ลดราคา) | customer_segment (wholesale/retail-only) | date_range (โปรช่วงเวลา) | bundle (ซื้อ A+B ลด)
  3. 3ตั้ง scope: applies_to_all (ทุกสินค้า) | product_id เฉพาะ SKU | category_id เฉพาะหมวด
  4. 4ตั้ง modifier: discount_pct (ลด %) | discount_amount (ลด ฿) | fixed_price (ตั้งราคาคงที่)
  5. 5priority — ใช้เมื่อมีหลายกฎเข้าเงื่อนไขพร้อมกัน · ตัวเลขสูงชนะ
  6. 6สำหรับ bundle → เพิ่มสินค้าที่ต้องอยู่ใน cart (≥ 2 ตัว) + min_qty ของแต่ละตัว
  7. 7กดบันทึก → /orders/new จะคำนวณราคาดีที่สุดให้แต่ละบรรทัด · badge แสดง "ลด ฿X · {rule_name}"
💡 เคล็ดลับระบบเลือก price ที่ต่ำที่สุดให้ลูกค้าเสมอ (ดีสำหรับลูกค้า) · ถ้าไม่อยากให้กฎใดทำงานชั่วคราว → toggle active=false (ไม่ต้องลบ)

ออเดอร์เกิดซ้ำอัตโนมัติ

/recurring-orders
ทำอะไรตั้ง template ออเดอร์ + รอบเวลา → pg_cron worker ออกบิลอัตโนมัติทุก 15 นาทีตามตาราง (ผ่าน create_order_with_items เหมือนขายมือ)
ใช้เมื่อไหร่ลูกค้าประจำสั่งของชุดเดิมทุกสัปดาห์/เดือน (เช่น น้ำดื่ม, อาหารแมว, วัตถุดิบร้านอาหาร)
วิธีใช้ทีละขั้น
  1. 1ไปที่ /recurring-orders/new
  2. 2เลือกลูกค้า + เพิ่มสินค้า + จำนวน (เหมือนสร้างออเดอร์ปกติ)
  3. 3เลือก cadence: weekly / biweekly / monthly / quarterly
  4. 4ตั้ง day_of_week (อาทิตย์-เสาร์) สำหรับ weekly | day_of_month (1-31) สำหรับ monthly | hour (0-23)
  5. 5ตั้ง start_at (วันเริ่ม) → กดบันทึก
  6. 6ระบบจะออกบิลครั้งแรกตาม start_at + ออกซ้ำตามรอบ · ดูตารางได้ที่ /recurring-orders/[id]
  7. 7ถ้าออกบิลล้มเหลว (สต๊อกไม่พอ ฯลฯ) ระบบจะ auto-disable template + ส่ง webhook stock.low
💡 เคล็ดลับปุ่ม 'Run now' ที่ /recurring-orders/[id] ทดสอบได้ทันทีไม่ต้องรอ cron · ออเดอร์ที่เกิดจะแสดง origin='recurring' ใน /audit

ตรวจนับสต๊อกประจำงวด

/stock-take
ทำอะไรเปรียบเทียบยอดในระบบ vs ของจริงในร้าน → ปรับยอดอัตโนมัติพร้อม audit_log
ใช้เมื่อไหร่ปิดร้านสิ้นเดือน · ตรวจของหายหรือเกินจาก inventory drift
วิธีใช้ทีละขั้น
  1. 1ไปที่ /stock-take → กด "เริ่ม session ใหม่"
  2. 2ระบบ snapshot สต๊อกปัจจุบันของทุก SKU ใน session
  3. 3เดินนับด้วยมือถือ → ใช้ scanner สแกน barcode ทีละชิ้น → ใส่จำนวนนับจริง
  4. 4ระหว่างนับเห็น variance ทันที (qty_counted - qty_system) · บวก = มีของเกิน · ลบ = ของหาย
  5. 5เมื่อนับครบทุกตัว → กด "Commit" → ระบบเรียก adjust_stock RPC สำหรับทุก SKU ที่ variance ≠ 0
  6. 6audit_log ระบุว่ามาจาก stock-take session id อะไร · stock_batches ถูกสร้าง/หักตาม FIFO
💡 เคล็ดลับกดยกเลิก session ระหว่างนับได้เสมอ — ยังไม่ commit = ไม่กระทบสต๊อกจริง · 1 session = 1 ครั้งของการนับ ดู history ที่ /stock-take รายการ

REST API + Webhook (สำหรับ developer)

/developers
ทำอะไรดึงข้อมูลร้านผ่าน HTTP API (Bearer auth) · subscribe event ที่ระบบ POST ไป URL ของคุณเอง (HMAC-SHA256 signed)
ใช้เมื่อไหร่เชื่อม Stax กับ ERP/Marketplace/ระบบบัญชีของตัวเอง · automation workflow
วิธีใช้ทีละขั้น
  1. 1ไปที่ /developers → tab "API tokens" → กด "สร้าง token"
  2. 2ตั้งชื่อ + เลือก scopes (read / write) → กดสร้าง → copy raw token (stax_live_xxx) ทันที — แสดงครั้งเดียวเท่านั้น
  3. 3ใช้ token: curl -H "Authorization: Bearer stax_live_xxx" https://stax.store/api/v1/products
  4. 4Endpoints: GET /products /customers /orders /stock/{id} · POST /products /customers · rate limit 60 req/min ต่อ token
  5. 5สำหรับ webhook → tab "Webhooks" → กด "เพิ่ม endpoint" → URL ของคุณ + เลือก events
  6. 6Events: order.created / order.confirmed / order.cancelled / payment.received / stock.low / customer.created
  7. 7ตรวจ HMAC ที่ฝั่งคุณ: signature = HMAC-SHA256(secret, body) base64 ในส่วน X-Stax-Signature header
  8. 8ดู delivery history ที่ /developers → retry button ถ้า failed (exponential backoff 60s → 5m → 30m)
💡 เคล็ดลับถ้า leak token → กด revoke ที่ /developers ทันที token เก่าจะตาย · raw token ดูซ้ำไม่ได้ ต้องสร้างใหม่ทุกครั้ง

2FA + รหัสกู้คืน

/account/security
ทำอะไรป้องกันบัญชีถูกแฮก — ทุก login ต้องใส่รหัส 6 หลักจากแอป + recovery codes 10 รหัสกู้คืนถ้ามือถือหาย
ใช้เมื่อไหร่ใช้กับบัญชีเจ้าของร้าน (owner) ที่มีสิทธิ์ทุกอย่าง · พนักงานก็เปิดได้
วิธีใช้ทีละขั้น
  1. 1ไปที่ /account/security → กด "เปิดใช้ 2FA"
  2. 2เปิดแอป Google Authenticator / Authy / 1Password → "Scan QR code" → สแกน QR ที่แสดง
  3. 3ใส่รหัส 6 หลักที่แอปแสดง → กด "ยืนยัน"
  4. 42FA enrolled สำเร็จ → ระบบเด้ง popup สร้าง 10 recovery codes (XXXX-XXXX) ทันที
  5. 5กด "คัดลอกทั้งหมด" หรือ "Download .txt" → เก็บใน password manager / ปริ้นเก็บ
  6. 6ติ๊ก "ฉันบันทึกรหัสไว้แล้ว" → ปิดหน้าต่าง
  7. 7ครั้งหน้าที่ login → ใส่รหัสจากแอป (เปลี่ยนทุก 30 วินาที)
💡 เคล็ดลับถ้ามือถือหาย → ที่หน้า login (mfa stage) กด 'ใช้รหัสกู้คืนแทน' → ใส่ 1 ใน 10 codes → ระบบปิด 2FA ให้ → login ได้ → ค่อยเปิด 2FA ใหม่ที่อุปกรณ์ใหม่

รายการอุปกรณ์ที่ login (active devices)

/account/sessions
ทำอะไรเห็นทุกเครื่องที่บัญชีคุณ login อยู่ + revoke ทีละเครื่องได้
ใช้เมื่อไหร่สงสัยว่ามีคนเข้าใช้บัญชีโดยไม่ใช่คุณ · ลืม logout ที่คอมเพื่อน
วิธีใช้ทีละขั้น
  1. 1ไปที่ /account/sessions
  2. 2ดูข้อมูล: browser/OS · IP + เมือง + ประเทศ · last seen · session age
  3. 3session ปัจจุบันมี badge "ใช้งานอยู่" (revoke ไม่ได้)
  4. 4session อื่น → กด "Revoke" → ระบบเรียก admin.deleteSession ของ Supabase → JWT ใช้ refresh ไม่ได้ → เครื่องนั้น logout ทันที
  5. 5หรือกด "ออกจากระบบในอุปกรณ์อื่นทั้งหมด" — revoke ทุก session ที่ไม่ใช่ปัจจุบันพร้อมกัน
💡 เคล็ดลับระบบเก็บเฉพาะ metadata (UA / IP / geo) ไม่เก็บ token จริง · session > 60 วันที่ inactive จะถูก prune โดย pg_cron อัตโนมัติ

แก้สินค้าหลายตัวพร้อมกัน (bulk operations)

/products
ทำอะไรติ๊กเลือกสินค้าหลายๆ รายการ แล้วแก้ราคา / ย้ายหมวด / เปิด-ปิดหน้าร้าน / ลบ ทีเดียว
ใช้เมื่อไหร่ร้านมี 100+ SKU · ปรับราคาทั้งหมวด · เปลี่ยนหมวดสินค้าคราวเดียว · ลบสินค้าเลิกผลิตหลายตัว
วิธีใช้ทีละขั้น
  1. 1ไปที่ /products → ติ๊ก checkbox ทางซ้ายของแต่ละบรรทัด (หรือติ๊ก header เพื่อเลือกทั้งหน้า)
  2. 2แถบลอย "X เลือกอยู่" จะโผล่ที่ด้านล่างกึ่งกลางจอ พร้อม 5 ปุ่ม
  3. 3อัพเดทราคา — เลือก mode: "ตั้งราคาคงที่" / "คูณ ×" (เช่น 1.10 = +10%) / "บวก/ลบ ฿" · เลือกช่องที่ต้องการ: ปลีก / ส่ง / ทั้งสอง
  4. 4ย้ายหมวด — เลือก category ใหม่จาก dropdown · ทุกตัวที่เลือกย้ายไป category นั้น
  5. 5เปิดหน้าร้าน / ปิด — toggle is_public ของทุกตัวที่เลือก
  6. 6ลบ — confirm modal บอกจำนวน · ถ้าสินค้ามีออเดอร์เก่าอ้างถึง → ระบบ block + แนะนำใช้ "ปิดการขาย" แทน
  7. 7audit_log จะมี record action_type="bulk_update" พร้อมรายละเอียดของ op ที่ทำ
💡 เคล็ดลับครั้งละไม่เกิน 500 รายการ · ราคาที่คูณ/บวกแล้วติดลบ ระบบจะ clamp ที่ 0 ให้ · ลบสินค้าไม่ได้ = แทบทุกครั้งหมายถึงมีออเดอร์อ้างถึง → ใช้ 'ปิดการขาย' แทน (รักษา audit + history)

ปรับใบเสร็จให้เป็นแบรนด์ของร้าน

/shop-settings
ทำอะไรตั้งข้อความท้ายใบเสร็จ · ใส่ social handle (FB/IG/LINE) · ซ่อนโลโก้ (สำหรับกระดาษ letterhead) · ปิด PromptPay QR
ใช้เมื่อไหร่อยากให้ใบเสร็จดูเป็นมืออาชีพ + ดึงลูกค้าให้ตาม social · ปริ้นบนกระดาษหัวจดหมายที่มีโลโก้แล้ว
วิธีใช้ทีละขั้น
  1. 1ไปที่ /shop-settings → เลื่อนหา card "ตั้งค่าใบเสร็จ" (ไอคอนสีม่วง)
  2. 2ข้อความท้ายใบเสร็จ — แทน "ขอบคุณที่ใช้บริการ" เป็นข้อความของร้าน (เช่น "คืนสินค้าได้ภายใน 7 วัน · LINE @stax")
  3. 3Facebook / Instagram / LINE — paste handle หรือ URL · จะแสดงเป็น "FB: · IG: · LINE:" ใต้ข้อความท้ายใบเสร็จ
  4. 4แสดงโลโก้บนใบเสร็จ — ปิดถ้าคุณปริ้นบน letterhead ที่มีโลโก้แล้ว (กันโลโก้ซ้ำ)
  5. 5แสดง QR PromptPay บนใบเสร็จ — ปิดถ้าคุณใช้ Omise PromptPay แทน (เพราะ Omise สร้าง QR per-charge แล้ว)
  6. 6กดบันทึก → พิมพ์ใบเสร็จที่ /print/receipt/[orderId] เห็นการเปลี่ยนแปลงทันที
💡 เคล็ดลับข้อความท้ายใบเสร็จรองรับขึ้นบรรทัดใหม่ได้ (กด Enter ในกล่อง) · ทั้ง A4 และ thermal 80mm แสดงเหมือนกัน · ส่วน social handle จะอยู่กลางใบเสร็จเสมอเพื่อให้ลูกค้าสแกน/copy ง่าย

ใช้งานออฟไลน์ + queue ออเดอร์เมื่อเน็ตหลุด

/dashboard
ทำอะไรหน้าที่เคยเปิดอ่านได้ออฟไลน์ · ออเดอร์ที่สร้างตอนเน็ตหลุดจะ save ในมือถือ/คอม แล้ว sync เมื่อกลับมามีเน็ต
ใช้เมื่อไหร่ร้านอยู่ในห้าง/ตึกที่เน็ตไม่นิ่ง · ออกบูธ pop-up store · ระหว่างทางที่ wifi ขาดๆ หายๆ
วิธีใช้ทีละขั้น
  1. 1เปิด Stax ใน Chrome / Edge / Safari บนมือถือหรือ tablet — service worker จะติดตั้งอัตโนมัติหลังโหลดหน้าแรก 1-2 วินาที
  2. 2(แนะนำ) Add to Home Screen → จะได้ icon stand-alone เหมือนแอป จริงๆ
  3. 3ใช้งานปกติ → ระบบ cache หน้าที่เปิดไว้ทั้งหมด
  4. 4พอเน็ตหลุด → topbar จะโชว์ pill สีเหลือง "WifiOff · ออฟไลน์"
  5. 5เปิดหน้าที่เคยเข้าแล้ว → ยังดูได้ตามปกติ (ข้อมูล cache จากครั้งล่าสุด)
  6. 6สร้างออเดอร์ที่ /orders/new ตอนออฟไลน์ → submit ปกติ → ระบบ save ออเดอร์ใน IndexedDB ของเครื่อง + reset form
  7. 7พอเน็ตกลับมา → topbar pill เปลี่ยนเป็นสีน้ำเงิน "CloudUpload · N ออเดอร์รอ sync" → ระบบส่งออเดอร์ทั้งหมดอัตโนมัติ + reload หน้า /orders
💡 เคล็ดลับออเดอร์ที่มี serial number ต้องมีเน็ตเพื่อ assign serial — ระบบจะ block ถ้าพยายามสร้างตอนออฟไลน์ · ออเดอร์ที่ออฟไลน์ใช้ stock snapshot จาก cache → ถ้าระหว่าง offline มีคนอื่นขายของจนสต๊อกหมด → ออเดอร์นี้จะ fail ตอน sync (เก็บใน queue พร้อม error · operator แก้ใน /orders/new ใหม่)
📥 EXTRA

คู่มือแยกตามหัวข้อ

คู่มือเฉพาะเรื่องที่เปิดในหน้าใหม่ พิมพ์เป็น PDF ก็ได้

พร้อมแล้วใช่ไหม?

สมัครฟรี · ไม่ต้องผูกบัตร · เริ่มขายได้ใน 1 นาที

เริ่มใช้ฟรี
คู่มือใช้งาน — Stax · Stax