Amazon Operations Automation
Amazon 补货审批工作流
把补货从一串依赖经验的跨系统操作,重构为带人工决策点、原子交付和回读校验的六阶段工作流。
Playwright · Python · openpyxl · YAML
打开演示这是一套围绕补货业务开发的自动化工作流。它从上游系统取数开始,到审批表和发货表成对生成结束;重点不是某张 Excel,而是一条业务链路怎样变得可检查。
这篇案例沿着输入、确认、规则、输出和校验展开,重点说明一条真实运营流程怎样被拆成可以运行、检查和持续维护的系统。
我的处理顺序是先观察人工流程,再区分机械操作与业务判断,随后为每一段定义输入、输出和失败条件。只有边界稳定之后,才选择 Playwright 负责浏览器取数、Python 负责数据处理、YAML 承接模板映射;技术栈服务于流程模型,而不是反过来决定流程。
最重要的设计,不是自动,而是中途停一下
候选范围生成后,流程故意暂停。补哪些商品仍然是运营判断,自动化只能把库存、建议量和异常整理清楚,不能替人决定本次业务范围。
这个暂停点让程序承担重复劳动,也让责任边界保持清晰:输入由工具整理,范围由人确认,输出再由工具执行和验证。
暂停发生在正式文件写入之前,而不是生成后再让人删除错误行。前者让人的决定成为明确输入,后者则会让审批表和发货表在人工修改过程中产生不同版本。确认快照还会记录本批范围与时间,使后续结果能够说明自己基于哪次决定生成。
- 没有匹配到目标站点时直接停止,不回退到其他市场。
- SKU 缺失或重复时阻断,不用模糊匹配猜测。
- 数量只接受正整数,异常文本不会静默转成 0。
- 候选预览不产生可提交文件,确认后才进入写入阶段。
- 确认前可以重新导出或调整筛选;确认后若范围改变,必须开启新批次而不是在结果文件里手改。
失败本身也要是一份结果
网页变化、字段缺失、文件损坏或其中一份模板写入失败,都不应该只留下一个模糊报错。流程会标明失败阶段、缺失项和本次输出状态,并清理尚未通过校验的半成品。
运行报告聚焦失败阶段、输入范围和输出状态,让后续排查可以从明确的节点开始。对业务工具而言,可恢复和可解释与成功运行同样重要。
错误信息按照“发生在哪一阶段、涉及哪些输入、是否产生临时文件、能否安全重试”组织。这样操作者不需要阅读代码堆栈,也能判断应该重新登录、修复源数据、更新映射,还是重新确认业务范围。
| 失败场景 | 处理方式 |
|---|---|
| ERP 登录或权限变化 | 停止导出,留下阶段诊断并等待权限恢复。 |
| 核心字段映射缺失 | 阻断生成;非核心字段只允许明确告警。 |
| 目标文件已经存在 | 拒绝覆盖已经进入人工流程的版本。 |
| 两份输出不一致 | 本次结果整体失败,不留下单边交付物。 |
先定义数据契约,再写任何自动化代码
上游导出、库存文件和目标模板来自不同系统,它们对同一概念可能使用不同列名、格式和空值表达。如果直接在脚本中边读边猜,代码会把偶然出现的表格样式误当成业务规则。
因此每个阶段都先定义最小输入契约:哪些字段必须存在、什么值可以为空、SKU 如何唯一、站点如何识别、数量允许什么类型。字段别名可以通过映射兼容,但核心字段缺失必须中止。
标准化结果不会只保留清洗后的值,还保留来源文件、工作表、原始行号和原始文本。后续如果某个数量被拒绝,报告可以指出它来自哪一格,而不是只告诉使用者“转换失败”。这条追溯链也是人工复核能够信任自动化的基础。
| 契约层 | 必须回答的问题 |
|---|---|
| 文件 | 是否为最新有效版本,格式是否可读,是否保留原文件。 |
| 范围 | 本批处理哪个站点、哪些 SPU,谁确认了这个范围。 |
| 标识 | SKU 是否唯一,缺失和重复怎样阻断。 |
| 数量 | 是否为正整数,空值、文本和异常单位怎样处理。 |
| 输出 | 两份模板是否来自同一批输入并通过同一轮校验。 |
两份 Excel 不是两个结果,而是一个事务
审批表和发货表会进入同一条业务链,所以不能允许一份成功、一份失败。流程先分别写入临时文件,随后统一回读并核对 SKU 范围、行数和数量;只有两份都通过,才把它们作为本次正式结果交付。
这种处理借用了事务思维:生成只是中间状态,校验通过才算提交。任何一边失败,另一边也不会被当作可用结果留下,从源头避免版本错配和单边流转。
文件名也在提交阶段统一确定,并避免覆盖已经进入人工审批的版本。重跑同一批次时,系统优先识别已有成功结果或明确创建新版本,而不是悄悄覆盖,从而保留业务流程需要的版本边界。
preview -> human_confirm -> generate_temp_pairvalidate(approval) && validate(shipment)same_scope && same_total -> commit_pairotherwise -> report_failure + discard_partial把会变化的模板,与不能变化的业务规则分开
这里最核心的方法不是“自动化更多”,而是识别变化频率:界面和模板会变,业务不变量相对稳定。将两者分层,才让这条流程可以持续维护,而不是一次性脚本。
每次变化都先判断属于哪一层:如果只是模板换列,应修改映射并重新运行写入测试;如果业务含义改变,例如数量允许规则变化,则需要修改校验器并重新确认影响范围。通过这种分类,维护动作不会因为一个 Excel 改版而扩散到整条链路。
- 列名、工作表名称和写入位置放入 YAML 映射,模板更新时只调整配置。
- SKU 唯一性、站点隔离、数量类型和双表一致性保留在校验逻辑中。
- 网页选择器与导出步骤独立封装,上游界面变化不会直接污染 Excel 规则。
- 每个阶段留下输入摘要与结果状态,便于判断问题来自网页、数据、映射还是校验。
如何判断这条工作流真的可靠,而不只是能跑通一次
验证被分成阶段级和交付级两层。阶段级验证证明每个转换没有丢失关键字段,交付级验证证明两份最终文件共同满足业务约束。测试样本既包含正常批次,也包含站点混入、重复 SKU、缺失数量、模板缺列和单边写入失败。
我关注的不是只得到绿色成功,而是每个失败样本是否在正确阶段停止、是否没有留下误导性的正式文件、报告是否足以指导下一步。可靠性来自可预测的失败行为,而不是假设所有输入都干净。
| 验证层 | 检查内容 |
|---|---|
| 输入 | 文件版本、必需字段、站点、唯一键与数量类型。 |
| 转换 | 标准化前后行数、来源追踪和字段语义保持一致。 |
| 决策 | 最终范围严格等于人工确认快照。 |
| 输出 | 模板结构、SKU 集合、必填字段和数量均可回读。 |
| 整体 | 审批表与发货表属于同一批次,并共同成功或共同失败。 |
Lab 如何呈现这条工作流
Lab 里预设三份示例工作簿,用较慢的动画依次展示最新文件定位、字段统一、人工确认与成对校验,最后提供一份可下载的 Excel 结果。
演示保留了这条工作流最关键的停顿、判断与回读检查,让整套处理方式可以被完整理解。
公开演示不会连接真实运营系统,也不会处理访客文件。它用合成数据重现相同的阶段边界、阻断条件和双表一致性检查,展示的是方法与控制点,而不是伪装成真实生产执行。
Related Lab
查看公开流程演示
载入预设样本,按关键步骤运行,并下载对应的 Sample 结果。
打开演示