三个月前,一位做电商运营的朋友给我看她的“得意之作”:客户在页面提交表单,信息自动进入表格,按地区打标签,同步到对应的群,同时给负责人生成一条待办。她当场演示了一遍,三十秒走完全程。上周她来问,为什么有一批客户一直没人跟进。查下来,流程在中间某一步就断了,但没有任何人收到提示。
这类事故在自动化工作流里太常见了。搭的时候顺滑,跑起来也顺滑,出问题的时候同样顺滑——顺滑到没有声音。
它坏掉的方式,和人不一样
人忘记一件事,会隐约不安;程序不会。一个节点失败、一次凭证过期、一个字段从“文本”变成“数字”,流程就停在某个中途状态。表单进了一半,通知发了一半。系统里没有“半成品”这个状态,于是它既不算成功,也没进失败列表。
- 凭证到期,调用被拒,日志里只留下一行状态码;
- 上游改了字段名,下游拿到的空值被当成“无内容”直接跳过;
- 网络抖动触发重试,同一条记录生成了两条待办。
这几种看着差别很大,本质是一回事:流程没有为“中途”设计出口。
先问一句“跑两次会怎样”
搭流程时,多数人想的是正常路径:输入什么、走到哪、输出什么。更值得先想的是异常路径。最省事的一个自检问题是:这段逻辑重复执行两遍,会发生什么?如果答案是“会多发一条消息”或“会重复扣一次额度”,那就说明它需要一层去重。
常见的做法不复杂:用业务主键(订单号、表单编号这类天然唯一的东西)做幂等判断,把“是否已执行”落到一个能查的地方,而不是只存在流程的内存里;失败的重试要有上限和间隔,超过就停下来,转进一个可人工处理的队列,而不是原地重试到天亮。这些机制谈不上先进,只是把“可能重复”和“可能卡住”当成设计前提而非意外。
得有人对这条流程负责
自动化工作流不是搭完就消失的东西,它更像一台需要定期看一眼的机器。谁负责?看哪个指标?多久看一次?这些问题在搭建阶段往往被跳过,因为那时候一切正常。
一个可行的思路是把“沉默”本身变成信号:约定一个预期触发量,明显低于这个水平就提醒;关键节点失败时推送到具体的人,而不是一个谁都不看的公共频道;每周扫一眼失败队列。不需要建一套完整监控,只要别让流程只在坏掉那天才被想起来。
有些步骤不值得自动
反过来说,也不是每一步都该交给机器。低频、例外多、判断成分重的环节,自动化的收益常常低于维护成本。一条投诉该走补偿还是该走解释,这类决定落在人身上更合适。它在自动化工作流里的位置,通常是“提醒某人处理”,而不是“替某人决定”。
边界感比覆盖面重要。一条只覆盖常规路径、但异常能稳稳落到人手上的流程,往往比一条宣称端到端、坏在哪里都说不清的流程更让人放心。
我那位朋友最后做了件很小的事:给流程加了一份“每日未完成清单”,早上九点发给她自己。不是技术升级,只是把沉默变成了可见。她说现在反而敢让它多跑几步了。