# content +add

> **前置条件：** 先阅读 [`../../cai-shared/SKILL.md`](../../cai-shared/SKILL.md) 了解认证、全局参数和安全规则。

发布或保存一篇行业内容文章，需要关联商品和标签。命令执行前会在客户端校验参数合法性，不合规则直接报错，不发送请求。

## 命令

```bash
# 发布文章
cai-cli content +add \
  --title "钢管产品卖点介绍" \
  --content "<p>我们的钢管采用优质原材料，强度高、耐腐蚀。</p><img src=\"https://cdn.example.com/img.png\" /><p>适用于建筑、工业等多种场景，欢迎咨询。</p>" \
  --goods-ids "1801814316225443611" \
  --tag-id 2

# 保存草稿
cai-cli content +add \
  --title "产品详情草稿" \
  --content "<p>正文内容...</p><img src=\"https://cdn.example.com/img.png\" />" \
  --goods-ids "1801814316225443611" \
  --tag-id 3 \
  --behavior saveDraft

# 预览请求（不实际发送）
cai-cli content +add --title "测试标题" --content "<p>...</p>" --goods-ids "123" --tag-id 1 --dry-run
```

## 参数

| Flag | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|--------|------|
| `--title` | string | ✓ | — | 文章标题，≥5 个字符 |
| `--content` | string | ✓ | — | 正文，HTML 格式，≥200 字符，须包含带 `src` 属性的 `<img>` 标签 |
| `--goods-ids` | string | ✓ | — | 关联商品 ID，逗号分隔（取自 `product +list`）|
| `--tag-id` | int | ✓ | — | 内容标签 ID（取自 `content +tag-list`）|
| `--behavior` | string | — | `publish` | 操作：`publish`=发布，`saveDraft`=保存草稿 |
| `--publish-channel` | int | — | `1` | 发布渠道，固定为 `1` |

## 客户端校验规则

命令执行前会按以下规则校验，任一不通过直接报错（exit 2），不发送请求：

| 规则 | 错误信息 |
|------|---------|
| `--title` 字符数 < 5 | `标题不能少于 5 个字符` |
| `--content` 字符数 < 200 | `正文不能少于 200 个字符` |
| `--content` 不含合法 HTML 元素 | `正文必须是 HTML 格式，需包含合法的 HTML 标签（如 <p>、<div>）` |
| `--content` 中无带 `src` 属性的 `<img>` 标签 | `正文至少需要包含一张带 src 属性的图片（<img src="...">）` |

> 字符数以 Unicode 字符（rune）计算，中文字符计 1 个。

## 响应字段（`data` 对象）
| 字段 | 类型 | 说明 |
|------|------|------|
| `id` | int/string | 文章 ID |
| `previewUrl` | string | 预览链接 |

## 风险等级

`write`（发布/保存内容，执行前需向用户确认）

## 参考

- [cai-content](../SKILL.md) — 行业内容管理全部命令
- [content +tag-list](cai-content-tag-list.md) — 获取标签 ID
- [cai-shared](../../cai-shared/SKILL.md) — 认证和全局参数
