# content +add-bjh

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

发布行业内容文章到百家号或保存草稿，需要一张封面图并关联一个商品。命令执行前会在客户端校验参数合法性，不合规则直接报错，不发送请求。

## 命令

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

# 保存草稿
cai-cli content +add-bjh \
  --title "产品详情草稿" \
  --content "<p>正文内容...</p><img src=\"https://cdn.example.com/img.png\" />" \
  --goods-id "1801814316225443611" \
  --cover-url "https://b2b-material.cdn.bcebos.com/test.jpg" \
  --behavior saveDraft

# 预览请求（不实际发送）
cai-cli content +add-bjh --title "测试标题" --content "<p>...</p>" --goods-id "123" --cover-url "https://b2b-material.cdn.bcebos.com/test.jpg" --dry-run
```

## 参数

| Flag | 类型 | 必填 | 默认值 | 说明                                                                                           |
|------|------|------|-------|----------------------------------------------------------------------------------------------|
| `--title` | string | ✓ | — | 文章标题，≥5 个字符 |
| `--content` | string | ✓ | — | 正文，HTML 格式，≥200 字符，须包含带 `src` 属性的 `<img>` 标签 |
| `--goods-id` | string | ✓ | — | 关联商品 ID，仅一个，纯数字（取自 `product +list`） |
| `--cover-url` | string | ✓ | — | 封面图 URL（一张），如 `https://b2b-material.cdn.bcebos.com/test.jpg` （取自 `platform +material-upload`）|
| `--behavior` | string | — | `publish` | 操作：`publish`=发布，`saveDraft`=保存草稿 |
| `--publish-channel` | int | — | `2` | 发布渠道，固定为 `2` |

## 客户端校验规则

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

| 规则 | 错误信息 |
|------|---------|
| `--title` 字符数 < 5 | `标题不能少于 5 个字符` |
| `--content` 字符数 < 200 | `正文不能少于 200 个字符` |
| `--content` 不含合法 HTML 元素 | `正文必须是 HTML 格式，需包含合法的 HTML 标签（如 <p>、<div>）` |
| `--content` 中无带 `src` 属性的 `<img>` 标签 | `正文至少需要包含一张带 src 属性的图片（<img src="...">）` |
| `--goods-id` 包含除 0-9 以外的字符 | `goods-id 只能为数字商品ID（0-9）` |
| `--goods-id` 字符数 > 30 | `goods-id 长度不能超过 30 位` |
| `--cover-url` 为空 | `cover-url 不能为空` |
| `--cover-url` 不是 http/https URL | `cover-url 必须是以 http:// 或 https:// 开头的URL` |


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

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

## 风险等级

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

## 参考

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