Cadence(草稿)

状态:草稿,未定稿。 本文档是产品讨论阶段的设计草稿,用于收集反馈,不代表已排期或已对齐后端。落地前需要和 tasks-schema.md 的 owner 确认字段和事件模型。


一、定位

Cadence 不是 Task 的替代品,是 Task 数据的第二种视图。

现在 Tasks 页面(tasks-overview.md)是清单:按 Overdue / 优先级 / 截止时间排序的卡片列表。这个视图回答"接下来该做哪个"。

Cadence 回答另一个问题——"我今天一整天的时间是怎么被任务占满的":一列代表一天,左侧是时:分刻度,有一条随当前时间移动的"现在"线,任务按 dueAt 摆在时间轴对应的位置上。延后一个任务,它在时间轴上的方块会挪到新的时间点,而不是从列表里消失又在某处重新出现。

两个视图共享同一份 tasks 数据,员工可以切换着用,不是两套系统。


二、复用已有能力,不新建数据模型

写这份草稿前翻了 tasks-schema.md07-task-playbook.md,发现 Cadence 想要的东西,后端已经把数据模型铺好了大半,只是还没有对应的前端交互:

Cadence 需要的能力对应的已有设计Cadence 要新加的
延后任务、约定下次处理时间task_progress_events 表已有 progressType = follow_up_scheduled / callback_requested,配 nextDueAt 字段(append-only,符合 system-worldview.md "绝不静默丢弃" 的规矩)现有机制是自由选时间;Cadence 要加一组快捷预设(如 15 分钟 / 30 分钟),减少操作步骤
打开任务自动看到话术task_playbooks 表 + prompt 07-task-playbook.md 已经会生成 primaryAction.scriptrecommendedStepsoptionsYouCanOfferavoidcloseGuidance,文档里管这个叫 Playbook tabCadence 里点开时间轴上的任务块,直接展示这个 Playbook,不需要员工再去别的地方找
打开任务自动看到最近通话记录calls 表按 contactPhone 能查到历史通话,task_progress_events.callId 也能关联到具体某通电话确认转录文本(transcript)实际存储位置和读取方式——calls 表目前看到的是录音元数据(recordingId / recordingContentUri),转录内容具体挂在哪张表 / 哪个服务,需要找后端确认,本稿先不假设
一列一天的时间轴 + "现在"进度线全新 UI,Tasks 列表里没有这个东西

结论:Cadence 主要是一层新的前端交互,后端数据模型基本不用重新设计,除了下面这条快捷延后的新事件。


三、核心交互

3.1 时间线视图

一列 = 一天,左侧是小时:分钟刻度。任务按 dueAt 在对应时间点显示为一个方块,方块颜色跟 Tasks 列表现有的 priority(High / Medium / Low)保持一致的视觉语义,不额外发明新的颜色体系。

一条"现在"线随实际时间移动,直观显示"已经过去多少、还剩多少"。

没有设计的部分(需要在正式定稿前决定):同一个 15 分钟格子里堆了多个任务怎么显示。清单视图不怕这个(往下排队就行),时间轴格子会挤。建议:超过一定数量(比如 3-4 个)自动折叠成一个"这个时段有 N 条"的堆叠块,点开再展开成小清单——但这只是本稿的建议,不是定论。

3.2 延后(复用 + 加快捷预设)

延后本质上就是写一条 task_progress_eventsprogressType = follow_up_schedulednextDueAt 设为新时间。这个机制已经存在,Cadence 要加的是操作层面的快捷预设按钮(比如 15 分钟 / 30 分钟 / 自定义),而不是每次都要打开一个日期时间选择器——目的是让"现在没空、待会再说"这个动作足够快,配合 Lead 场景下"响应速度直接决定转化率"的现实(tasks-overview.md §3.1 已经引用过延迟 5 分钟转化率下降 8 倍的结论)。

任务在时间轴上的方块跟着 dueAt/nextDueAt 一起挪到新位置,视觉上直接体现"延后"这个动作,不需要员工去别处确认。

3.3 打开任务 → 自动带出 Playbook(话术)

点开时间轴上的任务块,直接展示该任务当前的 task_playbooks.contentprimaryAction.script / recommendedSteps / optionsYouCanOffer / avoid / closeGuidance),不需要员工切换页面查找。这一步是纯展示,不产生新的数据写入。

3.4 打开任务 → 自动带出最近通话记录

同一步操作里,带出该客户最近的通话记录(至少是通话摘要/结果,转录文本视§二里提到的存储位置确认结果决定展示深度)。目的是员工回拨前不用现问"上次聊到哪了"。


四、未决问题(标 DEFERRED)

  • 共享队列 vs 按员工分配:现在 tasks 表没有"预先指派给谁"这个字段,是所有员工共享同一份队列,谁有空谁处理。用户提到未来会给每个员工分配自己的号码——号码分配后,"这个任务该由谁处理"可能会有天然的归属(打进/打出这个号的任务归这个员工)。Cadence 的时间轴现在先按"店的共享时间轴"设计,员工号分配方案定下来后再决定要不要拆成"每个员工自己的时间轴"。恢复条件:员工专属号码功能排期后,重新评估这条。
  • 提醒/唤醒机制不在本稿范围:之前讨论过的"打电话通知员工、按键确认/延后"这类主动提醒机制,属于另一个子系统(通知/唤醒),需要单独立项设计,不在 Cadence 这份视图层草稿里。Cadence 解决的是"打开系统之后看到什么、怎么操作",不解决"怎么让员工想起来打开系统"。
  • 同时段任务堆叠的显示方式:见 §3.1,本稿只给了一个建议方向,没有定稿。

五、与其他文档的关系

文档关系
tasks-schema.mdCadence 复用的底层数据模型(task_progress_eventstask_playbooks
07-task-playbook.mdCadence 里"自动带出话术"直接读这个 prompt 的输出
tasks-overview.md(v1)Task 清单视图的业务规则,Cadence 是它的时间线视图版本,数据同源
system-worldview.md"绝不静默丢弃"规矩——延后动作必须走 append-only 的 progress event,不能直接覆盖 dueAt 不留痕