直接答案:约课规则的核心不是能不能约,是约了不来怎么办。团课满员后有没有候补、私教提前多久能取消、迟到多久算爽约、核销时扣不扣课,这四条定不下来,场馆每天都要在前台处理纠纷。而核销必须是一个动作:一次操作同时完成扣课、记到场、生成课酬,拆成两步就一定会漏。
核心结论速览
核销必须一单一动作。扣课、记到场、算课酬三件事在同一个操作里完成。拆成两步,就会出现课上完了课时没扣的情况,月底发现已经追不回来,也没法向会员开口补扣。
团课要有候补队列。满员后允许排队,有人取消按顺序自动补位并通知,通知后限时确认,超时顺延给下一位。没有候补,热门课永远满、冷门课永远空。
取消时限要分课型定。团课和私教的取消时限不该一样。团课提前几小时、私教提前多久,按教练和场地的可替代性来定,一刀切一定有一边不合理。
迟到和未到要分开判。迟到是来了但晚了,未到是压根没来。两者对场馆的损失不同,处理规则也该不同,混成一个「爽约」会让会员觉得不公平。
核销记录要能反查。每一节课要能查到谁核销的、什么时候核销的、当时会员在不在场。这类记录平时没用,出争议时是能拿出来的依据。
一、约课链路上的五个卡点
卡点一:名额怎么算。团课的名额由场地容量决定,不是由教练决定。瑜伽室能站二十人,那这门课的上限就是二十,教练说能带二十五也不能改。系统里的课程容量应该从场地继承,允许小范围调整但不能无限放大,否则现场挤不下,安全和体验都成问题。
卡点二:约课什么时候开放。提前一周开放和提前一天开放,效果完全不同。提前一周,会员计划性强,但临时变卦的概率高;提前一天,到场率高,但会员排不上。比较常见的做法是提前三到七天开放,热门课设置「开约提醒」,让想上的人第一时间抢。
卡点三:一个会员能同时占几个位。不设上限,会出现有人把一周的课全约满,然后挑着来。建议设同时占位上限,比如最多占三节未来课程。这条规则能明显改善满课率。
卡点四:取消之后名额怎么放。取消要立刻释放名额,并且触发候补队列的第一位。如果取消要人工审核才释放,那候补机制基本失效,因为前台不可能二十四小时盯着。
卡点五:约了不来怎么算。这是纠纷最集中的地方。行业里比较通行的做法是「超过取消时限取消或未到,按消耗一次处理」。但这条规则要提前写进会员协议,并且在前台显眼位置公示。规则本身可以商量,偷偷执行不行。
五个卡点里,前三个是产品设计问题,后两个是规则问题。产品设计错了可以改,规则没说清就只能靠吵架解决,而吵架的结果通常是场馆让步——因为会员一旦在店里大声说话,场馆为了不影响其他会员,多半会妥协。
二、团课候补队列怎么排才不混乱
候补的本质是一个有序队列,不是一个模糊的「有人退了通知我」。要做对,需要四个要素:入队顺序、队列上限、通知机制、确认时限。
入队顺序按进入候补的时间先后排,这是最公平也最容易解释的规则。有的场馆想按会员等级优先,看起来合理,但会让普通会员觉得永远排不上,反而降低参与意愿。如果确实要给高等级会员优先权,建议单独开「优先名额」,而不是插队。
队列上限要设。不限长度,候补到第二十位的人基本没戏,白白期待一场。设成课程容量的固定比例比较合理,超过就提示「本课程候补已满,可选择其他时段」。
通知机制要即时,而且要说清楚:你已候补成功,请在多长时间内确认,超时名额将顺延。通知内容里必须带确认入口,让会员一步完成。需要跳转三次才能确认的通知,确认率会掉一半。
确认时限要短。候补通知给太长的时间,名额就卡在那里,后面排队的人干等。常见做法是给一个较短的确认窗口,超时自动顺延,并在通知里明确写出这个时限。
还有一个必须处理的边界:会员同时候补多门课,结果都补上了。如果不做冲突检测,会员会占住多个名额。系统在补位时要检查该时段是否已有其他已确认课程,有冲突就跳过这个人,顺延给下一位,并通知他被跳过。这个细节不做,候补机制反而会制造混乱。
候补要不要扣课。候补阶段不扣,确认成功才扣。这一条要写清楚,否则会员会担心「我只是排队,怎么课时少了」。
三、核销、迟到、爽约的判定规则
核销的正确形态。教练或前台扫会员码、点选会员、确认课程,一次操作完成三件事:扣减课时、写入到场记录、生成课酬。三件事必须是同一个事务,中间任何一步失败就整体回滚。技术上这是一个事务边界问题,业务上它是一个不能妥协的原则——只要出现「扣了课没记到场」或者「记了到场没扣课」,月底就必然要人工修数据,而人工修数据一定会出错。
迟到怎么判。建议分三档:开课后一定时间内到场算迟到但正常上课;超过一定时间到场,可以进场但不能占器械位或只能旁听;超过大半节课未到,按未到处理。三档的时间界限由场馆定,但必须在会员协议里写明。判定的依据是核销时间,所以核销必须由教练或前台操作,不能让会员自己点——自己点就没有可信的时间戳。
未到怎么判。课程开始后一定时间内没有任何核销记录,系统自动置为未到。未到的处理有两种:扣课(按消耗一次)和不扣课(只记一次违约)。扣课对场馆有利但对会员刺激大,不扣课约束力弱。折中做法是「首次不扣、累计达到次数后扣」,给一个容错空间,同时保留约束。
取消和未到要分开记。取消是提前告知,未到是没告知。两者的数据含义完全不同:取消率高说明课程时间安排不合理,未到率高说明会员的约课习惯有问题。混在一起统计,就看不出该改课程还是该改规则。
核销要能撤销但要留痕。核销错了(比如扫错人)要能撤销,但撤销必须记录操作人、时间和原因。允许撤销不留痕,等于给数据开了后门,月底对不上的时候谁都说不清。
还有一个实操细节:补课怎么处理。会员因为场馆原因(课程取消、教练临时有事)没上成,应该给一次补课机会,补课不额外扣课,但要占用一个名额。系统里补课应该是一条独立记录,关联原课程,而不是简单地把原记录改个状态——改状态会让统计里看不出这节课到底发生过什么。
四、满课率、到场率、取消率怎么算才不误导
这三个数是场馆运营最常看的,也是最容易算错的。算错的方向通常都一样:把分母搞混了,导致数字好看但没用。
满课率。算法是已确认占位数除以课程容量,按课程、按时段统计。这里的关键是「已确认」——候补中的人不算占位。如果把候补也算进去,满课率会虚高,看起来每节课都满,实际到场一半。满课率要按课程看,不要按全馆平均看,因为热门课和冷门课平均一下,什么都看不出来。
到场率。算法是已核销人数除以已确认占位数。这个数字反映会员的执行力。要注意排除场馆原因取消的课,否则一次教练临时请假就会把到场率拉低,误导判断。
取消率。算法是主动取消数除以已确认占位数,而且要按「取消时点」分段统计:提前很久取消、临近开始取消、开始后未到。三段的数据含义完全不同。提前很久取消说明会员计划性强但变数大,临近取消说明会员在权衡,开始后未到说明会员压根忘了或者不在意。
三个数要一起看。满课率高、到场率高、取消率低,这是理想状态,说明课程排得准、会员也重视。满课率高、到场率低,说明约课门槛太低,会员随手占位,需要收紧同时占位上限或者缩短免费取消窗口。满课率低、到场率高,说明课程时间或类型不对,来的都是真心想来的,但人不够——这种情况该调整排课,而不是加大促销。
一个常见的误算:把团课和私教混在一起算。团课有容量概念,私教一对一,把两者平均成一个满课率没有任何意义。分开算,各自的改进方向才清楚。
另一个常见误算:用月度数据判断排班好坏。月度数据里包含了节假日、天气、促销活动的影响,噪音很大。判断排班好坏至少要看连续四周的周度数据,并且剔除掉明显异常的周(比如有活动的那一周)。
数据这件事的价值不在于算得准,在于算得准之后敢不敢动。看到某门课连续四周满课率不到一半,就要敢停掉或者改时间;看到某位教练的课取消率明显偏高,就要敢去问为什么。只统计不决策,报表就是装饰。
最后一个容易被忽略的细节:口径要写在报表上。同一个「满课率」,运营算出来是八成,店长算出来是六成,两个人吵半天,最后发现一个用了已确认占位、一个用了已核销人数。这类争议的解决办法不是谁说服谁,而是把每个指标的分子分母写在报表的说明里,谁看都一样。这件事做起来只要半小时,但能省掉每个月的对账会议。
还有一点值得强调:数据要能追到人。满课率低,是课程时间不对还是教练不会带课?到场率低,是会员习惯问题还是提醒没发到位?这些问题汇总数字都答不了,必须能一路点到具体某节课的具体名单。所以报表设计的第一原则不是好看,是能钻取。
五、常见问题解答
团课人数不满,课还开不开?
提前设最低开课人数,到约课截止时间不足就自动取消并通知已约会员,同时给补课或退课。不设最低人数,会出现一两个人上课但教练课酬照付的情况,长期看是亏损。设了最低人数,取消的沟通成本要提前准备好话术。
会员约了课临时有事,能免费取消几次?
建议不设免费次数,而是设取消时限。时限内取消不扣课,时限外扣课。设「每月免费取消三次」这类规则,实际会鼓励会员随意约,因为额度不用完觉得亏。按时限管理,行为引导更直接。
私教课能不能会员自己在手机上约?
可以,但要限制在教练已开放的档期内,并且必须遵守取消时限。完全放开会让教练的档期被占住又用不上。另外私教约课建议加一道教练确认,因为私教往往需要提前了解会员状态。
一个人约了两节课,同一时段冲突了怎么办?
约课提交时就要做冲突检测,同一时段已有课程的直接拦截。候补补位时也要检测。这个检测看起来是小事,但不做的话,会员到店才发现约重了,两边都要解释。
核销能不能让会员自己扫码?
技术上可以,但要谨慎。自己扫码没有第三方见证,事后争议时场馆举证困难。比较稳的做法是教练扫会员码,或者前台扫,会员端只做「我已到场」的辅助确认。核销动作的执行人建议是场馆方。
教练忘记核销,月底课时对不上怎么办?
两个办法并行。一是系统在课程结束后自动提醒教练核销;二是设一个「未核销课程」报表,每天给店长看。等到月底才发现,能补的证据已经没有了。这类问题的根源通常不是忘记,是核销流程太麻烦,所以要先把流程做简单。
团课和私教的取消时限为什么要不一样?
因为可替代性不同。团课一个名额空出来,候补队列能立刻补上,场馆损失小;私教一个时段空出来,教练那段时间就是闲置,损失大。所以私教的取消时限通常要更长,给场馆留出重新安排的时间。
六、九尾狐在这类问题上的做法
约课核销这块,九尾狐在实现上会先把「名额」做成一个独立的占位记录,而不是在课程记录上加减一个数字。占位记录带会员、带状态(已确认、候补中、已取消、未到、已核销),课程的实际占用人数由占位记录算出来。这样做的原因是,加减数字的模型无法回答「这个名额原来是谁的、什么时候让出来的」这类问题,而这类问题在纠纷时一定会被问到。
第二个做法是核销走单一事务。扣课、写到场、生成课酬三件事在一个事务里完成,任何一步失败整体回滚。这个约束在开发时看起来多余,实际能挡掉大量脏数据。一旦允许部分成功,数据修复就变成了常态工作。
第三个做法是候补队列带冲突检测。补位时不只看队列顺序,还要看这个人这个时段有没有其他已确认课程。有冲突就跳过并通知,顺延给下一位。不做这一步,候补机制会把「约重」的问题放大,因为候补是被动补位,会员自己不会注意时间冲突。
第四个做法是所有规则可配置:取消时限、迟到分档、未到判定、同时占位上限、候补队列长度,全部在后台配。这类规则和场馆的运营策略强相关,换个场馆就换一套,写死在代码里等于每个项目都要改一遍程序。
七、综上所述
约课和核销是健身场馆每天发生频次最高的两个动作,也是最容易积累小额纠纷的地方。单次纠纷都不大,但每天发生三次,一年就是上千次不愉快,会员的续卡意愿就是这么一点点磨掉的。所以这两块的规则设计目标不是「最优」,而是「清楚且一致」——清楚到会员在约课之前就知道约了不来会怎样,一致到不同前台、不同教练执行起来结果一样。规则清楚了,前台才有底气,场馆才不用靠让步来平息事情。