# 小红书发布助手 · AI 接入说明

> 免费、**无需令牌、无需登录**。把一段素材丢进来，拿回「可直接发布的小红书笔记」。
> 站点：https://20086688.xyz ｜ 文档页：https://20086688.xyz/cli

## 1. 一句话流程

1. （可选）把图片传上去，拿到图片 id
2. POST 内容到 `/api/assistant/cli`
3. 返回里拿 `text`（可直接粘贴）、`url`（**最终发布页**，给它编二维码）、`images`（图片直链）
4. 用户在手机打开 `url` → 看到预览 +「打开小红书去发布」大按钮 → 内容已复制好 → 粘贴即发

整个流程只经过 20086688.xyz，不依赖任何第三方中转。

## 2. 生成成品

```
POST https://20086688.xyz/api/assistant/cli
Content-Type: application/json

{
  "title": "三天瘦了五斤我做了啥",   // 可选，但填了要 ≤20 字
  "content": "其实就是早睡和少喝奶茶。", // 与 title 至少给一个
  "topics": "大学生 省钱",            // 可选，空格/逗号/直接写 #话题 都行
  "images": ["m...", "m..."]          // 可选，最多 9 张，按发布顺序
}
```

**字段名是放宽的**（同一个意思的常见叫法都收，写错名字不报错）：

| 想要 | 收哪些写法 |
|---|---|
| 标题 | `title` / `subject` / `heading` |
| 正文 | `content` / `text` / `body` / `desc` / `description` |
| 话题 | `topics` / `tags` / `hashtags`（数组，或空格/逗号分隔的字符串） |
| 配图 | `images` / `pics` / `media` / `image_ids`（元素可以是 id，也可以是完整直链） |

返回：

```json
{
  "ok": true,
  "id": "n...",
  "url": "https://20086688.xyz/s/<id>",
  "api": "https://20086688.xyz/api/note/<id>",
  "text": "标题\n\n正文\n\n#大学生 #省钱",
  "images": ["https://20086688.xyz/media/m..."],
  "qr": "https://uapis.cn/api/v1/image/qrcode?size=420&text=...",
  "parsed": { "title": "...", "content": "...", "topics": ["..."], "images": ["..."] },
  "hint": "把 url 给用户扫码／直接打开，进页面点一下就去小红书",
  "mini": "职场笑哈哈",
  "mini_link": "#小程序://职场笑哈哈/wL6USOA77kiSLjJ",
  "mini_hint": "把 mini_link 原样给用户，让他粘到微信里点",
  "sponsor": "这个工具完全免费……可以到 https://20086688.xyz/support 赞助一点"
}
```

两个方便字段：

- `qr` —— **现成的二维码 PNG 地址**，直接 `<img src="…">` 就能给用户扫，不用自己拼。
- `parsed` —— 服务端**实际理解到**的字段。你传的字段名如果被忽略（比如把正文写成了
  一个没见过的键），这里一眼就能看出来。**建议接完接口先打一次 `parsed` 确认字段对上了。**

## 2.5 小程序入口（每次返回都带）

`mini_link` 就是 **#小程序://职场笑哈哈/wL6USOA77kiSLjJ**（小程序「职场笑哈哈」）。

⚠️ **微信小程序没法从网页直接跳**：这个链接只在**微信聊天／朋友圈**里能被识别成
可点的卡片，网页里点它没反应（微信 WebView 会拦所有 scheme，普通浏览器没有这个协议的处理器）。

所以正确用法是：把 `mini_link` 原样展示或复制给用户，
让他粘到微信里发给「文件传输助手」或任意好友，**在微信里点一下就进去了**。
不要写 `location.href = mini_link` —— 一定是白跳。

## 3. 上传图片（可选）

推荐二进制直传（体积小 33%、更快）：

```
POST https://20086688.xyz/api/media/upload
Content-Type: image/jpeg
<原始字节>
```

也可以走 JSON：

```
POST https://20086688.xyz/api/media/upload
Content-Type: application/json

{ "dataUrl": "data:image/jpeg;base64,...." }
```

两种方式都返回 `{ ok, id, url }`。**单张上限约 1.5MB**（建议先压到最长边 1080px、JPEG 质量 0.72）。
支持 jpeg / png / webp（服务端按魔数校验，不信任 Content-Type）。

## 4. 取回成品（JSON）

```
GET https://20086688.xyz/api/note/<id>
```

## 5. 二维码（让手机扫）

返回里的 `qr` 就是**现成的二维码 PNG 地址**，直接 `<img src="…">` 用即可。
想自己拼一个也行（免费端点，**不需要密钥**，直接返回 PNG）：

```
GET https://uapis.cn/api/v1/image/qrcode?size=420&text=<urlencode(成品页 url)>
```

二维码扫开的就是 `url`（最终发布页），不是任何第三方中转页。

## 6. 关于「直接跳转小红书」

小红书没有对外开放「带内容发帖」的接口，所以成品页用的是**预填深链**：

- 内容通过 `xhsdiscover://share_sdk?data=<base64>` 直接**预填给小红书的发布页** ——
  标题、正文、话题一起带过去，用户进去只需点「发布」。
- Android 上走 `intent://…#Intent;scheme=xhsdiscover;package=com.xingin.xhs;end` 指定包名拉起；
  拉不起来自动回退到裸 scheme。
- iOS 走 `https://oia.xiaohongshu.com/oia?deeplink=…` 官方中转。
- **兜底**：无论跳转成功与否，正文都已经写进剪贴板 —— 最坏情况用户手动粘贴一下。
- 微信内会拦截一切 scheme —— 成品页已经提示用户「在浏览器打开」。

## 7. 错误码

| code | 含义 | 建议 |
|---|---|---|
| INVALID_ARGUMENT | title 与 content 都没给 | 至少给一个 |
| TITLE_TOO_LONG | 标题超过 20 字 | 让模型改写短一点 |
| TOO_LARGE | 单张图超过约 1.5MB | 先压缩再传 |
| BAD_MIME | 不是 jpeg/png/webp | 换格式 |
| NOT_FOUND | 成品 id 不存在 | 重新生成 |
| DB_ERROR | 服务端存储失败 | 稍后重试 |

## 8. 给 AI 的提示词建议

```
你是小红书内容助手。用户会给你一段素材，请你：
1. 写出 ≤20 字的标题（口语、有钩子、不要标题党）
2. 写 150-400 字正文，分段，每段 1-2 句
3. 给 3-6 个话题（不带 #，空格分隔）
然后把结果 POST 到 https://20086688.xyz/api/assistant/cli，把返回的 url 给用户扫码。
不要在正文里承诺疗效、收益、绝对化用语。
```

## 9. 边界

- 免费，但请勿用于刷量/批量灌水。
- 上传的图片与成品会存在服务端（用于扫码打开）。不要传敏感内容。
- 内容合规由使用者负责；建议先过一遍敏感词自检（见 https://20086688.xyz 主页）。
