2024年12月16日·阅读约1分钟

能降低放弃率的保存并恢复多步向导模式

支持草稿、部分校验和可恢复链接的保存并恢复多步向导,让用户可以稍后继续而不丢失进度。

能降低放弃率的保存并恢复多步向导模式

为什么多步向导需要保存并恢复

多步向导把一张长表单拆成更小的步骤,比如个人信息、账单、偏好和审核。当任务较长、数据复杂或用户需要按顺序完成时,这种做法很有用。做得好会让流程感觉比那种永无止境的单页轻松许多。

但人们依然会中途离开,因为生活会打断他们。他们可能需要还未准备的文件、在等经理批准、网络断开,或从手机切换到笔记本。有些人离开是因为向导让人感觉有风险:一次失误或刷新可能会抹掉所有内容。

保存并恢复改变了这种局面。用户可以放心地暂停、稍后回来,并从正确的步骤继续,且进度仍在。团队也能从中受益:弃单减少、支持对话更清晰(“打开你的草稿继续”),并且更容易看出用户在哪些地方卡住。

为了确保进度不会丢失(甚至在跨设备场景下),大多数向导需要几个基本功能:

  • 在用户输入时自动保存草稿,或至少在用户进入下一步时保存。
  • 允许部分完成,不因后续步骤的字段阻塞整个流程。
  • 让用户能方便地再次找到草稿(账户区域、邮件提醒或恢复令牌)。
  • 清晰显示进度和缺失项,不要指责用户。

用通俗语言说的草稿与状态

把保存并恢复的向导设计成两类记录会更容易:草稿和已提交记录。

草稿是临时且可变的。已提交记录是正式的,应遵循更严格的规则。

“状态”只是描述当前记录所处情况的标签。常见状态包括 draft、submitted、approved、rejected 和 archived。如果只需两种状态,就从 draft 和 submitted 开始。把这条线划清楚会让报表、权限和支持简单很多。

在每个步骤保存什么,应取决于你以后恢复时真正需要的内容。只保存该步骤的用户输入,以及诸如归属者和最后更新时间之类的基础元数据。避免“以防万一”保存敏感额外信息(例如完整的卡片数据、尚未要求的文件或将来可能暴露给用户的内部备注)。

进度跟踪应当枯燥且明确。两个字段覆盖大部分场景:

  • current_step(用户恢复时落到哪一步)
  • completed_steps(已完成了哪些步骤)

有的团队把 completed_steps 存为步骤 ID 列表,也有人用简单的计数。

一个实用的心智模型:

  • 草稿数据:到目前为止的答案(可能不完整)
  • 状态:draft vs submitted
  • 进度:当前步骤以及已完成的步骤
  • 所有权:用户或账户 ID
  • 时间戳:created_atupdated_atsubmitted_at

何时创建草稿?

如果流程允许匿名或你需要可恢复链接,那么在向导打开时就创建草稿,以便有一个 ID 去保存。如果用户已登录且你想减少空草稿,则在第一次真正的“下一步”或“保存”操作时创建草稿。

适合草稿的数据模型

一个好的草稿模型要做到两件事:能保存部分输入而不出错,并让最终提交感觉可预期。如果数据模型很混乱,即便 UI 做得再好,向导也会让人觉得不可靠。

方案 A:一条记录不断演进(状态 + current_step)

这是最简单的方法。把所有内容存到一张表(或一个主体实体),增加诸如 status(draft/submitted)和 current_step(1-6)等字段。每次保存都更新同一条记录。

当表单能干净地映射为一个“事物”(一个申请、一个订单、一个配置文件)时,这种方式最有效。

方案 B:分离 Draft 和 Final 记录

将草稿数据保存在 Draft 表中,用于存放杂乱、部分完成的数据;在提交时从草稿创建 Final 表中的干净、验证过的数据,然后锁定或归档草稿。

这个模式在最终数据需要严格(涉及计费、合规、报表)但草稿可以灵活时非常有用。它也让“删除草稿”更安全,因为不会影响已提交的记录。

方案 C:快照或事件(审计友好)

如果你需要知道谁在何时更改了什么,就要保存历史。有两种常见方式:

  • 快照:每次保存时存一份草稿数据的完整副本(便于还原)。
  • 事件:保存小的“变更”记录(更节省空间,但阅读和还原较难)。

当涉及审批、争议或受监管的数据时使用此类方案。

可重复的区块(比如行项或附件)通常是草稿处最容易出问题的地方。把它们建模为关联到草稿的子表(后来再关联到最终记录)。例如,入职向导可能有多个“团队成员”和“文档”。分别保存每项,避免把数组塞到一个字段里,除非你确实不需要查询、排序或单项校验。

在不让用户受挫的情况下做部分校验

部分校验是让向导感觉像助力而不是障碍的关键。允许用户在已完成足够内容时前进,但不要让明显错误的输入悄悄进入草稿。

大多数向导需要两类校验:

  • 步骤级校验:检查当前步骤所需的内容。
  • 最终校验:在提交时跨步骤检查所有内容。

为了在允许不完整输入的同时避免保存坏数据,要把“缺失”和“无效”分开。草稿里缺失项可以接受;而无效项应被阻止或明确标注,因为它会在后续造成混淆。

举例:空的电话号码在草稿中可能没问题,但包含字母的电话号码应被拒绝或明确标注。

何时立即校验,何时延后校验:

  • 立即校验:格式和基本解析(邮箱形态、日期格式、数字范围、本步骤必填字段)。
  • 延后校验:依赖其他步骤的业务规则(信用额度取决于公司规模、运输选项取决于地址、用户名唯一性检查)。
  • 异步校验:需调用外部系统的检查(纳税号验证、支付方式授权)。

错误应具体且局部。不要只说“修复错误以继续”,而应指向字段、解释问题并说明如何修复。如果某步只有警告(非错误),允许用户继续,但保留明显的“需要注意”徽章。

一个实用模式是让服务器返回结构化响应,包含:

  • 阻塞性错误(必须修复才能继续)
  • 警告(可继续,但要突出显示)
  • 字段路径(让 UI 聚焦到正确的输入)
  • 一条简短的摘要消息(用于步骤顶部)

逐步实现保存并恢复流程

将草稿与已提交分离
以可视化方式建模草稿和已提交状态,然后在不重写代码的情况下演进流程。
开始构建

一个好的保存并恢复向导从第一屏就开始工作。不要等到第 3 步才创建记录。用户一旦输入了任何有意义的内容,你就希望有一条草稿可以不断更新。

可复制的实用流程

  1. 创建草稿:在向导开始或第一次真实操作时创建草稿。保存最小信息:所有者(用户 ID 或邮箱)、status = draft,以及第 1 步的字段(可不完整)。
  2. 每步保存,长页面自动保存:在“下一步”时持久化步骤负载。对于长页面,在失焦或短暂停顿后自动保存,避免刷新抹掉进度。
  3. 恢复时加载当前草稿:按 ID(和所有者)获取草稿并预填 UI,让用户从离开的地方继续。
  4. 安全地处理后退、前进和跳过:保存最后完成的步骤和允许的路径。如果第 4 步依赖于第 2 步,则即便 UI 试图跳过也不要让用户越过必需输入。
  5. 用一次提交完成:在提交时运行完整校验,锁定记录,然后设置 status = submitted

不惩罚用户的校验方式

在起草期间,仅校验当前步骤所需的内容。用诸如“缺失”或“需复查”的清晰标志保存部分数据,而不要把所有东西都当硬错误处理。

可恢复链接:它们如何工作以及何时使用

减少入职流程中的流失
将入职或结账的放弃转为可恢复的草稿,便于支持团队参考。
试用

可恢复链接是携带一次性(或短期)令牌的 URL。用户打开后,应用会查找该令牌对应的草稿、确认其仍有效,然后把用户带回正确的步骤。对于在设备间切换的场景,这能让体验更顺畅。

典型流程:创建草稿 -> 生成与草稿绑定的令牌 -> 存储令牌的哈希副本 -> 展示或发送链接 -> 兑换令牌以恢复 -> 轮换或失效令牌。

可靠的令牌规则

事先决定几条规则,这样支持就不会到处猜:

  • 生命周期:按敏感度和向导通常所需时间定为小时或天。
  • 轮换:在每次成功恢复后发一个新令牌(这是个好默认),或保留一个令牌直到提交。
  • 步骤定位:存储最后完成的步骤以便链接能恢复到正确的页面。
  • 传递方式:同时支持“复制链接”和“发送邮件”,便于用户在手机与桌面间切换。

一个实用示例:用户在手机上开始了一份申请,点击“把恢复链接发到邮箱”,然后在家用笔记本继续。如果在每次恢复后轮换令牌,旧链接在首次使用后就失效,从而降低意外分享的风险。

草稿何时被提交或过期

要明确说明情况。

  • 如果草稿已被提交,打开只读确认页面并提供“重新开始新草稿”的选项。
  • 如果草稿已过期,用一句话说明发生了什么,并提供清晰的“重新开始”操作。

避免默默创建新草稿。用户可能以为原来的数据还在。

草稿与恢复令牌的安全与隐私

只有当用户信任保存功能时它才有用。

绝不要把个人或业务数据放在 URL 中。链接里只应带随机令牌,单独看不具意义。

把恢复令牌当作密码来对待。生成足够随机、便于粘贴的短令牌,并在数据库中只存储其哈希。哈希有助于在日志或备份泄露时降低损害。

可重用令牌很方便,但风险更高。一次性令牌更安全,因为首次恢复后即失效,但如果用户重复点击旧邮件可能会感到困扰。一个折衷是短期可重用令牌(几小时或几天)加上“重新发送链接”选项。

大多数产品的合理默认设置:

  • 存储令牌哈希、创建时间、过期时间和最后使用时间
  • 自动过期令牌,并定期删除旧草稿
  • 恢复后轮换令牌(即使草稿保持不变)
  • 记录恢复尝试(成功和失败)以供调查

访问控制取决于是否要求用户登录。

如果向导仅对已登录用户开放,令牌应为可选。恢复也应要求账户会话,并且草稿必须归该用户(或其组织)所有,以防“转发链接”问题。

如果支持匿名恢复,则限制草稿能包含的内容。避免存储完整的支付信息、政府 ID 或任何若被暴露会造成伤害的内容。考虑在静态存储中对敏感字段加密,并在恢复时只展示掩码摘要。

还要加上基本的滥用防护。对令牌检查和恢复端点做速率限制,连续失败后锁定令牌。

降低放弃率的 UI 模式

将自动保存设为默认
在步骤切换时添加自动保存,避免刷新或超时擦除进度。
试用 AppMaster

保存并恢复最常在 UI 层面失败,而不是后端。人们离开时通常是因为感到迷茫、不确定接下来会怎样或担心工作会丢失。

从清晰的“所在位置”开始。显示带有用户可识别名称的进度指示(例如“公司信息”或“支付方式”,而不是内部标签)。保持可见,并允许用户查看已完成的步骤而不惩罚他们。

让保存感觉真实但不过分喧嚣。一个靠近主要操作的小“已保存”状态加上“最后保存于 2 分钟前”的时间戳可以建立信任。如果保存失败,直接说明并告诉用户下一步怎么做。

提供简单退出选项。“保存并稍后完成”应是常态。如果用户关闭标签页,记住他们的位置,并在返回时展示简单的恢复界面。

移动端的放弃率通常更高,所以要为小屏幕做优化。偏好短小的步骤、较少字段、大的触控目标以及与字段类型匹配的键盘(邮箱、数字、日期)。

一个快速的 UI 检查清单:

  • 使用用户能识别的步骤标题并保持一致
  • 在主按钮附近显示已保存状态和最后保存时间
  • 在“下一步”旁显著提供“稍后完成”选项,而不是藏在菜单里
  • 每一步聚焦于一个决策
  • 允许用户在不阻塞整个步骤的情况下内联修复错误

常见错误及如何避免

把向导当成期末考试是增加放弃率的最快方法。如果因第 6 步未完成就阻塞第 1 步,用户会退出。保存并恢复的向导应让人感到宽容:允许用户前进,频繁保存。

校验方面的错误

过早过度校验是常见陷阱。做步骤级检查(当前步骤是否可用),把严格的提交级检查留到最终审核。

如果需要保护措施但不想阻塞,用软警告(“你可以稍后完成”)并突出说明最终会要求哪些项。

数据与工作流方面的错误

许多团队太晚创建草稿。如果只在第 3 步后才创建草稿,早期数据很脆弱:刷新、标签崩溃或登录超时都可能抹掉它。在有稳定身份(会话或邮箱)时尽早创建草稿,并在每次步骤切换时保存。

还要明确所有权规则。决定谁可以恢复并编辑草稿:仅原始用户、同一组织的任意人,或特定被邀请的队友。把规则在 UI 中可见。

其他需要规划的陷阱:

  • 重复提交:使最终提交具有幂等性(同一请求两次不应创建两条记录)
  • 步骤顺序变更:存储向导版本并在可能时把旧草稿映射到新步骤
  • 恢复时数据陈旧:在最终提交时重新检查关键字段(例如套餐价格)
  • 忘记清理:过期旧草稿和令牌,并按计划删除不需要的数据
  • 无审计轨迹:记录状态变更,便于支持帮助卡住的用户

上线前的快速检查清单

安全添加可恢复链接
创建安全的恢复令牌并将用户带回正确的步骤。
立即开始

上线前检查那些驱动放弃和支持工单的基础项。

功能性检查

  • 恢复在设备和浏览器间可用。
  • 即便向导未完整,所有步骤都能保存。
  • 草稿能在刷新、超时和标签页关闭后存活。
  • 有明确的最终审核步骤。
  • 能看到用户在哪里放弃(步骤完成率、每步耗时、常见校验错误)。

安全检查

可恢复链接是临时密钥。让它们私密、限时,并且只在用户有意分享时才安全。

一个实用规则:如果有人把邮件转发给了错误的人,那个人不应看到敏感草稿数据。对高风险步骤要求重新认证并使用短期过期策略。

现实示例:用 6 步完成新客户入职

一个向导适配所有设备
从一个项目将相同的多步流程同时发布到 Web 和原生移动端。
构建应用

想象一个 B2B 入职向导有六步:公司信息、联系人、账单、合规文件、产品设置和最终审核。目标是在不强制用户一次完成所有步骤的情况下建立一个可用账户。

棘手部分是第 4 步(合规文件)。有些客户尚未准备好文件,有些需要经理批准上传的内容。所以向导在每步后保存草稿,并保持诸如 Draft、Waiting for documents、Waiting for approval 或 Submitted 之类的清晰状态。

一个常见的放弃点:用户完成第 3 步(账单)后离开。返回时他们不应面对空表单。他们应落在一个“恢复入职”页面,显示进度(已完成 3/6)、缺失项(文件),并有一个按钮从第 4 步继续。这就是保存并恢复的核心:把中途离开视为正常,而不是失败。

如果用户来自邮件邀请或需要切换设备,可恢复链接可以把他们带回精确的草稿与步骤,但需进行所需的检查(登录、一次性代码或两者)。

在团队端,支持和销售可以在管理视图看到草稿进度:每位客户到达了哪一步、草稿闲置多久以及是什么阻碍了提交。

下一步:迭代发布并保持可维护性

先从小处做起。挑一个已有明显放弃问题的向导(结账、入职、申请),先加草稿功能。一个基本的“保存”加上步骤切换时的自动保存,通常比彻底改版更快地降低弃单率。

在改动前后都做测量。跟踪逐步完成率、完成所需时间以及有多少人在离开后恢复。还要关注支持工单和“卡在某两步之间徘徊”或反复校验失败的事件。

假设向导会变化。新步骤会加入、问题会重命名、规则会更严格。避免破坏旧草稿的最简单办法是给保存的内容加版本。每个草稿上存一个 wizard_version,并保留小的迁移规则以便旧草稿仍能打开。

如果你希望在不从头编码整个栈的情况下构建保存并恢复的向导,AppMaster (appmaster.io) 是一个选项。你可以在数据库中建模一个 Draft 实体,把逐步逻辑作为业务流程构建,并把同一流程发布到 Web 和原生移动应用。

常见问题

When do I actually need save-and-resume in a multi-step wizard?

Save-and-resume 在流程较长或容易被打断的情况下降低了用户感到的风险。如果通话断开、标签页刷新,或他们需要某个文件,用户可以稍后回来而不会丢失工作,这通常能减少放弃率和支持工单。

What’s the simplest way to think about drafts vs submitted records?

从两个状态开始思考:draftsubmitted。草稿是灵活且可不完整的;提交后的记录是“正式”的,应该被锁定并遵循更严格的规则、权限和报表要求。

When should my backend create the draft record?

在你有稳定的保存目标时就创建它。如果流程允许匿名或你需要可恢复链接,在向导打开时就创建草稿;如果用户已登录且想减少空草稿,可以在第一次真实保存或点击“下一步”时创建。

How often should a wizard save draft data?

默认在每次步骤切换时保存,对于有大量输入的步骤再加上自动保存。目标是使刷新或短暂断连不会抹掉进度,但也不要在每次按键时过度打扰服务器。

What data should I store in the draft, and what should I avoid?

存足以可靠恢复 UI 的数据:已完成步骤的字段、所有权信息和时间戳。避免存储不需要恢复的敏感数据,因为草稿通常保留时间更长且访问更加随意。

How do I validate partial data without blocking users too early?

在起草时使用步骤级校验,提交时做完整校验。草稿中允许“缺失”项存在,但对明显格式错误(例如格式不对的邮箱)应立即提示或拒绝,以免把混乱带到后续步骤。

Should I keep drafts and final submissions in the same table or separate ones?

当向导干净地映射到一个“事物”时可以用一个不断演进的记录。提交时需要干净用于计费、合规或报表时,则用分离的 Draft 和 Final 表会更好,因为这能把杂乱数据与正式表分开。

How do resumable links work without leaking private information?

可恢复链接里只应包含随机令牌,而不应带入个人数据。服务器端仅存储令牌的哈希,设置过期时间,并考虑在每次成功恢复后轮换令牌,以降低意外分享的影响。

What UI details make save-and-resume feel trustworthy?

展示清晰的进度指示和简洁可信的保存状态(例如带时间戳的“已保存”)。将“稍后完成”作为常见操作,并在保存失败时直接告知用户下一步该怎么做,避免他们误以为数据被安全保存。

How can I build a save-and-resume wizard in AppMaster without writing everything from scratch?

在 AppMaster 中建一个 Draft 实体,存储 statuscurrent_step 和时间戳,然后将保存/恢复逻辑实现为后端工作流,这样每一步都能可预测地持久化。在 AppMaster 中,你可以可视化建模草稿数据、用业务流程编排步骤逻辑,并把相同的向导同时发布到 Web 和原生移动端,而无需手写完整堆栈。

容易上手
创造一些 惊人的东西

使用免费计划试用 AppMaster。
准备就绪后,您可以选择合适的订阅。

开始吧
能降低放弃率的保存并恢复多步向导模式 | AppMaster