สร้างเว็บแอปจัดการงาน สำหรับการขายตั๋วและผู้เข้าร่วม
คู่มือเชิงปฏิบัติสำหรับวางแผน ออกแบบ และส่งมอบเว็บแอปที่ช่วยผู้จัดงานจัดการการลงทะเบียน ขายตั๋ว ผู้เข้าร่วม อีเมล และการเช็กอิน

ชัดเจนกับเป้าหมาย ผู้ใช้งาน และขอบเขต
ก่อนเลือกฟีเจอร์หรือเทคโนโลยี ให้ชัดเจนว่าเรากำลังสร้างให้ใครและความสำเร็จมีหน้าตาอย่างไร สิ่งนี้จะช่วยป้องกันไม่ให้แพลตฟอร์มขายตั๋วกลายเป็นชุดเครื่องมือที่ทำไม่เสร็จ
ระบุผู้ใช้และงานหลักที่ต้องทำ
เริ่มจากระบุลูกค้าหลัก เพราะแต่ละประเภทจะให้ความสำคัญกับผลลัพธ์ต่างกัน:
- ผู้จัดงานเดี่ยว ต้องการความเร็ว: สร้างงาน ขายตั๋ว และไม่ต้องจมกับงานซัพพอร์ต\n- สถานที่จัดงาน ให้ความสำคัญกับการตั้งค่าที่ทำซ้ำได้ การควบคุมความจุ และการปฏิบัติงานที่รวดเร็วในสถานที่\n- เอเจนซี่ ต้องการการจัดการหลายงาน การให้สิทธิ์ลูกค้า และรายงานที่ชัดเจน
เขียนงานหลักเป็นประโยคเดียว เช่น: “ช่วยให้ผู้จัดขายตั๋วและเช็กอินผู้เข้าร่วมได้ด้วยความพยายามและข้อผิดพลาดน้อยที่สุด”
ทำแผนผังเวิร์กโฟลว์หลัก (จากต้นจนจบ)
ระบุเส้นทางที่ต้องทำงานได้จริง:
สร้างงาน → ตั้งประเภท/ราคา ตั๋ว → เผยแพร่ → ผู้เข้าร่วมลงทะเบียน → ชำระเงิน → ออกตั๋ว → เช็กอินด้วย QR → ส่งออก/รายงาน
ถ้ามีขั้นตอนใดขาดหรือเปราะบาง แอปจะรู้สึกไม่สมบูรณ์แม้ว่าจะมีฟีเจอร์เสริมมากมาย
กำหนดตัวชี้วัดความสำเร็จที่ติดตามได้จริง
เลือกผลลัพธ์ไม่กี่ปัจจัยที่ผูกกับเวิร์กโฟลว์:
- อัตราการแปลงเช็คเอาต์ (ลงทะเบียน → คำสั่งซื้อสำเร็จ)
- เวลาเฉลี่ยต่อการเช็กอิน ต่อผู้เข้าร่วมและอัตราความล้มเหลว (ปัญหาการสแกน QR)
- เวลาในการคืนเงิน/โอนสิทธิ์ (ขอ → แก้ไขเสร็จ)
- ปริมาณซัพพอร์ต ต่อหนึ่งงาน (และสาเหตุยอดนิยม)
ตัดสินใจ MVP vs v1
MVP ควร "ใช้ได้ในวันแรก": สร้างงาน ขายตั๋ว ยืนยันการสั่งซื้อ เช็กอินพื้นฐาน และการส่งออกง่าย ๆ เก็บของที่เป็น "nice-to-have" (กฎส่วนลด แผนผังที่นั่ง ภาษีซับซ้อน) ไว้สำหรับ v1 หลังจากยืนยันความต้องการ
ระบุข้อจำกัดตั้งแต่แรก
ชัดเจนเรื่อง งบประมาณ, ไทม์ไลน์, และ ทักษะทีม—สิ่งเหล่านี้กำหนดว่าจะสร้างเองทั้งหมดหรือพึ่งบริการสำเร็จรูป นอกจากนี้ให้พิจารณาความต้องการด้านกฎระเบียบ (ใบกำกับภาษี, GDPR/CCPA, กฎการชำระเงิน) เพื่อหลีกเลี่ยงการออกแบบใหม่ในภายหลัง
ฟีเจอร์หลักและเรื่องราวผู้ใช้
ก่อนเลือกหน้าจอหรือฐานข้อมูล ให้กำหนดสิ่งที่แอปต้อง "ให้คนทำได้"—และ "คน" คือใคร แอปจัดการงานที่ดีมักมีบทบาทที่ชัดเจนแต่ละบทมีสิทธิ์และความคาดหวังต่างกัน
บทบาทและสิทธิ์ (ใครทำอะไรได้)
เริ่มจากเรียบง่ายแล้วค่อยขยาย:
- Organizer: สร้างงาน เผยแพร่ตั๋ว จัดการการตั้งค่า คืนเงิน/ยกเลิกได้
- Staff: ดูรายการผู้เข้าร่วม ทำการเช็กอินด้วย QR แก้ไขได้จำกัด
- Finance: ดูคำสั่งซื้อ การจ่ายเงิน ใบเสร็จ/ใบกำกับ จัดการ chargeback และคืนเงิน
- Attendee: ลงทะเบียน ชำระเงิน ได้รับตั๋ว และจัดการรายละเอียดคำสั่งซื้อของตน
กฎปฏิบัติ: ถ้าใครสามารถเปลี่ยนข้อมูลที่เกี่ยวกับเงินหรือการมองเห็นงานได้ ควรแยกสิทธิ์นั้นออกมา
หน้าหลักที่ควรวางแผน (เส้นทางที่ราบรื่น)
ร่างการนำทางแกนหลักตั้งแต่ต้นเพื่อไม่ให้ฟีเจอร์กระจัดกระจาย:
- ตั้งค่างาน (ชื่อ สถานที่/รายละเอียดออนไลน์ วันเวลา/โซนเวลา ความจุ นโยบาย)
- ตัวสร้างตั๋ว (ประเภท ราคา ช่วงเวลาการขาย ขีดจำกัด โค้ดโปรโมชั่นถ้าต้องการ)
- เช็คเอาต์ + ยืนยัน (ฟอร์มการลงทะเบียน การชำระเงิน ใบเสร็จ การส่งตั๋ว)
- รายละเอียดคำสั่งซื้อ (สถานะ การชำระเงิน ประวัติการคืนเงิน การมอบหมายผู้เข้าร่วม)
- รายการผู้เข้าร่วม + เช็กอิน (ค้นหา ตัวกรอง สแกน QR บันทึกการเช็กอิน)
- แดชบอร์ดผู้จัด (สรุปยอดขาย ความจุ แจ้งเตือน กิจกรรมล่าสุด)
เรื่องราวผู้ใช้ที่ทดสอบได้
เขียนเรื่องสั้นที่ตรวจสอบได้ในครั้งเดียว:
- ผู้จัดเผยแพร่ตั๋ว: เมื่อเหตุการณ์ยังเป็น draft แล้วฉันเพิ่มตั๋ว "General Admission" พร้อมราคาและวันที่ขาย แล้วตั๋วนั้นปรากฏในหน้าลงทะเบียนสาธารณะและหยุดขายหลังวันที่สิ้นสุด\n- ผู้เข้าร่วมซื้อสินค้า: เมื่อการชำระเงินสำเร็จ จะสร้างคำสั่งซื้อ ออกตั๋ว/QR โค้ดที่ไม่ซ้ำ และส่งอีเมลยืนยันภายใน 2 นาที\n- เจ้าหน้าที่เช็กอินผู้เข้าร่วม: เมื่อสแกน QR ที่ถูกต้อง ผู้เข้าร่วมจะถูกทำเครื่องหมายว่า "checked in" พร้อมเวลาประทับ และ QR เดียวกันไม่สามารถใช้ซ้ำได้เว้นแต่มีสิทธิ์ override
กรณีขอบเขตที่ต้องรองรับ
วางแผนแต่แรกเพื่อหลีกเลี่ยงการแก้ไขแบบลวกๆ ต่อไป: sold out, คำสั่งซ้ำ, คืนเงินบางส่วน, chargeback, ยกเลิก/เลื่อนงาน, อีเมลส่งล้มเหลว, เช็กอินออฟไลน์, และ การโอน/มอบตั๋ว
ข้อมูลที่ต้องเก็บต่อเวิร์กโฟลว์
ขั้นต่ำ: สถานะงานและความจุ กฎประเภทตั๋ว (ขีดจำกัด ช่วงเวลา) สถานะคำสั่งซื้อ/การชำระเงิน ข้อมูลผู้เข้าร่วม โทเคน/QR และบันทึกการเช็กอินแบบ append-only (ใครเช็กอิน ใครทำ เมื่อไหร่ และบนอุปกรณ์ใด) ประวัติเหล่านี้สำคัญเมื่อต้องแก้ข้อพิพาท
โมเดลข้อมูลสำหรับงาน ตั๋ว คำสั่งซื้อ และผู้เข้าร่วม
โมเดลข้อมูลที่ชัดเจนทำให้แพลตฟอร์มตั๋วพัฒนาได้ง่ายขึ้น เริ่มจากกำหนด "สิ่ง" ที่จะเก็บ (events, ticket types, orders, attendees) และความสัมพันธ์ระหว่างพวกมัน
Event: แหล่งความจริง
Event ควรครอบคลุมตารางเวลา ขีดจำกัด และการเผยแพร่:
- พื้นฐาน: title, description, organizer_id
- วันที่: start_at, end_at, timezone (เก็บเป็น UTC และแสดงโดยใช้ timezone ของงาน)
- สถานที่: venue_name, address, city, country (หรือแยกตาราง Venue ถ้าใช้ซ้ำ)
- ความจุ: total_capacity (และอาจมีการจำกัดต่อประเภทตั๋ว)
- สถานะ: draft, published, canceled, ended
โครงสร้างนี้รองรับการจัดการผู้เข้าร่วมทั่วไป เช่น การซ่อนงานที่เป็น draft ปิดการขายเมื่อความจุเต็ม และแสดงเวลาในท้องถิ่นอย่างถูกต้อง
ประเภทตั๋ว: สิ่งที่ขายได้
TicketType นิยามข้อเสนอ:
- name, description, price, currency
- quantity_available (และ quantity_sold)
- sales_window: sales_start_at, sales_end_at
- ภาษี/ค่าธรรมเนียม: tax_rate (หรือ tax_id), fee_flat/fee_percent, ธง "fees_included"
- add-ons: โมเดลเป็น TicketTypes แยกหรือ AddOn ที่เชื่อมกับ TicketType
- โค้ดส่วนลด: ตาราง DiscountCode (code, type percent/fixed, amount, usage_limit, valid window) เชื่อมกับ Event และอาจเฉพาะบาง TicketTypes
คำสั่งซื้อและการชำระเงิน: สิ่งที่เกิดขึ้นทางการเงิน
แยกเลเยอร์การค้าสองชั้น:
- Order: order_number, event_id, buyer_email, subtotal, taxes, fees, total, order_status (pending/confirmed/canceled)
- Payment: provider (Stripe, ฯลฯ), provider_payment_id, payment_status (requires_action/paid/failed/refunded), amount, captured_at
การคืนเงินทำเป็นบันทึกแยก (Refund table) จะช่วยให้ทำการคืนบางส่วนและเก็บประวัติได้ชัดเจน เก็บฟิลด์ใบเสร็จ/ใบกำกับภาษี (billing_name, billing_address, vat_id) ใน Order
ผู้เข้าร่วม: ผู้ที่ถือบัตร
Attendee (หรือ TicketInstance) ควรรวม:
- event_id, ticket_type_id, order_id
- ฟิลด์ผู้เข้าร่วม (ชื่อ อีเมล คำตอบฟอร์มที่กำหนดเอง)
- การมอบหมายตั๋ว + การโอน: assigned_to_email, transfer_token, transferred_at
- การเช็กอิน: check_in_state (not_checked_in/checked_in), checked_in_at, checked_in_by
- แท็ก/โน้ตสำหรับพนักงาน (เช่น VIP, คำขอการเข้าถึง)
การนำเข้า/ส่งออกและฟิลด์เชิงปฏิบัติการ
วางแผนการส่งออก CSV ตั้งแต่แรก: รักษาชื่อฟิลด์ให้สอดคล้อง (order_number, ticket_type, attendee_name, checked_in_at) รวมฟิลด์สำหรับพิมพ์บัตร
ถ้าคาดว่าจะมีการผสานระบบในภายหลัง ให้เพิ่ม "webhook events" เบาๆ หรือ outbox table เพื่อให้แผงผู้ดูแลสามารถเรียกใช้งานส่งออกหรือ API hook ได้อย่างปลอดภัยโดยไม่พลาดการอัพเดต
เทคสแตกและการตัดสินใจสถาปัตยกรรม
สแตกที่ดีที่สุดคือสแตกที่ทีมคุณสามารถสร้าง ส่ง และดูแลโดยไม่เกิดปัญหา สำหรับแอปจัดการงาน ความเร็วในการทำซ้ำสำคัญกว่าความสมบูรณ์แบบทางทฤษฎี—โดยเฉพาะก่อนรู้ปริมาณทราฟิกจริง
เริ่มเรียบง่าย: monolith ก่อน แยกทีหลัง
โค้ดเบสเดียว (monolith) มักเป็นทางเลือกที่ถูกต้องในช่วงเริ่มต้น ช่วยให้การ deploy ดีบั๊ก และเข้าถึงข้อมูลตรงไปตรงมา—สำคัญเมื่อยังยืนยันฟีเจอร์ต่างๆ อย่าง ticket types, promo codes และ workflow ของ organizer
แยกเป็นบริการเมื่อมีเหตุผลชัดเจน: ส่วนหนึ่งต้อง scaling อิสระ ทีมชนกัน หรือการ deploy เริ่มเสี่ยง แม้ในกรณีนั้น คุณมักจะแยกโมดูลภายใน monolith (โฟลเดอร์/แพ็กเกจแยก) ได้ก่อนจะทำ microservices
เลือกสแตกที่เป็นไปได้จริง
ชุดที่พิสูจน์แล้วตัวอย่าง:
- Frontend: React (Next.js) หรือ Vue (Nuxt) สำหรับพัฒนา UI เร็วและหน้าเพจที่เป็นมิตรกับ SEO
- Backend: Node.js (NestJS/Express) หรือ Python (Django/FastAPI) เลือกตามที่ทีมคุ้นเคย
- Database: PostgreSQL สำหรับข้อมูลเชิงสัมพันธ์ (events, orders, attendees) และธุรกรรมที่เชื่อถือได้
- Hosting: แพลตฟอร์มที่จัดการ (Render/Fly.io/Heroku-style) หรือ PaaS ของคลาวด์ ฐานข้อมูลที่จัดการได้มักคุ้มค่า
หลีกเลี่ยงการเลือกเครื่องมือเพราะเป็นเทรนด์ ตัวเลือกที่ "น่าเบื่อ" มักชนะเมื่อคุณต้องรับผิดชอบเครื่องมือเอง
เร่งการพัฒนาโดยใช้ Koder.ai (ตัวเลือก)
ถ้าจุดประสงค์คือปล่อย MVP ให้เร็ว (ตั้งค่างาน เช็คเอาต์ ออกตั๋ว QR และการส่งออก) แพลตฟอร์มโค้ดแบบ vibe-coding เช่น Koder.ai ช่วยให้จากสเป็กไปสู่อัปทำงานผ่านกระบวนการสร้างด้วยแชทได้
Koder.ai เหมาะกับประเภทผลิตภัณฑ์นี้เพราะสแตกเริ่มต้นของมันสอดคล้องกับความต้องการของตั๋ว—React ฝั่งหน้า, Go + PostgreSQL ฝั่งหลัง—และมีฟีเจอร์เช่น Planning Mode, snapshots/rollback, และ source code export เพื่อให้คุณทำงานได้เร็วโดยยังคงความเป็นเจ้าของโค้ด
การเก็บไฟล์และอีเมล: ถือเป็นสิ่งสำคัญ
วางแผนว่าจะเก็บไฟล์เช่นรูปงาน ใบกำกับภาษีที่สร้าง และ PDF ตั๋วไว้ที่ไหน:
- Object storage (S3-compatible) สำหรับอัปโหลดและไฟล์ที่สร้าง
- CDN เมื่อจำเป็นเพื่อส่งไฟล์ทั่วโลกได้เร็วขึ้น
สำหรับอีเมลยืนยันและการเตือน ใช้ผู้ให้บริการเฉพาะทาง (SendGrid, Postmark, SES) เพื่อเพิ่มการส่งถึงปลายทางและมีบันทึกเมื่อผู้เข้าร่วมบอกว่า "ฉันไม่ได้รับตั๋ว"
สภาพแวดล้อมและคีย์
ตั้งค่า local, staging, และ production ตั้งแต่แรก แต่ละตัวมี:
- คีย์การชำระเงิน ข้อมูลอีเมล และความลับเว็บฮุกที่แยกกัน
- ฐานข้อมูลแยก (ไม่คัดลอกข้อมูล production ไป dev)
- Base URLs และ callback URLs
ป้องกันการเก็บเงินโดยไม่ได้ตั้งใจและทำให้การทดสอบสมจริง
มาตรฐานและการปล่อย
ตกลงกันเรื่องพื้นฐานเล็กๆ: การจัดรูปแบบ (Prettier/Black), linting, ข้อกำหนดการ commit และโฟลว์การปล่อยเรียบง่าย (feature branches + code review + CI checks) วินัยเล็กน้อยช่วยลดบั๊กในเช็คเอาต์และการส่งตั๋ว—ที่ความผิดพลาดมีค่าใช้จ่ายสูง
UX และ UI: ลงทะเบียน เช็คเอาต์ และแดชบอร์ดผู้จัด
UX ที่ดีสำหรับแอปจัดการงานคือการลดความไม่แน่นอน: ผู้ร่วมอยากรู้ว่าซื้ออะไร ผู้จัดอยากมั่นใจว่ายอดขายและการเช็กอินถูกควบคุม
เส้นทางผู้เข้าร่วม (ให้คาดเดาได้)
ออกแบบเส้นทางง่าย ๆ: หน้ากิจกรรม → เลือกตั๋ว → เช็คเอาต์ → ยืนยัน แต่ละขั้นควรตอบคำถามหนึ่งข้อ:
- หน้ากิจกรรม: "งานนี้เหมาะกับฉันไหม?"
- การเลือกตั๋ว: "ควรเลือกตั๋วไหน และยังมีตั๋วไหม?"
- เช็คเอาต์: "ฉันจ่ายเงินได้เร็วและปลอดภัยไหม?"
- ยืนยัน: "ต่อไปต้องทำอะไร และเข้าร่วมอย่างไร?"
บนหน้าการเลือกตั๋ว ให้เห็นจำนวนที่เหลือ กฎการขาย เวลาที่ขายเริ่ม/จบ (พร้อมบอกโซนเวลา) และผลลัพธ์เมื่อขายหมด (รอคิว ไม่มีการขายต่อ หรือติดต่อผู้จัด)
ถ้ารองรับโค้ดโปรโมชั่น อย่าซ่อนฟิลด์ แต่ก็ไม่ต้องให้มันเท่ากับปุ่มหลัก
ฟอร์ม: สั้นเป็นค่าเริ่มต้น ละเอียดเมื่อจำเป็น
แรงเสียดทานในเช็คเอาต์คือสาเหตุที่การลงทะเบียนหลุด จัดฟอร์มให้สั้น (ชื่อ อีเมล การชำระเงิน) และใช้การเปิดเผยเชิงค่อยเป็นค่อยไปสำหรับคำถามเพิ่มเติม
ตัวอย่างที่ได้ผล:
- ถาม "ต้องการใบกำกับภาษีไหม?" → แสดงฟิลด์การเรียกเก็บเงินเมื่อตอบว่าใช่
- ถาม "ซื้อตั๋วแทนคนอื่นไหม?" → แสดงข้อมูลผู้เข้าร่วมทีละคน
- ถาม "มีความต้องการด้านการเข้าถึงไหม?" → เป็นทางเลือก พร้อมบรรทัดช่วยสั้น ๆ
ถ้าขายหลายตั๋วในคำสั่งเดียว ให้แยกข้อมูลผู้ซื้อ (ใบเสร็จ การชำระเงิน) ออกจากข้อมูลผู้เข้าร่วม (ชื่อ การเช็กอิน)
การยืนยันที่ลดงานซัพพอร์ต
หลังการชำระเงิน หน้าการยืนยันควรรวม: รายละเอียดงาน สรุปตั๋ว การเข้าถึง QR code (หรือ "ตั๋วแนบมา") และขั้นตอนถัดไปชัดเจน ("เพิ่มลงปฏิทิน", "จัดการคำสั่งซื้อของฉัน") เพิ่มลิงก์ไปยังหน้าจัดการคำสั่งซื้อแบบง่ายเช่น /orders/lookup เพื่อให้ผู้ใช้ค้นหาคำสั่งซื้อได้
แดชบอร์ดผู้จัด: ตอบคำถามด้วยสายตาเดียว
ผู้จัดมักเข้าดูแดชบอร์ดเพื่อตรวจ 3 ตัวเลข: ตั๋วที่ขาย, รายได้, และ เช็กอิน วางไว้ด้านบน แล้วเพิ่มตัวกรองด่วน (วันที่ ประเภทตั๋ว สถานะ คืนเงิน)
สำหรับพนักงานเช็กอิน ทำให้เป็นแบบ mobile-first: ปุ่มใหญ่ คอนทราสต์สูง และสวิตช์ "สแกน" / "ค้นหาผู้เข้าร่วม" เด่น ช้าหรืออินเทอร์เฟซแออัดที่ประตูทำให้เกิดแถวได้เร็ว
บัญชี ผู้ใช้งาน และสิทธิ์
แอปตั๋วมักเป็นที่ทำงานร่วมกัน: ผู้จัดสร้างงาน ทีมการเงินจัดการคืนเงิน และพนักงานหน้างานแค่ต้องสแกนตั๋ว บัญชีและสิทธิ์ที่ชัดเจนช่วยให้ประสบการณ์ราบรื่นและลดความผิดพลาด
การพิสูจน์ตัวตนที่ปลอดภัยและเรียบง่าย
รองรับการล็อกอินสำหรับผู้จัดและพนักงานด้วยอีเมล+รหัสผ่าน และเลือกเปิด MFA เป็นทางเลือกถ้าผู้ใช้คาดหวัง
สำหรับการรีเซ็ตรหัสผ่าน หลีกเลี่ยงการส่งรหัสผ่านทางอีเมล ใช้ลิงก์รีเซ็ตแบบครั้งเดียวมีเวลาจำกัด (เช่น 15–60 นาที) เก็บรหัสผ่านแบบแฮชเท่านั้น ยกเลิกโทเค็นรีเซ็ตหลังใช้ และเพิ่มอัตราจำกัดกับข้อความตอบกลับแบบเดียวกันเพื่อไม่ให้แฮ็กเกอร์รู้ว่าอีเมลมีอยู่หรือไม่
RBAC (Role-based access control)
กำหนดบทบาท แล้วใช้สิทธิ์ระดับ event หลายทีมมักจัดการหลายงาน และบางคนอาจเป็น "finance" ในงานหนึ่งแต่เป็น "viewer" ในอีกงาน
กลุ่มสิทธิ์ทั่วไป:
- View: อ่านอย่างเดียว (ผู้เข้าร่วม คำสั่งซื้อ รายงานพื้นฐาน)
- Edit: จัดการรายละเอียดงาน ประเภทตั๋ว ตั๋วฟรี และแก้ไขผู้เข้าร่วม
- Finance: คืนเงิน การจ่ายเงิน การตั้งค่าภาษี และส่งออกที่เกี่ยวกับการชำระเงิน
เก็บสิทธิ์ให้ชัด (เช่น order.refund, attendee.update) แทนการพึ่งพา "admin" แบบกว้างๆ
พนักงานเช็กอิน (มือถือเป็นหัวใจหลัก)
สร้างบทบาท Check-in ที่สามารถ:
- สแกน QR code
- ค้นหาผู้เข้าร่วมด้วยชื่อ/อีเมล
- ทำเครื่องหมายการเข้าร่วมและยกเลิกภายในกฎ
แต่ไม่ให้ดูรายได้ ออกคืนเงิน หรือตั้งราคาตั๋ว ซึ่งทำให้ปลอดภัยในการให้โทรศัพท์กับพนักงานชั่วคราว
บันทึกการกระทำสำหรับการกระทำที่ละเอียดอ่อน
บันทึกว่าใครทำอะไรเมื่อไหร่สำหรับการกระทำเช่น คืนเงิน การออกตั๋วฟรี เปลี่ยนรายละเอียดผู้เข้าร่วม หรือส่งออกรายชื่อผู้เข้าร่วม ใส่ event ID บัญชีผู้กระทำ เวลาประทับ และค่าก่อน/หลัง ข้อมูลเหล่านี้ช่วยปกป้องทีมเมื่อเกิดข้อพิพาทและง่ายต่อการซัพพอร์ต
การชำระเงิน การออกตั๋ว และ QR Code
การชำระเงินคือจุดที่แอปกลายเป็น "ของจริง": เงินเคลื่อนที่ ความคาดหวังสูง และความผิดพลาดมีค่าใช้จ่าย ให้เชื่อมกระบวนการเช็คเอาต์และการออกตั๋วเป็นเวิร์กโฟลว์เดียวที่ควบคุมอย่างชัดเจนพร้อมสถานะและบันทึก
เลือกผู้ให้บริการชำระเงิน (และเก็บเฉพาะการอ้างอิง ไม่เก็บข้อมูลบัตร)
ใช้ผู้ให้บริการที่รองรับเว็บฮุกและการคืนเงิน (เช่น Stripe, Adyen, PayPal) ฐานข้อมูลของคุณไม่ควรเก็บหมายเลขบัตรหรือ CVV ดิบ เก็บเฉพาะการอ้างอิงจากผู้ให้บริการ เช่น:
payment_intent_id/charge_idcustomer_id(ถ้ามี)receipt_url(ถ้ามี)
วิธีนี้ลดภาระด้านความปลอดภัยและข้อกำหนดการปฏิบัติตาม
โมเดลเช็คเอาต์เป็น state machine
กำหนดสถานะคำสั่งซื้อ/การชำระเงินเพื่อให้ซัพพอร์ต รายงาน และอีเมลสอดคล้องกัน สถานะทั่วไป:
- pending (สร้างคำสั่ง รอการยืนยันชำระ)
- paid (ผู้ให้บริการยืนยันการชำระ; สามารถออกตั๋วได้)
- failed (การชำระล้มเหลว)
- expired (เซสชันเช็คเอาต์หมดเวลา)
- refunded และ partially_refunded (ติดตามจำนวนเงินที่คืนและเหตุผล)
ใช้เว็บฮุกจากผู้ให้บริการเป็นแหล่งความจริงสำหรับการเปลี่ยนเป็น "paid" และ "refunded" และเก็บล็อกอีเวนต์ที่ไม่เปลี่ยนแปลง (เช่น ตาราง order_events) เพื่อการตรวจสอบ
ออกตั๋ว: โค้ดไม่ซ้ำ + QR code
สร้างตั๋วเมื่อคำสั่งซื้ออยู่ในสถานะ paid เท่านั้น (หรือเมื่อผู้จัดออกตั๋วให้ฟรี) สร้างโค้ดตั๋วที่ไม่ซ้ำผูกกับเรคอร์ดตั๋ว/ผู้เข้าร่วมแล้วเข้ารหัสตัวระบุนี้เป็น QR code
กฎปฏิบัติ: พื้นที่ของ QR ควรไร้ความหมายเมื่อดูด้วยตา (เช่น โทเคนสุ่มหรือสตริงที่ลงนาม) และเซิร์ฟเวอร์ตรวจสอบก่อนอนุญาตการเข้า
ส่วนลด ตั๋วฟรี และคอมพ์
ทำโค้ดส่วนลดด้วยกฎชัดเจน: ช่วงเวลาที่ใช้ได้ ขีดจำกัดการใช้ ประเภทตั๋วที่ใช้ได้ และการ stack หรือไม่ ตั๋วฟรีและคอมพ์ควรยังสร้างคำสั่งซื้อ (total = 0) เพื่อให้รายงานและประวัติผู้เข้าร่วมถูกต้อง
แหล่งความจริงเดียวสำหรับใบเสร็จและการยืนยัน
ส่งใบเสร็จและอีเมลยืนยันจาก record คำสั่งซื้อ ไม่ใช่จากหน้าจอ UI "success" หลังการยืนยันการชำระ ระบบควรสร้างตั๋ว เก็บบันทึก แล้วส่งอีเมลที่มีลิงก์สำหรับดูตั๋ว (เช่น /orders/{id}) และ QR code
อีเมลแจ้งเตือนและการสื่อสาร
อีเมลคือกระดูกสันหลังของระบบลงทะเบียน: มันให้ความมั่นใจกับผู้ซื้อ ส่งตั๋ว และลดคำถามซัพพอร์ต ให้มองอีเมลเป็นฟีเจอร์ของผลิตภัณฑ์ ไม่ใช่สิ่งที่ทำทีหลัง
แม่แบบที่จำเป็น (และสิ่งที่ต้องมี)
เริ่มจากแม่แบบธุรกรรมพื้นฐาน:
- ยืนยันคำสั่งซื้อ: ชื่อเหตุการณ์ วันที่/เวลา สถานที่ (หรือ "ออนไลน์") สรุปคำสั่งซื้อ สถานะการชำระ และลิงก์ "ดูคำสั่งซื้อ"
- ส่งตั๋ว: ชื่อผู้เข้าร่วมแต่ละคน ประเภทตั๋ว QR code (หรือลิงก์เช็กอินที่ปลอดภัย) และคำแนะนำการเช็กอินพื้นฐาน
- เตือนความจำ: ข้อมูลโลจิสติกส์สำคัญ (เวลาเปิดประตู ที่จอดรถ กฎการเข้า) และวิธีดึงตั๋วกลับมา
- แจ้งคืนเงิน/ยกเลิก: รายการที่คืน จำนวนเงิน กรอบเวลา และช่องทางติดต่อผู้จัด
เก็บ subject ให้เจาะจง ("ตั๋วของคุณสำหรับ {EventName}") และหลีกเลี่ยงภาษาการตลาดหนักๆ ที่ทำให้การส่งถูกลดคุณภาพ
การใส่แบรนด์ผู้จัดโดยไม่ทำลายการส่ง
ให้ผู้จัดเพิ่ม โลโก้ สีหลัก และฟุตเตอร์สั้น ๆ แต่รักษาโครงสร้าง HTML คงที่ ใช้ "brand slots" แทน HTML ที่ปรับแต่งได้เต็มที่ เพื่อลดการแสดงผลพังและสัญญาณสแปม
จากมุมมองการส่ง ให้ส่งจากที่อยู่อีเมลคงที่ เช่น [email protected] และใช้ "Reply-To" เป็นของผู้จัด (หรือผู้ส่งที่ยืนยัน) ซึ่งให้ผู้รับรู้จักผู้ส่งขณะยังคงสามารถสนทนาได้
การติดตามและเครื่องมือช่วยซัพพอร์ต
อย่างน้อยเก็บสถานะอีเมลต่อข้อความ: queued, sent, delivered (ถ้าผู้ให้บริการรายงาน), bounced, complaint ข้อมูลนี้ช่วยแสดงไทม์ไลน์แก่ผู้จัดและช่วยทีมคุณวิเคราะห์ปัญหาได้เร็ว
เพิ่มสองการกระทำแบบ self-serve ในแดชบอร์ดผู้จัด:
- ส่งตั๋วซ้ำ (จำกัดอัตราและเก็บล็อก)
- อัปเดตอีเมลผู้เข้าร่วม และออกตั๋วใหม่—โดยไม่เปลี่ยนบันทึกการชำระเงิน/คำสั่งซื้อเดิม
SMS ทางเลือก (ขออนุญาต)
เพิ่ม SMS เมื่อมีความจำเป็นชัดเจน (เช่น การเปลี่ยนแปลงสถานที่ในนาทีสุดท้าย) ทำให้เป็น opt-in เก็บความยินยอมต่อผู้เข้าร่วม และส่งข้อความสาระสำคัญพร้อมคำสั่งยกเลิกง่ายๆ
การเช็กอินหน้างานและการค้นหาผู้เข้าร่วม
กระบวนการเช็กอินหน้างานตัดสินแอปภายในไม่กี่วินาที พนักงานต้องการหน้าที่โหลดเร็ว ทำงานได้ในสถานที่แออัด และตอบคำถามเดียว: "คนนี้เข้าได้ไหม?"
หน้าการเช็กอินที่เร็ว
ออกแบบมุมมอง "Check-In" แยกจากแดชบอร์ดผู้จัด เน้นความเร็วและปุ่มสัมผัสขนาดใหญ่
รวมสองโหมดการป้อนข้อมูล:
- ค้นหา ด้วยชื่อ อีเมล หมายเลขคำสั่งซื้อ หรือรหัสตั๋ว โดยแสดงผลขณะพิมพ์
- สแกน QR ด้วยกล้องอุปกรณ์ ไปยังเรคอร์ดตั๋ว/ผู้เข้าร่วมทันที
เพื่อรองรับออฟไลน์ ให้ cache รายการผู้เข้าร่วมสำหรับงานนั้นบนอุปกรณ์ (และเฉพาะข้อมูลที่จำเป็น) ถ้าการเชื่อมต่อขาด แอปยังตรวจตั๋วท้องถิ่นและคิวอัพเดตเพื่อซิงค์เมื่อกลับออนไลน์
ป้องกันการเข้าเกินครั้ง (พร้อม override ที่ควบคุมได้)
แต่ละตั๋วควรมีสถานะชัดเจน: Not checked in → Checked in หากสแกนตั๋วที่ใช้แล้ว ให้แสดงคำเตือนพร้อมเวลาประทับและพนักงานที่เช็กอิน (ถ้ามี)
อนุญาตการ override เฉพาะผู้มีสิทธิ์พิเศษ (เช่น “Check-in manager”) และบังคับให้ใส่เหตุผลเพื่อให้พนักงานแก้ปัญหาภายหลัง
เช็กอินบางส่วนสำหรับคำสั่งซื้อเป็นกลุ่มและหลายประเภทตั๋ว
สำหรับคำสั่งซื้อที่มีหลายตั๋ว รองรับการเช็กอินทีละตั๋ว UI ควรแสดงจำนวนที่เหลือและประเภทตั๋ว (เช่น "2 จาก 4 General Admission เหลือ") หลีกเลี่ยงการบังคับเข้าแบบทั้งคำสั่งเมื่อกลุ่มมาถึงแยกกัน
แสดงบริบทที่เป็นประโยชน์
เมื่อตรวจสอบหรือสแกน ให้แสดง:
- ประเภทตั๋วและระดับการเข้า (VIP, workshop add-on)
- โน้ตผู้เข้าร่วม (เมนูพิเศษ คำขอพิเศษ)
- ความต้องการการเข้าถึง (ถ้าเก็บ)
บันทึกทุกการเช็กอิน
บันทึกอีเวนต์การเช็กอิน (สแกน/ค้นหา, อุปกรณ์/ผู้ใช้, เวลา, ผลลัพธ์, เหตุผล override) บันทึกเหล่านี้ใช้ในการรายงานหลังงานและเป็นหลักฐานเมื่อต้องแก้ปัญหา
รายงาน การส่งออก และเครื่องมือแอดมิน
รายงานที่ดีเปลี่ยนแอปจากที่ขายตั๋วเป็นเครื่องมือที่ผู้จัดพึ่งพาระหว่างการวางแผน วันงาน และการสรุปหลังงาน
รายงานที่ผู้จัดต้องการจริงๆ
เริ่มจากชุดรายงานที่เชื่อถือได้และตอบคำถามบ่อย:
- ยอดขายตามประเภทตั๋ว: หน่วยที่ขาย เหลือ (ถ้ามีการจำกัด) และรวมรายได้แบบ gross vs net
- การแบ่งรายได้: ยอดรวม ส่วนลด ค่าธรรมเนียม ภาษี และยอดจ่าย
- สถานะคำสั่งซื้อ: paid, pending, canceled, refunded, chargeback (ถ้ามี)
- อัตราการเข้าร่วม: ผู้เช็กอินเทียบกับตั๋วที่ออก แยกตามประเภทตั๋ว
รักษาตัวเลขให้สอดคล้องกับใบเสร็จและสรุปการจ่ายเงินเพื่อลดคำถามซัพพอร์ต
ตัวกรองและการส่งออกที่ยังคงมีประโยชน์
รายงานมีค่ามากขึ้นกับตัวกรองพื้นฐาน:
- ช่วงวันที่ (สร้างคำสั่ง, วันที่ชำระ, หรือเวลาที่เช็กอิน)
- ประเภทตั๋ว
- สถานะคำสั่ง/ผู้เข้าร่วม (paid/refunded, checked-in/not)
เสนอการส่งออกแบบ CSV (และเลือกเป็น XLSX) ระบุชัดเจนว่าส่งอะไร: order ID, ข้อมูลผู้ซื้อ, ข้อมูลผู้เข้าร่วม, ประเภทตั๋ว, ราคา, ภาษี/ค่าธรรมเนียม, โค้ดส่วนลด, และเวลาการเช็กอิน
ชี้แจงว่าการส่งออกมี PII (อีเมล/โทรศัพท์) หรือไม่ และมีตัวเลือก "minimal" สำหรับแชร์กับพันธมิตร
เมตริกฟันเนล (น้ำหนักเบา มีผลสูง)
ติดตามฟันเนลง่ายๆ ต่อเหตุการณ์: ยอดเข้าชมหน้ากิจกรรม → เริ่มเช็คเอาต์ → ชำระเงินสำเร็จ ตัวเลขพื้นฐานช่วยผู้จัดเห็นปัญหา (เช่น เริ่มเช็คเอาต์มากแต่ชำระเงินน้อย)
เครื่องมือแอดมินสำหรับซัพพอร์ตและการปฏิบัติ
แผงแอดมินภายในควรเน้นความเร็ว:
- ค้นหาตาม order ID, อีเมลผู้ซื้อ, ชื่อผู้เข้าร่วม, หรือ 4 หลักสุดท้าย (ถ้าเก็บผ่านโทเคนผู้ให้บริการ)
- ดูไทม์ไลน์คำสั่งทั้งหมด (สร้าง, ชำระ, อีเมลที่ส่ง, คืนเงิน)
- ส่งอีเมลยืนยันซ้ำ และ ออกตั๋วใหม่
- เริ่มกระบวนการคืนเงินจากผู้ให้บริการและบันทึกผล
นโยบายการเก็บข้อมูลและการส่งออก
อธิบายระยะเวลาที่เก็บคำสั่งซื้อ ผู้เข้าร่วม และบันทึก และจะเกิดอะไรขึ้นหลังครบกำหนด ทำให้เห็นในเอกสารช่วยเหลือ และในไดอะล็อกส่งออกเพื่อให้ผู้จัดรู้ว่ากำลังดาวน์โหลดอะไรและจัดเก็บอย่างไร
ความปลอดภัย ความเป็นส่วนตัว และความน่าเชื่อถือพื้นฐาน
ความปลอดภัยและความน่าเชื่อถือไม่ใช่งาน "ทีหลัง" สำหรับแอปตั๋ว คุณจะเก็บชื่อ อีเมล และเมตาดาต้าการชำระเงิน ดังนั้นการตัดสินใจพื้นฐานบางอย่างตั้งแต่แรกจะช่วยประหยัดการเขียนใหม่ที่เจ็บปวด
ปกป้องข้อมูลผู้เข้าร่วม (Least privilege + การเข้ารหัส)
เริ่มด้วยการให้สิทธิ์น้อยที่สุด: ผู้จัดควรเห็นเฉพาะงานที่เป็นเจ้าของ พนักงานเห็นเฉพาะสิ่งที่ต้องใช้เช็กอิน และ admin จำกัดอย่างเข้มงวด ใช้ RBAC ในแบ็กเอนด์ (ไม่ใช่แค่ซ่อน UI)
เข้ารหัสการส่งข้อมูลด้วย HTTPS ทุกที่ รวมเว็บฮุกและบริการภายใน เก็บความลับ (API keys, webhook signing secrets, database creds) ในตัวจัดการความลับของคลาวด์หรือ secret manager—ไม่เก็บในรีโปหรือโค้ดฝั่งหน้า
ตรวจสอบอินพุตและบล็อกการโจมตีทั่วไป
ถือว่าทุกฟิลด์ไม่น่าเชื่อถือ: คำอธิบายงาน ชื่อผู้เข้าร่วม คำถามที่กำหนดเอง และรหัสคูปอง
- ป้องกันการ injection ด้วย parameterized queries/ORM
- ป้องกัน XSS โดย escape เนื้อหาที่มาจากผู้ใช้และใช้ Content Security Policy เข้มงวด
- ป้องกัน CSRF ในคำขอที่เปลี่ยนสถานะ (โดยเฉพาะถ้าใช้คุกกี้)
- เพิ่ม rate limiting บนการล็อกอิน รีเซ็ตรหัสผ่าน และ "ส่งอีเมลตั๋วซ้ำ"
พื้นฐานความเป็นส่วนตัวที่อธิบายให้ผู้ใช้เข้าใจได้
เก็บเฉพาะที่จำเป็น (เช่น ชื่อและอีเมลสำหรับตั๋ว) และทำเครื่องหมายฟิลด์ที่เป็นทางเลือก แยกอีเมลเชิงธุรกรรม (ใบเสร็จ ตั๋ว การเปลี่ยนแปลงตาราง) กับอีเมลการตลาด
ถ้าให้เลือกยินยอมการตลาด เก็บความยินยอมอย่างชัดเจนและมีลิงก์ยกเลิกง่าย
แบ็กอัพ + การกู้คืนที่ทดสอบจริง
แบ็กอัพมีความหมายก็ต่อเมื่อการกู้คืนใช้งานได้จริง อัตโนมัติแบ็กอัพฐานข้อมูล เก็บ retention หลายแบบ และกำหนดตารางทดสอบการกู้คืนไปยังสเตจ สร้างเช็คลิสต์กู้คืนง่ายๆ: ใครกู้คืน ที่ใด และวิธีตรวจสอบการสแกนตั๋วยังทำงาน
การมอนิเตอร์ที่จับปัญหาได้เร็ว
เพิ่มการติดตามข้อผิดพลาดสำหรับแบ็กเอนด์และเฟรอนท์เอนด์ ตรวจสอบสถานะสำหรับ endpoint สำคัญ (เช็คเอาต์, webhook handler, check-in API) และเตือนเมื่อ query ช้า ชุดการแจ้งเตือนที่ใช้งานได้จริงเล็กๆ ดีกว่าดาชบอร์ดที่ดัง
การทดสอบ การเปิดตัว และแผนการปรับปรุง
การทดสอบและการเปิดตัวคือช่วงที่แอปตั๋วสร้างความเชื่อถือ ข้อบั๊กเล็กๆ ในเช็คเอาต์หรือการตรวจสอบ QR อาจสร้างปัญหาในการเข้า ประมวลขั้นตอนนี้เป็นส่วนของผลิตภัณฑ์ ไม่ใช่อุปสรรคสุดท้าย
การทดสอบอัตโนมัติสำหรับเส้นทางสำคัญ
เน้นโฟลว์ที่กระทบเงินและการเข้า ให้การทดสอบมีมูลค่าสูงและทำซ้ำได้:
- Checkout: การชำระสำเร็จ ยกเลิกการชำระ ล้มเหลว กรณีขอบของโค้ดโปรโมชั่น
- การออกตั๋ว: ตั๋วสร้างครั้งเดียวต่อการซื้อ ประเภทตั๋วถูกต้อง อีเมลส่ง ลิงก์ PDF/PKPass ใช้งานได้ (ถ้าสนับสนุน)
- การเช็กอิน: สแกน QR ยอมรับตั๋วถูก ต้องปฏิเสธตั๋วที่ใช้แล้ว จัดการออฟไลน์/ความหน่วง
- คืนเงิน/ยกเลิก: อัปเดตสถานะ ยกเลิกตั๋ว อีเมล และบันทึกการตรวจสอบ
เพิ่ม "contract tests" เล็กๆ รอบเว็บฮุกผู้ให้บริการชำระเงินเพื่อไม่ให้การเปลี่ยน payload ทำให้สถานะคำสั่งซื้อเสีย
พายล็อตบนสเตจก่อนเปิดสาธารณะ
รันพายล็อตด้วยงานขนาดเล็ก (แม้งานภายใน) ให้ผู้จัดและพนักงานหน้างานใช้สเตจจริง: สร้างงาน ขายตั๋ว สแกนคน เข้า คืนเงิน ส่งตั๋วซ้ำ
เก็บข้อเสนอแนะไว้และบันทึกจุดที่พนักงานลังเล—สิ่งเหล่านี้คือการแก้ UI ที่ควรให้ความสำคัญ
เช็คลิสต์ก่อนเปิดตัวและความพร้อมปฏิบัติการ
ก่อนเปิดใช้งาน ยืนยัน:
- โดเมน + SSL, กฎ redirect, เพจข้อผิดพลาด
- การตั้งค่าอีเมลผู้ส่ง (SPF/DKIM/DMARC) และการทดสอบการส่ง
- คีย์การชำระเงินสดและ endpoint เว็บฮุก
- การล็อก ข้อความเตือน และวิธีตรวจสอบงานที่ล้มเหลว (การส่งอีเมล การสร้างตั๋ว)
เวิร์กโฟลว์ซัพพอร์ตและการทำซ้ำ
เตรียมตอบกลับสำเร็จรูปและขั้นตอนภายในสำหรับข้อพิพาท คืนเงิน และคำขอส่งตั๋วซ้ำ หลังเปิดตัว ปรับปรุงเป็นชุดเล็กๆ—waitlists, ที่นั่ง ผสานระบบ (CRM/อีเมล), และบัญชีหลายงาน—โดยยึดตามตั๋วซัพพอร์ตจริงและข้อเสนอแนะของผู้จัด
คำถามที่พบบ่อย
MVP สำหรับระบบจำหน่ายบัตรอีเวนต์ควรมีฟีเจอร์อะไรบ้าง?
เริ่มจากการสร้างอีเวนต์ ประเภทบัตร การชำระเงิน การยืนยันการชำระเงิน การออกบัตร QR การเช็กอินพื้นฐาน และการส่งออก CSV ส่วนผังที่นั่ง ส่วนลดขั้นสูง และกฎภาษีที่ซับซ้อน ค่อยเพิ่มเมื่อผู้จัดพิสูจน์แล้วว่าจำเป็น
ควรออกแบบแอปสำหรับผู้จัดอีเวนต์ให้ใครเป็นกลุ่มแรก?
กำหนดผู้ใช้หลักก่อน เช่น ผู้จัดงานเดี่ยว สถานที่จัดงาน หรือเอเจนซี จากนั้นระบุงานหลักให้ชัดเจนหนึ่งข้อ เช่น ช่วยให้ผู้จัดขายบัตรและเช็กอินผู้เข้าร่วมได้โดยมีข้อผิดพลาดน้อย
แอปจัดการอีเวนต์ควรมีบทบาทผู้ใช้อะไรบ้าง?
แยกบทบาทสำหรับผู้จัดงาน ผู้ใช้ฝ่ายการเงิน และพนักงานเช็กอิน ให้แต่ละบทบาททำได้เฉพาะสิ่งที่จำเป็น โดยเฉพาะเรื่องการคืนเงิน ราคาบัตร ข้อมูลผู้เข้าร่วม และการส่งออกข้อมูล
ควรจัดโครงสร้างข้อมูลสำหรับอีเวนต์ บัตร และผู้เข้าร่วมอย่างไร?
แยกข้อมูลที่เกี่ยวข้องออกจากกัน: อีเวนต์กำหนดตารางและความจุ ประเภทบัตรกำหนดสิ่งที่ผู้คนซื้อ คำสั่งซื้อบันทึกการซื้อ การชำระเงินบันทึกสถานะจากผู้ให้บริการ และข้อมูลผู้เข้าร่วมเก็บบัตรรายบุคคล โครงสร้างนี้ช่วยจัดการการคืนเงิน การโอนบัตร และการรายงานได้ง่ายขึ้น
แอปควรออกบัตรและ QR code เมื่อใด?
ให้ผู้ให้บริการชำระเงินยืนยันการชำระเงินผ่าน webhook ที่ลงนามแล้ว เมื่อระบบบันทึกคำสั่งซื้อที่ชำระแล้ว ให้สร้างบัตรเฉพาะหนึ่งใบต่อผู้เข้าร่วม และสร้าง QR code จากโทเค็นสุ่มหรือโทเค็นที่ลงนาม ซึ่งเซิร์ฟเวอร์ของคุณตรวจสอบได้
พนักงานจะเช็กอินผู้เข้าร่วมหน้างานได้รวดเร็วอย่างไร?
ใช้หน้าจอเช็กอินเฉพาะที่เหมาะกับมือถือ พร้อมการสแกน QR และการค้นหาด้วยชื่อหรืออีเมล แสดงคำเตือนที่เห็นได้ชัดเมื่อพนักงานสแกนบัตรซ้ำ และจำกัดการข้ามข้อกำหนดไว้สำหรับพนักงานที่มีสิทธิ์เท่านั้น
จะลดการละทิ้งขั้นตอนชำระเงินค่าบัตรได้อย่างไร?
ทำขั้นตอนชำระเงินให้สั้น: ขอชื่อ อีเมล และรายละเอียดการชำระเงินของผู้ซื้อก่อน แสดงช่องใบแจ้งหนี้ รายละเอียดผู้เข้าร่วม หรือคำถามด้านการเข้าถึง เฉพาะเมื่อผู้ซื้อต้องการ
แอปอีเวนต์ควรจัดการการชำระเงินและการคืนเงินอย่างไร?
เก็บข้อมูลอ้างอิงจากผู้ให้บริการ เช่น ID การชำระเงินหรือการเรียกเก็บเงิน ห้ามเก็บหมายเลขบัตรหรือค่า CVV ดิบ ติดตามสถานะการชำระเงิน เช่น รอดำเนินการ ชำระแล้ว ล้มเหลว คืนเงินแล้ว และคืนเงินบางส่วน เพื่อให้ฝ่ายสนับสนุนและรายงานใช้ข้อมูลชุดเดียวกัน
แอปควรส่งอีเมลอะไรให้ผู้ซื้อบัตรบ้าง?
ส่งการยืนยันหลังจากมีคำสั่งซื้อที่ชำระแล้วและบัตรอยู่ในฐานข้อมูลของคุณเท่านั้น ระบุรายละเอียดอีเวนต์ สรุปบัตร วิธีเรียกดูคำสั่งซื้อ และคำแนะนำการเข้างานที่ชัดเจน ติดตามสถานะการส่งและการตีกลับ เพื่อให้ผู้จัดส่งบัตรซ้ำได้เมื่อต้องการ
ผู้จัดงานควรเห็นรายงานอะไรบ้าง?
เริ่มจากยอดขายตามประเภทบัตร รายได้รวมค่าธรรมเนียมและภาษี สถานะคำสั่งซื้อ และอัตราการเข้าร่วม เพิ่มตัวกรองตามวันที่ ประเภทบัตร สถานะการชำระเงิน และสถานะการเช็กอิน แล้วเสนอการส่งออก CSV พร้อมตัวเลือกแบบย่อสำหรับพาร์ทเนอร์ที่ไม่ต้องการข้อมูลติดต่อของผู้เข้าร่วม