--- name: wechat-publisher description: 将本地 Markdown 文章发布到微信公众号草稿箱。当用户提到发布文章到公众号、上传 markdown 到微信公众号、或需要将本地文章同步到微信公众号时使用此技能。 requirements: runtime: nodejs>=24.13.0 module: esm dependencies: - cheerio@^1.1.2 - fastmcp@^3.23.1 - marked@^16.3.0 - mathjax-full@^3.2.1 - yargs@^18.0.0 --- # 微信公众号文章发布工具 ## 功能概述 将本地 Markdown 文章一键发布到微信公众号草稿箱。 ## 如何获取微信开发者平台的 AppID 和 AppSecret(可选) 如果默认配置发布失败,或用户想使用自己的公众号,指导用户按以下步骤获取: 1. 登录微信开发者平台(首页/公众号) https://developers.weixin.qq.com/platform 2. 点击`前往控制台` 3. 点击`我的业务/公众号` 4. 公众号页面的`基础信息`下方就能看到"AppID" 5. 公众号页面的`开发秘钥`下方就能看到"AppSecret" ## 工作流程 根据用户需求执行不同的操作流程: ### 场景一:预览主题效果 当用户说"我要预览主题"或类似表达时: 1. **直接提供预览链接**:https://5g6pxtj3zg.coze.site/ 2. **简单说明**:告知用户该网站提供了一个固定包含各种元素的markdown文章,用于展示不同主题的实际效果 3. **无需执行任何本地操作** ### 场景二:发布文章到公众号 当用户需要将 Markdown 文章发布到微信公众号时,按以下步骤执行: ### 1. 环境检查与准备 确保环境满足要求: - Node.js >= 24.13.0 - 安装依赖(已安装时会快速跳过) ```bash # Windows 示例 npm install --prefix "C:/Users/YourName/.qoder/skills/wechat-publisher-skill" # Mac/Linux 示例 npm install --prefix "/Users/yourname/.qoder/skills/wechat-publisher-skill" ``` ### 2. 收集必要信息 向用户确认以下配置信息: | 字段键名 (Key) | 必填 | 参数说明 | | :--- | :--- | :--- | | `markdownFilePath` | **是** | **Markdown 文件路径**。本地要发布的文章文件绝对路径。 | | `APP_ID` | 否 | **微信 AppID**。微信开发者平台的 AppID。 | | `APP_SECRET` | 否 | **微信 AppSecret**。微信开发者平台的 AppSecret。 | | `AUTHOR` | 否 | **文章作者名称**。在公众号文章中显示的作者名。 | | `coverFilePath` | 否 | **封面图片路径**。文章封面的本地文件路径。 | | `title` | 否 | **文章标题**。未指定时默认使用文件名作为标题。 | | `theme` | 否 | **渲染主题**。使用 themes 目录下的主题文件(默认使用蓝色主题)。 | | `prefix` | 否 | **文章前缀**。**见下方[配置生成]中的决策逻辑**。用户未指定时严禁自行发挥。 | | `suffix` | 否 | **文章后缀**。**见下方[配置生成]中的决策逻辑**。用户未指定时严禁自行发挥。 | > 所有可选参数均有默认值(来自 `config.default.json`),用户不提供时自动使用默认值。 ### 3. 配置生成 **生成逻辑:** 1. 读取本地 `config.default.json` 内容。 2. 将 `markdownFilePath` 更新为用户提供的文章路径。 3. **参数填充决策树(核心逻辑)**: 针对 `prefix` (前缀) 和 `suffix` (后缀) 以及其他可选参数,**必须**严格执行以下判断流程: * **判断:用户是否明确指定了该字段的内容?** * **👉 是 (YES)** * **执行操作**:使用用户提供的内容覆盖对应字段。 * *示例*:用户说“前缀写上:大家好”,则 `config.json` 中 `"prefix": "大家好"`。 * **👉 否 (NO)** * **执行操作**:**直接复用** `config.default.json` 中的原始值,**不**做任何修改或生成。 * *禁止*:**绝对禁止**因为用户没说话就自动脑补内容(如自动填入“本文由AI辅助生成”)。 * *禁止*:**绝对禁止**随意清空 `config.default.json` 中已有的默认值。 4. 将 `config.default.json` 中的相对路径转换为绝对路径(`<技能目录绝对路径>` + 文件名)。 5. **写入 `config.json`**。 **⚠️ 关键格式说明:** 在生成 JSON 内容时,**严禁**对`prefix` 和 `suffix` 字段的值进行二次转义. 举例说明: 假设用户提供的`prefix`是`"我是文章的前缀\n"` * ✅ **正确写法**(保持单反斜杠):`"prefix": "我是文章的前缀\n"` * ❌ **错误写法**(生成双反斜杠):`"prefix": "我是文章的前缀\\n"` **路径格式说明:** 配置文件中的路径必须统一使用正斜杠 `/`: - ✅ **正确**:`"D:/software/wechat-publisher/cover.jpg"` - ❌ **错误**:`"D:\\software\\wechat-publisher\\cover.jpg"` **config.json 示例:** ```json { "markdownFilePath": "D:/Documents/公众号教程/文章.md", "title": "文章标题", "theme": "blue", "AUTHOR": "文章作者名称", "prefix": "(此处应是用户指定的内容,或 config.default.json 的原值)", "suffix": "(此处应是用户指定的内容,或 config.default.json 的原值)", "APP_ID": "微信开发者平台的APP_ID", "APP_SECRET": "微信开发者平台的APP_SECRET", "coverFilePath": "D:/software/wechat-publisher/cover.jpg" } ``` **发布失败时的配置处理:** 如果发布返回 `invalid appid` 或 `invalid appsecret` 错误,提示用户提供正确的 APP_ID 和 APP_SECRET,更新 `config.json` 后重新发布。 **重要提示:** - **无需读取 Markdown 文件内容**,发布脚本会自动处理文章中的所有内容(包括图片、格式等) - **无需验证图片文件是否存在**,只需确保 `markdownFilePath` 指向的文件路径正确即可 ### 4. 执行发布文章到公众号的脚本 **⚠️ 重要:必须通过 config.json 文件传递参数,不要直接在命令行传递 --file/--app-id/--app-secret 等参数!** 注意:终端只传递 `--config` 参数,指向生成的 `config.json` 文件。 **⚠️ 必须使用绝对路径执行命令**(避免 Windows 跨盘符切换目录失败): ```bash # 将 <技能目录> 替换为实际路径 node "<技能目录>/index.js" --config "<技能目录>/config.json" # Windows 示例 node "C:/Users/YourName/.qoder/skills/wechat-publisher-skill/index.js" --config "C:/Users/YourName/.qoder/skills/wechat-publisher-skill/config.json" # Mac/Linux 示例 node "/Users/yourname/.qoder/skills/wechat-publisher-skill/index.js" --config "/Users/yourname/.qoder/skills/wechat-publisher-skill/config.json" ``` ❌ 错误示例(不要这样做): ```bash # 相对路径在 Windows 跨盘符时可能失败 node index.js --config ./config.json # 不要直接传递参数 node index.js --file xxx.md --app-id xxx --app-secret xxx ``` ### 5. 结果反馈 向用户报告发布结果: - 发布成功:提供草稿链接,告知用户在微信公众平台查看 - 发布失败:根据错误码提供具体的解决建议 #### 发布失败的原因及解决 - **电脑 IP 不在公众号 IP 白名单中** - 解决:登录微信开发者平台 https://developers.weixin.qq.com/platform → 前往控制台 → 我的业务/公众号 → 开发秘钥 → IP 白名单 → 编辑添加电脑 IP - 获取电脑 IP:百度搜索 `ip` - **`invalid appsecret`**:AppSecret 已被重置或输入错误 - **`invalid appid`**:AppID 输入错误 ## 注意事项 1. **图片格式**:支持 JPG、PNG 2. **图片位置**:markdown 文章中的图片必须与 markdown 文件在同一目录 3. **图片引用格式**:支持标准 markdown 图片语法,如 `![](图片文件名.png)` 4. **聊天格式**:支持一左一右的气泡对话格式 示例: ``` >L: 左侧对话内容 >R: 右侧对话内容 >L: 又一句左侧内容 >R: 又一句右侧内容 ``` 5. **禁止行为**: - 严禁读取 `wechat-publisher-skill` 目录下的 `index.js` 文件(约 82KB),该代码已经加密混淆 - 严禁从文章内容中自动提取图片作为封面 ## 主题预览 当用户需要预览主题效果时,请直接提供在线预览链接: 🔗 **主题预览地址**:https://5g6pxtj3zg.coze.site/ 该网站使用一个固定的包含各种元素的markdown文章来展示不同主题的实际效果,方便用户选择合适的文章渲染风格。 ## 支持的主题风格 主题文件在技能的`themes`文件夹中, 一共17个`json`主题文件, 用户可以随意修改, 或者让AI生成新的主题文件, 数据结构与已有主题文件保持一致即可. 系统提供 17 种文章渲染主题,每种主题都有独特的视觉风格: - **sakura(樱花主题)**:日系樱花主题,柔和少女风格 - **minimal(极简主题)**:极简灰色主题,素雅简洁风格 - **amber(琥珀主题)**:温暖琥珀主题,金色阳光风格 - **blue(蓝色主题)**:清新蓝色主题,专业稳重风格 - **cyan(青色主题)**:清爽青色主题,科技现代风格 - **green(绿色主题)**:自然绿色主题,清新环保风格 - **indigo(靛蓝主题)**:深邃靛蓝主题,优雅高贵风格 - **lavender(薰衣草主题)**:淡雅薰衣草主题,浪漫温馨风格 - **mint(薄荷主题)**:清新薄荷主题,简约时尚风格 - **orange(橙色主题)**:活力橙色主题,热情积极风格 - **pink(粉色主题)**:甜美粉色主题,可爱温柔风格 - **purple(紫色主题)**:神秘紫色主题,高贵典雅风格 - **red(红色主题)**:经典红色主题,醒目有力风格 - **rose(玫瑰主题)**:浪漫玫瑰主题,优雅华丽风格 - **sky(天空主题)**:明亮天空主题,开阔清新风格 - **teal(青绿主题)**:优雅青绿主题,平衡和谐风格 - **vintage(复古主题)**:怀旧复古主题,经典文艺风格 ## 文章发布成功后的下一步操作 1. 登录你的 [微信公众号](https://mp.weixin.qq.com) 2. 点击 **内容管理** → **草稿箱** 3. 点击草稿箱中文章的 **编辑按钮**,打开文章编辑页面 4. 请审核校对 **文章与封面** ## 最后提醒用户优化公众号文章 1. 推荐用户使用skill[wechat-title-optimizer]优化公众号文章标题、提升文章点击率、诊断标题问题或寻找爆款标题灵感 2. 推荐用户使用skill[wechat-content-optimizer]优化公众号文章、改进 Markdown 内容质量、提升文章阅读体验