baoyu-post-to-wechat

通过API或Chrome CDP发布内容至微信公众号。支持以HTML、Markdown或纯文本格式输入发布文章,以及发布包含多张图片的图文消息。适用于用户提及“发布公众号”、“post to wechat”、“微信公众号”或“图文/文章”的场景。

查看详情
name:baoyu-post-to-wechatdescription:Posts content to WeChat Official Account (微信公众号) via API or Chrome CDP. Supports article posting (文章) with HTML, markdown, or plain text input, and image-text posting (图文) with multiple images. Use when user mentions "发布公众号", "post to wechat", "微信公众号", or "图文/文章".

Post to WeChat Official Account

Language

Match user's language: Respond in the same language the user uses. If user writes in Chinese, respond in Chinese. If user writes in English, respond in English.

Script Directory

Agent Execution: Determine this SKILL.md directory as SKILL_DIR, then use ${SKILL_DIR}/scripts/.ts.

ScriptPurpose
scripts/wechat-browser.tsImage-text posts (图文)
scripts/wechat-article.tsArticle posting via browser (文章)
scripts/wechat-api.tsArticle posting via API (文章)

Preferences (EXTEND.md)

Use Bash to check EXTEND.md existence (priority order):

# Check project-level first
test -f .baoyu-skills/baoyu-post-to-wechat/EXTEND.md && echo "project"

Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)


test -f "$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md" && echo "user"

┌────────────────────────────────────────────────────────┬───────────────────┐
│ Path │ Location │
├────────────────────────────────────────────────────────┼───────────────────┤
│ .baoyu-skills/baoyu-post-to-wechat/EXTEND.md │ Project directory │
├────────────────────────────────────────────────────────┼───────────────────┤
│ $HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md │ User home │
└────────────────────────────────────────────────────────┴───────────────────┘

┌───────────┬───────────────────────────────────────────────────────────────────────────┐
│ Result │ Action │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Found │ Read, parse, apply settings │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Not found │ Run first-time setup (references/config/first-time-setup.md) → Save → Continue │
└───────────┴───────────────────────────────────────────────────────────────────────────┘

EXTEND.md Supports: Default theme | Default publishing method (api/browser) | Default author | Default open-comment switch | Default fans-only-comment switch | Chrome profile path

First-time setup: references/config/first-time-setup.md

Minimum supported keys (case-insensitive, accept 1/0 or true/false):

KeyDefaultMapping
default_authoremptyFallback for author when CLI/frontmatter not provided
need_open_comment1articles[].need_open_comment in draft/add request
only_fans_can_comment0articles[].only_fans_can_comment in draft/add request

Recommended EXTEND.md example:

default_theme: default
default_publish_method: api
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile

Value priority:

  • CLI arguments

  • Frontmatter

  • EXTEND.md

  • Skill defaults
  • Image-Text Posting (图文)

    For short posts with multiple images (up to 9):

    npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --markdown article.md --images ./images/
    npx -y bun ${SKILL_DIR}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit

    See references/image-text-posting.md for details.

    Article Posting Workflow (文章)

    Copy this checklist and check off items as you complete them:

    Publishing Progress:
  • [ ] Step 0: Load preferences (EXTEND.md)

  • [ ] Step 1: Determine input type

  • [ ] Step 2: Check markdown-to-html skill

  • [ ] Step 3: Convert to HTML

  • [ ] Step 4: Validate metadata (title, summary, cover)

  • [ ] Step 5: Select method and configure credentials

  • [ ] Step 6: Publish to WeChat

  • [ ] Step 7: Report completion
  • Step 0: Load Preferences

    Check and load EXTEND.md settings (see Preferences section above).

    CRITICAL: If not found, complete first-time setup BEFORE any other steps or questions.

    Resolve and store these defaults for later steps:

  • default_author

  • need_open_comment (default 1)

  • only_fans_can_comment (default 0)
  • Step 1: Determine Input Type

    Input TypeDetectionAction
    HTML filePath ends with .html, file existsSkip to Step 4
    Markdown filePath ends with .md, file existsContinue to Step 2
    Plain textNot a file path, or file doesn't existSave to markdown, then Step 2

    Plain Text Handling:

  • Generate slug from content (first 2-4 meaningful words, kebab-case)

  • Create directory and save file:
  • mkdir -p "$(pwd)/post-to-wechat/$(date +%Y-%m-%d)"

    Save content to: post-to-wechat/yyyy-MM-dd/[slug].md

  • Continue processing as markdown file
  • Slug Examples:

  • "Understanding AI Models" → understanding-ai-models

  • "人工智能的未来" → ai-future (translate to English for slug)
  • Step 2: Check Markdown-to-HTML Skill

    Skip if: Input is .html file

    Skill Discovery:

    # Check if baoyu-markdown-to-html exists
    test -f skills/baoyu-markdown-to-html/SKILL.md && echo "found"

    ResultAction
    FoundRead its SKILL.md, continue to Step 3
    Multiple skillsAskUserQuestion to choose
    Not foundShow installation suggestion

    When Not Found:

    No markdown-to-html skill found.

    Suggested installation:
    https://github.com/JimLiu/baoyu-skills/blob/main/skills/baoyu-markdown-to-html/SKILL.md

    Options:
    A) Cancel - install the skill first
    B) Continue - provide HTML file manually

    Step 3: Convert Markdown to HTML

    Skip if: Input is .html file

  • Ask theme preference (unless specified in EXTEND.md or CLI):
  • ThemeDescription
    default经典主题 - 传统排版,标题居中带底边,二级标题白字彩底
    grace优雅主题 - 文字阴影,圆角卡片,精致引用块
    simple简洁主题 - 现代极简风,不对称圆角,清爽留白

  • Execute conversion (using the discovered skill):
  • npx -y bun ${MD_TO_HTML_SKILL_DIR}/scripts/main.ts <markdown_file> --theme <theme>

  • Parse JSON output to get: htmlPath, title, author, summary, contentImages
  • Step 4: Validate Metadata

    Check extracted metadata from Step 3 (or HTML meta tags if direct HTML input).

    FieldIf Missing
    TitlePrompt: "Enter title, or press Enter to auto-generate from content"
    SummaryPrompt: "Enter summary, or press Enter to auto-generate (recommended for SEO)"
    AuthorUse fallback chain: CLI --author → frontmatter author → EXTEND.md default_author

    Auto-Generation Logic:

  • Title: First H1/H2 heading, or first sentence

  • Summary: First paragraph, truncated to 120 characters
  • Cover Image Check (required for article_type=news):

  • Use CLI --cover if provided.

  • Else use frontmatter (featureImage, coverImage, cover, image).

  • Else check article directory default path: imgs/cover.png.

  • Else fallback to first inline content image.

  • If still missing, stop and request a cover image before publishing.
  • Step 5: Select Publishing Method and Configure

    Ask publishing method (unless specified in EXTEND.md or CLI):

    MethodSpeedRequirements
    api (Recommended)FastAPI credentials
    browserSlowChrome, login session

    If API Selected - Check Credentials:

    # Check project-level
    test -f .baoyu-skills/.env && grep -q "WECHAT_APP_ID" .baoyu-skills/.env && echo "project"

    Check user-level


    test -f "$HOME/.baoyu-skills/.env" && grep -q "WECHAT_APP_ID" "$HOME/.baoyu-skills/.env" && echo "user"

    If Credentials Missing - Guide Setup:

    WeChat API credentials not found.

    To obtain credentials:

  • Visit https://mp.weixin.qq.com

  • Go to: 开发 → 基本配置

  • Copy AppID and AppSecret
  • Where to save?
    A) Project-level: .baoyu-skills/.env (this project only)
    B) User-level: ~/.baoyu-skills/.env (all projects)

    After location choice, prompt for values and write to .env:

    WECHAT_APP_ID=<user_input>
    WECHAT_APP_SECRET=<user_input>

    Step 6: Publish to WeChat

    API method:

    npx -y bun ${SKILL_DIR}/scripts/wechat-api.ts <html_file> [--title <title>] [--summary <summary>] [--author <author>] [--cover <cover_path>]

    draft/add payload rules:

  • Use endpoint: POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN

  • article_type: news (default) or newspic

  • For news, include thumb_media_id (cover is required)

  • Always resolve and send:

  • - need_open_comment (default 1)
    - only_fans_can_comment (default 0)
  • author resolution: CLI --author → frontmatter author → EXTEND.md default_author
  • If script parameters do not expose the two comment fields, still ensure final API request body includes resolved values.

    Browser method:

    npx -y bun ${SKILL_DIR}/scripts/wechat-article.ts --html <html_file>

    Step 7: Completion Report

    For API method, include draft management link:

    WeChat Publishing Complete!

    Input: [type] - [path]
    Method: API
    Theme: [theme name]

    Article:
    • Title: [title]
    • Summary: [summary]
    • Images: [N] inline images
    • Comments: [open/closed], [fans-only/all users]

    Result:
    ✓ Draft saved to WeChat Official Account
    • media_id: [media_id]

    Next Steps:
    → Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)

    Files created:
    [• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)]
    [• slug.html (converted)]

    For Browser method:

    WeChat Publishing Complete!

    Input: [type] - [path]
    Method: Browser
    Theme: [theme name]

    Article:
    • Title: [title]
    • Summary: [summary]
    • Images: [N] inline images

    Result:
    ✓ Draft saved to WeChat Official Account

    Files created:
    [• post-to-wechat/yyyy-MM-dd/slug.md (if plain text)]
    [• slug.html (converted)]

    Detailed References

    TopicReference
    Image-text parameters, auto-compressionreferences/image-text-posting.md
    Article themes, image handlingreferences/article-posting.md

    Feature Comparison

    FeatureImage-TextArticle (API)Article (Browser)
    Plain text input
    HTML input
    Markdown inputTitle/content✓ (via skill)✓ (via skill)
    Multiple images✓ (up to 9)✓ (inline)✓ (inline)
    Themes
    Auto-generate metadata
    Default cover fallback (imgs/cover.png)
    Comment control (need_open_comment, only_fans_can_comment)
    Requires Chrome
    Requires API credentials
    SpeedMediumFastSlow

    Prerequisites

    For API method:

  • WeChat Official Account API credentials

  • Guided setup in Step 5, or manually set in .baoyu-skills/.env
  • For Browser method:

  • Google Chrome

  • First run: log in to WeChat Official Account (session preserved)
  • For Markdown conversion:

  • A markdown-to-html skill (e.g., baoyu-markdown-to-html)

  • If not installed, the workflow will suggest installation
  • Config File Locations (priority order):

  • Environment variables

  • /.baoyu-skills/.env

  • ~/.baoyu-skills/.env
  • Troubleshooting

    IssueSolution
    No markdown-to-html skillInstall baoyu-markdown-to-html from suggested URL
    Missing API credentialsFollow guided setup in Step 5
    Access token errorCheck if API credentials are valid and not expired
    Not logged in (browser)First run opens browser - scan QR to log in
    Chrome not foundSet WECHAT_BROWSER_CHROME_PATH env var
    Title/summary missingUse auto-generation or provide manually
    No cover imageAdd frontmatter cover or place imgs/cover.png in article directory
    Wrong comment defaultsCheck EXTEND.md keys need_open_comment and only_fans_can_comment
    Paste failsCheck system clipboard permissions

    Extension Support

    Custom configurations via EXTEND.md. See Preferences section for paths and supported options.