OPEN API
让 AI,真正懂您的网站
右侧下载技能文档,直接提交给 AI Agent 完成建站与内容接入。
给 AI 的技能文档 下载 Skill技能文档后直接提交给 AI Agent
DOCUMENTATION
建议使用 Ctrl / ⌘ + F 搜索接口智盟CMS Open API 接口规格
# 智盟CMS 外部开放 API 接口详细规格说明书(AI 建站与内容发布)
## 1. 概述与设计规范
本文档提供的外部开放 API(OpenAPI)规范,主要面向 **AI 智能体(Agent)**、大模型工作流(如 Dify、FastGPT、LangChain 等)以及外部前端与自动化系统调用,以实现:
1. **自动创建与修改网站站点(Site)**;
2. **站点主域名与副域名绑定(Domain Binding)**;
3. **基于域名查询站点信息与栏目结构(Site & Sorts Lookup)**;
4. **构建与修改栏目导航树(Sort Management)**(栏目ID支持字符串传递,防 JS 精度丢失);
5. **基于域名和栏目ID修改单页正文 HTML(Single Page Content Editing)**;
6. **自动发布文章、产品或动态内容(Content Publishing)**;
7. **基于域名和栏目ID分页拉取内容列表(Content Pagination)**;
8. **基于域名和内容ID查询单条内容完整详情(Content Detail Lookup)**;
9. **AI 一站式原子化整站生成(Site Build)**。
---
### 1.1 核心交互规范(零 URL 参数 & 全 JSON Body)
为保证前后端调用、AI Agent Tool Calling 与各类网络代理网关的完全兼容与一致性,本套 API 遵循如下严格标准:
1. **零 URL 传参(No URL Parameters)**:
- **所有接口统一使用** `POST` **请求方法**;
- 所有入参一律在 HTTP Request Body 中以标准 **JSON** 格式提交。
2. **统一响应格式(Data Enclosure)**:
- 所有接口返回标准 JSON 对象;
- 业务数据一律严格包裹在 `**data**` 节点中返回;
- `code = 0` 表示成功,非 0 表示异常或校验拦截。
3. **ID 字符串化**:
- CMS 所有的栏目 ID(`sortId`)和内容 ID(`contentId`)入参均为数字字符串,避免前端 JS 数字精度丢失问题;
```json
{
"code": 0,
"msg": "操作成功",
"data": { ... }
}
```
---
## 2. 鉴权与安全机制
### 2.1 访问认证
所有接口每个请求必须在 HTTP Header 中传递合法的 API Key:
| 请求头 | 是否必填 | 示例值 | 说明 |
| --------------- | ----- | ------------------ | ------------------------------------ |
| `Authorization` | **是** | `{{token}}` | OpenAPI 认证密钥(兼容 `Bearer <token>` 前缀) |
| `Content-Type` | **是** | `application/json` | 请求体格式固定为 JSON |
> **鉴权判定**:
>
> 1. **第三方调用**:Header 携带 `Authorization: {{token}}`(兼容 `Bearer <token>`);
> **服务基础地址**:`https://cms.api.qiping.cn` , 末尾不带 `/`,curl 示例中的 `{{baseUrl}}/` 即上述服务基础地址;请将 `{{token}}` 替换为实际密钥。
> **鉴权失败响应示例**:
>
> ```json
> {
> "code": 500,
> "msg": "授权失败,无效的API密钥"
> }
> ```
### 2.2 XSS 标签过滤与安全保障
- 针对 AI 传入的 HTML 正文(单页 `content` 和文章/产品 `content`),接口底层均会自动执行安全白名单清洗。
- 允许所有标准的排版、表格、媒体、格式化标签及样式属性(`style`、`class`、`id`、`data-*` 等)。
- 严格过滤 `<script>`、`<iframe>`、`onclick` 等危险标签与事件脚本,防止注入漏洞。
### 2.3 OSS 静态资源与站内链接约定
1. **OSS 静态资源访问地址**:站点绑定模板后,模板内的 CSS / JS / 图片等静态资源可通过 OSS CDN 访问,路径规则为:
```text
https://global.cnd.aidufei.com/{siteCode}/{template}/css/common.css
https://global.cnd.aidufei.com/{siteCode}/{template}/js/common.js
https://global.cnd.aidufei.com/{siteCode}/{template}/images/logo.png
```
其中 `{siteCode}` 为站点编码,`{template}` 为站点绑定的模板标识;其后路径与模板目录内相对路径一致。
2. **模板站内页面链接必须使用绝对路径**(以 `/` 开头,**不带域名**),例如:
```html
<a href="/page/about.html">关于我们</a>
<a href="/news/news.html">新闻列表</a>
<a href="/product/products.html">产品中心</a>
```
禁止写成带域名的完整 URL(如 `http://www.example.com/page/about.html`),也避免仅写相对文件名(如 `about.html`)。
3. **接口返回的 `url` 字段**:栏目、内容相关接口只返回站内绝对路径(如 `"/page/about.html"`),**不再返回带域名的 fullUrl 字段**。需要完整访问地址时,由调用方自行用站点域名与 `url` 拼接。
---
## 3. 接口目录清单(全 POST & 全 JSON)
| 分类 | 请求方式 | 接口地址 | 接口描述 |
| --------- | ------ | ------------------------------- | ---------------------------------- |
| **站点管理** | `POST` | `/cms/site/create` | 创建站点 |
| **站点管理** | `POST` | `/cms/site/update` | 修改站点信息 |
| **站点管理** | `POST` | `/cms/site/list` | 查询站点列表 |
| **域名管理** | `POST` | `/cms/site/bindDomain` | 绑定站点域名 |
| **站点与栏目** | `POST` | `/cms/site/infoWithSorts` | 根据域名查询站点信息与栏目树 |
| **站点管理** | `POST` | `/cms/site/detail` | 根据域名查询站点信息 |
| **栏目管理** | `POST` | `/cms/sort/create` | 创建单个栏目 |
| **栏目管理** | `POST` | `/cms/sort/batchCreate` | 批量创建栏目 |
| **栏目管理** | `POST` | `/cms/sort/update` | 根据域名和栏目ID修改栏目信息 |
| **单页维护** | `POST` | `/cms/sort/pageContent/update` | 根据域名和栏目ID修改单页内容 |
| **单页维护** | `POST` | `/cms/sort/pageContent/detail` | 根据域名和栏目ID查询单页详情(含正文) |
| **栏目管理** | `POST` | `/cms/sort/list` | 根据域名查询站点所有栏目列表 |
| **内容发布** | `POST` | `/cms/content/publish` | 发布内容(文章/产品/新闻等) |
| **内容检索** | `POST` | `/cms/content/page` | 根据域名和栏目ID分页查询栏目内容列表 |
| **内容详情** | `POST` | `/cms/content/detail` | 根据域名和内容ID查询单篇内容完整详情 |
| **落地页** | `POST` | `/cms/landingpage/list` | 查询站点下的落地页列表 |
| **落地页** | `POST` | `/cms/landingpage/detail` | 查询单条落地页详情(含 HTML) |
| **落地页** | `POST` | `/cms/landingpage/save` | 新建或修改落地页 |
| **模板文件列表** | `POST` | `/cms/template/list` | 查询当前租户模板文件与目录 |
| **创建模板文件目录** | `POST` | `/cms/template/create` | 创建模板根目录并返回模板 ID字符串 |
| **模板文件重命名** | `POST` | `/cms/template/rename` | 修改模板根目录别名 |
| **站点媒体上传** | `POST` | `/cms/media/upload` | 上传站点图片/视频(mp4·mov)/音频(mp3)(multipart/form-data) |
| **模板文件上传** | `POST` | `/cms/template/upload` | 上传单个模板文件(multipart/form-data,含 mp4/mov/mp3) |
| **模板文件压缩包上传** | `POST` | `/cms/template/uploadZip` | 上传并解压 ZIP(multipart;直传 ≤10MB) |
| **ZIP 分片初始化** | `POST` | `/cms/template/uploadZip/init` | 大 ZIP 分片上传初始化(JSON;>10MB 使用,总上限 50MB) |
| **ZIP 分片上传** | `POST` | `/cms/template/uploadZip/chunk` | 上传单个分片(multipart/form-data) |
| **ZIP 分片合并解压** | `POST` | `/cms/template/uploadZip/merge` | 合并分片并解压部署(JSON) |
| **ZIP 分片取消** | `POST` | `/cms/template/uploadZip/cancel`| 取消分片会话并清理临时文件(JSON) |
| **模板文件内容读取** | `POST` | `/cms/template/fileContent` | 读取模板文本文件 |
| **模板文件内容保存** | `POST` | `/cms/template/saveFileContent` | 保存模板文本文件 |
| **模板文件删除** | `POST` | `/cms/template/remove` | 删除模板文件或目录 |
| **一站式建站** | `POST` | `/cms/site/build` | AI 一站式整站原子化构建 |
---
## 4. 接口详细规格与示例
### 4.1 创建站点
#### 接口描述
提供给 AI 初始化独立网站。支持自定义域名、SEO、模板目录与租户信息。如果未指定站点编码和域名,系统将自动分配二级预览域名(`xxxx.aicms.site`)。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/create`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 最大长度 | 说明与默认值 |
| ------------ | ------ | ----- | ---- | ----------------------------------------------------------------- |
| `title` | String | **是** | 100 | 网站名称/标题,例如 `"智成科技有限公司官方网站"` |
| `domain` | String | 否 | 50 | 绑定域名(如 `"example.com"`)。不传时自动分配二级域名(`xxxx.aicms.site`) |
| `template` | String | 否 | 30 | **模板根目录 ID(字符串)**。必须先通过模板接口创建或查询模板,再传入模板根目录 `data.id`;不传时使用系统默认模板 |
| `seoTitle` | String | 否 | 255 | 网站全局 SEO 标题 |
| `seoKeyword` | String | 否 | 255 | 网站全局 SEO 关键词(英文逗号分隔) |
| `seoDesc` | String | 否 | 1000 | 网站全局 SEO 描述 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/create' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"title": "智成科技有限公司",
"domain": "example.com",
"template": "12345678",
"seoTitle": "智成科技 - 企业级人工智能解决方案",
"seoKeyword": "人工智能,企业AI,智能客服,自动化",
"seoDesc": "智成科技专注于企业级AI数字化转型与智能化应用。"
}'
```
#### 响应参数示例
```json
{
"msg": "站点创建成功",
"code": 0,
"data": {
"title": "智成科技有限公司1333",
"domain": "123456.aicms.site",
"createTime": "2026-09-16 18:00:59",
"seoTitle": "智成科技 - 企业级人工智能解决方案",
"seoKeyword": "人工智能,企业AI,智能客服,自动化",
"seoDesc": "智成科技专注于企业级AI数字化转型与智能化应用。"
}
}
```
---
### 4.2 修改站点信息
#### 接口描述
通过站点当前绑定的域名(主/副域名)修改网站标题、模板目录、SEO 配置等。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/update`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| ---------------- | ------- | ----- | -------------------------------------------------- |
| `domain` | String | **是** | 站点当前绑定的主域名或副域名,只用于定位站点,不会修改域名。修改域名请调用 `bindDomain` |
| `title` | String | 否 | 网站新名称/标题 |
| `seoTitle` | String | 否 | 全局 SEO 标题 |
| `seoKeyword` | String | 否 | 全局 SEO 关键词 |
| `seoDesc` | String | 否 | 全局 SEO 描述 |
| `template` | String | 否 | PC 模板目录名称 |
| `mobileTemplate` | String | 否 | 移动端模板目录名称 |
| `status` | Integer | 否 | 状态 1启动,0停用 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/update' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "123456.aicms.site",
"title": "智成科技集团官方网站",
"seoTitle": "智成科技集团 - 全球AI数字化先锋",
"seoDesc": "智成科技致力于为全球跨国企业提供全栈AI生产力基础设施。",
"status": 1,
"template": "",
"mobileTemplate": ""
}'
```
#### 响应示例
```json
{
"msg": "站点信息修改成功",
"code": 0,
"data": {
"title": "智成科技集团官方网站22",
"domain": "123456.aicms.site",
"createTime": "2026-09-16 18:00:59",
"seoTitle": "智成科技集团 - 全球AI数字化先锋",
"seoKeyword": "人工智能,企业AI,智能客服,自动化",
"seoDesc": "智成科技致力于为全球跨国企业提供全栈AI生产力基础设施。",
"status": 1,
"template": "default",
"mobileTemplate": null
}
}
```
---
### 4.2.1 查询当前租户站点列表
#### 接口描述
根据 `Authorization` 查出租户所有站点列表。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/list`
#### 请求参数(Request Body JSON)
无业务入参,传 `{}` 即可。
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/list' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "操作成功",
"data": [
{
"title": "智成科技有限公司",
"domain": "123456.aicms.site",
"createTime": "2026-09-16 18:00:59",
"seoTitle": "智成科技 - 企业级人工智能解决方案",
"seoKeyword": "人工智能,企业AI",
"seoDesc": "智成科技专注于企业级AI数字化转型。",
"status": 1,
"landingPageId": "1510335476081496064"
}
]
}
```
---
### 4.3 绑定站点主域名与子域名
#### 接口描述
为指定站点绑定自定义顶级主域名(`domain`)与副域名/子域名(`supDomain`)。接口会自动做域名格式校验、排重校验,并在更新后彻底清除缓存。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/bindDomain`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| --------------- | ------ | ----- | ------------------------------------------------ |
| `currentDomain` | String | **是** | 站点当前旧域名,服务端根据该域名定位到站点绑定新域名 |
| `domain` | String | 否 | 新的主域名,例如 `"mybrand.com"` |
| `supDomain` | String | 否 | 新的副域名/子域名,例如 `"abc.mybrand.com"` |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/bindDomain' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"currentDomain": "123456.aicms.site",
"domain": "mybrand.com",
"supDomain": "abc.mybrand.com"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "域名绑定成功",
"data": {
"title": "智成科技集团官方网站",
"domain": "mybrand.com",
"supDomain": "abc.mybrand.com",
"previewUrl": "http://www.zhicheng-ai.com",
"createTime": "2026-09-08 13:00:00"
}
}
```
---
### 4.4 根据域名查询站点信息与栏目信息
#### 接口描述
通过 POST 请求体 JSON 传入域名(`domain`),一次性返回站点详情与当前的全部栏目树。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/infoWithSorts`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| -------- | ------ | ----- | --------- |
| `domain` | String | **是** | 站点主域名或副域名 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/infoWithSorts' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "查询成功",
"data": {
"site": {
"title": "智成科技官方网站",
"domain": "www.zhicheng-ai.com",
"supDomain": "zhicheng-ai.com",
"template": "default",
"previewUrl": "http://www.zhicheng-ai.com"
},
"sorts": [
{
"sortId": "1832049182736152577",
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"parentId": "0",
"pageName": "about",
"url": "/page/about.html",
"orderBy": 1
},
{
"sortId": "1832049182736152578",
"sortName": "新闻中心",
"sortEnName": "News",
"pageModel": 1,
"parentId": "0",
"pageName": "news",
"url": "/news/news.html",
"orderBy": 2
}
]
}
}
```
---
### 4.5 查询站点基础信息
#### 接口描述
通过 POST 请求体 JSON 传入 `domain`,查询指定站点的当前详情与主域名、预览地址。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/detail`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| -------- | ------ | ----- | --------- |
| `domain` | String | **是** | 站点主域名或副域名 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/site/detail' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "操作成功",
"data": {
"title": "智成科技有限公司",
"domain": "www.zhicheng-ai.com",
"template": "default",
"previewUrl": "http://www.zhicheng-ai.com",
"createTime": "2026-09-08 13:00:00"
}
}
```
---
### 4.6 创建单个栏目
#### 接口描述
为指定站点创建文章列表栏目(`pageModel=1`)、产品列表栏目(`pageModel=2`)或独立单页面栏目(`pageModel=3`)。
- **单页模型特权**:当 `pageModel=3`(单页模型)时,AI 可直接在 `content` 字段传入单页 HTML 正文,接口自动完成正文入库。
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/create`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 限制 | 说明与默认值 |
| ------------- | ------- | ----- | ------- | ------------------------------------------- |
| `domain` | String | **是** | 50 | 所属站点主域名或副域名 |
| `sortName` | String | **是** | 50 | 栏目名称(如 `"公司新闻"`、`"关于我们"`) |
| `sortEnName` | String | 否 | 50 | 栏目英文名称(如 `"About Us"`) |
| `parentId` | String | 否 | - | 上级父栏目ID(字符串)。`"0"` 表示顶级;默认 `"0"` |
| `pageModel` | Integer | 否 | 1, 2, 3 | **页面模型**:`1`=文章, `2`=产品, `3`=单页。默认 `1` |
| `pageName` | String | 否 | 50 | URL 访问别名(如 `"about"`),留空系统自动 |
| `orderBy` | Integer | 否 | - | 排序权重,数值越小越靠前。默认 `1` |
| `pageSize` | Integer | 否 | - | 列表每页记录数。默认 `20` |
| `navShow` | Integer | 否 | 0, 1, 2 | 导航模式:`1`=主导航显示, `0`=隐藏, `2`=外部链接。默认 `1` |
| `redirectUrl` | String | 否 | 255 | 外部跳转链接(仅在 `navShow=2` 时生效) |
| `content` | String | 否 | - | **单页面正文 HTML**(仅在 `pageModel=3` 时生效并自动保存正文) |
| `pic` | String | 否 | 255 | 栏目封面/缩略图 完整URL |
| `seoTitle` | String | 否 | 255 | 栏目 SEO 标题 |
| `seoKeyword` | String | 否 | 255 | 栏目 SEO 关键词 |
| `seoDesc` | String | 否 | 1000 | 栏目 SEO 描述 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/create' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"pageName": "about",
"navShow": 1,
"content": "<h2>公司简介</h2><p>智成科技成立于2024年,是一家领先的人工智能软件服务商。</p>"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "栏目创建成功",
"data": {
"sortId": "1832049182736152577",
"domain": "www.zhicheng-ai.com",
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"parentId": "0",
"pageName": "about",
"url": "/page/about.html",
"orderBy": 1
}
}
```
---
### 4.7 批量创建栏目
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/batchCreate`
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/batchCreate' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sorts": [
{
"sortName": "新闻动态",
"sortEnName": "News",
"pageModel": 1,
"pageName": "news"
},
{
"sortName": "产品中心",
"sortEnName": "Products",
"pageModel": 2,
"pageName": "products"
}
]
}'
```
---
### 4.8 根据域名和栏目ID修改栏目信息
#### 接口描述
通过请求体 JSON 传递站点域名与字符串类型的 `sortId` 修改栏目属性(栏目名称、URL 别名、排序、显示状态、模板及 SEO 等)。
> **注意**:`domain` 与 `sortId` 仅用于定位栏目。除定位参数外,**至少再传入一个要修改的字段**;若只传 `domain` + `sortId`,接口会返回业务错误:`至少需要传入一个要修改的栏目字段`。
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/update`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| -------------- | ------- | ----- | --------------------- |
| `domain` | String | **是** | 所属站点域名(主域名或副域名) |
| `sortId` | String | **是** | **栏目 ID(字符串)** |
| `sortName` | String | 条件必填 | 新栏目名称;与下列可更新字段**至少一个非空** |
| `sortEnName` | String | 条件必填 | 新栏目英文名称 |
| `pageName` | String | 条件必填 | 新 URL 访问别名(系统会自动排重) |
| `orderBy` | Integer | 条件必填 | 排序权重 |
| `pageSize` | Integer | 条件必填 | 列表每页记录数 |
| `navShow` | Integer | 条件必填 | 导航状态(1显示, 0隐藏, 2外链) |
| `redirectUrl` | String | 条件必填 | 跳转链接 |
| `pic` | String | 条件必填 | 缩略图地址 |
| `listTemplate` | String | 条件必填 | 列表模板 |
| `showTemplate` | String | 条件必填 | 内容/详情模板 |
| `seoTitle` | String | 条件必填 | SEO 标题 |
| `seoKeyword` | String | 条件必填 | SEO 关键词 |
| `seoDesc` | String | 条件必填 | SEO 描述 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/update' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152578",
"sortName": "媒体与动态",
"sortEnName": "Media & News",
"orderBy": 3
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "栏目修改成功",
"data": {
"sortId": "1832049182736152578",
"sortName": "媒体与动态",
"sortEnName": "Media & News",
"pageModel": 1,
"pageName": "news",
"url": "/news/news.html",
"orderBy": 3
}
}
```
---
### 4.9 根据域名和栏目ID修改单页内容
#### 接口描述
用于修改单页模型栏目(`pageModel=3`)的正文 HTML 内容,支持同时更新单页标题与单页独立的 SEO。
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/pageContent/update`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| ------------ | ------ | ----- | ------------------------------- |
| `domain` | String | **是** | 站点域名 |
| `sortId` | String | **是** | **单页栏目 ID(字符串)** |
| `content` | String | **是** | **单页 HTML 正文内容**(支持富文本/HTML 排版) |
| `pageTitle` | String | 否 | 单页主标题(选填) |
| `seoTitle` | String | 否 | 单页 SEO 标题 |
| `seoKeyword` | String | 否 | 单页 SEO 关键词 |
| `seoDesc` | String | 否 | 单页 SEO 描述 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/pageContent/update' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152577",
"pageTitle": "智成科技 - 创新推动数字未来",
"content": "<h2>企业愿景与使命</h2><p>我们致力于通过前沿的大模型技术,为制造业与跨境电商注入智能活力...</p>"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "单页内容保存成功",
"data": {
"sortId": "1832049182736152577",
"sortName": "关于我们",
"pageModel": 3,
"url": "/page/about.html"
}
}
```
---
### 4.9.1 查询单页详情(含正文)
#### 接口描述
根据域名与栏目 ID 查询单页模型栏目的详情,返回字段与栏目结果一致,并附带 `content` 正文 HTML。
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/pageContent/detail`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| -------- | ------ | ----- | ------------ |
| `domain` | String | **是** | 站点域名 |
| `sortId` | String | **是** | 单页栏目 ID(字符串) |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/pageContent/detail' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152577"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "操作成功",
"data": {
"sortId": "1832049182736152577",
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"pageName": "about",
"pageTitle": "智成科技 - 创新推动数字未来",
"navShow": 1,
"seoTitle": "关于我们",
"seoKeyword": "公司简介",
"seoDesc": "智成科技公司简介",
"content": "<h2>公司简介</h2><p>...</p>",
"url": "/page/about.html"
}
}
```
---
### 4.10 查询站点栏目列表
#### 接口描述
通过 POST 请求体 JSON 传入 `domain`,获取指定站点的当前所有栏目列表清单(获取对应的 `sortId` 与 `pageModel`)。
- **请求方式**:`POST`
- **请求地址**:`/cms/sort/list`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| -------- | ------ | ----- | --------- |
| `domain` | String | **是** | 站点主域名或副域名 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/sort/list' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "操作成功",
"data": [
{
"sortId": "1832049182736152577",
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"parentId": "0",
"pageName": "about",
"url": "/page/about.html"
},
{
"sortId": "1832049182736152578",
"sortName": "新闻动态",
"sortEnName": "News",
"pageModel": 1,
"parentId": "0",
"pageName": "news",
"url": "/news/news.html"
}
]
}
```
---
### 4.11 发布内容(文章 / 产品 / 动态)
#### 接口描述
用于向指定站点的对应栏目发布文章或产品。
- 正文 HTML 会自动执行安全清洗;
- 系统会自动关联页面模型;
- 支持自动将文章 ID 用作 URL,或指定自定义 `pageName`。
- **请求方式**:`POST`
- **请求地址**:`/cms/content/publish`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 限制 | 说明与默认值 |
| ------------ | ------------- | ----- | ---- | ---------------------------------- |
| `domain` | String | **是** | 50 | 所属站点主域名或副域名 |
| `sortId` | String | **是** | - | 所属栏目ID(字符串) |
| `title` | String | **是** | 100 | 内容标题 |
| `content` | String | **是** | - | **正文 HTML 内容**(支持富文本排版与图片标签) |
| `pageModel` | Integer | 否 | 1, 2 | 页面模型:`1`=文章, `2`=产品。不传时自动继承所属栏目的模型 |
| `pic` | String | 否 | 255 | 封面主图 / 缩略图 URL |
| `images` | String | 否 | - | 产品多图 URL(以英文逗号分隔,主要用于产品相册) |
| `pageName` | String | 否 | 50 | URL 访问别名;若不传则默认以雪花 ID 作为访问路径 |
| `status` | Integer | 否 | 0, 1 | 状态:`1`=已发布(对外可见), `0`=草稿。默认 `1` |
| `isTop` | Integer | 否 | 0, 1 | 是否置顶:`1`=置顶, `0`=普通。默认 `0` |
| `tags` | String | 否 | 100 | 内容标签(英文逗号隔开,如 `"AI,大模型,新品发布"`) |
| `seoTitle` | String | 否 | 255 | 内容独立 SEO 标题 |
| `seoKeyword` | String | 否 | 255 | 内容独立 SEO 关键词 |
| `seoDesc` | String | 否 | 1000 | 内容独立 SEO 描述 |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/content/publish' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152578",
"title": "公司发布新一代企业级智能知识库引擎",
"content": "<p>今日,智成科技正式发布新一代企业级知识库引擎,具备万亿级文本毫秒检索与高精度问答能力,全面赋能企业知识管理。</p>",
"tags": "人工智能,知识库,新品发布",
"status": 1,
"isTop": 1
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "内容发布成功",
"data": {
"contentId": "1832049817263548416",
"sortId": "1832049182736152578",
"title": "公司发布新一代企业级智能知识库引擎",
"pageModel": 1,
"pageName": null,
"url": "/news/1832049817263548416.html",
"status": 1,
"publishTime": "2026-09-08 13:05:00"
}
}
```
---
### 4.12 根据域名和栏目ID分页查询栏目内容列表
#### 接口描述
通过 POST 请求体 JSON 传入站点域名和栏目ID(字符串格式),分页拉取该栏目下的文章或产品内容列表,支持标题搜索与发布状态筛选,返回标准的分页结构体。
- **请求方式**:`POST`
- **请求地址**:`/cms/content/page`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
| ---------- | ------- | ----- | --- | ----------------------- |
| `domain` | String | **是** | - | 站点主域名或副域名 |
| `sortId` | String | **是** | - | **栏目分类 ID(字符串)** |
| `pageNum` | Integer | 否 | 1 | 当前页码(从 1 开始) |
| `pageSize` | Integer | 否 | 20 | 每页条数(上限 100 条) |
| `title` | String | 否 | - | 内容标题模糊搜索关键字 |
| `status` | Integer | 否 | - | 发布状态(1=已发布, 0=草稿;不传查全部) |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/content/page' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152578",
"pageNum": 1,
"pageSize": 20
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "查询成功",
"data": {
"total": 1,
"pageNum": 1,
"pageSize": 20,
"pages": 1,
"list": [
{
"contentId": "1832049817263548416",
"sortId": "1832049182736152578",
"title": "公司发布新一代企业级智能知识库引擎",
"pageModel": 1,
"pageName": null,
"url": "/news/1832049817263548416.html",
"status": 1,
"publishTime": "2026-09-08 13:05:00"
}
]
}
}
```
---
#### 分页跳转说明
1. **首次查询**:不传 `pageNum` 时默认查询第 1 页;建议显式传入 `pageNum: 1` 和 `pageSize`。
2. **跳转到指定页**:将目标页码写入下一次请求 Body 的 `pageNum` 字段,例如跳转到第 3 页时传 `"pageNum": 3`。
3. **下一页/上一页**:根据响应中的 `pageNum` 和 `pages` 计算目标页。下一页不能大于 `pages`,上一页不能小于 `1`。
4. **保持查询条件**:翻页时继续携带原请求中的 `domain`、`sortId`、`pageSize`、`title` 和 `status`,只修改 `pageNum`。
5. **无数据或越界**:`data.total = 0` 时没有可跳转页;目标页超过 `data.pages` 时,应调整到最后一页,不要反复请求无效页码。
6. **参数位置**:分页参数属于 JSON Body,不能拼接到 URL 查询字符串中;每次翻页仍使用 `POST /cms/content/page`。
例如,跳转到第 2 页:
```bash
curl -X POST '{{baseUrl}}/cms/content/page' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"sortId": "1832049182736152578",
"pageNum": 2,
"pageSize": 20,
"title": "智能",
"status": 1
}'
```
响应中的 `data.pageNum` 是当前页,`data.pages` 是总页数,`data.total` 是符合筛选条件的总记录数。客户端应以服务端返回值为准更新分页控件,不要仅根据本地列表长度推算总页数。
---
### 4.13 根据域名和内容ID查询单篇内容完整详情
#### 接口描述
通过 POST 请求体 JSON 传入域名与内容雪花 ID(字符串格式),查询该篇文章或产品的完整元数据以及正文 HTML 内容。
- **请求方式**:`POST`
- **请求地址**:`/cms/content/detail`
#### 请求参数(Request Body JSON)
| 字段名 | 类型 | 必填 | 说明 |
| ----------- | ------ | ----- | ------------------------------------------- |
| `domain` | String | **是** | 站点主域名或副域名 |
| `contentId` | String | **是** | **内容ID(字符串)** |
#### 请求示例(curl)
```bash
curl -X POST '{{baseUrl}}/cms/content/detail' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"contentId": "1832049817263548416"
}'
```
#### 响应示例
```json
{
"code": 0,
"msg": "查询成功",
"data": {
"contentId": "1832049817263548416",
"sortId": "1832049182736152578",
"sortName": "新闻中心",
"title": "公司发布新一代企业级智能知识库引擎",
"content": "<p>今日,智成科技正式发布新一代企业级知识库引擎,具备万亿级文本毫秒检索与高精度问答能力,全面赋能企业知识管理。</p>",
"pageModel": 1,
"pic": "http://oss.example.com/cover.jpg",
"images": null,
"pageName": null,
"url": "/news/1832049817263548416.html",
"status": 1,
"isTop": 1,
"tags": "人工智能,知识库,新品发布",
"readeNum": 128,
"seoTitle": "企业级智能知识库引擎发布",
"publishTime": "2026-09-08 13:05:00"
}
}
```
---
### 4.14 模板文件管理
模板文件接口用于为当前租户创建、查询和维护网站模板。模板根目录创建成功后,返回结果中的 `data.id` 就是模板 ID。该 ID 必须按字符串保存,并传入创建站点或一站式建站请求的 `site.template`(字符串入参) 字段。
制作模板时请遵守:
- 静态资源 OSS 访问示例:`https://global.cnd.aidufei.com/{siteCode}/{template}/css/common.css`;
- 站内页面链接使用绝对路径,例如 `/page/about.html`(不带域名);
- 接口返回的页面 `url` 同样为站内绝对路径,不再返回带域名的完整 URL 字段;
- **真实占位图**:Logo、Banner、封面、产品图等必须可公网访问。优先流程:AI 生成图片 → `POST /cms/template/upload` 上传到模板 `images/` → 模板内用相对路径,内容字段用公网/CDN 地址;不具备生图能力时再用 `https://picsum.photos/seed/home-banner/1200/480` 或 `https://placehold.co/800x450/png?text=Banner`。禁止空图或未上传的本地假路径。
#### 4.14.1 查询模板文件
- **请求地址**:`POST /cms/template/list`
- **请求体**:`currentPath` 为空时查询当前租户的模板根目录;进入模板目录时,传入返回结果中的 `filePath`(即把模板记录的 filePath 作为 currentPath 传入,可进入该子目录)。
```json
{
"currentPath": ""
}
```
- **响应示例**(返回模板根目录下所有文件、目录信息,为数组,典型结构如下):
```json
[
{
"id": "1558868045924012032",
"fileName": "index.html",
"alias": null,
"filePath": "26039845/t26101115/index.html",
"isDir": 0,
"fileSize": 4853,
"fileType": "html",
"ossUrl": null
},
{
"id": "1558888506468732928",
"fileName": "thumb.jpg",
"alias": null,
"filePath": "26039845/t26101115/thumb.jpg",
"isDir": 0,
"fileSize": 24576,
"fileType": "jpg",
"ossUrl": null
}
]
```
- 字段说明:
- `id`:文件或目录唯一标识(字符串)
- `fileName`:文件名(目录为空)
- `alias`:模板别名/目录别名
- `filePath`:完整路径(后续相关操作需用此值作为 currentPath 或 filePath 传参)
- `isDir`:是否目录(1=目录,0=文件)
- `fileSize`:文件体积(目录为 null)
- `fileType`:文件类型(如 html/jpg/css;目录为 null)
- `ossUrl`:保留字段,不可用
#### 4.14.2 创建模板
- **请求地址**:`POST /cms/template/create`
- **请求体**:
```json
{
"alias": "科技企业站模板"
}
```
创建成功后保存 `data.id`:
```json
{
"code": 0,
"msg": "模板创建成功",
"data": {
"id": "1832049182736152576",
"isDir": 1,
"alias": "科技企业站模板",
"filePath": "10001/template/t26092601/"
}
}
```
#### 4.14.3 修改模板别名
- **请求地址**:`POST /cms/template/rename`
- **请求体**:
```json
{
"templateFileId": "1832049182736152576",
"alias": "新版科技企业站模板"
}
```
#### 4.14.4 上传模板文件
单文件上传和 ZIP **直传**使用 `multipart/form-data`,文件字段名固定为 `file`,不能使用 JSON Body。
- `POST /cms/template/upload`
- `POST /cms/template/uploadZip`(直传 ≤**10MB**;更大走分片,总上限 **50MB**)
```bash
curl -X POST '{{baseUrl}}/cms/template/uploadZip' \
-H 'Authorization: {{token}}' \
-F 'currentPath=10001/template/t26092601/' \
-F 'file=@./template.zip'
```
**大 ZIP 分片上传**(>10MB 必须使用;总上限 **50MB**;单片建议 **5MB**,最大 20MB):
1. `POST /cms/template/uploadZip/init`(JSON)
```json
{
"currentPath": "10001/template/t26092601/",
"fileName": "template.zip",
"fileSize": 31457280,
"chunkSize": 5242880,
"totalChunks": 6
}
```
返回 `data.uploadId`。`totalChunks` 必须为 `ceil(fileSize / chunkSize)`。
2. `POST /cms/template/uploadZip/chunk`(multipart):字段 `uploadId`、`chunkIndex`(从 0 起)、`file`(分片二进制)。非最后一片大小必须等于 `chunkSize`。
3. `POST /cms/template/uploadZip/merge`(JSON):`{"uploadId":"..."}`,合并后解压部署,效果同直传 `uploadZip`。
4. 可选 `POST /cms/template/uploadZip/cancel`:`{"uploadId":"..."}` 清理未完成会话。会话默认约 2 小时过期。
#### 4.14.5 读取、保存和删除模板文件
读取文本文件:
```json
{
"templateFileId": "1832049182736152577"
}
```
接口:`POST /cms/template/fileContent`
保存文本文件:
```json
{
"templateFileId": "1832049182736152577",
"content": "<!DOCTYPE html><html><body>模板内容</body></html>"
}
```
接口:`POST /cms/template/saveFileContent`
删除文件或目录:
```json
{
"templateFileId": "1832049182736152577"
}
```
接口:`POST /cms/template/remove`。删除目录会级联删除目录下的模板资源。
---
### 4.14 AI 一站式整站构建(AI Agent自动建站)
#### 接口描述
**这是给AI大模型 Agent 一键建站接口,非单独的HTTP请求建站**。
AI大模型要按以下流程建站:
1.AI获取用户网站需求,包括网站风格,名称,域名,栏目等。
2.AI基本网站需求创建模板。
3.AI上传模板并拿到模板ID。
4.创建站点关联模板。
1. 使用已创建的模板根目录 ID 创建 CMS 站点(`site` 必填);
2. 若传入 `sorts` 且非空:批量构建完整的栏目树(支持二级分类树 `children`);
3. 自动填充单页面的正文 HTML;
4. 自动向各栏目初始化发布首批文章或产品。
`sorts` 为选填:可传空数组 `[]`,也可省略该字段。此时仅创建站点,返回的 `sorts`、`contents` 为空数组;后续可通过 `/cms/sort/create`、`/cms/content/publish` 等接口再补栏目与内容。
调用本接口前,必须先调用 `/cms/template/list` 查询模板,或调用 `/cms/template/create` 创建模板。将模板接口返回的 `data.id` 转换并保持为字符串,填入 `site.template`。
- **请求方式**:`POST`
- **请求地址**:`/cms/site/build`
#### 请求示例(curl)
```bash
#### 仅创建站点(栏目为空)示例
```bash
curl -X POST '{{baseUrl}}/cms/site/build' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"site": {
"title": "智成科技有限公司",
"template": "1832049182736152576",
"seoTitle": "智成科技官方网站",
"seoKeyword": "人工智能,AI软件",
"seoDesc": "智成科技专注于企业AI应用创新。"
},
"sorts": []
}'
```
#### 创建站点并初始化栏目示例
```bash
curl -X POST '{{baseUrl}}/cms/site/build' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"site": {
"title": "智成科技有限公司",
"template": "1832049182736152576",
"seoTitle": "智成科技官方网站",
"seoKeyword": "人工智能,AI软件",
"seoDesc": "智成科技专注于企业AI应用创新。"
},
"sorts": [
{
"sortName": "关于我们",
"sortEnName": "About Us",
"pageModel": 3,
"pageName": "about",
"content": "<h2>关于智成</h2><p>我们致力于通过前沿的人工智能技术让每个人都能轻松构建现代化数字品牌。</p>"
},
{
"sortName": "新闻动态",
"sortEnName": "News",
"pageModel": 1,
"pageName": "news",
"contents": [
{
"title": "智成科技荣获2026年度AI创新领跑奖",
"content": "<p>在近日举行的全球人工智能峰会上,我司凭借创新的智能建站产品荣获大奖。</p>",
"isTop": 1
}
]
},
{
"sortName": "产品中心",
"sortEnName": "Products",
"pageModel": 2,
"pageName": "products",
"contents": [
{
"title": "智能客服机器人系统",
"content": "<p>7x24小时全天候多轮意图识别,支持企业微信、飞书、网页无缝接入。</p>"
}
]
}
]
}'
```
---
### 4.10 落地页
鉴权与其它 CMS 接口相同:`Authorization` token。
#### 4.10.1 查询落地页列表
- **请求地址**:`POST /cms/landingpage/list`
- 只返回摘要,不含 HTML。
| 字段名 | 类型 | 必填 | 说明 |
| -------- | ------ | ----- | ------------------------------ |
| `domain` | String | **是** | 站点主域名或副域名 |
```bash
curl -X POST '{{baseUrl}}/cms/landingpage/list' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{"domain": "www.zhicheng-ai.com"}'
```
#### 4.10.2 查询落地页详情
- **请求地址**:`POST /cms/landingpage/detail`
- 返回 `htmlProd` 生产版 HTML。
| 字段名 | 类型 | 必填 | 说明 |
| --------------- | ------ | ----- | ------------------------------ |
| `domain` | String | **是** | 站点主域名或副域名 |
| `landingPageId` | String | **是** | 落地页ID(字符串) |
```bash
curl -X POST '{{baseUrl}}/cms/landingpage/detail' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{"domain": "www.zhicheng-ai.com", "landingPageId": "1510335476081496064"}'
```
#### 4.10.3 新建或修改落地页
- **请求地址**:`POST /cms/landingpage/save`
- `landingPageId` 为空时新建,此时 `htmlProd` 必填。
- `landingPageId` 有值时只更新传入的字段。HTML 会做 XSS 白名单清洗。
- 站点还没有关联落地页时,新建成功后会把新页 ID 写回站点。站点列表里的 `landingPageId` 就是这个关联。
| 字段名 | 类型 | 必填 | 说明 |
| --------------- | ------- | ----- | ------------------------------------------------------- |
| `domain` | String | **是** | 站点主域名或副域名,服务端根据域名查询内部 siteCode |
| `landingPageId` | String | 否 | 为空新建,有值则修改(字符串) |
| `name` | String | 否 | 落地页名称,最长 100 |
| `htmlProd` | String | 新建必填 | 生产版 HTML |
| `pageType` | String | 否 | `landing` / `detail` / `activity` / `home`,默认 `landing` |
| `previewImage` | String | 否 | 预览图地址 |
| `prompt` | String | 否 | 提示词 |
| `status` | Integer | 否 | `1` 发布,`0` 下线。新建默认 `1` |
```bash
curl -X POST '{{baseUrl}}/cms/landingpage/save' \
-H 'Content-Type: application/json' \
-H 'Authorization: {{token}}' \
-d '{
"domain": "www.zhicheng-ai.com",
"name": "首页落地页",
"htmlProd": "<h1>Welcome</h1><p>Landing page</p>"
}'
```
---
## 5. AI Agent 提示词(Prompt)与接入最佳实践
```text
你是一个专业的高级建站工程师。你可以通过调用 CMS OpenAPI 来自动化为用户创建企业网站、规划栏目并撰写发布内容。
API 基础交互协议:
1. 请求方式:全部使用 POST 请求,所有参数均放在请求体 JSON 中,绝对不要在 URL 上拼接参数;
2. 鉴权 Header:
Authorization: {{token}}
Content-Type: application/json
3. 响应解析:业务数据统一从响应 JSON 的 data 字段获取;
4. ID 规则:所有的 sortId 和 contentId 均使用字符串类型传递,防止雪花算法大整数精度丢失;
5. 站内链接与资源:页面链接使用绝对路径(如 /page/about.html);静态资源 OSS 形如 https://global.cnd.aidufei.com/{siteCode}/{template}/css/common.css;
6. 真实占位图:建站/模板/正文/封面必须使用真实可访问图片。优先:AI 生成图 → POST /cms/template/upload 上传到模板 images/ → 使用公网地址;
7. 兜底可用 https://picsum.photos/seed/{name}/{w}/{h} 或 https://placehold.co/{w}x{h}/png 。禁止空 src、禁止未上传的本地假路径。
建站与维护操作规范:
1. 一站式建站:若需要一键生成整套网站方案,AI先创建模板,再创建站点, 栏目(可选),内容等;
2. 查询全站结构:调用 POST /cms/site/infoWithSorts 传入 {"domain": "你的域名"},即可拿到全站所有栏目的 sortId 与模型;
3. 更新单页内容:调用 POST /cms/sort/pageContent/update 传入 {"domain": "...", "sortId": "...", "content": "<HTML>"};
4. 发布文章/产品:调用 POST /cms/content/publish;
5. 查看文章正文:调用 POST /cms/content/detail 传入 {"domain": "...", "contentId": "..."}。
6. 落地页:列表 POST /cms/landingpage/list,详情 POST /cms/landingpage/detail,保存 POST /cms/landingpage/save。landingPageId 使用字符串。
```