Retaintive 角色深挖 v2 — 场景驱动设计

数据来源:行业研究 (40+ sources) + Will 对话 + Milly 对话 x2 + Oliver 对齐 (6 轮) + Alan 反馈 + Neon Schema (13 tables, 253 fields) · 2026-05-03
🧠 Owner 角色概要

核心诉求:我的店在增长还是在下降?30 秒内告诉我。

多店 Owner 管理 2-8+ 个店(Will 有 5-6 个不同行业的业务),注意力极度稀缺。不需要数据,需要趋势线。早上喝咖啡的 30 秒内判断:"有没有需要我介入的异常?" 没有 → 放下手机。Owner 不操作 Dashboard — 那是 Manager 的日常工具。Owner 的主要触点是 Email Digest,异常时才点进 Dashboard。

Owner 每天问的 5 个问题

  • 昨天的 intro booking 和 new membership 怎么样?
  • 有没有人要取消?团队处理好了吗?
  • 员工在主动出击吗?(outbound call volume)
  • Retaintive 帮我赚了多少钱?(Impacted Revenue)
  • 跟上周/上月比,trend 是上还是下?

行业恐惧(来自 20+ 研究源)

  • Lead 黑洞 — 80% 的 lead 从未被正确跟进 行业
  • 看不见 = 失控 — 不在店里就不知道发生什么 行业
  • Revenue 下滑 — OTF EBITDA 2019→2023 下降 50%+ 行业
  • 91% 精品工作室不盈利 行业
  • 工具太复杂 — MBO 被形容为 "clunky, half-baked" 行业

📱 Scanner(Will 型)

多行业经营(OTF + 餐饮 + 医美),每天早上扫一眼所有业务。对每个业务只花 30 秒。不想登录任何系统。

行为模式:看 email → 没异常 → 关掉 → 下一个业务
满意条件:Digest 本身就是完整产品
Dashboard 使用:几乎不用,除非周一看 Staff 或月底看 Revenue

🖥️ Digger(Alan 型)

8 个 OTF studio,深度使用数据工具。喜欢自己挖掘 insights,对比 store 表现,drill down 到 staff 和 call level。

行为模式:看 email → 发现异常 → 点进 Dashboard → 深挖 30 分钟
满意条件:Digest 是入口,Dashboard 是主战场
Dashboard 使用:每天使用,频繁切换 store

💡 设计原则:同一入口,不同深度

两种 Owner 从同一封 Morning Digest 出发。Digest 给足 summary 满足 Scanner(Will),用 cliffhanger("员工 productivity 下降 12% →")引导 Digger(Alan)进入 Dashboard 深挖。Owner 进入的 Dashboard 和 Manager 是同一个 — 没有单独的 Owner Dashboard。区别在于入口和视角:Owner 从 digest 的 studio 汇总进入,Manager 每天直接打开按员工拆分看。

🔒 已锁定的设计决策(7 项)
📧
Digest = 昨日整天数据 已锁定
每天早上发送,只包含昨日(00:00–23:59)的完整数据。不 rolling,不包含今天。避免混淆。
🏪
多店 = 一封邮件,分店展示,不合并 已锁定
Alan(8 stores)收一封邮件,每个 store 独立展示。数据不合并,不做 aggregate。Owner 逐店查看。
📞
Total Calls + Outbound Calls 进入 digest 已锁定
Total Calls 给 Owner 一个 volume 感知。Outbound Calls 单独列出,让 Owner 看到团队主动出击的程度。不需要 per-staff breakdown(那是 Manager 的事)。
Missed Calls 不进 Owner 视野 已锁定
Owner 看到了也无法 act on it。Missed calls 是运营层面的事,交给 Manager。Owner 无法控制的事情不放在 Owner 面前。
💰
Impacted Revenue = 基于 Task 完成 已锁定
每个 task 有预设价值。Front desk 关闭 task → 计入 Impacted Revenue(manual_closed 和 auto_closed 都算)。未关闭 = 不计。CC captured 是 intro booking 的成功条件。命名为 "Impacted"(Will 改名,不叫 Influenced)。
🔔
Churn = 问责确认,非实时告警 已锁定
Owner 不需要实时 churn push。默认在 digest 中显示"昨日 X 个取消通话,Y 个已挽留"。实时告警为 opt-in 功能。Owner 关心的是"团队有没有处理好",不是"现在有人要走"。
🪝
Digest 用 cliffhanger 引导进入 Dashboard 已锁定
Digest 完整到可以满足 Scanner,但用 "→ 点击查看详情" 引诱 Digger 进入 Dashboard。两种 Owner 都从同一封邮件出发,行为路径自然分叉。
🎯 9 个 Owner 使用场景(场景 → 触发 → 动作 → 信息 → 触点 → 数据)
📧 Morning Digest 模拟(单店视图)

🍊 OTF Totowa — Thursday, May 1 Yesterday's Summary

7
Intro Bookings
5 CC captured
2
New Memberships
+$318 revenue
3
Cancellation Calls
2 retained ✓
Total Calls42
Outbound Calls18 (43% of total)
Tasks Completed8 of 11
Tasks Overdue2 — 1 high priority
Impacted Revenue+$1,274
📉 Staff productivity dropped 8% vs last week — see who needs attention
🏪 Multi-Store Digest 模拟(Alan 8-store format)
Harlem Totowa Westside Midtown +4 more
12
Intro Bookings (9 CC)
4
New Memberships
5
Cancellations (3 retained)
Total / Outbound Calls67 / 29
Tasks14 of 17 done
Impacted Revenue+$2,840
🔥 3 overdue tasks, highest priority: lead follow-up from 4/30
📋 场景 × 触点矩阵
场景频率主触点Digest 中?Dashboard?状态
O1 早晨速览每天Email✅ 核心备选入口已锁定
O2 周一复盘每周一Email✅ 周一加长版WoW 对比已锁定
O3 月度 MTD日常可查Email + Dash✅ MTD 行MTD 详情已锁定
O4 多店对比按需Email tabs✅ 分店展示Store 切换已锁定
O5 员工审查每周Cliffhanger⚡ 钩子✅ 主要已锁定
O6 Revenue日/周Email + Dash✅ 数字✅ 趋势图已锁定
O7 Churn 问责每天Email 行✅ 汇总行Opt-in 告警已锁定
O8 异常干预按需Cliffhanger⚡ 钩子✅ Drill down需细化
O9 ROI 验证月/季Email + 导出✅ 月报图表 + PDF需细化
⚠️ 核心架构原则:没有单独的 Owner Dashboard
Owner 点击 Digest 链接后进入的是和 Manager 完全相同的 Dashboardstudio.retaintive.ai/dashboard)。不需要为 Owner 单独建任何页面。区别只在入口(Owner 从 Email Digest 进入,Manager 每天直接打开)和关注点(Owner 看 studio 汇总趋势,Manager 按 SA 拆分做管理)。
Owner 点击 Digest → 落在哪个页面?
O1 早晨速览 · O6 Revenue · O7 Churn
主要:Email Digest 本身(不需要点进去)
点进去:/dashboard?tab=daily-analytics
= Manager 每天看的同一个 Analytics 页面
O2 周一复盘 · O3 月度 MTD
点进去:/dashboard → Weekly/Monthly Review
= Manager M4/M6 的同一个视图,切换时间范围
Owner 看 studio 汇总 · Manager 切到按 SA 拆分
O4 多店对比
主要:Email Digest 的 store tabs(逐店查看)
点进去:/dashboard → 顶部 store switcher
= 已有的 franchise_id 筛选器
O5 员工表现审查
Digest 里:cliffhanger("Staff productivity dropped 8% →")
点进去:/dashboard?tab=staff-performance
= Manager M1 每天看的同一个 Staff tab
含新增列:Tasks✓ / Coaching Flags / WOW
O8 异常干预
Digest 里:cliffhanger 或告警通知
点进去:/dashboard?tab=trends/calls?id=xxx
= 已有的 Trends tab + Call Detail
O9 ROI 验证
点进去:/dashboard?tab=daily-analytics → Impacted Revenue
= 已有的 Analytics 页面,扩展日期范围
+ 月度 Email ROI summary + PDF 导出
📐 Owner 专属的 Build = 只有 Email Digest
Owner 唯一不和 Manager 共享的东西是 Morning Digest Email。Dashboard 上的所有页面、tab、模块 — Owner 看到的和 Manager 完全一样。Weekly/Monthly Review 视图、Staff tab 新增列、Coaching Highlights 模块 — 全部是为 Manager 日常管理而建的,Owner 只是偶尔通过 Digest 链接点进来看。

这意味着:不需要为 Owner 单独开发任何 Dashboard 功能。Manager tab 里的所有 build(Staff tab +3列 / Coaching Highlights / Weekly·Monthly Review / Lead Response Cadence)完成后,Owner 自动获得所有功能。Owner 的开发工作量 = Digest Email 模板。
📊 Owner 关心的 KPI(Will 验证 + 行业研究)

Will 定义的 Productivity KPI Will 原创 已锁定

Productivity = (Intro Booked + Membership Closed + Members Retained) ÷ Total Calls

"I would add those three up divided by total calls. That's my productivity for that person." — Will

这是 Owner 真正会盯的唯一员工指标。出现在 Staff tab 和周报 cliffhanger 中。

Impacted Revenue 已锁定

归因规则见上方锁定决策 #5。Owner 在 Digest 看当日数字,在 Dashboard 看趋势图和累计值。这是 Owner 验证 Retaintive ROI 的核心指标。

<5min
Speed-to-Lead
行业标准
30%+
Lead-to-Member
转化率目标
3-5%
月 churn 率
(优秀)

💡 Low Utilization Calls = 双刃剑

Will: "When you call a member for low utilization, it's a double-edged sword. Sometimes they could cancel." 大店(1100 members)不做 low utilization 联系 — 容量已满,dormant members 反而是好事。小店(300 members)才需要。

🔌 Owner 数据支持概要

Owner 场景的数据覆盖情况

Owner 所有 9 个场景的底层数据来自 Neon 数据库的 callstasksleadscontacts 四张核心表。完整 schema(13 tables, 253 fields)详见 Front Desk tab → 数据架构要点。Owner 特别依赖的聚合维度:

  • franchise_id → 多店 filter(O4 场景核心)
  • tasks.close_result + assumed_value → Impacted Revenue 计算(O6/O9 场景)
  • 按 calendar week/month 聚合 → WoW / MoM 对比(O2/O3 场景)

⚠️ 数据缺口(影响 Owner 场景)

去年同期数据 — 只有 6 个月数据,无法做 YoY(Will 想要但暂时做不到)

Revenue 实际金额 — 在 MBO 系统中,我们用 avg_mrr 配置值近似

🧠 Manager 角色概要

核心诉求:让我看到每个员工在做什么,我才能帮他们提升

Manager(像 Milly 这样的 studio manager)是 dashboard 最核心的日常用户。Owner 只是扫一眼 digest,但 Manager 每天都在用这个工具管团队。她需要的是按员工拆分的数据,不是 studio 整体汇总 — 整体汇总是 Owner 的视角。

她需要知道什么

  • 谁在真正做事? — 她能感觉到,但需要数据来支撑 accountability 对话
  • Lead 有没有被漏掉? — walk-in 签约的人在系统里还显示为未跟进 lead,制造假的"neglect"
  • 谁需要 coaching?具体差在哪? — 要具体到某通电话的某个行为,不是笼统评分
  • 能不能截图直接发给团队和 Owner? — Grab Snap 是她每天的操作
  • 周报月报做完了吗? — 现在手动在 Google Sheets 里拉需要 2-3 小时

她担心什么

  • 又多一个要学的工具 — 已经在 MBO + spreadsheet + Slack + email 之间跳来跳去
  • 没有数据就没法问责 — "If it's recurring, I don't have any grounds for further action"
  • 变成数据搬运工 — 导出 CSV → Excel 手动分析 → 截图 → 发群,周而复始
  • 员工觉得被监控 — 按人拆分的数据必须定位为帮助成长,不是监控
"It has to be by team member. You have to do it that way for managers. Otherwise, you can't really generally manage."— Milly (Harlem Studio Manager)

💡 Retaintive 为 Manager 省掉的工作量

员工表现检查:手动观察 + 凭感觉 → Dashboard 按人拆分的数据,一眼看到谁需要帮助
Lead 跟进问责:口头问 SA + spreadsheet 追踪 → Lead Tracker 自动标记 stale + 响应速度分布
Coaching:旁听通话 + 笼统反馈 → AI 自动 flag 具体通话 + 具体行为证据
周报/月报:Google Sheets 手动拉数据 2-3 小时 → Grab Snap 截图 5 分钟搞定
向 Owner 升级问题:口头描述 + 缺上下文 → Grab Snap 附带完整 contact timeline

🔒 已锁定的设计规则
👤
Manager 视角 = 按员工拆分,不是 studio 汇总 已锁定
Studio 汇总数据是 Owner 看的。Manager 需要每个指标都能按员工拆开看,才能做日常管理和一对一谈话。
🖥️
Task 页面 = Front Desk 专用,Manager 在 Dashboard 看 task 数据 已锁定
Task 页面是给 SA 用的 — 显示"我要做什么"。Manager 不需要进 Task 页面,她在 Dashboard 的 Staff Performance 里看每个 SA 的 task 完成率和逾期数。这是监督视角,不是执行视角。
📸
Grab Snap 是 Manager 的核心输出方式 已锁定
Milly 每天截图 dashboard 发 Slack 给团队和 Owner,月报也用截图。所有 Manager 视图必须干净到可以直接截图分享。
🤖
Coaching 反馈需要筛选降噪,不是每通都值得看 已锁定
当前 Call Detail 已经对所有通话生成了 coaching 反馈。但 Manager 不需要看每一条 — 需要筛选出 coaching-worthy 的通话:lead 没被 close、cancel 没尝试挽留、异议处理差、给了错误信息。跳过 voicemail、简单咨询、60 秒以下的通话、打错号码、robocall。大约 15-20% 的通话值得 Manager 关注。Coaching Highlights 模块只展示被 flag 的通话。
📞
Coaching 评分 = 按通话打分,归属到接听的 SA 已锁定
每通电话独立评分,归属到处理它的那个 SA。但 AI 评分时可以看到这个 contact 的全部历史,所以不会因为缺上下文而误判。例如:Ryan 处理了 call 1-2,Holly 处理了 call 3-4 — 各自拿各自的评分,不会交叉污染。如果 Ryan 已在之前的通话用了挽留技巧,Holly 这次 cancel call 不会因此被扣分。
⏱️
Speed-to-lead = 第一次尝试联系的时间,不是第一次接通 已锁定
计时从 lead 进入开始,到第一次 outbound 尝试为止(不管对方有没有接)。即使 voicemail 没设置、通话没录音,尝试仍通过 CDR 数据被记录。短信也算。非营业时间进来的 lead 从下一班开始计时。
📈
响应速度用分布图展示,不只是平均值 已锁定
显示 lead 被首次联系的速度分布:15 分钟内 / 15分钟–1小时 / 1–2小时 / 超过2小时 各占百分之多少。阈值可按 studio 配置。
⚠️
过期 contact 弹提示,不自动标记为 stale 已锁定
超过 X 天没更新状态的 contact 显示「需要更新状态」提示,而不是自动归入 stale。因为有些 walk-in 签约的人在系统里没被更新,不应该被当作 stale。
📐 Coaching 模型 Spec(规则 #4 + #5 的工程细节)
5 个固定 Coaching 类别
1. Booking Ask — 有没有尝试预约 intro?
2. Objection Handling — 价格/时间/承诺异议处理
3. Retention Technique — 有没有提供替代方案?
4. Rapport Building — 沟通质量和客户体验
5. Information Accuracy — 政策/价格/课程信息是否正确
Coaching Flag Rate(Manager 核心指标)
公式:SA 的 flags 数 ÷ SA 的 coaching-worthy calls 数 = flag rate %
为什么用 %:排班天数不同,原始数量有误导性
趋势:按 SA × 类别,rolling 4 周窗口。Flag rate 下降 = coaching 起效
Coaching-worthy 过滤:跳过 voicemail / 简单咨询 / <60s / 打错号码 / robocall。约 15-20% 的通话产生反馈。类别固定不漂移。
🎯 Manager 场景(7个)

💡 设计原则:每个数据都必须能带出行动

如果 Manager 在 dashboard 上看到问题但什么也做不了,这个数据就不应该放在屏幕上。每一项指标都要对应一个明确的下一步 — coaching 对话、team huddle、升级给 Owner。

📱 UI 示意图
🗺️ 场景 → 生产页面精确映射
以下是每个 Manager 场景在生产环境中的确切落点。URL 基于 studio.retaintive.ai 实际路由。
📊 Dashboard /dashboard
✅ 已有 Analytics tab tab=daily-analytics — Performance Overview / Types / Sankey
✅ 已有 Trends tab tab=trends — 7天趋势图 × 7个指标
✅ 已有 Staff tab tab=staff-performance — per-SA 卡片: Intro/Sales/Cancel
🔧 扩展 Staff tab 新增 3 列: Tasks✓ / Coaching Flags / WOW → M1
🆕 新增 Coaching Highlights 模块放 Dashboard 首页 → M5
🆕 新视图 Weekly / Monthly Review (同一个视图,切换时间范围) → M4 M6
Owner 和 Manager 看同一套数据 — studio 汇总 + 按 SA 拆分 toggle
🎯 Lead Tracker /lead-tracker
✅ 已有 Lead 表格: Status / Lead / Received / Initial Contact / Response Time / Staff / Outcome
✅ 已有 Date picker + Status/Outcome 筛选 + View 切换
🆕 新增 Lead Response Cadence 分布图 (Mock-up 2) → M2
🆕 新增 Stale Contact 黄色提示条 (Mock-up 4) → M2
注: Response Time 列已存在,speed-to-lead 原始数据可用
📞 Call Table + Detail /calls
✅ 已有 Call 列表: Category / Outcome / Staff / Duration
✅ 已有 Right panel: Transcript + audio player + staff 可编辑
✅ 已有 Call Detail 已包含 Coaching 反馈(所有通话都有)
🔧 优化 筛选 + 降噪:只在 coaching-worthy 通话上突出显示反馈 → M5
Manager 从 Coaching Highlights 点进来查看被 flag 的具体通话
✅ Tasks /tasks (仅 test 站)
✅ test已有 Open/Closed / All/Ongoing/Due Soon/Overdue
✅ test已有 AI Summary + Suggested Action + Contact detail + Comm Log
⬜ Manager 不直接用此页 — SA/Front Desk 专用
Manager 在 Staff tab 看 task 完成率汇总(规则 #2)
M3 取消挽留:Save Rate 数据在 Analytics tab 的 Membership Cancellations Retained 区域(已有)。Cancel task outcome 聚合到 Staff tab 新增列。无需新页面。
M7 问题升级:跨页面操作 — Manager 在任意页面发现问题 → Grab Snap(已有按钮)→ 附文字发 Owner。涉及 Contact timeline (Call Detail) + 趋势 (Trends) + Task (Staff tab)。无需新 build。
📐 Build 清单: 扩展 2 个现有模块 (Staff tab +3列 / Lead Tracker +分布图+提示) + 优化 1 个模块 (Call Detail Coaching 筛选降噪) + 新增 1 个 Dashboard 模块 (Coaching Highlights) + 新增 1 个 Dashboard 子视图 (Weekly/Monthly Review — 同一视图切换时间范围)
以下 4 个 mockup 是上述页面中各模块的详细设计 ↓
🆕 新增模块:Coaching Highlights(放在 Dashboard 首页)
为什么需要这个模块:Coaching 反馈已经在每通电话的 Call Detail 里了,但一天 40-50 通电话,Manager 不可能每个都点开看。这个模块从所有通话中自动筛选出 2-3 个最值得关注的,直接放在 Dashboard 首页。Manager 打开 dashboard 第一眼就知道"今天要跟谁聊什么"。不用翻 Call Table。
Coaching Highlights
Yesterday · 47 calls → 3 flagged
NK
Nadia K. → David Park (Member, 8 months)
Retention Technique
Member called to cancel — said schedule doesn't work anymore. Nadia processed the cancellation without offering alternative class times, freeze option, or transfer to another OTF location. 4-min call, no retention attempt.
⚡ Why flagged: Cancel call with zero save attempt. Member had 8 months tenure — high chance of save with freeze or schedule adjustment offer.
→ Listen to call · View AI coaching suggestion
KL
Kyle L. → +1 (914) 555-0187 (New Lead)
Booking Ask
Inbound lead asked about class schedule and first-timer pricing. Kyle explained the workout format, pricing, and free intro class — but never asked "Can I book you in for an intro?" Call ended with "I'll think about it." 7-min call.
⚡ Why flagged: Warm lead gave buying signals (asked about pricing + schedule) but SA didn't close with a booking ask.
→ Listen to call · View AI coaching suggestion
RW
Ryan W. → Lisa Chen (Member, 14 months)
Great Save
Member called to cancel citing cost. Ryan acknowledged her concern, checked her attendance (3x/week), calculated per-class cost ($12/class), and offered a 2-month freeze while she sorts finances. Member agreed to freeze instead of cancel.
🌟 Why highlighted: Textbook retention technique — acknowledged concern, used data to reframe value, offered concrete alternative. Share in team huddle.
→ Listen to call · View full transcript
筛选逻辑:从所有通话中排除 voicemail / 简单咨询 / <60s / 打错号码 / robocall → coaching-worthy 通话(约 15-20%)→ 按严重程度排序 → 取 top 2-3 展示。正面案例(Great Save)用于团队表扬。
🆕 新增模块:Lead Response Cadence(放在 Lead Tracker 里)
Lead Response Cadence
This week · 23 leads · First attempt time
阈值可按 studio 配置
52%
< 15 min
12 leads
26%
15 min – 1 hr
6 leads
13%
1 – 2 hr
3 leads
9%
> 2 hr
2 leads
⏱ 计时到第一次尝试联系为止(不是第一次接通)· 非营业时间暂停计时 ▲ 比上周 +8%
📊 扩展现有模块:Staff Performance 表格(Dashboard → Staff tab)— 新增紫色列
Staff Performance
Customize Columns 📷 Grab Snap
STAFF CALLS IN / OUT INTROS SAVES TASKS ✓ COACHING FLAGS WOW
NK
Nadia K.
Front Desk
58 21 / 37 14 3 / 5 92% 18%
RW
Ryan W.
Front Desk
42 18 / 24 9 1 / 2 71% 28%
KL
Kyle L.
Front Desk
19 6 / 13 4 1 / 1 88% 8%
新增列(紫色):COACHING FLAGS = coaching-worthy calls 中被 flag 的百分比(自动 normalize 排班差异)。TASKS ✓ = task 完成率。WOW = 周环比趋势。
已有列:Total Calls, In/Out, Intros Booked, Cancel Saves — 生产 Staff tab 里已经有了。
⚠️ 新增行为:Stale Contact 提示(放在 Lead Tracker Pipeline 视图里)
⚠️
3 contacts need status update
These leads haven't been updated in 5+ days. They may have signed up in person or become inactive.
Review →
🗃️ 数据架构要点

Contact 级别合并的实现方式

  • 合并键:contact_phone 是所有通话 + 短信的统一 foreign key
  • Contact 时间线:一个 contact 的所有事件(通话、短信、未接通的 outbound 尝试),按时间排序
  • Task 生成:基于 contact journey 状态触发。例如:"这个人问了两次价格但没预约" → 自动生成跟进 task
  • CDR 数据:每次 outbound 尝试都被记录,即使没有录音(timestamp + destination + disposition)。短信也被记录。Speed-to-lead 可以追踪所有尝试,不只是被录音的通话

Coaching 评分逻辑见 Section 2 的 Coaching 模型 Spec。Stale 检测逻辑见锁定规则 #8。

⚠️ staff_name 识别准确度是关键依赖

按人拆分的视图(场景 M1、M2、M5)依赖 staff_name 准确度。改进措施已在进行中。即使只有 70-80% 准确,Manager 也能看到 pattern。识别错误的通话可以在 UI 里手动重新分配。

Studio 级别的 speed-to-lead cadence 不依赖 staff_name — 它用 CDR 数据,所有 attempt 都被记录了。按人拆分的 cadence 需要 staff attribution,但 studio 级别的 cadence 可以直接上线。

🧠 Front Desk 角色概要

核心诉求:告诉我现在该打给谁,别让我想

Front Desk SA 是 Retaintive 的日常执行者。她的工作节奏被课程时间表切成碎片 — 课前有 30-60 分钟可以打电话,课中忙到不行(check-in、迎新、接电话),课间只有 15-30 分钟空隙。在这些窗口里她需要快速决定:现在打给谁?这个人是什么情况?打完怎么记录?

她需要什么

  • "今天我该打给谁?" — 排好优先级的 action list,不用自己判断先后
  • 打电话前 3 秒看完上下文 — 这个人是谁、上次聊了什么、AI 建议怎么说
  • 一键关闭 task — 选结果 → 完事,不要填表
  • 别 overwhelm 我 — Will: "don\u2019t overwhelm the front desk with useless tasks"

她担心什么

  • "AI 会不会取代我?" — OTF 试过移除前台,失败了
  • "又多一个工具" — 已经在 MBO + 电话 + spreadsheet 之间跳
  • "一直打电话打到烦" — 行业员工反馈最多的抱怨
  • 被盯着 — 数据被 Manager 用来问责而不是帮助
  • Sales pressure — 每 membership $20-50 提成,但基本工资低
"don\u2019t overwhelm the front desk with useless tasks"— Will (Owner)
🔒 已锁定的设计规则
📋
Task 页面是 Front Desk 的主战场 已锁定
SA 登录后看到的核心页面是 Task list。这是她每天工作的起点和终点。Manager 不用这个页面 — 她在 Dashboard 看 task 汇总数据。
🎯
Task 自动排优先级,SA 不需要自己判断 已锁定
系统按优先级自动排序:新 Lead(最新排最前)> Cancel-intent(紧急)> Follow-up(按天数)> 其他。SA 从上往下打就行。
⏱️
设计适配碎片化时间 已锁定
SA 的时间被课程时间表切碎 — 课前 30-60 分钟、课间 15-30 分钟空隙是主要打电话窗口。看 → 点 → 打 → 关,每步不超过 3 秒。
🤖
AI 是助手不是监工 已锁定
AI coaching 帮 SA 提升通话质量。SA 看到的是"下次可以这样说",不是"你这里做错了"。
📖
Suggested Action Playbook — 打电话前的 AI 行动指南 已锁定
每个 task card 旁边有一个"Suggested Actions"按钮。点击后展开一个面板,显示基于这个客户的 profile、通话历史和 OTF 行业知识的分步行动指南。不是一句话建议,而是完整的 playbook — 像一个经验丰富的 Manager 站在旁边告诉新人该怎么做。解决新 SA 第一天上班不知道怎么处理 cancellation / objection 的问题,也释放 Manager 不用每次都在旁边指导。Playbook 可以随时间优化 — 分析成功的挽留通话和高转化通话,提炼出更好的建议。

💡 Front Desk 涉及的页面

Task 页面是 SA 的主战场,也是本文档的重点。其他页面:
Call Table / Messages:现有页面,v1 不做改动。SA 偶尔查看通话记录和短信。
Call 详情页 → View Analysis:SA 查看 AI coaching 反馈的地方(见场景 F6)。v1 coaching 反馈对所有 SA 可见(没有 seat 系统无法区分),等加了 seat 系统后可按个人过滤。
Lead Tracker / Dashboard:SA 不主动使用,这是 Manager 的工具。

🎯 Front Desk 场景(6个)

💡 Front Desk 和 Manager 的核心区别

Manager 看 pattern(谁需要帮助、哪里有问题)。Front Desk 做 action(打这个电话、关这个 task)。Manager 的工具是 Dashboard,Front Desk 的工具是 Task 页面。所有给 Front Desk 的信息都必须直接指向下一个动作 — 如果看完之后不知道该做什么,就不应该放在屏幕上。

📱 Task 页面优化方案 — 实现 Spec

核心设计原则:从上往下打就行

Task 页面不是一个列表工具 — 它是 SA 的工作台。打开就知道现在该做什么,点一下就看到背景,打完电话一点就记录完毕。整个流程:看 → 点 → 打 → 关,每步不超过 3 秒。

⚠️ 全局限制:没有 Seat 系统
现状:所有 SA 共用同一个 studio 登录,没有个人账号。
影响:Task 页面是团队共享视图 — 所有人看到同一个列表,无法区分"我的 task"和"别人的 task"。
工程约束:
• 不做 "My Tasks" 过滤
• 不做个人 stats 展示(outbound 数、完成率)
• Close Task 保留手动输入姓名("Who are you?" 弹窗)
• AI coaching 不放在 Task 页面(coaching 是个人的,但页面是共享的)
未来:如果加了 seat 系统,以上限制可以解除。
🔧 优化 1:Tab 结构改版 — Today / Upcoming / Backlog
现状(当前 tab)
All Ongoing Due Soon Overdue
问题:All 堆积所有 task → SA 不知道从哪开始。Overdue tab 满屏红色 → 麻木。没有"今天先做这些"的概念。
改为 ↓
Today (12) Upcoming (8) Backlog (23)
Today tab — 默认打开
过滤逻辑(SQL 伪代码):
WHERE status = 'OPEN'
AND (
  due_at <= NOW() -- 已到期(含 overdue 但未降级的)
  OR (type_category = 'lead_outreach' AND created_at >= TODAY_START) -- 今天新进的 lead
  OR priority = 'HIGH' -- 手动标记紧急的
)
AND days_overdue < backlog_threshold -- 超过阈值的不显示(见 Backlog)


排序规则(从上到下):
① type_category = 'lead_outreach' → 按 leads.received_at ASC(最早进来的 lead 先打)
② type_category = 'cancellation_risk' → 按 due_at ASC
③ type_category = 'lead_follow_up' → 按 due_at ASC
④ type_category = 'retention' → 按 due_at ASC
⑤ 其他 → 按 due_at ASC

视觉:tab 上显示数字 badge(今日总数)。这是 SA 打开页面后第一眼看到的 — "今天有 12 个要处理"。
Upcoming tab
过滤逻辑:
WHERE status = 'OPEN'
AND due_at > NOW()
AND due_at <= NOW() + INTERVAL '7 days'
AND priority != 'HIGH' -- HIGH 的已经在 Today 里了
AND NOT (type_category = 'lead_outreach' AND created_at >= TODAY_START) -- 今天的新 lead 已在 Today

互斥规则:如果一个 task 符合 Today 的条件,它不会出现在 Upcoming。Today 优先。

用途:SA 今天的 task 打完了,可以提前做明天/后天的。或者 Manager 想看接下来几天的工作量。
排序:按 due_at ASC(最近到期的排前面)。
Backlog tab
过滤逻辑:
WHERE status = 'OPEN'
AND due_at < NOW()
AND (
  (type_category IN ('lead_outreach','lead_follow_up') AND days_overdue >= 7)
  OR (type_category = 'cancellation_risk' AND days_overdue >= 14)
  OR (type_category IN ('retention','win_back','renewal','upgrade') AND days_overdue >= 14)
)


Backlog 降级阈值(建议值,需确认):
• Lead 类 task → 7 天未处理 → 进 Backlog
• Retention / Cancel 类 → 14 天未处理 → 进 Backlog
• Win Back → 14 天未处理 → 进 Backlog

为什么这样做:Lead 超过 7 天没联系,转化概率已经很低(行业数据:72 小时后响应率下降 90%),继续放在 Today 只会挤掉更有价值的 task。但不删除 — 放在 Backlog 让 Manager 决定是否批量处理或关闭。

Manager 视角:Backlog 数量反映在 Manager Dashboard 上 — "本周有 23 个 task 进入 backlog",Manager 可以决定是批量关闭还是重新分配。

回到 Today:SA 或 Manager 可以手动将 Backlog task 设为 priority = HIGH,task 会自动回到 Today tab。这是从 Backlog 中"抢救"仍有价值的 task 的方式。
🔧 优化 2:Task Card 信息布局 — 每个 task 展示什么
Task 列表里每一行需要让 SA 在 3 秒内判断:这个人是谁、什么情况、我该怎么做。以下是每种 task type 的 card 布局 spec + 字段映射。(视觉整体效果见下方 Mockup 1)
LEAD OUTREACH(新 Lead)
NEW LEAD Sarah Martinez +1 (555) 123-4567
New today
Web inquiry about class schedule and pricing
💡 AI: Ask about fitness goals, suggest a free intro class this week
📖 Actions
字段映射:
• 红色 badge "NEW LEAD" → type_category = 'lead_outreach'
• 联系人姓名 → contacts.name (JOIN on contact_phone)
• 电话号码 → tasks.contact_phone
• 一句话摘要 → leads.inquiry_summarycontacts.customer_summary
• AI 建议 → calls.suggested_actions(如果有历史通话)或默认 lead 话术
• 📖 Actions 按钮 → 点击展开 Suggested Action Playbook(见优化 4)
LEAD FOLLOW UP
FOLLOW UP Mike Johnson 3rd attempt
Due today
Last call: Left voicemail about Saturday class. Interested but scheduling conflict.
💡 AI: Mention weekday 6:45am option, he mentioned early morning works better
📖 Actions
字段映射:
• "3rd attempt" → COUNT of closed tasks for same contact_phone(接触次数)
• "Due today" → tasks.due_at 和当前日期对比:today = 橙色,overdue = 红色 "1 day overdue"
• 上次通话摘要 → calls.executive_summary WHERE contact_phone = X ORDER BY call_date DESC LIMIT 1
• AI 建议 → calls.suggested_actions 从最近一通电话
• 📖 Actions 按钮 → Playbook(见优化 4)
Pipeline badge(可选):New → Attempted → Connected → Booked 显示在姓名旁边
CANCELLATION RISK
CANCEL RISK Lisa Chen
1 day overdue
Called to cancel: schedule changed, can’t make evening classes anymore
💡 AI: Suggest freeze or switch to 6:45am. Objection: "evening doesn’t work"
📖 Actions
⚠️ 打电话前先查 MBO 看会员时长和上课记录
字段映射:
• Cancel 原因 → calls.objections(从通话中提取的异议)
• AI 挽留建议 → calls.suggested_actions
• 📖 Actions 按钮 → 展开挽留 Playbook,含分步话术和替代方案(见优化 4 + Mockup 3)
• MBO 提醒 → 固定文案,提醒 SA 打电话前查 MBO(会员时长、上课记录不在 Retaintive)
RETENTION
RETENTION David Park
Due in 2 days
Renewal coming up. Last call was positive, asked about family plan options.
💡 AI: Follow up on family plan pricing, he has a spouse interested
📖 Actions
BOOKED NOT CONVERTED
BOOKED NOT CONVERTED Emma Wilson
Due today
Tried intro class last Tuesday. Haven't signed up yet.
💡 AI: Ask about her experience. She liked the coach — mention same coach Thu 6pm
📖 Actions
场景:预约了 intro class、来上了课,但没签约。转化漏斗最关键的一步。
字段映射:
• Badge: type_category = 'booked_not_converted'
• 上课信息摘要 → contacts.customer_summary
• AI 跟进建议 → calls.suggested_actions(如果有之前通话)或默认跟进话术
• 📖 Actions 按钮 → Playbook(见优化 4)
🔧 优化 3:Close Task 流程 — 完整交互 Spec
Close Task 是 SA 使用频率最高的操作。每打完一通电话就要做一次。当前缺少常用的负面/中性结果,导致 SA 不知道选什么 → 不关 task → 堆积。
Step 1: 点击 "Close Task" 按钮
位置:现有 task 详情面板(右侧第三栏)的底部,已有这个按钮。
Step 2: 选择结果(弹窗)
正面结果(UI 已有)
✓ Converted ✓ Win-back ✓ Cancel Saved ✓ Renewed ✓ Upgraded ✓ Issue Resolved
中性/其他结果(UI 已有)
◎ Attempted ◎ Other ◎ Do Not Contact
注意:DB 中已有 other 和 do_not_contact 值(auto_closed 使用),但 UI 弹窗中没有明确展示。Win-back / Renewed / Upgraded 在 UI 中但从未被使用过(0 条记录)。
需要新增 ↓
+ No Answer + Left Voicemail + Not Interested + Callback Later + Wrong Number + Already Member
Step 3: 后续动作(自动触发)
选择不同结果后系统自动做什么:

选了什么 系统自动做 新 task 的 due_at
No Answer 生成 LEAD FOLLOW UP task NOW() + 1 day(明天再打)
Left Voicemail 生成 LEAD FOLLOW UP task NOW() + 2 days(给时间回电)
Callback Later 弹出日期选择器 → 生成 task SA 手动选日期(默认 NOW() + 1 day)
Not Interested 关闭,不续生
Wrong Number 关闭,不续生
Already Member 关闭,不续生
Converted / 其他正面 关闭,不续生
Step 4: "Who are you?" → 可选备注 → Done
• 保留现有 "Who are you?" 输入框(手动填姓名,无法自动化)
• 可选备注文本框 — SA 可以留一句话补充
• 点 Done → task 关闭,页面自动回到 task list
整个流程目标:< 5 秒(选结果 → 填名字 → Done)
🔧 优化 4:Suggested Action Playbook — AI 行动指南
问题:新 SA 第一天上班,遇到 cancellation 电话不知道该怎么处理。Manager 不一定在店里。现有的一句话 AI 建议("Suggest freeze option")不够 — 新人需要具体的步骤和话术。

方案:每个 task card 上增加一个 "Suggested Actions" 按钮。点击后展开一个面板,显示基于这个客户的完整行动指南 — 不是一句话,而是分步骤的 playbook。像一个有经验的 Manager 在旁边指导。
Playbook 内容结构
① 客户画像(Customer Context)
基于 contacts.customer_summary + 通话历史生成。例如:"Lisa 是 8 个月会员,上过 47 节课,最近 2 周没来上课。上次通话提到晚上时间不合适。"

② 建议步骤(Step-by-Step Actions)
根据 task type_category 和客户情况,AI 生成 3-5 个有序步骤。例如 cancellation_risk:
  Step 1: 先表达理解("I understand, schedules can be tough")
  Step 2: 提到她的成就("You've come to 47 classes — that's amazing")
  Step 3: 提供替代方案(freeze / 换时间段 / 降级计划)
  Step 4: 如果她坚持取消,问具体原因以便后续改进

③ 可用的替代方案(Available Options)
列出 SA 可以提供的选项 — freeze X 个月、换到早班、降级到 basic plan 等。这些是 OTF 通用知识,不需要从数据中来。

④ 话术示例(Example Scripts)
给出 1-2 个可以直接用的话术示例。基于分析过的成功挽留通话提炼。

⑤ 避免的雷区(Things to Avoid)
例如:"不要说 'I understand you want to cancel' — 用 'Let's see what options we have' 替代"
按 Task 类型的 Playbook 模式
Task 类型 Playbook 重点 AI 数据来源
Lead Outreach Opening 话术、问 fitness goals、推荐 intro class leads.inquiry_summary + OTF 通用知识
Lead Follow Up Reference 上次对话、解决 objections、推进到 booking calls.executive_summary + calls.objections + calls.suggested_actions
Cancellation Risk 挽留话术、替代方案(freeze/降级/换时间)、成就提醒 calls.objections + contacts.customer_summary + OTF 保留策略
Booked Not Converted 问体验感受、解答顾虑、提到优惠/推荐相同教练 contacts.customer_summary + intro class 数据
Retention / Win Back 续费提醒、回归优惠、个性化 check-in contacts.customer_summary + calls history
持续优化机制
学习成功案例:分析 close_result = 'cancel_saved' 或 'converted' 的通话,提取有效的话术和策略,融入 playbook
SA 反馈:Playbook 底部有 "Helpful / Not relevant" 按钮,帮助 AI 迭代优化
OTF 行业知识:通用的 OTF 政策(freeze 政策、升降级规则、促销活动)作为 base knowledge,不需要每次从数据中推导
设计约束
默认折叠:Playbook 默认不展开 — 老手不需要,新人点击展开
Task card 上仍保留一句话 AI 建议(给老手快速参考),Playbook 是展开后的完整版
没有 seat 系统的影响:无。Playbook 内容是基于 contact + task 生成的,不依赖谁在看
不是实时 coaching:这是打电话的准备工具,不是通话中的实时指导
🎨 视觉 Mockup — 改版后 Task 页面长什么样

💡 这些 mockup 基于实际代码数据

字段名、type_category 值、close_result 选项都来自生产环境 Vue Query 缓存。可以直接对照代码实现。

📱 Mockup 1:Task 页面 "Today" Tab
Tasks
AI-generated action items for your team
Refresh
Open 81
Closed 79
Today 12
Upcoming 8
Backlog 23
NEW LEAD Sarah Martinez +1 (914) 555-0192
New today
Web inquiry about class schedule and pricing
💡 AI: Ask about fitness goals, suggest a free intro class this week
📖 Actions
NEW LEAD James Liu +1 (914) 555-0384
New today
Inbound call asking about trial membership options
💡 AI: Mention 1-week free trial, ask about preferred class times
📖 Actions
CANCEL RISK Lisa Chen Member
1 day overdue
Called to cancel — schedule changed, can’t make evening classes
💡 AI: Suggest freeze or switch to 6:45am class. Objection: “evening doesn’t work”
📖 Actions
⚠️ 打电话前先查 MBO — 会员时长和上课记录不在 Retaintive
FOLLOW UP Mike Johnson 3rd attempt
Due today
Last call: left voicemail about Saturday class. Interested but scheduling conflict.
💡 AI: Mention weekday 6:45am option — he said early morning works better
📖 Actions
📞 4 calls💬 2 SMSPipeline: Attempted
RETENTION David Park Member · Converted
Due in 2 days
Renewal coming up. Last call was positive, asked about family plan options.
💡 AI: Follow up on family plan pricing — spouse is interested
📖 Actions
WIN BACK Amy Torres Churned
3 days overdue
Call target at convenient time to pitch promo
💡 AI: Mention spring promo — 50% off first month for returning members
📖 Actions
Scroll for 6 more tasks...
和现有页面的区别:
① Tab 从 All/Ongoing/Due Soon/Overdue → Today/Upcoming/Backlog(见优化 1 的过滤逻辑)
② 每个 card 有颜色左边框(按 type_category)+ AI 建议直接显示在 card 上
③ 每个 card 右侧有绿色 📖 Actions 按钮 → 点击展开 Playbook(见优化 4)
④ Cancel Risk card 底部有 MBO 提醒(固定文案)
⑤ Follow Up card 显示"第 X 次联系"badge + 通话/短信计数
📱 Mockup 2:Close Task 弹窗(增加 6 个新选项)
Close Task
Mike Johnson (+1 914-555-0384) · Follow Up
Who are you?
Enter your name...
Result
Positive outcomes
Converted Win-back Cancel saved Renewed Upgraded Issue resolved
Neutral / negative (NEW — 需要新增)
No answer Left voicemail Not interested Callback later Wrong number Already member
Existing neutral
Attempted Other Do not contact
Add a note (optional)...
选 "No answer" 后系统自动:创建 follow-up task,due_at = 明天
选 "Left voicemail" 后:创建 follow-up task,due_at = 后天
选 "Callback later" 后:弹出日期选择器,SA 选日期
选 "Not interested / Wrong number / Already member" 后:直接关闭,不续生
Cancel
Close Task
和现有弹窗的区别:
① 新增 6 个选项:No answer / Left voicemail / Not interested / Callback later / Wrong number / Already member
② 按类别分组:Positive / Neutral-Negative(NEW) / Existing neutral
③ 选择后显示自动后续动作提示(蓝色区域)
④ 底部显示每个选项的系统联动逻辑
关键数据:当前 79 个已关闭 task 中,76 个是系统自动关闭,仅 3 个手动关闭。说明现有选项和实际通话结果不匹配 — SA 选不到合适的 → 不关 task → 堆积。
📱 Mockup 3:Suggested Action Playbook(Cancel Risk 示例)
CANCEL RISK Lisa Chen
1 day overdue
Called to cancel — schedule changed, can't make evening classes
💡 AI: Suggest freeze or switch to 6:45am class
📖 Suggested Actions ▾
📖 Action Playbook — Cancel Risk: Lisa Chen
Customer Profile
Member for 8 months. Attended 47 classes (avg 1.4x/week). Last class: 12 days ago. Previous call: mentioned evening schedule doesn't work anymore. No prior cancel/freeze history.
Recommended Steps
1
Acknowledge + Empathize — "I totally understand, schedules change. Let me see what we can do."
2
Highlight her achievement — "You've been with us 8 months and done 47 classes — that's incredible progress."
3
Offer alternatives — She said evenings don't work. Try: "We have a 6:45am class that a lot of members love. Want to try it once before deciding?"
4
If she still wants to cancel — Offer a freeze (1-3 months) so she doesn't lose her membership. "That way you keep your spot and rate."
5
If she insists — Accept gracefully and ask what could bring her back. Log the reason for future improvement.
Options You Can Offer
Freeze (1-3 months) Switch to AM class Downgrade plan Weekend-only schedule
Avoid
Don't say "I understand you want to cancel" (confirms the decision). Instead: "Let's explore what might work for you."
Don't pressure — if she's decided, end positively so she may come back.
Was this helpful? 👍 Helpful 👎 Not relevant
设计要点:默认折叠,点击绿色按钮展开。老手只看一句话 AI 建议,新手展开看完整 playbook。内容基于 contact profile + 通话历史 + OTF 行业知识生成。随时间优化:分析成功的挽留/转化通话,提炼更好的建议。⚠️ 打电话前查 MBO 看会员详情(上课记录、会员时长不在 Retaintive)。
🗃️ 数据架构要点

Task 页面的数据来源(基于实际代码)

  • Task 字段:task_id, contact_phone, task_type(follow_up / lead_outreach), type_category(retention / cancellation_risk / lead_outreach / lead_follow_up / win_back / renewal / upgrade / booked_not_converted), status(pending / closed), priority(high / medium / low), due_at, source_type
  • Contact 字段:contact_first_name, contact_last_name, contact_lifecycle_stage(lead / member), contact_summary, contact_dnc, contact_acquired_at, last_activity_at, lead_status(new / attempted / connected / converted / trialed / neglected — 注:neglected 为 legacy 值,新系统用 Stale Contact 提示替代,不自动标记), contact_purchase_intent, contact_goal
  • Activity 字段:call_count, sms_count, first_attempted_at(speed-to-lead), first_connected_at
  • AI 建议:suggested_actions — JSON 数组,每项包含 {action, reason, priority, priorityReason}
  • 关闭字段:close_type(manual_closed / auto_closed), close_result(converted / attempted / other / cancel_saved / issue_resolved / do_not_contact), close_note, closed_by_staff_name, closed_at
  • API Summary:服务端返回 summary 对象包含 pending_count, overdue_count, due_soon_count, ongoing_count, closed_count, manual_closed_count, auto_closed_count, type_category_counts
  • 分页:Vue Query infinite query,每页 limit=20,offset 翻页

💡 关键发现:76/79 的关闭任务是系统自动关闭的

manual_closed_count = 3, auto_closed_count = 76。SA 几乎不手动关闭 task。这说明当前 Close Task 流程有问题 — 要么 SA 不知道怎么关,要么选项不匹配实际结果,要么流程太麻烦。新增 6 个常用结果选项可以显著提高手动关闭率。

⚠️ 需要确认的依赖

Backlog 降级阈值:Lead 7 天、Cancel/Retention 14 天是建议值。需要 Oliver 和 Manager 确认具体天数。

Callback Later 日期选择器:是用日历控件(更精确)还是快捷按钮(明天 / 后天 / 下周一 / 自定义)?建议用快捷按钮 + 自定义选项,减少 SA 操作步骤。

Task 分配逻辑:见上方「全局限制:没有 Seat 系统」模块。所有人看同一个列表,先到先做。