The biggest chaos in running a content site isn't in the writing-it's in the scheduling. Topics scatter across WeChat bookmarks, memo apps, and browser tabs. What to publish on which day is a gut call. On the day something is due, you realize nothing is written and scramble to ship a subpar piece. Your column rhythm is irregular, and readers can't tell when to expect hot takes versus tutorials. Worse, multi-channel distribution-website, WeChat official account, Xiaohongshu-each runs its own schedule, out of sync, and the official account publishes before the site catches up.
This n8n workflow chains "discover -> score -> schedule -> remind -> write back" into one automated line: a weekly trigger pulls from multiple topic sources, an LLM scores each item and suggests a publish date and column, then writes it into a Feishu Bitable or Notion database as a calendar. When a publish date is near, it notifies the owner with "tomorrow: publish X." After publication, a CMS webhook writes back the status to "published," keeping the calendar alive so everyone can see who writes what and when.
Workflow Chain
Schedule trigger (every Monday 9 AM) -> parallel multi-source collection (RSS Read for tech media feeds / HTTP Request for trending API / Webhook for manual topic entry) -> Merge into one topic stream -> LLM node (HTTP Request to DeepSeek/Kimi API) scores topic value + suggests publish date + column category -> Code node parses LLM JSON output and calculates daysUntilPublish -> write to calendar table (Feishu Bitable / Notion database: title / column / publish date / status / assignee) -> IF publish date near (daysUntilPublish <= 1) -> notify assignee (Feishu / Slack / email "tomorrow: publish X") -> [CMS publish callback Webhook triggers] -> write back status to "published".
Download Template
Setup Steps
- Import: n8n -> Workflows -> Import from File, pick workflow-ai-content-calendar.json
- Schedule node: set to trigger every Monday at 9 AM (set the week's lineup early, leave room for writing). Switch to daily if your topic cycle is fast
- Source nodes: RSS Read for Chinese tech media feeds (36Kr https://36kr.com/feed / Jiqizhixin https://www.jiqizhixin.com/rss / sspai https://sspai.com/feed); HTTP Request for trending APIs (Tavily search / Weibo hot search / Jike trending); Webhook node for manual topic entry-curl a link in and it joins the pool
- Merge node: set mode to Append, combining three streams into one
- LLM node: fill in API key (DeepSeek / Kimi / Qwen all work), 8k context is enough. Prompt should output summary / score / suggestedPublishDate / category / assignee (see Companion Prompt below)
- Code node: parse the LLM's JSON response, compute daysUntilPublish, set default status='draft'. Auto-shift to Monday if the suggested date lands on a weekend
- Calendar write node: Feishu Bitable via HTTP Request to OpenAPI (pass title / column / publishDate / status / assignee in fields); Notion via the official Notion node's Create Page, with your calendar databaseId
- IF node: condition daysUntilPublish <= 1, true branch goes to notify, false ends (not due yet)
- Notify node: Feishu custom bot Webhook; Slack incoming Webhook; email via Send Email node. Message body: title + column + publish date + assignee only
- CMS callback node: when your CMS (WordPress / Ghost) publishes a post, it calls this n8n Webhook to trigger status writeback
- Status writeback node: PATCH the corresponding calendar record, set status to "published"
- Test run: manually trigger the Schedule node, check whether new topic rows appear in the calendar table; change one topic's publish date to tomorrow and verify the notification arrives
Companion Prompt (LLM Scoring + Scheduling + Column)
You are the topic scheduling editor for an AI content site. Read the topic below and output:
1. Summary: 80 words max, covering "what happened + why it's worth writing about"
2. Topic value score (1-10):
- Timeliness (3): first reported within 72h?
- Heat (3): covered by multiple sources simultaneously?
- Writing potential (2): extendable into tutorial/comparison/deep-dive?
- Audience fit (2): matches AI tool practitioners?
3. Suggested publish date (YYYY-MM-DD): time-sensitive topics within 2 days; deep dives within 1 week
4. Column category: hotspot / review / sop / resource / prompt / workflow
5. Suggested assignee: allocate by column (leave empty to default to editor)
Output JSON with fields: summary / score / suggestedPublishDate / category / assignee.
Do not fabricate facts not in the topic; use only the original text for the summary.
Topic title: {{title}}
Topic body: {{content}}Advanced
- Column mapping rules: add a mapping layer in the Code node-score >=8 with strong timeliness auto-files as hotspot, score 6-7 with hands-on value as sop. Reduces manual classification and balances column distribution
- Status writeback loop: the CMS publish webhook is just the start. For a closed loop, add an HTTP Request after writeback to sync the article URL back into the calendar's
urlfield, turning the calendar into a full "topic -> publish" lifecycle board - CMS integration: after writing to the calendar, for score >=9 topics, directly call the CMS API to create a draft (title + summary + column auto-filled). Editors open a half-finished draft instead of starting from scratch. WordPress REST API, Ghost Admin API
- Calendar visualization: Feishu Bitable has a built-in calendar view-set the "publish date" field as date type and switch to calendar mode. Clusters and gaps are immediately visible. Notion's Timeline view works the same way
- Multi-channel routing: after the notify node, add a Switch to split by column-hot takes go to the all-hands channel, tutorials to the content team channel. Less noise, fewer false alarms
Pitfalls
- LLM suggests unreasonable dates: models sometimes pick weekends or holidays. Add a date check in the Code node, auto-shift to the next Monday
- Webhook topic format varies: some send title+url, some send full text. Add a Code node after the Webhook to normalize fields into title / content / sourceUrl before Merge
- Notification messages too long: Feishu/Slack fold messages over a few lines. The notify node should send only title + column + publish date + assignee-put the summary in the calendar table
- Calendar records pile up: weekly runs generate 100+ rows a month. Add a filtered view for status != 'published' to see only pending items; archive published ones periodically
- IF time window mismatch: daysUntilPublish <= 1 checked only on Monday misses items due Wednesday-Friday. Spin up a separate daily 9 AM Schedule Trigger that runs just the IF + notify segment, decoupled from the weekly collection
References
- n8n Schedule Trigger docs: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/
- n8n Merge node docs: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/
- n8n Webhook node docs: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/
- Feishu Bitable OpenAPI: https://open.feishu.cn/document/server-docs/docs/bitable-v1/bitable-overview
- Notion API create a page: https://developers.notion.com/reference/create-a-page
- Feishu custom bot Webhook: https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot