# Gzh Channel

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-zimablueai-skills-gzh-channel`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [ZimaBlueAI](https://agentstack.voostack.com/s/zimablueai)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [ZimaBlueAI](https://github.com/ZimaBlueAI)
- **Source:** https://github.com/ZimaBlueAI/skills/tree/main/openclaw-skills/skills/gzh-channel

## Install

```sh
agentstack add skill-zimablueai-skills-gzh-channel
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 频道对话 · 公众号排版并发回当前会话 (gzh channel delivery)

> **一句话**:用户在飞书频道里丢来一篇文章,你(OpenClaw)把它整理成 Markdown 草稿
> → 用 **interactive 卡片(代码块形式)** 发回让用户确认 → 确认后调 `gzh-design`
> 排版成公众号 HTML → 用 `gzh_send.sh` 把**带「一键复制」按钮的预览页**发回
> **当前这个会话**。用户下载、浏览器打开、点复制、粘贴进公众号编辑器,完事。
>
> **频道适配器**:当前实现 = **飞书 / Lark**(优先复用 lark-cli 令牌,回退 REST)。
> 加其它通道在 `scripts/gzh_card_send.py` 里按相同结构加 adapter。

本技能**不自己写排版 HTML**——主题、组件、校验全是 `gzh-design` 的职责。
本技能负责的是**频道里的收稿 → 草稿确认 → 触发排版 → 频道交付**这条链路。

---

## 何时触发

用户在飞书频道(单聊或群,群里需 @机器人)里:
- 发来一篇文章(消息正文 / .md / .docx / .pdf / .txt)+ 说"排成公众号 / 公众号排版 / 微信排版"
- "把这篇排一下发我" / "帮我排个公众号版本" / "转成公众号格式"
- 只说"公众号排版"没给文章 → 先要文章,再走流程

→ 这就是 **收稿 → 草稿确认 → 排版 → 交付** 四步连做。

## 依赖的生成技能(必须已安装)

| 你要做的 | 用哪个技能 | 装没装 |
|---------|-----------|-------|
| 公众号排版(主题/组件/校验/预览页) | `gzh-design` | 必装 |

装法见同目录 `install-openclaw-skills.sh` / `.ps1`(默认一并安装)。
没装就先装,别自己硬写公众号 HTML——`` 包裹、平台过滤项、双关卡校验都在 gzh-design 里。

---

## 工作流(频道里逐步执行)

### 第 0 步 · 确认你在频道里 & 拿到当前 chat_id

成品要发回**用户正在跟你说话的这个会话**。当前 chat_id 通常在环境变量里
(`FEISHU_CHAT_ID` / `OPENCLAW_CHAT_ID` 等,脚本自动解析);解析不到时从这条
飞书消息的事件上下文里取 `chat_id`(群是 `oc_` 开头),交付时用
`--to  --to-type chat_id` 显式传。平台细节见 viz-channel 的
`references/openclaw-channel.md`(两技能共用同一套 chat 解析)。

### 第 1 步 · 收稿 → 整理成 Markdown 草稿

用户给的可能是:飞书消息里的纯文本长文、`.md`、`.docx`、`.pdf`、`.txt`。

- 按 **gzh-design 的 `references/format-normalize.md`** 把非 Markdown 输入归一化成
  Markdown 草稿(docx 用其 `scripts/extract_docx.py`;纯文本按标题启发式推断结构)。
- 草稿要素:文章标题(`#`)、章节(`##`)、开头引言(`>`)、加粗/图片/代码块原样保留。
- **不改写用户的实质内容**——只做结构化(补标题层级、分段),文字照抄。
- 保存为本地 `draft-.md`。

### 第 2 步 · Markdown 草稿发回用户确认(interactive 卡片)

**这是本技能的核心环节:排版前必须让用户确认结构**,避免排完才发现章节切错。

```bash
bash scripts/gzh_send.sh --draft draft-xxx.md --to-current
```

脚本行为(用户在飞书里看到什么):
- **短稿(≤6000 字符)**:一张 interactive 卡片 = 结构摘要(标题 / 章节列表 / 字数
  / 图片数)+ **Markdown 全文代码块** + 底部提示「回复『确认』开始排版」。
- **长稿(>6000 字符)**:卡片放结构摘要 + 开头预览,随后自动补发完整 `.md` 文件。
- 卡片发送失败(权限/组件不支持)自动**回退为带代码围栏的文本消息**,流程不断。

发完卡片后**在频道里等用户回复**:
- 「确认 / 可以 / 没问题 / OK」→ 进第 3 步。
- 提出修改(改标题 / 合并章节 / 删一段)→ 改 `draft-xxx.md` → 重发确认卡片(回到本步)。
- **不要没等确认就直接排版**(见反模式)。

### 第 3 步 · 选主题(一步确认,给足默认)

确认稿后,按 **gzh-design SKILL.md 第 1 步**的推荐制在频道里问一句:
「建议用 **摸鱼绿**(教程/盘点类首选),确认还是换?也有:红白(观点)/ 石墨极简(科技)/
留白禅意 / 摸鱼票据 / 橄榄手记」。用户已指定主题或说「你定 / 直接排」→ 不问,自动选最契合的。

### 第 4 步 · 排版(交给 gzh-design)

触发 `gzh-design` 技能完整流程:读主题组件库 + 通用增量库 → 解析结构装配 HTML →
**跑 `validate_gzh_html.py` 到 ERROR×0**(半角标点 WARNING 也清零)→
`wrap_preview.py` 生成带「一键复制」按钮的 `_预览.html`。

产物两个文件:`{名}_排版_{主题}({标识}).html`(干净正文,兜底用)+ `{...}_预览.html`(主交付)。
做完**先核对两个文件真的生成了**(路径存在、大小合理),再进交付。

### 第 5 步 · 发回当前频道

```bash
bash scripts/gzh_send.sh \
  --file "文章_排版_摸鱼绿(moyu-green)_预览.html" \
  --file "文章_排版_摸鱼绿(moyu-green).html" \
  --to-current \
  --note "公众号排版好了 ✦ 下载「_预览.html」用浏览器打开 → 点右上角「一键复制」→ 到公众号编辑器 Ctrl/⌘+V 粘贴即可,样式不会丢。另一个文件是干净正文,手动粘贴兜底用。"
```

Windows 上把 `bash scripts/gzh_send.sh` 换成 `pwsh scripts/gzh_send.ps1`(参数相同)。

**附言铁律**(发 HTML 必带):
- 「**下载后用浏览器打开**」——飞书内直接点开看不到复制按钮。
- 「点右上角**一键复制** → 公众号编辑器粘贴」——这是整条链路的终点动作。

### 第 6 步 · 回执 + 修改循环

文件发出(脚本退出码 0)后回一句:用了什么主题、发了哪两个文件、怎么用。
用户看完要改(换主题 / 改某段 / 加图)→ 改 `draft-xxx.md` 或直接改排版 →
重跑第 4、5 步。**换主题不用重新确认草稿**,直接重排。

---

## 一图流

```
用户: 发来文章 +「排成公众号发我」
  │
  ▼ 第1步  整理成 Markdown 草稿 (format-normalize / extract_docx)
  ▼ 第2步  gzh_send.sh --draft → interactive 卡片(代码块) ←──┐
  │         用户:「第3章拆成两章」→ 改 draft 重发 ────────────┘
  │         用户:「确认」
  ▼ 第3步  选主题(推荐制,一步确认)
  ▼ 第4步  gzh-design 排版 → validate ERROR×0 → wrap_preview
  ▼ 第5步  gzh_send.sh --file _预览.html --file 正文.html --to-current
  ▼ 第6步  回执:「浏览器打开 → 点复制 → 公众号粘贴」
```

---

## 凭证与权限(自动找,一般不用配)

与 viz-channel 完全同源:命令行 → 环境变量 `FEISHU_APP_ID/SECRET`
→ `~/.bodhi/config.yaml` → `~/.lark-cli/config.json`;`--via auto` 优先复用 lark-cli 令牌。

发送方 app 需要权限:`im:message`、`im:message:send_as_bot`、`im:resource`(上传文件)。
interactive 卡片无需额外权限(走同一 `im:message`)。

---

## 边界 & 反模式

- 卡片体积:全文内嵌上限默认 6000 字符(`--max-inline` 可调),更长自动走「大纲卡片 + .md 附件」,别硬塞。
- ❌ **没等用户确认草稿就排版**——结构错了排完全废,确认卡片是必经步骤(用户明说「直接排不用确认」除外)。
- ❌ 跳过 `validate_gzh_html.py` 就交付——粘贴掉格式的锅全在这步。
- ❌ 发 HTML 不提醒「下载用浏览器打开 + 点复制按钮」——用户在飞书里直接点会以为坏了。
- ❌ 文件没真发成功(退出码非 0)就说「已发给你」。
- ❌ 自己硬写公众号 HTML 跳过 gzh-design——`` / 平台过滤项 / 全角标点都会踩坑。
- ❌ 把 app_secret 写死进命令或提交进库。
- 卡片上不放交互按钮(确认走文字回复)——按钮回调需要网关额外接卡片回传事件,文字回复零配置可用。

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [ZimaBlueAI](https://github.com/ZimaBlueAI)
- **Source:** [ZimaBlueAI/skills](https://github.com/ZimaBlueAI/skills)
- **License:** Apache-2.0

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-zimablueai-skills-gzh-channel
- Seller: https://agentstack.voostack.com/s/zimablueai
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
