本文档自动生成,覆盖系统全部 107 个接口。分为「对外开放 API」「公开接口」「后台管理接口」三部分。
线上:https://cj.zhengl.vip
① 对外 API Key 鉴权(/api/v1/*):在「API」菜单创建授权,请求头携带
Authorization: Bearer ZK-xxxxxxxx
② 后台管理接口:需先调用 POST /api/login 登录(使用管理员/用户账号),浏览器自动携带会话 Cookie。
③ 公开接口:无需鉴权(健康检查、系统信息、H5 预览、访问记录、登录等)。
| 权限 key | 中文名称 |
|---|---|
dashboard | 首页概览 |
task_manage | 任务管理 |
content_manage | 内容管理 |
tag_manage | 标签管理 |
source_manage | 来源管理 |
template_manage | 模板管理 |
report_view | 数据报表 |
user_manage | 用户管理 |
api_manage | API管理 |
settings_manage | 系统设置 |
log_view | 操作日志 |
media_generate | 媒体生成 |
content_read | 内容读取(API) |
content_write | 内容写入(API) |
task_create | 发起任务(API) |
权限叠加规则:用户有效权限 = 用户自身权限 ∪ 所属各用户组权限(多组叠加);admin 角色自动拥有全部权限。用户组与用户的权限勾选均以中文展示,底层存储 key。
{"code": 0, "msg": "ok", "data": {...}} # 对外接口
{"ok": true, ...} # 管理接口
权限:task_create
创建采集任务,系统排队执行采集 → AI 生成图文 → 打标全流程。支持「精准采集」(关键字+标签)与「智能采集」(一句话描述)。
{
"name": "高血压慢病断药采集",
"scene": "慢病断药",
"disease": "高血压",
"keyword": "高血压 用药",
"target_count": 5,
"source_ids": [1,2,3], // 可选,留空=全部商用来源
"mode": "precise", // precise=精准 / smart=智能(默认precise)
"description": "采集高血压患者断药相关的健康科普", // smart模式必填
"icd_tags": ["高血压病"], "sic_tags": ["高血压"],
"sic_med_tags": [], "crowd_tags": [], "lifestyle_tags": [],
"space_tags": [], "time_tags": ["全年通用"], // 时间标签必选
"func_tags": ["用药规范","疾病科普"]
}
返回:{"code":0,"data":{"taskNo":"TASK-...","status":"queued"}}
字段说明:name=任务名称;mode=采集方式(precise 精准:按 keyword+tags 严格采集;smart 智能:按 description 一句话描述自动采集并打标);target_count=目标数量;source_ids=来源ID数组;*_tags=标签组合。
权限:content_write
{
"title": "高血压患者如何规律服药",
"disease": "高血压",
"content": "<p>正文HTML...</p>",
"digest": "摘要...",
"cover_image": "https://cdn.sinoxk.com/...",
"recommend_speech": "推荐话术...",
"source_name": "广东省疾病预防控制中心",
"tags": {"icd":["高血压病"],"sic":["高血压"],"time":["全年通用"],"func":["疾病科普"]}
}权限:content_read
按标签组合查询内容,返回多条(含标题/摘要/封面/正文/来源/标签)。
{
"icd": ["高血压病"], "sic": ["高血压"], "sic_med": [],
"crowd": [], "func": ["用药规范"], "limit": 10
}
也支持 GET:/api/v1/content/feed?sic=高血压&func=用药规范&limit=10
权限:content_read
按条件导出内容数据,支持 JSON 与 Excel 两种格式。
GET /api/v1/content/export?icd=高血压病&func=用药规范&limit=500 GET /api/v1/content/export.xlsx?sic=高血压
权限:content_read
查询内容的推送次数、访问次数、访问时长、访问设备等记录,用于统计内容触达与阅读效果。
GET /api/v1/push-logs?content_id=AUTO-ZK-...&limit=50
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health | 健康检查 |
| GET | /api/system/info | 系统名称/Logo/发布类型 |
| GET | /api/content/{cid}/preview | 内容 H5 预览页(用于链接分享,自动记录访问) |
| POST | /api/content/{cid}/record | 访问记录上报(action=open 匿名;action=push 需 API Key) |
| GET | /api/content/{cid}/stats | 内容访问统计 |
| POST | /api/login | 登录,返回会话 Cookie |
| GET | /api/login/check | 会话有效性校验 |
| GET | /api/docs | 本文档 |
访问记录参数:action=push|open;duration=浏览时长(秒);channel=渠道;open_uuid=打开来源;device=设备类型。预览页已内置自动上报脚本,分享链接后系统自动记录访问设备、浏览时长与打开次数。
| 方法 | 路径 | 说明 | 请求体/参数 |
|---|---|---|---|
| PUT | /api/tag-group | 重命名标签组(组内全部标签一并修改) | {"tag_type":"crowd","group":"旧组名","new_group":"新组名"}(string,均必填) |
| POST | /api/tag-group/toggle | 标签组整体启用/停用 | {"tag_type":"crowd","group":"组名","enabled":0或1} |
| DELETE | /api/tag-group?tag_type=&group= | 删除标签组及组内标签;组内任一标签已被内容使用时返回 400 拒绝删除 | query:tag_type(string)、group(string) |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 授权 ID |
| name | string | 授权名称 |
| api_key | string | 调用密钥(ZK- 前缀,仅创建时完整返回) |
| scopes | array<string> | 权限:task_create 发起采集任务 / content_read 获取内容 / content_write 新增内容 |
| enabled | int | 1 启用 / 0 停用 |
| remark | string | 备注 |
| last_used_at | datetime | 最后调用时间 |
接口:GET /api/api-keys 列表;POST /api/api-keys 创建(body:{"name":string, "scopes":array, "remark":string},返回一次性完整 key);PUT /api/api-keys/{kid} 更新;DELETE /api/api-keys/{kid} 删除。
| 权限 | 可调用的对外接口 |
|---|---|
task_create | POST /api/v1/tasks — 发起采集任务 |
content_read | POST|GET /api/v1/content/feed — 获取内容;GET /api/v1/content/export(.xlsx) — 导出内容;GET /api/v1/push-logs — 推送记录查询;POST /api/content/{id}/record?action=push — 推送数据上报 |
content_write | POST /api/v1/content — 新增内容 |
| (任意有效 Key) | POST /api/users/sync、POST /api/groups/sync — 用户/用户组同步 |
后台「创建 API 授权」弹窗按 API 类型(发起采集任务/获取内容/新增内容/数据上报/推送记录查询)分组勾选,勾选后自动映射到上表权限 scope。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| days | int | 否 | 时间范围天数,默认 30 |
| model | string | 否 | 按模型筛选 |
| stage | string | 否 | 按流程阶段筛选 |
| task_no | string | 否 | 按任务号模糊匹配 |
| page / size | int | 否 | 分页,默认 1 / 20 |
返回 {"total":int,"page":int,"size":int,"items":[{time,task_no,task_name,stage,step,model,prompt_tokens,completion_tokens,total_tokens,cost}]};cost 为 number|null——按「AI 模型配置」中该模型的价格(元/千 tokens)估算的费用,未配置价格时为 null。GET /api/report/tokens-detail/export 相同筛选参数导出 CSV(含费用估算列)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| days | int | 否 | 统计时间范围(天数),默认 30 |
| tag | string | 否 | 标签筛选,作用于推送/内容/采集数据块 |
| model | string | 否 | 模型 ID 筛选,作用于 tokens 数据块 |
返回新增 collect_report(采集数据块):任务总数/完成/失败、目标与完成数量、达成率、内容完整度(标题/摘要/正文/封面图/内容链接/标签/来源 各字段填充率与完整率)、按日期采集趋势。
以下接口均需登录会话(Cookie 或 Authorization: Bearer <token>),用户/用户组管理操作需 管理员权限。
返回系统全部权限点(key + 中文名称),供用户/用户组权限勾选使用。
GET /api/scopes
→ {"items":[{"key":"dashboard","name":"首页概览"},{"key":"task_manage","name":"任务管理"},...]}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| kw | string | 否 | 按用户名/昵称模糊搜索 |
| page | int | 否 | 页码,默认 1 |
| size | int | 否 | 每页条数,默认 50 |
返回 {"total":总数,"items":[用户对象]},用户对象字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 用户ID |
| username | string | 用户名(唯一) |
| nickname | string | 昵称 |
| role | string | 角色:admin 管理员 / editor 编辑 / viewer 只读 |
| string | 邮箱 | |
| scopes | array<string> | 用户自身权限 key 数组 |
| status | int | 1 启用 / 0 停用 |
| tokens_quota | int | tokens 额度,0 = 不限量 |
| groups | array<string> | 所属用户组名称列表 |
| group_ids | array<int> | 所属用户组 ID 列表 |
| eff_scopes | array<string> | 有效权限(自身 ∪ 各组叠加后的结果) |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 是 | 用户名,全局唯一,重复返回 400 |
| password | string | 否 | 初始密码,默认 123456 |
| nickname | string | 否 | 昵称 |
| role | string | 否 | admin / editor / viewer,默认 viewer;v18 起新建用户可只传用户组(group_ids),权限由用户组控制 |
| string | 否 | 邮箱 | |
| phone | string | 否 | 手机号 |
| scopes | array<string> | 否 | 权限 key 数组,如 ["task_manage","report_view"],全量见 /api/scopes |
| group_ids | array<int> | 否 | 所属用户组 ID 数组,可多选,权限叠加 |
| tokens_quota | int | 否 | tokens 额度,0 = 不限量 |
{"username":"zhangsan","password":"Abc@123456","nickname":"张三","role":"editor",
"email":"zhangsan@example.com","scopes":["task_manage","content_manage"],
"group_ids":[1,3],"tokens_quota":1000000}
→ {"ok":true,"id":12}请求体与新建相同(UserIn),全部字段均可选;额外说明:
| 字段 | 类型 | 说明 |
|---|---|---|
| password | string | 传入则重置密码,留空不改 |
| group_ids | array<int> | 传入则整体替换所属组(先清空后重建) |
| status | int | 1 启用 / 0 停用 |
返回 {"ok":true};用户不存在返回 404,用户名冲突返回 400。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| password | string | 否 | 新密码,默认 123456 |
POST /api/users/12/reset-password {"password":"New@123456"}
→ {"ok":true,"password":"New@123456"}无请求体,切换启停状态;不能停用当前登录账号(返回 400)。返回 {"ok":true,"status":1或0}
删除用户及其用户组关联;不能删除当前登录账号。返回 {"ok":true}
返回当前会话用户对象(字段同用户列表,不含 groups/eff_scopes),未登录返回 401。
返回 {"items":[用户组对象]},字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 组ID |
| name | string | 组名(唯一) |
| code | string | 组编码(唯一,默认取组名) |
| scopes | array<string> | 组权限 key 数组(后台以中文展示) |
| remark | string | 备注 |
| member_count | int | 成员数量 |
| members | array<object> | 成员列表 [{id,username,nickname}] |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 组名,唯一;组名或编码重复返回 400 |
| code | string | 否 | 组编码,唯一,默认取组名 |
| scopes | array<string> | 否 | 权限 key 数组(全量与中文名见 /api/scopes) |
| remark | string | 否 | 备注 |
| member_ids | array<int> | 否 | 成员用户 ID 数组,可多选 |
{"name":"运营组","code":"ops","scopes":["task_manage","content_manage","report_view"],
"remark":"内容运营","member_ids":[3,5]}
→ {"ok":true,"id":2}请求体同新建;member_ids 传入则整体替换成员。返回 {"ok":true}
删除组及其成员关联(用户本身不受影响)。返回 {"ok":true}
原「媒体配置」升级为「AI 模型配置」:每条配置即一个可用 AI 接口(地址 + Key + 接口类型 + 模型),供任务流程各步骤与生图/生视频调用。
返回配置对象数组,字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 配置ID |
| name | string | 配置名称 |
| cfg_type | string | 配置类型:chat 对话 / vision 视觉理解 / image 生图(video 生视频) |
| api_type | string | 接口类型:openai / anthropic / gemini / openai_responses / new_api / dashscope / custom |
| base_url | string | AI 接口地址 |
| api_key | string | 密钥(auth_mode=subscription 时可留空) |
| model | string | 模型 ID |
| size | string | 生图分辨率,默认 1024x1024 |
| provider | string | 预设供应商:qwen 千问 / deepseek 深度求索 / mimo / qianfan 百度千帆 / hunyuan 腾讯混元 / kimi / siliconflow 硅基流动 / volcengine 火山引擎 / tokenhub |
| auth_mode | string | 鉴权模式:key 密钥模式 / subscription tokenHub 订阅模式 |
| price_in | float | 输入价格(元/千 tokens),用于报表费用估算,默认 0(v18) |
| price_out | float | 输出价格(元/千 tokens),用于报表费用估算,默认 0(v18) |
| extra | string | 附加 JSON 配置 |
| enabled | int | 1 启用 / 0 停用 |
请求体字段与上表一致,其中:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 配置名称 |
| cfg_type | string | 是 | chat / vision / image |
| api_type | string | 否 | 默认 openai;new_api/dashscope/custom 按 OpenAI 兼容协议调用 |
| base_url | string | 否 | 接口地址;留空时按 api_type 使用官方默认地址 |
| api_key | string | 否 | 密钥 |
| model | string | 否 | 模型 ID,如 qwen-plus、deepseek-chat、mimo-v2.5 |
| size | string | 否 | 默认 1024x1024 |
| provider | string | 否 | 预设供应商 key,选择后前端自动填充 base_url / model |
| auth_mode | string | 否 | key / subscription,默认 key |
| extra | string | 否 | 附加 JSON |
| enabled | int | 否 | 默认 1 |
{"name":"千问-对话","cfg_type":"chat","api_type":"dashscope","base_url":"https://dashscope.aliyuncs.com/compatible-mode/v1",
"api_key":"sk-xxx","model":"qwen-plus","provider":"qwen","auth_mode":"key","enabled":1}
→ {"ok":true,"id":3}
DELETE /api/media-configs/{mid} 删除配置。流程步骤级模型绑定:在「AI 模型配置」页为每个流程步骤选择接口配置(cfg)+ 模型 ID,保存至 flow_models 设置项,格式 {"标题生成":{"cfg":3,"model":"qwen-plus"}}。
以下接口均需登录会话(Cookie)。每节列出请求参数/请求体字段与返回字段(名称 · 类型 · 说明)。
GET /api/tasks — 任务列表
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | string | 否 | 状态筛选:pending 排队 / running 运行中 / done 完成 / failed 失败 |
| page / size | int | 否 | 分页,默认 1 / 20 |
返回 {"total":int,"items":[任务对象]},任务对象字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 任务ID |
| task_no | string | 任务编号(TASK- 前缀) |
| name | string | 任务名称 |
| source_type | string | 来源类型 |
| status | string | pending / running / done / failed |
| progress | int | 进度百分比 0-100 |
| target_count / done_count | int | 目标数量 / 已完成数量 |
| scene / disease / keyword | string | 场景 / 疾病 / 关键词 |
| icd_tags / sic_tags / sic_med_tags / crowd_tags / lifestyle_tags / space_tags / time_tags / func_tags | array<string> | 八类标签组合 |
| source_ids | array<int> | 指定来源ID |
| mode | string | precise 精准 / smart 智能 |
| img_mode / img_size | string | 插图模式(none/ai/collect)与分辨率 |
| tokens | int | 任务累计 tokens 消耗 |
| ai_prompt / requirement | string | 自定义提示词 / 一句话需求 |
| stage / stages | string / object | 当前阶段 / 各阶段执行状态 |
| result / error | string | 结果说明 / 错误信息 |
| created_at / finished_at | datetime | 创建 / 完成时间 |
| articles | array<object> | 任务已产出文章列表 [{id,content_id,title,cover_image,scene}] |
POST /api/tasks — 创建任务(请求体 TaskIn)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 任务名称 |
| requirement | string | 否 | 一句话需求描述(智能模式使用) |
| scene | string | 否 | 采集场景 |
| disease | string | 否 | 疾病名 |
| keyword | string | 否 | 采集关键词 |
| target_count | int | 否 | 目标数量,默认 5 |
| icd_tags ~ func_tags | array<string> | 否 | 八类标签组合(同上表) |
| ai_prompt | string | 否 | 自定义 AI 提示词 |
| source_ids | array<int> | 否 | 指定来源,留空=全部 |
| mode | string | 否 | precise(默认)/ smart |
| img_mode | string | 否 | 插图:none(默认)/ ai / collect |
| img_size | string | 否 | AI 插图分辨率,默认 1024x1024 |
其他任务接口:GET /api/tasks/{tid} 任务详情(返回任务对象);GET /api/tasks/{tid}/exec 执行过程(35 子步骤逐条状态);POST /api/tasks/{tid}/cancel 取消运行中任务;DELETE /api/tasks/{tid} 删除任务;POST /api/tasks/auto-config AI 自动配置(body:{"requirement":string},返回建议的场景/标签/数量)。
GET /api/content — 内容列表
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| scenario | string | 否 | 按场景筛选 |
| disease | string | 否 | 按疾病标签模糊筛选 |
| keyword | string | 否 | 按标题/正文模糊搜索 |
| tag / tag_type | string | 否 | 按标签筛选;tag_type 指定标签类别(icd/sic/sic_med/crowd/lifestyle/space/time/func),留空在全部类别中搜索 |
| status | string | 否 | active 启用 / stopped 停用 |
| page / size | int | 否 | 分页,默认 1 / 20 |
返回 {"total":int,"items":[内容对象],"page":int,"size":int},内容对象字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 自增ID |
| content_id | string | 内容编号(AUTO-ZK- 前缀,全局唯一) |
| title / digest / recommend_speech | string | 标题 / 摘要 / 推荐话术 |
| body_html | string | 正文 HTML |
| cover_image | string | 封面图 URL |
| content_link | string | H5 预览链接 |
| icd_tags ~ func_tags | array<string> | 八类标签 |
| scene / source / source_name | string / array / string | 场景 / 来源URL列表 / 来源名称 |
| status | string | active / stopped |
| verification / verify_note | string | 医学校验结果 / 说明 |
| image_status / image_url / video_status | int / string / int | 科普图状态(0未生成1生成中2已生成)与URL / 视频状态 |
POST /api/content — 新增内容(请求体 ContentIn,字段同上表可写字段):title 必填;body_html 正文 HTML;status 默认 active。返回 {"ok":true,"content_id":"AUTO-ZK-..."}。
PUT /api/content/{cid} 编辑(请求体同 ContentIn);DELETE /api/content/{cid} 删除;POST /api/content/{cid}/stop|resume 停用/恢复;GET /api/content/{cid}/stats 访问统计(push_count、open_count 等);POST /api/content/{cid}/generate-image 生成科普图(body 可选:{"size":string});POST /api/content/{cid}/generate-video 生成视频;POST /api/content/{cid}/video-generate 创建视频生成任务(body VideoGenIn:prompt string、first_frame_url/last_frame_url string、ratio string、resolution string、duration int、storyboard array、model string、config_id int、audio bool)。
GET /api/tags 返回标签数组,字段:id int、tag_type string(icd/sic/sic_med/crowd/lifestyle/space/time/func)、group_name string(分组名)、tag_value string(标签值)、map_sic / map_icd string(SIC/ICD 映射)、enabled int、is_custom int。GET /api/tags/options 返回标签选项(按类别分组的下拉数据)。
POST /api/tags — 新增标签(请求体 TagIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tag_type | string | 是 | 标签类别 |
| tag_value | string | 是 | 标签值 |
| group_name | string | 否 | 所属分组,默认「通用」 |
| map_sic / map_icd | string | 否 | SIC / ICD 标准映射 |
| enabled | int | 否 | 默认 1 |
| is_custom | int | 否 | 是否自定义标签,默认 0 |
PUT /api/tags/{tid} 编辑(请求体同 TagIn);DELETE /api/tags/{tid} 删除(已被内容使用的标签返回 400)。标签组接口见第三章「标签组接口」。
GET /api/sources 参数:group_id int(分组筛选)、keyword string(名称/域名搜索)、enabled int(0=全部,默认)、page/size int(默认 1/200)。返回 {"total":int,"items":[{id:int,name:string,domain:string,category:string,url:string,group_id:int,enabled:int}]}。
POST /api/sources — 新增来源(SourceIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 来源名称 |
| domain | string | 是 | 来源域名 |
| category | string | 否 | 分类,默认「政府机构」(可选 疾控/三甲医院/权威学会 等) |
| url | string | 否 | 站点首页 |
| group_id | int | 否 | 所属来源分组ID,默认 0 |
| enabled | int | 否 | 默认 1 |
PUT /api/sources/{sid} 编辑(请求体同 SourceIn);DELETE /api/sources/{sid} 删除。
GET /api/source-groups 返回来源分组数组(含组内来源)。POST /api/source-groups(SourceGroupIn:name string 必填、remark string、source_ids array<int> 组内来源)。PUT /api/source-groups/{gid}、DELETE /api/source-groups/{gid}。
GET /api/blacklist 返回黑名单数组(domain、reason、enabled)。POST /api/blacklist(BlackIn:domain string 必填、reason string、enabled int 默认 1)。DELETE /api/blacklist/{bid}。
GET /api/templates 返回模板数组:id int、name string、version string、is_default int(1 默认模板)、content string(模板 HTML,支持变量占位符)。
POST /api/templates — 新增模板(TemplateIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 模板名称 |
| content | string | 是 | 模板 HTML 内容 |
| version | string | 否 | 版本号,默认 1.0 |
| is_default | int | 否 | 设为默认模板 1/0,默认 0;设为默认时原默认模板自动取消 |
PUT /api/templates/{tid} 编辑(请求体同 TemplateIn);POST /api/templates/{tid}/copy 复制模板;DELETE /api/templates/{tid} 删除。
GET /api/settings 返回 {"settings":{key:value,...}},常用键:
| 键 | 类型 | 说明 |
|---|---|---|
| ai_base_url / ai_api_key / ai_text_model / ai_vision_model | string | 全局默认 AI 接口地址/密钥/文本模型/多模态模型 |
| image_model / video_model / image_daily_limit | string / string / int | 生图/生视频模型与每日生图限额 |
| title_prompt / digest_prompt / speech_prompt / tag_prompt / verify_prompt | string | 各环节提示词 |
| flow_config / flow_models | JSON string | 流程步骤开关 / 步骤级模型绑定 |
| mp_appid / mp_appsecret / mp_author / mp_publish_mode | string | 公众号配置 |
| h5_base_url / h5_stat | string / int | H5 分享基础地址 / 访问统计开关 |
| sys_name / sys_logo / publish_type | string | 系统名称 / Logo / 发布类型 |
PUT /api/settings 请求体为键值对字典(仅需传要修改的键),返回 {"ok":true}。
GET /api/logs 参数:module string(模块筛选)、level string(info/warn/error)、keyword string(详情搜索)、page/size int(默认 1/50)。返回 {"total":int,"items":[{id:int,level:string,module:string,action:string,detail:string,operator:string,created_at:datetime}]}。GET /api/logs/export 导出 CSV。
GET /api/products 参数:keyword string(按名称模糊)、enabled int(-1 全部/1 启用/0 停用)。返回 {"items":[商品]},商品字段:id int、goods_no string(货号)、name string、generic_name string(通用名)、spec string(规格)、manufacturer string(生产单位)、price float(零售价,元)、brand string、category string(品类,六选一:药品-OTC/药品-Rx/保健食品/医疗器械/普通食品/其他,缺省「其他」)、selling_point string、instruction string(商品说明书)、image_url string、remark string、enabled int、content_count int(露出文章数)、last_at string(最近露出时间)。
POST /api/products — 新增商品(ProductIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 商品名称(唯一,AI 融入使用该名称) |
| generic_name | string | 否 | 通用名(如「布洛芬混悬液」,v24 新增;可由 AI 加工自动补全) |
| goods_no / spec / manufacturer | string | 否 | 货号 / 规格 / 生产单位(与商品清单模板字段对应) |
| price | float | 否 | 零售价(元) |
| brand / category / image_url / remark | string | 否 | 品牌 / 品类(六选一,缺省「其他」)/ 商品图片 / 备注 |
| selling_point | string | 否 | 核心卖点(供 AI 融入参考) |
| instruction | string | 否 | 商品说明书要点(供 AI 融入参考;品类为「药品-Rx」时 AI 将附加医生/药师指导提示) |
| enabled | int | 否 | 1 启用(默认)/ 0 停用 |
GET /api/products/{pid} 返回 {"item":商品}(字段同列表,v23 新增)。PUT /api/products/{pid} 编辑(请求体同 ProductIn,全量提交);DELETE /api/products/{pid} 删除(连带删除露出关联)。
POST /api/products/ai-fill:AI 批量加工商品资料(v24 新增)。请求体 {"limit": 20}(每批最多 40 条),对通用名/品类/品牌/卖点存在空缺的商品自动补全(已有值不覆盖,品类仅修正「其他」)。返回 {"filled":int,"pending":int,"items":[{id,name,generic_name,category,brand,selling_point,changed:[更新字段]}]},前端循环调用直至 pending 为 0。
POST /api/products/import:multipart 上传 Excel,按表头名自动识别列(v23 起支持商品清单模板列:序号/货号/商品名(必填)/通用名/规格/生产单位/零售价/品类/品牌/商品说明书/品牌卖点;也兼容旧列:商品名称/品牌/品类/卖点/图片链接/备注)。同名或同货号更新、否则新增;品类为空或非法自动归「其他」。返回 {"created":int,"updated":int,"skipped":int,"cat_fixed":int}。
GET /api/products/{pid}/contents 返回该商品露出的文章列表(content_id、title、digest、cover_image、status、created_at)。
GET /api/marketing/stats 返回 {"items":[商品露出统计(含 count 排名)],"total_products":int,"enabled_products":int,"total_exposures":int,"categories":[{category,count}]}。
营销机制:AI 生成文章初稿时,自动将「启用」状态的商品注入提示词,AI 选择与主题相关的 1-3 个商品以健康建议口吻自然融入;文章入库后按商品名匹配正文自动记录露出关联。
GET /api/scenes 返回 {"items":[{id:int,name:string,remark:string}]}。POST /api/scenes(SceneIn:name string 必填、remark string)。PUT /api/scenes/{sid} 编辑;DELETE /api/scenes/{sid} 删除。
POST /api/upload/image:multipart/form-data,字段 file(image/*)。返回 {"url":string}(对象存储/本机存储公网地址)。
POST /api/mp/test:无请求体,测试公众号连通性,返回测试结果。POST /api/mp/publish — 发布文章(MpPublishIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content_id | string | 是 | 要发布的内容编号 |
| title | string | 否 | 覆盖标题,留空用内容标题 |
| digest | string | 否 | 覆盖摘要 |
| source_url | string | 否 | 原文链接 |
GET /api/mp/publish/{publish_id} 查询发布任务状态与结果。
POST /api/ai/generate — AI 通用生成(AiGenIn):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| gen_type | string | 是 | 生成类型:title 标题 / digest 摘要 / speech 推荐话术 / tags 标签 |
| content | string | 是 | 正文文本 |
| title | string | 否 | 标题(生成摘要/话术时使用) |
| disease / scene | string | 否 | 疾病 / 场景(生成标签时使用) |
| tag_types | array<string> | 否 | 需要生成的标签类别 |
POST /api/ai/cover — AI 生成封面图(请求体同 AiGenIn),返回封面图 URL。
GET /api/media-tasks 参数:content_id string(按内容筛选)、status string(0 待处理 / 1 处理中 / 2 完成 / 3 失败)。返回媒体任务数组:id int、task_no string、content_id string、type string(image/video)、model string、prompt string、status int、url string(生成结果)、extra JSON(含配置与模型信息)。
PUT /api/media-tasks/{mtid} 编辑提示词并重跑(MediaTaskIn:prompt string),返回 {"ok":true}。
供外部系统(如企微、HR)批量同步用户与用户组,API Key 鉴权(Authorization: Bearer ZK-xxx,任意启用的 Key 均可调用,无需额外 scope)。
POST /api/users/sync — 批量同步用户,请求体:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| users | array<object> | 是 | 用户数组,每项字段如下 |
| users[].username | string | 是 | 用户名(唯一键,存在则更新,不存在则创建) |
| users[].password | string | 否 | 密码,新建默认 123456;更新时传入则重置 |
| users[].nickname / email | string | 否 | 昵称 / 邮箱 |
| users[].role | string | 否 | admin / editor / viewer,新建默认 viewer |
| users[].scopes | array<string> | 否 | 权限 key 数组(新建时使用,全量见 /api/scopes) |
| users[].enabled | bool | 否 | 启用/停用,默认 true |
| users[].groups | array<string> | 否 | 用户组编码数组,按 code 关联(增量追加,不清空) |
返回 {"ok":true,"created":int,"updated":int,"skipped":int}(username 为空跳过计入 skipped)。
POST /api/groups/sync — 批量同步用户组,请求体:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| groups | array<object> | 是 | 用户组数组,每项字段如下 |
| groups[].name | string | 是 | 组名(唯一键,存在则更新) |
| groups[].code | string | 否 | 组编码,默认取组名 |
| groups[].scopes | array<string> | 否 | 组权限 key 数组 |
| groups[].members | array<string> | 否 | 成员用户名数组,传入则整体替换组成员 |
返回 {"ok":true,"created":int,"updated":int}。
| 方法 | 路径 | 说明 | 鉴权 |
|---|---|---|---|
| POST | /api/v1/content | 【对外】新增内容 | API Key |
| GET | /api/v1/content/export | 【对外】导出内容 | API Key |
| GET | /api/v1/content/export.xlsx | 【对外】导出内容(Excel) | API Key |
| POST | /api/v1/content/feed | 【对外】按标签获取内容 | API Key |
| GET | /api/v1/content/feed | 【对外】按标签获取内容 | API Key |
| GET | /api/v1/push-logs | 【对外】推送/访问记录查询 | API Key |
| POST | /api/v1/tasks | 【对外】发起采集任务 | API Key |
| GET | /api/content/{cid} | 内容详情/编辑 | 登录会话 |
| PUT | /api/content/{cid} | 内容详情/编辑 | 登录会话 |
| DELETE | /api/content/{cid} | 内容详情/编辑 | 登录会话 |
| POST | /api/content/{cid}/generate-image | 生成科普图 | 登录会话 |
| POST | /api/content/{cid}/generate-video | 生成视频 | 登录会话 |
| GET | /api/content/{cid}/preview | 内容 H5 预览页(公开) | 公开 |
| POST | /api/content/{cid}/record | 内容推送/访问记录(open 公开,push 需 API Key) | 公开 |
| POST | /api/content/{cid}/resume | 恢复内容 | 登录会话 |
| GET | /api/content/{cid}/stats | 内容访问统计(公开) | 公开 |
| POST | /api/content/{cid}/stop | 停用内容 | 登录会话 |
| POST | /api/content/{cid}/video-generate | 生成视频(千问) | 登录会话 |
| GET | /api/health | 健康检查 | 公开 |
| POST | /api/login | 登录(获取会话) | 公开 |
| GET | /api/login/check | 登录状态校验 | 公开 |
| GET | /api/system/info | 系统信息(名称/Logo/发布类型,公开) | 公开 |
| POST | /api/ai/cover | AI 生成封面图 | 登录会话 |
| POST | /api/ai/generate | AI 通用生成 | 登录会话 |
| GET | /api/api-keys | API 授权(列表/创建) | 登录会话 |
| POST | /api/api-keys | API 授权(列表/创建) | 登录会话 |
| DELETE | /api/api-keys/{kid} | 更新/删除 API 授权 | 登录会话 |
| PUT | /api/api-keys/{kid} | 更新/删除 API 授权 | 登录会话 |
| GET | /api/blacklist | 黑名单管理 | 登录会话 |
| POST | /api/blacklist | 黑名单管理 | 登录会话 |
| DELETE | /api/blacklist/{bid} | blacklist·{bid} | 登录会话 |
| GET | /api/content | 内容管理(列表/新增) | 登录会话 |
| POST | /api/content | 内容管理(列表/新增) | 登录会话 |
| GET | /api/groups | 用户组管理(列表/新增) | 登录会话 |
| POST | /api/groups | 用户组管理(列表/新增) | 登录会话 |
| POST | /api/groups/sync | 用户组同步(对接外部系统) | 登录会话 |
| PUT | /api/groups/{gid} | 用户组编辑/删除 | 登录会话 |
| DELETE | /api/groups/{gid} | 用户组编辑/删除 | 登录会话 |
| POST | /api/logout | 退出登录 | 登录会话 |
| GET | /api/logs | 操作日志 | 登录会话 |
| GET | /api/logs/export | 导出日志 | 登录会话 |
| GET | /api/marketing/stats | marketing·stats | 登录会话 |
| GET | /api/media-configs | 媒体接口配置 | 登录会话 |
| POST | /api/media-configs | 媒体接口配置 | 登录会话 |
| PUT | /api/media-configs/{mid} | media-configs·{mid} | 登录会话 |
| DELETE | /api/media-configs/{mid} | media-configs·{mid} | 登录会话 |
| GET | /api/media-tasks | 媒体任务(图片/视频生成任务) | 登录会话 |
| PUT | /api/media-tasks/{mtid} | 更新媒体任务(提示词) | 登录会话 |
| POST | /api/mp/publish | 发布到公众号 | 登录会话 |
| GET | /api/mp/publish/{publish_id} | 查询公众号发布结果 | 登录会话 |
| POST | /api/mp/test | 公众号接口测试 | 登录会话 |
| GET | /api/products | products | 登录会话 |
| POST | /api/products | products | 登录会话 |
| POST | /api/products/ai-fill | products·ai-fill | 登录会话 |
| POST | /api/products/import | products·import | 登录会话 |
| GET | /api/products/{pid} | products·{pid} | 登录会话 |
| PUT | /api/products/{pid} | products·{pid} | 登录会话 |
| DELETE | /api/products/{pid} | products·{pid} | 登录会话 |
| GET | /api/products/{pid}/contents | products·{pid} | 登录会话 |
| GET | /api/report | 内容报表 | 登录会话 |
| GET | /api/report/tokens-detail | report·tokens-detail | 登录会话 |
| GET | /api/report/tokens-detail/export | report·tokens-detail | 登录会话 |
| GET | /api/scenes | 场景管理 | 登录会话 |
| POST | /api/scenes | 场景管理 | 登录会话 |
| PUT | /api/scenes/{sid} | scenes·{sid} | 登录会话 |
| DELETE | /api/scenes/{sid} | scenes·{sid} | 登录会话 |
| GET | /api/scopes | scopes | 登录会话 |
| GET | /api/settings | 系统设置 | 登录会话 |
| PUT | /api/settings | 系统设置 | 登录会话 |
| GET | /api/source-groups | 来源分组 | 登录会话 |
| POST | /api/source-groups | 来源分组 | 登录会话 |
| PUT | /api/source-groups/{gid} | source-groups·{gid} | 登录会话 |
| DELETE | /api/source-groups/{gid} | source-groups·{gid} | 登录会话 |
| GET | /api/sources | 来源管理 | 登录会话 |
| POST | /api/sources | 来源管理 | 登录会话 |
| PUT | /api/sources/{sid} | sources·{sid} | 登录会话 |
| DELETE | /api/sources/{sid} | sources·{sid} | 登录会话 |
| GET | /api/stats | 仪表盘统计数据 | 登录会话 |
| PUT | /api/tag-group | tag-group | 登录会话 |
| DELETE | /api/tag-group | tag-group | 登录会话 |
| POST | /api/tag-group/toggle | tag-group·toggle | 登录会话 |
| GET | /api/tags | 标签管理(列表/新增) | 登录会话 |
| POST | /api/tags | 标签管理(列表/新增) | 登录会话 |
| GET | /api/tags/options | 标签选项 | 登录会话 |
| PUT | /api/tags/{tid} | tags·{tid} | 登录会话 |
| DELETE | /api/tags/{tid} | tags·{tid} | 登录会话 |
| GET | /api/tasks | 采集任务(列表/创建) | 登录会话 |
| POST | /api/tasks | 采集任务(列表/创建) | 登录会话 |
| POST | /api/tasks/auto-config | 任务 AI 自动配置 | 登录会话 |
| GET | /api/tasks/{tid} | 任务详情/修改/删除 | 登录会话 |
| DELETE | /api/tasks/{tid} | 任务详情/修改/删除 | 登录会话 |
| POST | /api/tasks/{tid}/cancel | 停止/取消进行中任务 | 登录会话 |
| GET | /api/tasks/{tid}/exec | tasks·{tid} | 登录会话 |
| GET | /api/templates | 模板管理 | 登录会话 |
| POST | /api/templates | 模板管理 | 登录会话 |
| PUT | /api/templates/{tid} | templates·{tid} | 登录会话 |
| DELETE | /api/templates/{tid} | templates·{tid} | 登录会话 |
| POST | /api/templates/{tid}/copy | 复制模板 | 登录会话 |
| POST | /api/upload/image | 上传图片 | 登录会话 |
| GET | /api/users | 用户管理(列表/新增) | 登录会话 |
| POST | /api/users | 用户管理(列表/新增) | 登录会话 |
| GET | /api/users/me | 当前登录用户 | 登录会话 |
| POST | /api/users/sync | 用户同步(对接外部系统) | 登录会话 |
| PUT | /api/users/{uid} | 用户编辑 | 登录会话 |
| DELETE | /api/users/{uid} | 用户编辑 | 登录会话 |
| POST | /api/users/{uid}/reset-password | 重置密码 | 登录会话 |
| POST | /api/users/{uid}/toggle | 启用/停用用户 | 登录会话 |