2865 lines
107 KiB
JSON
2865 lines
107 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": "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",
|
|
"args": [
|
|
"--scope",
|
|
"collaborators"
|
|
],
|
|
"depends_on": [
|
|
"collect_collaborators"
|
|
],
|
|
"run_after_failure": true,
|
|
"replay_policy": "repeatable"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "content",
|
|
"task_name": "YingxiaoYunying_DailyRun"
|
|
},
|
|
"note": "每日 01:00、05:00 采集合作达人内容指标并同步入库;自营内容指标由独立的 content.metrics.self_operated.daily 工作流负责。"
|
|
},
|
|
{
|
|
"id": "content.metrics.self_operated.daily",
|
|
"module": "content_marketing",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "refresh_self_mapping",
|
|
"name": "刷新自营款式映射",
|
|
"description": "从飞书索引刷新自营账号、款式与多维表映射,供后续自营采集准确定位目标记录;账号暂时失效时仅暂停自营采集,不移除工作流步骤。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "飞书",
|
|
"label": "自营内容索引、账号与款式配置"
|
|
}
|
|
],
|
|
"processing": [
|
|
"刷新自营账号、款式和多维表对应关系"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地映射",
|
|
"label": "自营账号、款式与目标表索引"
|
|
}
|
|
]
|
|
},
|
|
"entry": "data/tools/refresh_self_mapping.py",
|
|
"replay_policy": "repeatable"
|
|
},
|
|
{
|
|
"id": "collect_self_bilibili",
|
|
"name": "采集自营 B站指标",
|
|
"description": "读取自营映射中的 B站笔记链接,通过公开 API 获取标题、UP主、时长、发布时间与播放/点赞/投币/收藏/分享/弹幕全量指标,回填对应飞书表并产出全量视频指标 artifact。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "本地映射",
|
|
"label": "自营 B站笔记链接"
|
|
},
|
|
{
|
|
"system": "B站公开 API",
|
|
"label": "播放量与发布时间"
|
|
}
|
|
],
|
|
"processing": [
|
|
"按映射定位自营笔记并读取公开指标",
|
|
"按 BV 号聚合全量视频指标 artifact"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "飞书",
|
|
"label": "自营 B站内容指标表"
|
|
},
|
|
{
|
|
"system": "本地采集产物",
|
|
"label": "B站自营指标结果与全量视频 artifact"
|
|
}
|
|
]
|
|
},
|
|
"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": "collect_self_xiaohongshu",
|
|
"name": "采集自营小红书笔记指标",
|
|
"description": "复用 ARK 隔离登录态(失效时短信验证码需人工完成)进入小红书笔记管理后台,采集商品笔记与普通笔记两个页签的全部展示列(笔记信息、阅读数、点赞数、引流次数、支付金额与订单数等),产出全量笔记指标 artifact。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "小红书 ARK",
|
|
"label": "已登录的笔记管理后台(商品笔记/普通笔记)"
|
|
},
|
|
{
|
|
"system": "本地配置",
|
|
"label": "自营小红书账号与登录手机号"
|
|
}
|
|
],
|
|
"processing": [
|
|
"按页签逐页抓取并按表头解析全部展示列",
|
|
"按笔记身份去重产出全量指标 artifact"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地采集产物",
|
|
"label": "小红书自营笔记全量指标 artifact"
|
|
}
|
|
]
|
|
},
|
|
"entry": "self_xhs_scraper.py",
|
|
"depends_on": [
|
|
"collect_self_douyin"
|
|
],
|
|
"run_after_failure": true,
|
|
"replay_policy": "repeatable"
|
|
},
|
|
{
|
|
"id": "sync",
|
|
"name": "同步自营曝光指标入库",
|
|
"description": "只汇总自营内容曝光结果,按自营记录映射更新或补建 PostgreSQL 内容笔记数据。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "本地采集产物",
|
|
"label": "自营内容指标结果"
|
|
},
|
|
{
|
|
"system": "飞书映射",
|
|
"label": "自营内容记录对应关系"
|
|
}
|
|
],
|
|
"processing": [
|
|
"读取自营 B站和抖音曝光指标",
|
|
"按自营内容记录身份更新已有数据或补建缺失记录"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "自营笔记与曝光指标"
|
|
}
|
|
]
|
|
},
|
|
"entry": "data/tools/sync_metrics_to_cmt_notes.py",
|
|
"args": [
|
|
"--scope",
|
|
"self-operated"
|
|
],
|
|
"depends_on": [
|
|
"collect_self_douyin"
|
|
],
|
|
"run_after_failure": true,
|
|
"replay_policy": "repeatable"
|
|
},
|
|
{
|
|
"id": "sync_self_video_metrics",
|
|
"name": "同步自营内容指标入库",
|
|
"description": "按平台解析自营内容指标(抖音蝉妈妈导出、B站公开 API artifact、小红书 ARK artifact),映射内部账号别名后按账号+内容+业务日期幂等写入 PostgreSQL cmt_self_video_metrics(含 page_metrics 原始列快照)。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "本地采集产物",
|
|
"label": "蝉妈妈自营抖音视频导出与 B站/小红书全量指标 artifact"
|
|
},
|
|
{
|
|
"system": "本地配置",
|
|
"label": "自营账号别名映射"
|
|
}
|
|
],
|
|
"processing": [
|
|
"按平台解析来源产物的全量内容指标",
|
|
"按账号+内容+业务日期幂等 upsert"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "自营内容每日指标(抖音/B站/小红书)"
|
|
}
|
|
]
|
|
},
|
|
"entry": "data/tools/sync_self_video_metrics.py",
|
|
"depends_on": [
|
|
"sync",
|
|
"collect_self_xiaohongshu"
|
|
],
|
|
"run_after_failure": true,
|
|
"replay_policy": "repeatable"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "content",
|
|
"task_name": "YingxiaoYunying_SelfOperated_DailyRun"
|
|
},
|
|
"note": "每日 01:00、05:00 刷新自营映射并采集自营 B站、蝉妈妈、小红书 ARK 数据;飞书曝光回填保持不变,另将三平台全量内容指标(视频/笔记链接、标题、发布时间、曝光/阅读、点赞、评论、转发等)按日快照入库,失败时仍保留后续链路与入库汇总步骤。"
|
|
},
|
|
{
|
|
"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,
|
|
"args": [
|
|
"--scope",
|
|
"collaborators"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"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.jd_customer_service.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "customer_messages",
|
|
"name": "采集京东客服聊天记录",
|
|
"description": "按控制台选择的业务日期打开京东客服聊天记录,切换消息视图,滚动加载全部顾客并逐个读取会话消息;全部顾客完成后才结束并幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "京东客服后台",
|
|
"label": "单日聊天记录消息视图"
|
|
}
|
|
],
|
|
"processing": [
|
|
"将开始和结束时间设置为业务日 00:00:00 至 23:59:59",
|
|
"滚动加载消息视图中的全部顾客并逐个点击读取会话",
|
|
"按会话标识和消息身份规范化,校验顾客覆盖完整后幂等入库"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "京东客服单日原始响应"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "京东客服会话与消息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/jd_customer_service_messages.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "京东客服消息日采集"
|
|
},
|
|
"note": "默认关闭自动调度,控制台可按业务日期手动运行;单日必须完成消息视图中的全部顾客,失败时保留已完成进度并可安全重试。"
|
|
},
|
|
{
|
|
"id": "shop.douyin_customer_service.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "customer_messages",
|
|
"name": "采集抖音客服历史会话消息",
|
|
"description": "复用抖音账号 vault 的 Cookie 跳过登录(指纹隐藏模式),打开飞鸽历史会话,按控制台选择的业务日期设置开始/结束日期,接待类型勾选纯人工客服接待与智能客服转人工接待,逐条点击查看会话读取聊天消息,解析抽屉右侧咨询订单面板的商品/订单并与会话绑定,全部幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "抖音飞鸽客服后台",
|
|
"label": "历史会话筛选列表与会话明细"
|
|
},
|
|
{
|
|
"system": "抖音账号状态",
|
|
"label": "douyin-shop 账号 Cookie 与 Profile"
|
|
}
|
|
],
|
|
"processing": [
|
|
"将开始和结束日期设置为业务日期,接待类型勾选纯人工客服接待与智能客服转人工接待",
|
|
"按分页逐条点击查看会话,滚动加载抽屉内的完整聊天消息",
|
|
"按会话 ID 和消息身份规范化,解析咨询订单面板绑定商品/订单,校验会话覆盖完整后幂等入库"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "抖音客服单日会话行原始数据"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "抖音客服会话与消息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/dy_customer_service_messages.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "抖音客服消息日采集"
|
|
},
|
|
"note": "每月 1 日凌晨自动采集近 30 天;控制台支持自定义日期范围;单日必须完成筛选结果中的全部会话,失败时保留已完成进度并可安全重试。"
|
|
},
|
|
{
|
|
"id": "shop.tmall_customer_service.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "customer_messages",
|
|
"name": "采集天猫客服聊天记录",
|
|
"description": "复用光影行星旗舰店:龙虾仔账号 vault 的 Cookie,使用 Scrapling 隐藏指纹浏览器打开千牛聊天记录查询页;按控制台选择日期范围,每次按不超过 31 天拆分查询,逐个会话读取消息并幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "天猫千牛客服后台",
|
|
"label": "聊天记录查询列表与会话消息"
|
|
},
|
|
{
|
|
"system": "天猫账号状态",
|
|
"label": "tmall-shop 账号 vault Cookie 与独立 Profile"
|
|
}
|
|
],
|
|
"processing": [
|
|
"限制查询范围为最近三个月,并拆分为每次最多 31 天的日期窗口",
|
|
"滚动加载查询结果中的全部会话,逐个选中并读取消息时间、发送人、文本及媒体链接",
|
|
"按账号、顾客、会话和消息指纹规范化;保存每个查询窗口的原始产物并幂等写入 PostgreSQL"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "天猫客服会话与消息 JSON"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "天猫客服会话与消息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/tmall_customer_service_messages.py",
|
|
"args": [
|
|
"--start-date",
|
|
"{business_date}",
|
|
"--end-date",
|
|
"{business_date}",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "天猫客服聊天记录采集"
|
|
},
|
|
"note": "控制台可选择最近三个月内的开始和结束日期;每次平台查询不超过 31 天,按窗口顺序采集。默认不自动调度,失败窗口保留已完成数据,可安全重试。"
|
|
},
|
|
{
|
|
"id": "shop.tmall_negative_reviews.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "negative_reviews",
|
|
"name": "采集天猫差评及商品信息",
|
|
"description": "复用 tmall-shop 账号 vault Cookie,使用 Scrapling 隐藏指纹浏览器打开千牛评价管理;先设置控制台选择的评价时间范围并固定情感分类为负面评价(emotion=13),再点击搜索;分页采集评论文字、图片、主评 ID、评价时间和商品名称,不读取或保存订单号,核对总数后幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "天猫千牛评价管理",
|
|
"label": "负面评价列表"
|
|
},
|
|
{
|
|
"system": "天猫账号状态",
|
|
"label": "tmall-shop vault Cookie 与隔离 Profile"
|
|
}
|
|
],
|
|
"processing": [
|
|
"将控制台选定的起止日期设置为评价时间,并选择负面评价后再搜索;日期不留空,避免页面执行全日期查询",
|
|
"分页读取评价文字、图片链接、主评 ID、评价时间和关联商品名称,不采集订单号",
|
|
"核对页面总数和评价 ID 覆盖完整后,按账号及主评 ID 幂等写入 PostgreSQL"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "天猫差评范围采集 JSON"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "天猫差评及商品信息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/tmall_negative_reviews.py",
|
|
"args": [
|
|
"--start-date",
|
|
"{business_date}",
|
|
"--end-date",
|
|
"{business_date}",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "天猫差评范围采集"
|
|
},
|
|
"note": "控制台选择实际评价时间范围;页面不选择评价时间会查询所有日期,因此工作流会先填入日期并固定筛选负面评价后再搜索。默认不自动调度。"
|
|
},
|
|
{
|
|
"id": "shop.dy_negative_reviews.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "negative_reviews",
|
|
"name": "采集抖音差评及商品信息",
|
|
"description": "复用抖音账号 vault 的 Cookie(指纹隐藏模式),打开抖店评价管理-评价明细,筛选差评并把评价时间设置为控制台选择的业务日,逐页读取评价文字、图片、评价状态与商品名称/商品ID/规格,全部页面完成后幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "抖店评价管理后台",
|
|
"label": "差评评价列表"
|
|
}
|
|
],
|
|
"processing": [
|
|
"点击评价等级「差评」并把评价时间设置为业务日 00:00:00-23:59:59",
|
|
"按分页完整读取评价文字、图片与商品信息",
|
|
"按账号、业务日期和评价(订单)ID 校验完整后幂等入库"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "抖音差评单日原始数据"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "抖音差评及商品信息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/dy_negative_reviews.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "抖音差评日采集"
|
|
},
|
|
"note": "每月 1 日凌晨自动采集近 30 天(含当天);控制台支持自定义日期范围,范围按业务日逐日采集;评价历史仅保留近 30 天,超出范围按 0 条成功;相同账号和日期重复执行按评价(订单)ID 幂等。"
|
|
},
|
|
{
|
|
"id": "shop.douyin_after_sales_quality.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "after_sales_quality",
|
|
"name": "采集抖音品质原因售后单",
|
|
"description": "复用抖音账号 vault 的 Cookie 跳过登录(Scrapling 隐藏指纹模式),打开售后工作台,通过更多筛选把申请原因固定为商品品质原因,可按控制台自定义申请时间范围(不设置时间则为页面默认最近6个月全量查询),逐条点击查看详情,在新页签读取协商记录的退货原因、退款说明、凭证信息和交易信息的商品名称、商品ID、商家编码,按申请时间归属业务日后幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "抖音售后工作台",
|
|
"label": "品质原因售后列表与售后详情协商记录"
|
|
},
|
|
{
|
|
"system": "抖音账号状态",
|
|
"label": "douyin-shop 账号 Cookie 与 Profile"
|
|
}
|
|
],
|
|
"processing": [
|
|
"展开更多筛选并将申请原因固定为商品品质原因,可设置申请时间开始/结束日期",
|
|
"按分页逐条点击查看详情,在新页签展开协商记录并读取退货原因、退款说明、凭证信息与商品信息",
|
|
"按申请时间的上海日期归属业务日,以账号和售后编号幂等入库,协商记录按条目序号幂等保存"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "抖音品退售后单原始数据"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "抖音品质原因售后单与协商记录表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/dy_after_sales_quality.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "抖音品退售后单采集"
|
|
},
|
|
"note": "每月 1 日凌晨自动采集近 30 天;控制台支持自定义日期范围;不设置申请时间时按页面默认查询最近6个月做全量采集。每条售后单按申请时间归属业务日,重复执行按账号和售后编号幂等更新,失败时保留已完成进度并可安全重试。"
|
|
},
|
|
{
|
|
"id": "shop.jd_negative_reviews.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "negative_reviews",
|
|
"name": "采集京东差评及商品信息",
|
|
"description": "按控制台选择的京东店铺和业务日期打开商品评价管理,选择差评并分页读取评价内容、评价时间、订单号、商品名称、SKU 和图片;全部页面完成后幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "京东商品评价后台",
|
|
"label": "差评评价列表"
|
|
}
|
|
],
|
|
"processing": [
|
|
"设置业务日 00:00:00 至 23:59:59 并选择差评",
|
|
"按分页完整读取评价与商品信息",
|
|
"按账号、业务日期和评价 ID 校验完整后幂等入库"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "京东差评单日原始响应"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "京东差评及商品信息表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/jd_negative_reviews.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "京东差评日采集"
|
|
},
|
|
"note": "每月 1 日凌晨自动采集近 30 天(含当天);控制台支持按店铺选择日期范围,范围按业务日逐日采集;相同账号、店铺和日期重复执行按评价 ID 幂等。"
|
|
},
|
|
{
|
|
"id": "shop.jd_after_sales_issues.daily",
|
|
"module": "shop_intelligence",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "after_sales_issues",
|
|
"name": "采集京东品退异常问题",
|
|
"description": "按控制台选择的日期范围打开京东商智售后分析,筛选商品出现异常并查看全部服务单明细;点击下载数据,读取全部分页,只保留用户原声不是未知的服务单及商品名称、SKU 等信息,按服务单申请日期归属业务日后幂等写入 PostgreSQL。",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "京东商智",
|
|
"label": "售后分析异常服务单明细"
|
|
}
|
|
],
|
|
"processing": [
|
|
"将售后分析时间设置为控制台提交的自定义日期范围;商智单次最多 31 天时按连续区间查询",
|
|
"筛选售后原因商品出现异常并读取全部服务单明细分页",
|
|
"过滤用户原声为未知或空的记录,按服务单申请日期归属业务日,并以账号、业务日和服务单 ID 幂等入库;范围完成后清理同账号范围内申请时间落在范围外的历史残留"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "本地原始产物",
|
|
"label": "京东品退日期范围明细及下载审计"
|
|
},
|
|
{
|
|
"system": "PostgreSQL",
|
|
"label": "京东品退异常服务单表"
|
|
}
|
|
]
|
|
},
|
|
"entry": "collectors/jd_after_sales_issues.py",
|
|
"args": [
|
|
"--date",
|
|
"{business_date}",
|
|
"--range-days",
|
|
"30",
|
|
"--headless"
|
|
],
|
|
"timeout_seconds": 14400,
|
|
"replay_policy": "idempotent"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "shop",
|
|
"task_name": "京东品退问题日采集"
|
|
},
|
|
"note": "每月 1 日凌晨自动采集近 30 天(含当天);控制台固定使用研发旗舰账号并支持直接提交日期范围。一次范围运行会在商智最多 31 天限制下按连续区间查询,完成后按服务单申请日期写入业务日并清理范围外申请时间的历史残留;相同账号、业务日和服务单 ID 重复执行按幂等更新。"
|
|
},
|
|
{
|
|
"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": "每小时自动执行;仍可在控制台手动执行。每个时点都会重新扫描,已申诉商品不会再次出现可申诉入口;安全预演不访问抖音也不提交申诉。"
|
|
},
|
|
{
|
|
"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.online_stock_alert.daily",
|
|
"module": "product_commerce",
|
|
"trigger": "scheduled",
|
|
"execution": {
|
|
"steps": [
|
|
{
|
|
"id": "query_filter_notify",
|
|
"name": "查询线上商品并发送低库存预警",
|
|
"description": "使用企业数据交互商品列表接口查询线上渠道全部商品;库存低于 3 时,将 SKU、商品名称和库存汇总发送给配置的飞书接收人。",
|
|
"replay_policy": "idempotent",
|
|
"data_flow": {
|
|
"sources": [
|
|
{
|
|
"system": "企业数据交互接口",
|
|
"label": "线上渠道商品与当前库存"
|
|
}
|
|
],
|
|
"processing": [
|
|
"以 channel=0、keyword=空查询商品列表",
|
|
"筛选 total_stock 小于 3 的 SKU",
|
|
"按飞书消息幂等键去重并分段组织预警"
|
|
],
|
|
"destinations": [
|
|
{
|
|
"system": "飞书",
|
|
"label": "低库存 SKU、商品名称与库存预警",
|
|
"condition": "存在库存低于 3 的 SKU"
|
|
}
|
|
]
|
|
},
|
|
"entry": "online_stock_alert.py"
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "data-hub",
|
|
"task_name": "OnlineItemStockAlert"
|
|
}
|
|
},
|
|
{
|
|
"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": "PostgreSQL / 品牌行军图",
|
|
"label": "market_product 与 fact_market_product_snapshot 月度快照"
|
|
}
|
|
]
|
|
},
|
|
"entry": "orchestrate_market_rank_collection.py",
|
|
"args": [
|
|
"--report-date",
|
|
"{business_date}"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"provenance": {
|
|
"source_project": "product",
|
|
"task_name": "三平台市场排行月采集"
|
|
},
|
|
"note": "每月 1 日 10:00 由项目内 Python 调度器触发。"
|
|
}
|
|
]
|
|
}
|