CGL SCRM  /  index

总览

一眼看懂这套系统

这套系统是干什么的

简单说:CGL 市场部平时用来「拉客户、办活动、发内容、看效果」的那套后台系统。

它原来跑在 iSupport(cgl.contentour.com)上。我们把它整个重做了一遍—— 页面长得一样、按钮位置一样、操作习惯一样,过去几年攒下来的数据一条不少地搬了过来。 换句话说:市场部的同事不需要学新东西,照着老习惯用就行。

另外补了一样原系统从来没有的东西:一套「机器接口」。 它让 AI 助手(比如 WorkBuddy、豆包)能直接跟这套系统对话—— 问「上周那个活动的报名情况怎么样」,AI 自己去查,不用人登录后台一条条翻。 这块是全新的,装在最外面,不碰任何原来的页面。

这一站要讲什么:把「这套系统到底有什么」讲到能对着代码核对的粒度—— 每个功能在哪个文件里、每张表有哪些字段、每个机器接口对应哪个网址。 页面上的数字全部是打开这一页时刚从代码里数出来的,不是谁手抄上去的。 唯一手写的,只有「库里有多少条数据、发过哪些文件」这类代码里根本查不到的事。

一眼看懂规模 打开页面时现数

下面每个数字,都能在左边对应的页面里查到逐条明细。

199
网页与接口地址
后台页 · 前台页 · 接口
69
数据表
共 1,129 个字段
21
给 AI 用的工具
AI 能直接调用的动作
17
功能模块
线索 / 活动 / 问卷 / 内容…
15
业务逻辑模块
共 162 个功能点
56
页面模板
手机上打开也是同一套
11
上线前自检关卡
每改一次代码全跑一遍
169
防回归检查
拦住「修好又坏掉」

代码有多少

68
程序文件
约 23.3 千行
103
运维小工具
导入 / 校验 / 排查
26
测试文件
每次改代码都跑
11
自检关卡
一条命令全跑完

从哪一页开始看

13 页。建议按顺序:先看清全貌,再看系统构成,最后看资产与账目。

四条原则

这四条决定了「为什么这么做」,后面每一页的取舍都是从这里来的。

100% 复刻优先
原站的路径、字段名、参数名、页面形态一律照搬 —— 老脚本与老前端能平移。
新增能力只在边上加
对外开放 API 与 MCP 是原站完全没有的,单独一个 /api/v1 命名空间,不改动被复刻的路径。
数据原样入库
历史数据逐字段复原,不做「清洗」;拿不准的列宁可为空也不编造。
一条事实只写一次
能推导的绝不手打;能加守护的绝不靠纪律。

用什么搭的

部分用的东西
语言 / 运行时Python 3.12
Web 框架FastAPI + Starlette
ORM / 迁移SQLAlchemy 2.0 + Alembic 风格自建迁移
模板Jinja2 服务端渲染(SSR)
生产数据库PostgreSQL(经 HTTP 网关 postgresql+httpgw://)
开发数据库SQLite(data/dev.db)
部署腾讯云 CloudBase 云托管(容器)+ Cloudflare Worker 反代
对象存储腾讯云 COS
包管理pip + constraints.txt 钉版本

数据现在有多少 这一块是手写的

全站只有这一块是手填的——因为「库里到底有几条」在代码里推不出来,只能去库里数。 本地那列由生成器连开发库刷新,且带一道保险:万一连错到生产库,脚本会直接拒绝运行, 免得把生产的数字当成"本地"记进档案。

数据本地(复原后)生产说明
lead 11,352 11,348 本地这列含少量测试残留;干净复原后是 11,348,和生产自报的数一模一样
event_signup 9,927 9,924 其中 8,544 条是从老系统带过来的报名记录
event 160 160 —
content_item 27 25 —
content_tag 14 10 —
questionnaire 4 3 —
traffic_source 61 61 —
lead_tag_rel 1,464 — 「哪条线索打了哪个标签」的对应关系
看数字前先问一句:这是在跑测试之前还是之后数的? 每跑一次测试会自动多出 2 条线索 / 1 条报名——所以两个时间点数的结果本来就不同。
  • 本地复原态读数(干净复原 = 清库 → pytest → 8 个导入器)与生产读数不是同一件事:本地每跑一次 pytest 会各多 2 条 lead / 1 条 event_signup(测试残留)。
  • 本地干净值 lead = 11,348,正好等于生产 GET /api/v1/health 自报的 lead_total ⇒ 本地复原库与生产库条数一致。
  • event_signup 9,924 = legacy_tid 非空 8,544 + 空 1,380(空的那批是系统自己的报名,原站没有 legacy 编号)。
  • 报任何读数前先问一句:这是在 pytest 之前还是之后取的。

怎么访问

正式地址https://scrm.jxccwx.com 只用这个
跑在哪腾讯云 CloudBase 云托管 · cgl2026-d3g47uxxhf6ec8611 / cgl-scrm(ap-shanghai)
平台给的默认网址cgl-scrm-315970-8-1316982540.sh.run.tcloudbase.com 别用
为什么不能用平台给的默认网址? 那个域名没有备案,用浏览器打开会被腾讯云拦到一个「风险提醒」页面,根本进不去。 所以我们绕了一层,用自己备案过的域名 scrm.jxccwx.com 对外。 (这是技术上的绕行办法,不等于完成了合规手续。)