Files
gyxx-flow/config/workflows.json

2269 lines
82 KiB
JSON

{
"schema_version": 3,
"workflows": [
{
"id": "content.metrics.daily",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_collaborators",
"name": "采集合作达人指标",
"description": "按每日范围并行抓取合作达人在 B站、小红书蒲公英和星图的曝光等指标,星图未命中的任务再用抖店达人广场补采;05:00 仅补 01:00 未完成的任务。",
"data_flow": {
"sources": [
{
"system": "飞书",
"label": "合作达人及内容清单"
},
{
"system": "内容平台",
"label": "B站、小红书蒲公英与星图/抖店补采指标"
}
],
"processing": [
"按业务日期拆分平台采集任务",
"并行抓取合作内容曝光与互动指标"
],
"destinations": [
{
"system": "本地采集产物",
"label": "合作达人多平台指标结果"
}
]
},
"entry": "run_all.py",
"args": [
"--daily-scope"
],
"replay_policy": "repeatable"
},
{
"id": "refresh_self_mapping",
"name": "刷新自营款式映射",
"description": "从飞书索引刷新自营账号、款式与多维表映射,供后续自营采集准确定位目标记录;账号暂时失效时仅暂停自营采集,不移除工作流步骤。",
"data_flow": {
"sources": [
{
"system": "飞书",
"label": "自营内容索引、账号与款式配置"
}
],
"processing": [
"刷新自营账号、款式和多维表对应关系"
],
"destinations": [
{
"system": "本地映射",
"label": "自营账号、款式与目标表索引"
}
]
},
"entry": "data/tools/refresh_self_mapping.py",
"depends_on": [
"collect_collaborators"
],
"run_after_failure": true,
"replay_policy": "repeatable"
},
{
"id": "collect_self_bilibili",
"name": "采集自营 B站指标",
"description": "读取自营映射中的 B站笔记链接,通过公开 API 获取播放量和发布时间并回填对应飞书表。",
"data_flow": {
"sources": [
{
"system": "本地映射",
"label": "自营 B站笔记链接"
},
{
"system": "B站公开 API",
"label": "播放量与发布时间"
}
],
"processing": [
"按映射定位自营笔记并读取公开指标"
],
"destinations": [
{
"system": "飞书",
"label": "自营 B站内容指标表"
},
{
"system": "本地采集产物",
"label": "B站自营指标结果"
}
]
},
"entry": "self_bilibili_scraper.py",
"depends_on": [
"refresh_self_mapping"
],
"run_after_failure": true,
"replay_policy": "repeatable"
},
{
"id": "collect_self_douyin",
"name": "采集自营抖音指标",
"description": "使用蝉妈妈新账号登录态导出自营抖音视频数据,解析曝光指标并回填飞书自营表。",
"data_flow": {
"sources": [
{
"system": "本地映射",
"label": "自营抖音账号与款式"
},
{
"system": "蝉妈妈",
"label": "已登录的抖音视频导出数据"
}
],
"processing": [
"导出自营视频数据并解析曝光指标"
],
"destinations": [
{
"system": "飞书",
"label": "自营抖音内容指标表"
},
{
"system": "本地采集产物",
"label": "抖音自营指标结果"
}
]
},
"entry": "chanmama_scraper.py",
"depends_on": [
"collect_self_bilibili"
],
"run_after_failure": true,
"replay_policy": "repeatable"
},
{
"id": "sync",
"name": "同步合作与自营曝光指标入库",
"description": "汇总本轮合作达人及自营曝光结果,按记录映射更新或补建 PostgreSQL 内容笔记数据。",
"data_flow": {
"sources": [
{
"system": "本轮采集产物",
"label": "合作达人及自营内容指标"
},
{
"system": "本地映射",
"label": "内容记录对应关系"
}
],
"processing": [
"合并各平台指标并匹配内容记录",
"更新已有记录或补建缺失记录"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "内容笔记与曝光指标"
}
]
},
"entry": "data/tools/sync_metrics_to_cmt_notes.py",
"depends_on": [
"collect_self_douyin"
],
"replay_policy": "repeatable",
"run_after_failure": true
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_DailyRun"
},
"note": "每日 01:00 执行合作达人及自营 B站、蝉妈妈采集,05:00 按 01:00 产生的未完成清单补采;账号切换期间仅暂停自营采集步骤,不移除自营链;两次均完成后同步曝光指标入库。"
},
{
"id": "content.metrics.backfill",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_collaborators",
"name": "补采合作达人指标",
"description": "按每日范围并行补采合作达人在 B站、小红书蒲公英和星图的曝光等指标,星图未命中的任务再用抖店达人广场补采。",
"data_flow": {
"sources": [
{
"system": "飞书",
"label": "合作达人及内容清单"
},
{
"system": "内容平台",
"label": "B站、小红书蒲公英与星图/抖店补采指标"
}
],
"processing": [
"按每日范围补采合作达人多平台指标"
],
"destinations": [
{
"system": "本地采集产物",
"label": "合作达人多平台补采结果"
}
]
},
"entry": "run_all.py",
"args": [
"--daily-scope"
]
},
{
"id": "sync",
"name": "同步补采曝光指标入库",
"description": "将合作达人补采产物同步到 PostgreSQL 内容笔记表;即使采集步骤失败也执行同步,保留来源批处理的收敛语义。",
"data_flow": {
"sources": [
{
"system": "本轮采集产物",
"label": "合作达人补采指标"
},
{
"system": "本地映射",
"label": "内容记录对应关系"
}
],
"processing": [
"匹配合作达人内容记录并同步曝光指标"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "内容笔记与曝光指标"
}
]
},
"entry": "data/tools/sync_metrics_to_cmt_notes.py",
"depends_on": [
"collect_collaborators"
],
"run_after_failure": true
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_MondayBackfill"
},
"note": "严格保留来源周一补采语义:只运行合作达人 run_all.py --daily-scope,随后无论采集是否失败都执行 PostgreSQL 同步;不包含自营映射和自营平台采集。"
},
{
"id": "content.marketing_report.daily",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "generate_and_send",
"name": "生成并发送营销日报",
"description": "聚合各款式内容与评论分析,生成一页全域种草日报并发送给飞书负责人。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "内容、经营、评论与达人数据",
"detail": "款式指标、笔记、评论、合作和画像等"
},
{
"system": "飞书",
"label": "款式、负责人及素材配置"
}
],
"processing": [
"聚合业务事实与款式表现",
"调用 Hermes 生成营销分析",
"生成图表和 Markdown 日报"
],
"destinations": [
{
"system": "本地报告",
"label": "Markdown 日报与 PNG 数据看板"
},
{
"system": "飞书",
"label": "负责人日报卡片",
"condition": "正式执行且启用 --send"
}
]
},
"entry": "daily_marketing_report.py",
"args": [
"--send"
]
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_DailyMarketingReport"
}
},
{
"id": "content.relogin.weekly",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "relogin",
"name": "刷新内容平台登录态",
"description": "并行启动五个平台的二维码重新登录流程,按配置轮次重试,持久化登录状态并通知结果。",
"data_flow": {
"sources": [
{
"system": "内容平台",
"label": "五个平台登录页与当前会话状态"
}
],
"processing": [
"并行发起二维码登录并按轮次重试",
"校验并持久化新的登录会话"
],
"destinations": [
{
"system": "浏览器状态",
"label": "各平台 Cookie 与 storage state"
},
{
"system": "飞书",
"label": "登录刷新结果通知"
}
]
},
"entry": "data/tools/friday_relogin_parallel.py",
"args": [
"--max-attempts",
"3",
"--round-timeout",
"300",
"--screenshot-delay",
"60"
]
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_FridayRelogin"
}
},
{
"id": "content.creator_report.monthly",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "generate",
"name": "生成达人合作月报",
"description": "从 PostgreSQL 读取达人、款式和合作数据,生成完整的报价与合作分析报告。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "达人、款式、合作与内容表现数据"
}
],
"processing": [
"统计达人报价、合作和内容效果",
"生成月度筛选与报价分析"
],
"destinations": [
{
"system": "本地报告",
"label": "达人合作月报 Markdown"
},
{
"system": "飞书文档",
"label": "达人合作分析报告"
},
{
"system": "PostgreSQL",
"label": "月报记录与报告链接"
}
]
},
"entry": "data/tools/generate_creator_report.py"
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_MonthlyCreatorReport"
}
},
{
"id": "content.summary.monthly",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "summarize",
"name": "生成内容月度汇总",
"description": "分析上月各款全部笔记并做跨平台横向对比,生成飞书文档、回写生命进程表并入库。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "上月各款内容、互动与评论数据"
},
{
"system": "飞书",
"label": "款式与生命进程配置"
}
],
"processing": [
"按款式分析全部笔记",
"完成跨平台对比与月度总结"
],
"destinations": [
{
"system": "飞书文档",
"label": "内容月度报告"
},
{
"system": "飞书",
"label": "款式生命进程表"
},
{
"system": "PostgreSQL",
"label": "月度汇总结果"
}
]
},
"entry": "monthly_summary_all.py",
"args": [
"--max-workers",
"4"
]
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_MonthlySummary"
}
},
{
"id": "content.notes_master.daily",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "sync",
"name": "同步笔记清单与合作记录",
"description": "遍历各款式合作达人和自营多维表格,一次拉取后幂等写入 PostgreSQL 笔记主表(笔记身份+合作财务同行),同步达人档案,并标记来源已删除记录。",
"data_flow": {
"sources": [
{
"system": "飞书",
"label": "各款式合作达人及自营笔记表"
}
],
"processing": [
"刷新款式与来源表映射",
"全量读取笔记身份与合作字段并规范化",
"按飞书来源记录幂等同步并标记已删除记录"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "笔记主表 cmt_notes_master 与达人档案"
}
]
},
"entry": "data/tools/sync_notes_master.py",
"args": [
"--execute"
]
}
]
},
"provenance": {
"source_project": "content",
"task_name": "GYXX_DailyNotesMasterSync"
},
"note": "合并原合作记录同步与完整笔记清单同步:一次飞书拉取同时落笔记身份与合作字段;笔记数量以主表 source_active AND is_countable 的去重链接为准,曝光指标由内容指标采集写回同一行。"
},
{
"id": "content.comments.weekly",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "bilibili",
"name": "重采 B站评论",
"description": "从数据库读取 B站视频,重新采集互动指标和评论,替换评论表数据并保存本地产物。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "B站视频清单"
},
{
"system": "B站",
"label": "视频互动指标与评论"
}
],
"processing": [
"逐条重新采集视频互动和评论"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "B站评论与互动指标"
},
{
"system": "本地采集产物",
"label": "B站评论结果"
}
]
},
"entry": "data/tools/batch_rescrape_bilibili.py"
},
{
"id": "xiaohongshu",
"name": "重采小红书评论",
"description": "从数据库读取小红书笔记,重新采集互动指标和评论,替换评论表数据并保存本地产物。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "小红书笔记清单"
},
{
"system": "小红书",
"label": "笔记互动指标与评论"
}
],
"processing": [
"逐条重新采集笔记互动和评论"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "小红书评论与互动指标"
},
{
"system": "本地采集产物",
"label": "小红书评论结果"
}
]
},
"entry": "data/tools/batch_rescrape_xiaohongshu.py"
},
{
"id": "douyin",
"name": "重采抖音评论",
"description": "从数据库读取抖音视频,重新采集互动指标和评论,替换评论表数据并保存本地产物。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "抖音视频清单"
},
{
"system": "抖音",
"label": "视频互动指标与评论"
}
],
"processing": [
"逐条重新采集视频互动和评论"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "抖音评论与互动指标"
},
{
"system": "本地采集产物",
"label": "抖音评论结果"
}
]
},
"entry": "data/tools/batch_rescrape_douyin.py"
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_WeeklyCommentScrape"
},
"note": "保留来源批处理语义:三平台并行启动、全部等待,任一平台失败则工作流最终失败。"
},
{
"id": "content.summary.weekly",
"module": "content_marketing",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "summarize",
"name": "生成内容周度汇总",
"description": "分析上周各款新增笔记,调用模型生成综合评级,创建飞书周报并回写生命进程表。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "上周各款新增笔记与互动数据"
},
{
"system": "飞书",
"label": "款式与生命进程配置"
}
],
"processing": [
"按款式汇总新增内容",
"调用模型生成评级与周度分析"
],
"destinations": [
{
"system": "飞书文档",
"label": "内容周报"
},
{
"system": "飞书",
"label": "款式生命进程表"
},
{
"system": "PostgreSQL",
"label": "周度汇总结果"
}
]
},
"entry": "weekly_summary_all.py",
"args": [
"--max-workers",
"4"
]
}
]
},
"provenance": {
"source_project": "content",
"task_name": "YingxiaoYunying_WeeklySummary"
}
},
{
"id": "shop.metrics.weekly",
"module": "shop_intelligence",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "jd",
"name": "采集京东店铺经营指标",
"description": "独立采集京东店铺经营数据,生成本次产物并写入 PostgreSQL;不写入飞书 Base。",
"data_flow": {
"sources": [
{
"system": "京东商智",
"label": "店铺经营指标"
}
],
"processing": [
"按业务日期采集并规范化京东店铺数据"
],
"destinations": [
{
"system": "本地采集产物",
"label": "京东店铺指标"
},
{
"system": "PostgreSQL",
"label": "店铺经营指标"
}
]
},
"entry": "runners/run_shop.py",
"args": [
"--platform",
"jd",
"--skip-feishu"
]
},
{
"id": "dy",
"name": "采集抖音店铺经营指标",
"description": "独立采集抖音店铺经营数据,生成本次产物并写入 PostgreSQL;不写入飞书 Base。",
"data_flow": {
"sources": [
{
"system": "抖音电商罗盘",
"label": "店铺经营指标"
}
],
"processing": [
"按业务日期采集并规范化抖音店铺数据"
],
"destinations": [
{
"system": "本地采集产物",
"label": "抖音店铺指标"
},
{
"system": "PostgreSQL",
"label": "店铺经营指标"
}
]
},
"entry": "runners/run_shop.py",
"args": [
"--platform",
"dy",
"--skip-feishu"
]
},
{
"id": "tm",
"name": "采集天猫店铺经营指标",
"description": "独立采集天猫店铺经营数据,生成本次产物并写入 PostgreSQL;按原逻辑不写飞书店铺表。",
"data_flow": {
"sources": [
{
"system": "天猫生意参谋",
"label": "店铺经营指标"
}
],
"processing": [
"按业务日期采集并规范化天猫店铺数据"
],
"destinations": [
{
"system": "本地采集产物",
"label": "天猫店铺指标"
},
{
"system": "PostgreSQL",
"label": "店铺经营指标"
}
]
},
"entry": "runners/run_shop.py",
"args": [
"--platform",
"tm"
]
}
]
},
"provenance": {
"source_project": "shop",
"task_name": "shop-data-collection"
},
"note": "三个平台作为独立 LangGraph 节点并行执行,分别采集并写入 PostgreSQL;店铺经营指标周采集不写飞书 Base,单个平台失败不阻断其他平台。"
},
{
"id": "shop.competitor.weekly",
"module": "shop_intelligence",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "jd",
"name": "采集京东竞店经营指标",
"description": "独立采集京东竞店排行,生成本次产物并写入 PostgreSQL;生产模式写入飞书 Base。",
"data_flow": {
"sources": [
{
"system": "京东商智",
"label": "竞店排行与经营指标"
}
],
"processing": [
"采集目标竞店并规范化排行数据"
],
"destinations": [
{
"system": "本地采集产物",
"label": "京东竞店指标"
},
{
"system": "PostgreSQL",
"label": "竞店经营指标"
},
{
"system": "飞书 Base",
"label": "京东竞店周数据",
"condition": "正式执行"
}
]
},
"entry": "runners/run_peer_store.py",
"args": [
"--platform",
"jd"
]
},
{
"id": "dy",
"name": "采集抖音竞店经营指标",
"description": "独立采集抖音竞店排行,生成本次产物并写入 PostgreSQL;生产模式写入飞书 Base。",
"data_flow": {
"sources": [
{
"system": "抖音电商罗盘",
"label": "竞店排行与经营指标"
}
],
"processing": [
"采集目标竞店并规范化排行数据"
],
"destinations": [
{
"system": "本地采集产物",
"label": "抖音竞店指标"
},
{
"system": "PostgreSQL",
"label": "竞店经营指标"
},
{
"system": "飞书 Base",
"label": "抖音竞店周数据",
"condition": "正式执行"
}
]
},
"entry": "runners/run_peer_store.py",
"args": [
"--platform",
"dy"
]
}
]
},
"provenance": {
"source_project": "shop",
"task_name": "peer-store-data-collection"
},
"note": "京东和抖音作为独立 LangGraph 节点并行执行,分别入库和收敛错误,单个平台失败不阻断另一个平台;当前无天猫竞店采集任务。"
},
{
"id": "shop.jd_self_operated.daily",
"module": "shop_intelligence",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "brand",
"name": "采集京东自营品牌业绩",
"description": "按业务日期采集京东自营品牌维度业绩,保存原始产物并写入 PostgreSQL。",
"data_flow": {
"sources": [
{
"system": "京东自营后台",
"label": "品牌维度经营数据"
}
],
"processing": [
"按业务日期采集并整理品牌业绩"
],
"destinations": [
{
"system": "本地原始产物",
"label": "品牌业绩数据"
},
{
"system": "PostgreSQL",
"label": "京东自营品牌日指标"
}
]
},
"entry": "collectors/jd_self_operated_brand_daily.py",
"args": [
"--start-date",
"{business_date}",
"--end-date",
"{business_date}",
"--headless"
],
"timeout_seconds": 600
},
{
"id": "product",
"name": "采集京东自营商品业绩",
"description": "按业务日期逐页采集京东自营商品维度业绩,保存原始产物并写入 PostgreSQL。",
"data_flow": {
"sources": [
{
"system": "京东自营后台",
"label": "商品维度经营数据"
}
],
"processing": [
"逐页采集商品明细并整理日业绩"
],
"destinations": [
{
"system": "本地原始产物",
"label": "商品业绩数据"
},
{
"system": "PostgreSQL",
"label": "京东自营商品日指标"
}
]
},
"entry": "collectors/jd_self_operated_product_daily.py",
"args": [
"--start-date",
"{business_date}",
"--end-date",
"{business_date}",
"--headless"
],
"depends_on": [
"brand"
],
"run_after_failure": true,
"timeout_seconds": 1800
}
]
},
"provenance": {
"source_project": "shop",
"task_name": "京东自营昨日业绩每日采集"
},
"note": "每天采集计划日期前两天;品牌失败仍继续商品,任一步失败则工作流失败。"
},
{
"id": "shop.douyin_price_appeal",
"module": "shop_intelligence",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "dy",
"name": "提交抖音待改价申诉",
"description": "复用店铺周采集的抖音商家账号 Cookie 与 Profile,打开活动广场;待改价不为 0 时逐条进入立即改价,兼容“申诉”和“发起申诉”入口,全选 SKU,并以固定原因提交申诉。",
"data_flow": {
"sources": [
{
"system": "抖音电商",
"label": "活动广场待改价商品"
},
{
"system": "浏览器状态",
"label": "店铺周采集账号 Cookie 与 Profile"
}
],
"processing": [
"检查待改价数量并打开待处理列表",
"逐条进入立即改价并兼容两种申诉入口",
"全选 SKU,选择“对议价价格存疑 / 认为识别有误,该规格没有这么低的价格”并提交"
],
"destinations": [
{
"system": "抖音电商",
"label": "待改价议价申诉",
"condition": "正式执行(控制台或定时调度)"
}
]
},
"entry": "collectors/dy_store_competitor_store_scraping.py",
"args": [
"--price-appeal",
"--execute"
],
"timeout_seconds": 1800,
"replay_policy": "idempotent"
}
]
},
"provenance": {
"source_project": "shop",
"task_name": "douyin-price-appeal-daily"
},
"note": "每天 08:00、16:00、22:00 自动执行;仍可在控制台手动执行。每个时点都会重新扫描,已申诉商品不会再次出现可申诉入口;安全预演不访问抖音也不提交申诉。"
},
{
"id": "product.persona.daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect",
"name": "采集三平台人群画像",
"description": "并行运行天猫、抖音和京东人群画像采集器,等待全部完成并写入对应飞书多维表。",
"data_flow": {
"sources": [
{
"system": "天猫、抖音与京东",
"label": "商品人群画像后台数据"
},
{
"system": "本地配置",
"label": "款式与目标表映射"
}
],
"processing": [
"并行采集三平台画像",
"统一画像维度并匹配款式"
],
"destinations": [
{
"system": "飞书多维表",
"label": "各平台商品人群画像"
}
]
},
"entry": "run_daily_persona.py",
"args": [
"--date",
"{business_date}"
],
"replay_policy": "idempotent"
}
]
},
"provenance": {
"source_project": "product",
"task_name": "PersonaDailyCollect"
}
},
{
"id": "product.daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_import_analyze_publish",
"name": "采集、入库、汇总并发布商品日报",
"description": "按业务日期采集 ERP 与三平台数据,将原始商品日报幂等写入 PostgreSQL,完成汇总分析、导出并写入飞书日报记录。",
"data_flow": {
"sources": [
{
"system": "ERP",
"label": "商品库存与销售数据"
},
{
"system": "天猫、京东与抖音",
"label": "商品经营指标"
}
],
"processing": [
"按业务日期采集各数据源",
"将三平台原始商品日报幂等写入 PostgreSQL 商品日指标表",
"汇总并分析商品经营表现",
"导出日报记录"
],
"destinations": [
{
"system": "本地日报产物",
"label": "商品经营汇总与导出文件"
},
{
"system": "PostgreSQL",
"label": "商品日经营指标"
},
{
"system": "飞书",
"label": "商品日报记录"
}
]
},
"entry": "orchestrate_daily_collection.py",
"args": [
"--target-date",
"{business_date}",
"--stages",
"collect,import,analyze,export,insert"
]
}
]
},
"provenance": {
"source_project": "product",
"task_name": "ProductCollectorDailyCollect"
}
},
{
"id": "product.alert.daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "detect_and_notify",
"name": "检测并通知销量下滑",
"description": "检测连续销量下滑,幂等记录告警事件,并通过分析端 Hermes 机器人通知配置对象。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "商品日销量与历史趋势"
},
{
"system": "告警配置",
"label": "检测规则与通知对象"
}
],
"processing": [
"检测连续销量下滑",
"生成确定性告警说明",
"幂等判定是否需要通知"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "销量告警事件"
},
{
"system": "飞书",
"label": "配置对象告警通知",
"condition": "命中规则且未重复发送"
}
]
},
"entry": "commands/run_alerts.py"
}
]
},
"provenance": {
"source_project": "product",
"task_name": "ProductCollectorSalesAlert"
}
},
{
"id": "product.ecommerce_costs.daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "tmall_download",
"name": "下载万相台商品广告报表",
"description": "登录天猫万相台商品报表,点击下载报表,按业务日期设置日期范围并点击确定(定时默认昨天,手动可选任意日期);从下载任务管理页下载 ZIP 并安全解压商品级 CSV。",
"entry": "collect_tmall_wanxiang_ads.py",
"args": [
"--date",
"{business_date}",
"--headless"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "天猫万相台",
"label": "商品报表与下载任务管理",
"detail": "商品报表 item_promotion;点击下载报表后按业务日期设置日期范围"
}
],
"processing": [
"复用已登录 Profile 或用运行时凭据登录",
"优先复用同日已有报表任务",
"仅在没有同日任务时进入商品报表点击下载报表",
"在日期范围选择昨日并点击确定",
"轮询生成成功任务",
"安全解压并写入原始 CSV 与 manifest"
],
"destinations": [
{
"system": "本地原始产物",
"label": "万相台商品广告 ZIP/CSV",
"detail": "raw/product_commerce/tmall_wanxiang_ads/<date>/"
}
]
}
},
{
"id": "tmall_import",
"name": "导入万相台商品广告指标",
"description": "解析解压后的商品 CSV,将花费、广告归因成交金额和投产比写入 product_daily_metrics.raw_data.tm_ad_metrics;款式按商品 ID 优先、商品名称精确包含兜底,并记录匹配方式,不覆盖经营日报字段。",
"entry": "import_tmall_product_ads.py",
"depends_on": [
"tmall_download"
],
"args": [
"--date",
"{business_date}",
"--execute"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "本地原始产物",
"label": "万相台商品广告 CSV"
}
],
"processing": [
"校验 CSV 编码、日期、商品主体和广告指标",
"合并同商品同日多计划行",
"按平台/日期/商品幂等更新广告 JSON 节点"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "product_daily_metrics.raw_data.tm_ad_metrics",
"detail": "由 data-hub 产品生命进程读取并计算广告成交、投产比、电商费比;节点同时保存 style_name/style_match_method"
}
]
}
},
{
"id": "jd_download",
"name": "下载京东营销概况全站与非全站报表",
"description": "登录京准通 custom-report,按业务日期先提交并下载非全站营销的 SKU 报表,再在全站营销的 SPU 维度提交并下载;下载中心接近 100 条上限时自动批量删除旧报表,定时默认昨天,控制台可选择任意历史日期。",
"entry": "collect_jd_ad_costs.py",
"args": [
"--date",
"{business_date}",
"--headless"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "京准通",
"label": "custom-report 营销概况与下载中心",
"detail": "overview 页的非全站营销 SKU、全站营销 SPU 以及 download 页生成任务"
}
],
"processing": [
"复用运行时账号 Profile、Cookie 和已生成的同日下载任务",
"选择光影行星旗舰店霖并设置目标业务日期",
"先提交非全站 SKU 报表,再提交全站 SPU 报表且不重新选择店铺",
"从下载中心下载两个原始 CSV 并写入日期隔离目录"
],
"destinations": [
{
"system": "本地原始产物",
"label": "京东营销概况全站/非全站 CSV",
"detail": "raw/product_commerce/jd_ad_costs/<date>/,含 manifest.json"
}
]
}
},
{
"id": "jd_import",
"name": "导入京东电商费用指标",
"description": "仅解析报表中的当前时间区块,跳过对比时间与汇总行;全站 SPU 直接入库,非全站 SKU 按 SKU 名称匹配 dim_style.jd_spus 与最新京东 SPU 商品名,歧义和未匹配行保留审计状态。",
"entry": "import_jd_ad_costs.py",
"depends_on": [
"jd_download"
],
"args": [
"--date",
"{business_date}",
"--execute"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "本地原始产物",
"label": "京东营销概况全站/非全站 CSV"
},
{
"system": "PostgreSQL",
"label": "dim_style.jd_spus",
"detail": "款式名到京东 SPU 的业务维度映射"
},
{
"system": "PostgreSQL",
"label": "product_daily_metrics",
"detail": "最新京东 SPU 商品名,用于补充当天全站报表未返回的 SPU"
}
],
"processing": [
"按当前时间标记过滤并校验目标业务日期覆盖",
"保留全站 SPU 与非全站 SKU 的完整原始列和来源行号",
"以 stat_date、广告主、报表类型、行键幂等覆盖"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "jd_product_ad_daily_metrics",
"detail": "京东全站 SPU 和非全站 SKU 电商费用日报;SKU 的 spu_id/style_name 记录匹配结果"
}
]
}
},
{
"id": "douyin_download",
"name": "下载巨量千川全域推广商品日报",
"description": "复用周店铺采集使用的 douyin-shop 账号保险库,打开全域投放数据的推商品/商品维度页面,按业务日期下载包含商品日明细的 Excel。",
"entry": "collect_douyin_qianchuan_ads.py",
"args": [
"--date",
"{business_date}",
"--headless"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "巨量千川",
"label": "全域投放数据 > 推商品 > 商品维度",
"detail": "广告主 1813687011565580;登录态来自 douyin-shop 账号保险库"
}
],
"processing": [
"校验广告主 ID、店铺标识和商品数据明细",
"按业务日期下载原始 Excel",
"重置千川错误的 worksheet A1 dimension 并校验日期覆盖"
],
"destinations": [
{
"system": "本地原始产物",
"label": "巨量千川商品推广 Excel",
"detail": "raw/product_commerce/douyin_qianchuan_ads/<date>/,含 manifest.json"
}
]
}
},
{
"id": "douyin_import",
"name": "导入抖音电商费用商品日报",
"description": "跳过每个商品的全部汇总行,保留按日期展开的商品明细;商品 ID 按文本保存,以日期、广告主和商品幂等写入云端 PostgreSQL。",
"entry": "import_douyin_qianchuan_ads.py",
"depends_on": [
"douyin_download"
],
"args": [
"--date",
"{business_date}",
"--execute"
],
"timeout_seconds": 21600,
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "本地原始产物",
"label": "巨量千川商品推广 Excel"
}
],
"processing": [
"解析展示、点击、消耗、成交、ROI、结算率和退款率",
"跳过商品汇总行并校验目标日期完整性",
"以 stat_date、advertiser_id、product_id 幂等覆盖"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "dy_product_ad_daily_metrics",
"detail": "抖音商品级电商费用与推广成交日报"
}
]
}
}
]
},
"provenance": {
"source_project": "product",
"task_name": "EcommerceAdvertisingCostDaily"
},
"note": "每天 10:00 并行采集天猫、京东、抖音业务日期前一天的电商费用;每个平台保持下载后再导入的依赖,单个平台失败不阻断其他平台;控制台手动运行可选择任意业务日期,正式调度沿用 gyxx schedule run。"
},
{
"id": "product.style_analysis.interval",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "analyze",
"name": "生成款式周期分析",
"description": "聚合每个款式最近 3 天经营指标,直连 MiniMax 分析,创建飞书文档并保存报告链接。",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "最近 3 天款式经营指标"
},
{
"system": "款式配置",
"label": "待分析款式与最小分析间隔"
}
],
"processing": [
"聚合款式周期指标",
"直连 MiniMax 生成经营分析",
"跳过分析间隔未满足的款式"
],
"destinations": [
{
"system": "飞书文档",
"label": "款式周期分析报告"
},
{
"system": "PostgreSQL",
"label": "报告链接与分析状态"
}
]
},
"entry": "analyze_style.py",
"args": [
"--all-styles",
"--days",
"3",
"--min-interval-days",
"3",
"--skip-existing",
"--end-date",
"{business_date}"
]
}
]
},
"provenance": {
"source_project": "product",
"task_name": "StyleAnalysisEvery3Days"
}
},
{
"id": "product.main_image.weekly",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "jd",
"name": "采集京东主图表现",
"description": "采集京东款式主图及曝光、点击指标,保存 JSON,并写入每款飞书主图表和 PostgreSQL。",
"data_flow": {
"sources": [
{
"system": "京东商智",
"label": "款式主图、曝光与点击指标"
},
{
"system": "本地配置",
"label": "款式与飞书目标表映射"
}
],
"processing": [
"采集并按款式整理京东主图表现"
],
"destinations": [
{
"system": "本地 JSON",
"label": "京东主图采集结果"
},
{
"system": "飞书",
"label": "各款式京东主图表"
},
{
"system": "PostgreSQL",
"label": "京东主图表现指标"
}
]
},
"entry": "run_weekly_jd_main_image.py",
"args": [
"--date",
"{business_date}",
"--headless"
]
},
{
"id": "tmall",
"name": "采集天猫主图表现",
"description": "采集天猫万相台款式主图聚合指标,保存 JSON,并写入每款飞书主图表和 PostgreSQL。",
"data_flow": {
"sources": [
{
"system": "天猫万相台",
"label": "款式主图聚合表现"
},
{
"system": "本地配置",
"label": "款式与飞书目标表映射"
}
],
"processing": [
"采集并按款式整理天猫主图表现"
],
"destinations": [
{
"system": "本地 JSON",
"label": "天猫主图采集结果"
},
{
"system": "飞书",
"label": "各款式天猫主图表"
},
{
"system": "PostgreSQL",
"label": "天猫主图表现指标"
}
]
},
"entry": "run_weekly_main_image.py",
"args": [
"--date",
"{business_date}",
"--headless"
]
}
]
},
"provenance": {
"source_project": "product",
"task_name": "WeeklyJdAndTmallMainImageCollect"
},
"note": "每周日 08:30 并行执行京东与天猫万相主图采集;两个平台分别完成 PG 入库和飞书插入,资源、状态及失败互不影响。任一平台失败时另一个仍继续,工作流最终报告具体的平台错误。"
},
{
"id": "product.sales_sheet.daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "sync",
"name": "刷新商品月度销量表",
"description": "全量读取预算产品与款式主表,不按预算月份过滤款式;所选月份只控制聚水潭查询区间和飞书目标月份页。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "飞书多维表格",
"label": "全部预算产品、目标销量、款式名与 ERP 款式编码"
},
{
"system": "聚水潭商品主体分析",
"label": "所选自然月全渠道自定义销量与自定义退货量"
}
],
"processing": [
"合并预算 Base 与款式主表的全量款式并匹配 ERP 编码",
"按所选月月初到月末逐 ERP 编码生成一次全渠道报表",
"累加全部商品行和同款全部 ERP 编码并计算退货率、实销和目标达成率"
],
"destinations": [
{
"system": "飞书电子表格",
"label": "当月产品销量页",
"condition": "正式执行"
}
]
},
"entry": "sync_monthly_sales_sheet.py",
"args": [
"--month",
"{business_date}",
"--execute",
"--allow-missing-erp-as-zero"
]
}
]
},
"provenance": {
"source_project": "product",
"task_name": "ProductMonthlySalesSheetDailySync"
},
"note": "同名月份页幂等覆盖;月份只控制聚水潭自然月区间与目标页,产品全集不按预算月份筛选;抓取和校验全部 ERP 报表成功后才清空写入;无 ERP 编码产品按 0 写入;缺页时复制最近历史月份页继承格式。"
},
{
"id": "product.erp_all_shop_daily",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect",
"name": "采集聚水潭全店铺款式日报",
"description": "在聚水潭商品主题分析中全选全部店铺,查询业务日期当天所有 ERP 款式编码的自定义销量和自定义退货量,并幂等写入 PostgreSQL。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "款式主配置",
"label": "全部款式及 ERP 款式编码"
},
{
"system": "聚水潭商品主题分析",
"label": "业务日期当天全店铺自定义销量与自定义退货量"
}
],
"processing": [
"全选全部店铺并一次提交全部 ERP 款式编码",
"按款式编码汇总商品行销量和退货量",
"保存当日原始证据并幂等覆盖数据库记录"
],
"destinations": [
{
"system": "本地原始证据",
"label": "聚水潭全店铺款式日报 JSON"
},
{
"system": "PostgreSQL",
"label": "全店铺款式日销量与退货量",
"condition": "正式执行"
}
]
},
"entry": "backfill_erp_all_shop_daily.py",
"args": [
"--from",
"{business_date}",
"--to",
"{business_date}",
"--execute",
"--force"
],
"timeout_seconds": 21600
}
]
},
"provenance": {
"source_project": "product",
"task_name": "JushuitanAllShopStyleDailyCollect"
},
"note": "每天自动采集昨天数据;控制台可手动选择任意补采日期并幂等覆盖该日。全选聚水潭全部店铺,不拆京东、抖音、天猫;每次只采集一个业务日期。"
},
{
"id": "product.video_upload",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "upload",
"name": "上传所选天猫店铺短视频",
"description": "先按前端所选店铺扫描飞书并筛选符合路由的视频附件,再按视频 file_token、目标账号和飞书记录写入 PostgreSQL 附件级发布账本;仅在存在可领取附件时登录对应光合账号上传,已发布附件自动跳过。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "飞书多维表格",
"label": "所选店铺待上传短视频、款式、品牌和性别信息"
},
{
"system": "PostgreSQL",
"label": "天猫商品 ID、商品标题与附件级发布账本"
},
{
"system": "淘宝光合浏览器状态",
"label": "旗舰店与箱包店独立账号和 Profile"
}
],
"processing": [
"按前端所选旗舰店或箱包店规则筛选飞书记录并拆分视频附件",
"按视频 file_token、目标账号和飞书记录原子领取未上传附件",
"确认存在可上传附件后登录所选店铺账号",
"生成标题、关联天猫商品并发布;明确成功后写 published,提交后结果不明写 ambiguous"
],
"destinations": [
{
"system": "淘宝光合",
"label": "前端所选天猫店铺短视频",
"condition": "正式执行且存在可上传附件"
},
{
"system": "PostgreSQL",
"label": "附件发布状态、尝试记录与确认凭据",
"condition": "正式执行"
},
{
"system": "飞书多维表格",
"label": "天猫上传状态",
"condition": "旗舰店记录全部附件发布成功"
}
]
},
"entry": "upload_video_to_guanghe.py",
"args": [
"--execute",
"--keep-browser-open-on-failure"
],
"timeout_seconds": 21600
}
]
},
"provenance": {
"source_project": "product",
"task_name": "TmallGuangheVideoUpload"
},
"topic_config": {
"default_keyword": "我的夏日焕新清单",
"label": "天猫话题关键词",
"hint": "输入完整话题或关键词;例如输入“秋上新”也会匹配并选中“秋上新开拍了”。"
},
"note": "默认由常驻调度器按 config/schedules.json 每 3 天 14:00 执行;前端仍可手动选择旗舰店或箱包店后执行。脚本先扫描飞书并按所选店铺规则筛选,只有数据库存在可领取附件时才登录对应账号上传。允许同一业务日期重复扫描新增附件,PostgreSQL 附件级账本阻止已发布或结果不明的附件自动重发;框架安全预演不会启动上传脚本。"
},
{
"id": "product.jd_video_upload",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "upload",
"name": "扫描新增视频并发布到京东",
"description": "每次点击执行都会从飞书视图中的凌云air基线记录起扫描到视图末尾,不依赖日期字段;以 record_id + 视频 file_token 为幂等键,只发布新增或安全可重试的单款视频。无飞书封面时保留京东从视频生成的默认封面。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "飞书多维表格",
"label": "凌云air基线之后的代拍产品、视频与可选封面附件;日期可为空"
},
{
"system": "PostgreSQL",
"label": "京东商品标题与附件级发布账本"
},
{
"system": "京麦浏览器状态",
"label": "独立 JD 视频发布 Profile、Cookie 与 Storage State"
}
],
"processing": [
"每次执行按飞书视图顺序从固定 record_id 锚点扫描到末尾,识别新增视频 file_token",
"组合款在下载素材前直接跳过;单款有封面时上传飞书封面,无封面时保留京东默认视频封面",
"按款式标题模糊匹配并用直连多模态大模型判断包体颜色,多选最多10个同款同色商品",
"选择相关话题和标签后逐条发布;已入账附件由 PostgreSQL 唯一键自动防重"
],
"destinations": [
{
"system": "京麦内容中心",
"label": "京东旗舰店短视频",
"condition": "正式执行且款式与包体颜色匹配"
},
{
"system": "PostgreSQL",
"label": "视频发布状态、尝试记录与确认凭据",
"condition": "正式执行"
}
]
},
"entry": "upload_video_to_jd.py",
"args": [
"--anchor-record-id",
"recvrXTRWWFXeJ",
"--manual-login",
"--execute"
],
"timeout_seconds": 21600
}
]
},
"provenance": {
"source_project": "product",
"task_name": "JdVideoUpload"
},
"note": "默认由常驻调度器按 config/schedules.json 每 3 天 14:00 执行;前端仍可手动触发。每次从凌云air基线扫描到视图末尾,新增行或旧行新增的视频 file_token 会入账,已发布 token 不会重复发布。安全验证出现时在有头浏览器中人工完成后脚本自动继续。"
},
{
"id": "product.tmall_baibu_apply",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "old_chain_bag",
"name": "导入老天猫超链箱包模板",
"description": "用 Feishu user 身份下载老天猫超链箱包模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。",
"has_hyperlink": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "老天猫·超链·箱包商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星旗舰店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "老天猫·超链·箱包商品导入"
}
]
},
"entry": "tmall_baibu_apply_old_chain_bag.py",
"timeout_seconds": 21600
},
{
"id": "old_all_bag",
"name": "导入老天猫全渠道箱包模板",
"description": "用 Feishu user 身份下载老天猫全渠道箱包模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。",
"depends_on": [
"old_chain_bag"
],
"run_after_failure": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "老天猫·全渠道·箱包商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星旗舰店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "老天猫·全渠道·箱包商品导入"
}
]
},
"entry": "tmall_baibu_apply_old_all_bag.py",
"timeout_seconds": 21600
},
{
"id": "old_all_3c",
"name": "导入老天猫全渠道 3C 模板",
"description": "用 Feishu user 身份下载老天猫全渠道 3C 模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入;导入完成后进入草稿,逐个点击完善商品、选择否并下一步,直到草稿清空。",
"depends_on": [
"old_all_bag"
],
"run_after_failure": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "老天猫·全渠道·3C 商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星旗舰店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果",
"进入草稿逐个完善商品,选择否并点击下一步,直到草稿清空"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "老天猫·全渠道·3C 商品导入"
}
]
},
"entry": "tmall_baibu_apply_old_all_3c.py",
"timeout_seconds": 21600
},
{
"id": "old_chain_3c",
"name": "导入老天猫超链 3C 模板",
"description": "用 Feishu user 身份下载老天猫超链 3C 模板,打开文档指定报名入口,校验光影行星旗舰店身份后提交商品批量导入。",
"has_hyperlink": true,
"depends_on": [
"old_all_3c"
],
"run_after_failure": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "老天猫·超链·3C 商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星旗舰店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "老天猫·超链·3C 商品导入"
}
]
},
"entry": "tmall_baibu_apply_old_chain_3c.py",
"timeout_seconds": 21600
},
{
"id": "new_chain_bag",
"name": "导入新天猫超链箱包模板",
"description": "用 Feishu user 身份下载新天猫超链箱包模板,打开文档指定报名入口,校验光影行星鑫华达专卖店身份后提交商品批量导入。",
"has_hyperlink": true,
"depends_on": [
"old_chain_3c"
],
"run_after_failure": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "新天猫·超链·箱包商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星鑫华达专卖店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "新天猫·超链·箱包商品导入"
}
]
},
"entry": "tmall_baibu_apply_new_chain_bag.py",
"timeout_seconds": 21600
},
{
"id": "new_all_bag",
"name": "导入新天猫全渠道箱包模板",
"description": "用 Feishu user 身份下载新天猫全渠道箱包模板,打开文档指定报名入口,校验光影行星鑫华达专卖店身份后提交商品批量导入。",
"depends_on": [
"new_chain_bag"
],
"run_after_failure": true,
"args": [
"--execute"
],
"replay_policy": "repeatable",
"data_flow": {
"sources": [
{
"system": "飞书电子表格",
"label": "新天猫·全渠道·箱包商品导入模板"
},
{
"system": "淘宝浏览器状态",
"label": "光影行星鑫华达专卖店独立账号登录态"
}
],
"processing": [
"以 user 身份下载文档指定模板",
"打开文档指定报名链接并校验店铺身份",
"提交商品批量导入并等待页面结果"
],
"destinations": [
{
"system": "天猫百亿补贴",
"label": "新天猫·全渠道·箱包商品导入"
}
]
},
"entry": "tmall_baibu_apply_new_all_bag.py",
"timeout_seconds": 21600
}
]
},
"provenance": {
"source_project": "product",
"task_name": "TmallBaibuBatchApplyHourly"
},
"note": "默认按每小时整点调度,仅导入三个不带超链的普通入口;其中老天猫全渠道 3C 入口在导入完成后会逐个完善草稿商品并清空草稿;前端仍可切换为导入全部六个入口并手动执行,且同样经过该后置流程。每次运行都会重新从飞书下载模板并提交,不按业务日期分组或防重。四个老天猫入口固定使用光影行星旗舰店,两个新天猫入口固定使用光影行星鑫华达专卖店;选中的入口串行执行且后续步骤允许在前一步失败后继续,模板与报名链接均来自飞书清单;每个入口使用独立 Profile、Cookie/Storage State 和 CDP 端口,脚本 finally 必须关闭自己的浏览器。"
},
{
"id": "supply.purchase_confirmation.daily",
"module": "supply_chain",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_analyze_notify",
"name": "生成采购确认通知",
"description": "从 ERP 识别库存缺口商品并检查协议到货时间,写入 PostgreSQL 后发送采购确认通知。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "ERP",
"label": "商品库存、在途与采购数据"
},
{
"system": "采购配置",
"label": "协议到货时间与确认规则"
}
],
"processing": [
"识别库存缺口商品",
"核对协议到货时间并生成确认项"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "采购确认处理记录"
},
{
"system": "飞书",
"label": "采购确认通知"
}
]
},
"entry": "run.py",
"args": [
"mcp-run",
"purchase-confirmation"
]
}
]
},
"provenance": {
"source_project": "supply",
"task_name": "auto-flow-purchase-confirmation"
}
},
{
"id": "supply.replenishment.weekly",
"module": "supply_chain",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_analyze_notify",
"name": "生成并发送补货建议",
"description": "导出 ERP 库存并计算补货量,写入 PostgreSQL 与飞书多维表,最后发送补货结果通知。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "ERP",
"label": "库存、销售与商品数据"
},
{
"system": "补货配置",
"label": "SKU 范围与补货规则"
}
],
"processing": [
"导出并规范化库存数据",
"按规则计算建议补货量",
"生成补货批次结果"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "补货批次与建议明细"
},
{
"system": "飞书多维表",
"label": "补货建议记录"
},
{
"system": "飞书",
"label": "补货结果通知"
}
]
},
"entry": "run.py",
"args": [
"mcp-run",
"replenishment"
]
}
]
},
"provenance": {
"source_project": "supply",
"task_name": "auto-flow-replenishment"
}
},
{
"id": "supply.replenishment_alert.daily",
"module": "supply_chain",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_analyze_notify",
"name": "生成库存阈值预警",
"description": "依据配置 SKU 和库存阈值生成预警并写入 PostgreSQL,仅在存在预警时发送业务通知。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "ERP",
"label": "SKU 当前库存"
},
{
"system": "预警配置",
"label": "监控 SKU 与库存阈值"
}
],
"processing": [
"比较当前库存与配置阈值",
"生成需要处理的库存预警"
],
"destinations": [
{
"system": "PostgreSQL",
"label": "库存阈值预警记录"
},
{
"system": "飞书",
"label": "库存预警通知",
"condition": "存在命中阈值的 SKU"
}
]
},
"entry": "run.py",
"args": [
"mcp-run",
"replenishment-alert"
]
}
]
},
"provenance": {
"source_project": "supply",
"task_name": "auto-flow-replenishment-alert"
}
},
{
"id": "supply.replenishment_arrival_sync.daily",
"module": "supply_chain",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "sync_queue",
"name": "同步补货建议预计到货时间",
"description": "读取 erp_replenishment_arrival_sync 待处理队列,使用聚水潭采购单页面按商品编码更新预计到货时间,并逐条回写同步状态。",
"replay_policy": "idempotent",
"data_flow": {
"sources": [
{
"system": "PostgreSQL",
"label": "erp_replenishment_arrival_sync 到货时间同步队列"
},
{
"system": "聚水潭",
"label": "采购单管理页面与登录态"
}
],
"processing": [
"按租户和 SKU 原子认领 pending/failed 队列行",
"在聚水潭采购单明细中更新协议到货日期",
"按目标时间版本回写 success 或 failed 状态"
],
"destinations": [
{
"system": "聚水潭",
"label": "采购单明细协议到货日期"
},
{
"system": "PostgreSQL",
"label": "同步状态、更新时间、尝试次数和失败原因"
}
]
},
"entry": "orchestrator/scripts/collect_replenishment_arrival_sync.py"
}
]
},
"provenance": {
"source_project": "supply",
"task_name": "auto-flow-replenishment-arrival-sync"
},
"note": "队列表为空时成功结束;失败行保留 failed 状态,下一次调度自动重试。默认租户为 1,可用 GYXX_ERP_TENANT_ID 覆盖。"
},
{
"id": "product.market_rank",
"module": "product_commerce",
"trigger": "scheduled",
"execution": {
"steps": [
{
"id": "collect_analyze_publish",
"name": "采集并发布三平台市场排行",
"description": "并行采集天猫、京东和抖音市场排行,汇总平台结果并发送飞书报告链接。",
"data_flow": {
"sources": [
{
"system": "天猫、京东与抖音",
"label": "市场商品排行与表现数据"
},
{
"system": "本地配置",
"label": "类目、关键词与采集范围"
}
],
"processing": [
"并行采集三平台排行",
"汇总平台结果并生成市场分析",
"归档报告并准备通知"
],
"destinations": [
{
"system": "本地报告产物",
"label": "三平台市场排行结果"
},
{
"system": "飞书",
"label": "市场排行报告链接与通知"
}
]
},
"entry": "orchestrate_market_rank_collection.py",
"args": [
"--report-date",
"{business_date}"
]
}
]
},
"provenance": {
"source_project": "product",
"task_name": "三平台市场排行月采集"
},
"note": "每月 1 日 10:00 由项目内 Python 调度器触发。"
}
]
}