账单改了,权限没改,客户先发现。
一、账单上只剩 3 席,登录的还有 5 人
三月,一个团队把席位从 5 个降到 3 个。创始人在账单页点了「更新数量」,当月发票从 30 美元变成 18 美元,事情看起来结束了。
两个月后他来信:「为什么还有 5 个人在登录?我明明只付 3 个席位。」
查下来,订阅数量改了,成员表没改。被「降级」的两个人仍是 Member,仍能建项目、改数据;账单按 3 席收,权限按 5 人给。
以下情境为教学假设,人物、引语和数字不代表经核实的真实案例。
账单是结果,权限是事实;两者不一致时,客户会先发现。 计费系统和权限系统各存一份「席位」,就必须有一个对账机制。
真源只能有一个:以「已接受成员数」为准,账单从它推导。反过来让账单驱动权限,webhook 丢一次就永久错位,而客户不会替你发现这种错位。
成员接受、移除、角色变更各发一个事件,订阅数量在同一条事件链上更新。降级则先冻结再停用,账单从下期起按新席位计算,两者不要求同一天到位,但必须能对上。
二、五种席位的计费口径
先把「什么算一个席位」写死,再谈按比例折算。
| 席位类型 | 是否计费 | 为什么 |
|---|---|---|
| 已接受成员 | 计费 | 已能读写数据,占用真实权限 |
| 待接受邀请 | 不计费 | 还没进门,计费等于为空气收钱 |
| Viewer | 免费,上限 10 | 只读不产生写入成本,但要有防滥用上限 |
| API 机器账号 | 不计费 | 不是人,按调用量或套餐限制更合理 |
| 已移除成员 | 立即释放 | 权限当天收回,账单不该再多收一天 |
计费口径要能一句话解释给客户听。 解释不清的规则,最后都会变成工单。
待接受邀请不计费,但要有过期时间。邀请挂 90 天不处理,既占席位名额,又让「为什么他能进」变得模糊。
Viewer 免费是获客手段,不是慈善。上限 10 个,超过就提示升级;没有上限,一个团队能把免费只读账号当监控系统用。
API 机器账号单独计量。它没有登录行为,也没有离职概念;把它算进席位,客户会在自动化扩容时收到莫名其妙的账单。
已移除成员立即释放,指的是权限立即收回、下个账期不再计费。当月已发生的费用不追溯退还,除非合同另有约定。
同一邮箱重复邀请只算一个席位。按邀请条数计费,客户会学会用别名邮箱试探你的计费逻辑;席位上限也要在邀请时检查,不要等账单出来才发现超了。
降级到 3 席时,Viewer 不占付费席位,但仍占 Viewer 上限。客户把 5 个 Member 改成 2 个 Member 加 3 个 Viewer,账单降到 2 席,权限却没有真正缩小;这种「省钱式降级」要在确认页明确提示。
三、三个时点:加席、降级与离职
按天折算最容易出错的地方只有一个:起算日含不含当天。
| 时点 | 账单怎么变 | 权限怎么变 |
|---|---|---|
| 月中加席(15 号) | 剩余 16 天折算,6 × 16 / 30 = 3.2 美元 | 立即生效,新成员当天可登录 |
| 降级 5 → 3 | 下期按 3 席收 18 美元,当期不退款 | 超出 2 人只读冻结 30 天,到期自动停用 |
| 离职当天移除 | 下期账单减 6 美元,当期按天折算 | 立即失去访问,API key 同时撤销 |
折算方向永远取「对客户有利」的一侧。 多算一天的收入,换来的是一封退款邮件和一次信任损失。
加席当天算一天。15 号加席、30 号账期结束,剩余 16 天(含 15 号),3.2 美元;若从 16 号算起,客户会觉得你在抠一天。
降级不立即踢人。30 天只读冻结是给客户的缓冲:数据还在,能导出,能决定留谁;30 天后自动停用,不需要人工介入。
冻结期内的席位仍显示在成员表,但标记「超额」。不标记的话,客户以为还能用,第 31 天会再来一封更生气的信。
离职移除要同时撤销三样东西:会话、API key、集成授权。只删成员记录,令牌还能用到过期,这是最常见的漏口。
当期不退款是标准做法,但要在降级确认页写清楚。客户以为按天退、实际不退,争议就从这里开始;所有变更写进审计日志并带上操作人和生效时间,账单争议时这条记录比客服记忆可靠。
四、20 个团队的对账复算
按团队档 30 美元含 5 席,把加席、降级、离职三种变更各算一遍。
团队档 = 30 美元 / 5 席 = 6 美元/席
20 团队 × 30 = 600 美元 ✔ 与毛收入中的团队档一致
15 号加 1 席 → 6 × 16 / 30 = 3.2 美元(当期按比例)
降级 5 → 3:下期 3 × 6 = 18 美元;冻结 2 人,30 天后停用
离职当天移除 → 下期账单 −6 美元
若 20 团队各有 1 次月中变更 → 每月 20 张按比例账单
对账口径:账单席位数 = 已接受成员数 + 付费 Viewer 超出部分
容忍窗口:变更后 15 分钟内一致,否则告警
20 张按比例账单不是问题,20 种口径才是。 每张账单都必须能还原成「谁在什么时候加了谁」。
3.2 美元这个数字要能复算:6 美元一席,剩 16 天,除以 30 天。客户拿计算器一按,对得上,才不会再问第二遍。
600 美元与全组基线一致:20 个团队 × 30 美元,正好是团队档收入的全部。个人档 100 × 12 = 1,200 美元不参与席位折算,两档不要混在一个对账表里。
若某团队既有加席又有降级,按事件逐条折算,不做净额合并。合并后只剩一个数字,客户无法核对是哪一步算错;分开列,争议能定位到具体事件。
降级冻结 2 人时,账单是 18 美元,成员表是 5 人。这个差值必须能被解释,否则就是你开头看到的那个客户;解释方式不是口头说明,而是账单行里写明「2 席冻结中」。
离职当天移除,下期减 6 美元;若当月已过一半,当期还会有一笔按天折算的抵扣。两笔都要在发票上分行显示,合并成一行会让客户以为你少退了。
每月做一次对账任务:订阅数量、已接受成员数、活跃会话数三列并排。任何一列偏离,先查 webhook 是否漏投,再查是否有绕过邀请流程的直接插入。
对账告警发给 Owner,不发给自己。客户有权知道「你的账单和成员不一致」,也有权在你发现之前先知道,但告警文案要写清是提示还是故障。
五、行动清单与复算验收
先把席位真源定下来,再改计费代码。
- 以「已接受成员数」为唯一席位真源。
- 待接受邀请 90 天过期且不计费。
- Viewer 免费但上限 10,超出提示升级。
- API 机器账号单独计量,不占席位。
- 成员接受、移除、降级都发事件并更新订阅。
- 降级冻结 30 天,超额成员在成员表明确标记。
- 移除成员时同时撤销会话、API key 与集成授权。
- 每月对账订阅数、成员数、活跃会话数。
验收标准:客户指着发票上的席位数和成员列表问「为什么是这两个数」,你能用一条对账记录说清每个数字的来处;做不到,说明计费与权限还是两套账。
使用边界与实操验收
本文只讨论席位计费与权限同步,不覆盖税务、发票合规与跨国定价。
先有权限事实,再有账单数字。 反过来做,每一次 webhook 丢失都会变成一次客户投诉。
按席位计费不适合所有产品。用量波动大的团队,按用量计费更公平;席位制适合「人就是成本」的协作工具,别因为竞争对手这么收就照抄。
年付客户的月中变更更麻烦。按年折算、按剩余月份抵扣,规则要提前写进合同,不要等变更时再发明;发明出来的规则,通常对客户不利。
免费档不要留「无限 Viewer」。免费额度是获客成本,不是无限责任;上限写清楚,比事后封号体面。降级冻结期则要给导出入口,客户被冻结时最怕数据拿不走,能导出,续费谈判才有空间。
所有变更邮件确认。加席、降级、移除各发一封,附生效时间与下期金额;邮件本身就是最低成本的争议证据。
关键参考与核验范围
核验日期:2026-10-25。以下链接用于核对订阅按比例计费与账号生命周期的一般做法,本文未逐条引用其内容。
- Stripe Billing:Prorations :用于核对月中变更的按天折算口径。
- Stripe Billing:Change subscriptions :用于核对修改订阅数量与生效时点的做法。
- RFC 7644:SCIM 2.0 协议 :用于核对成员创建、停用与权限回收的标准化流程。
引用口径。 本文只借用「席位数量驱动订阅、按剩余天数折算、停用即回收权限」这一一般结构;20 团队、600 美元、3.2 美元与 30 天冻结全部是教学假设,与上述材料无关。
核验范围。 核验的是「账单席位与权限成员能否用一条记录对上」,不是比对某家计费系统的价格或功能。
如何自行复核。 取最近一次加席或降级,从事件时间开始计时,分别打开订阅页、成员页和审计表,看三处的数量与生效时间是否一致。
系列导航
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。