I built a small “draft + approve” queue in n8n for people who want AI help writing social/blog copy but do not want a bot posting on their behalf.
What it does
- Google Sheets (a
Topicstab with headerstopic,status,draft,notes) - reads rows wherestatus = pending. -
- OpenAI node (gpt-4o-mini by default) writes a short draft for that topic.
-
- Slack “Send and Wait” message with Approve / Reject buttons (these are n8n resume URLs, so no Slack interactivity request URL is needed).
-
- The answer is written back to the row:
status = approved/rejectedplus the draft text.
Two smaller companion workflows: an “approved and ready to post” Slack reminder (optional Gmail), and a Monday 09:00 weekly digest with counts and the last 5 topics.
- The answer is written back to the row:
Honest scope: it does NOT auto-publish to LinkedIn, Instagram, YouTube or any other network. A human copies the approved draft and posts it manually. That was the point - review before publish.
Import steps
- n8n → … → Import from File, import the workflow JSON, leave it inactive.
-
- Create a Google Sheet with a
Topicstab, headers exactlytopic,status,draft,notes.
- Create a Google Sheet with a
-
- Open the Config node and set
sheet_id,sheet_tab(Topics) andslack_channel_id.
- Open the Config node and set
-
- Attach 3 credentials: Google Sheets OAuth2, OpenAI API key, Slack API (bot token with
chat:write; invite the bot to the channel).
- Attach 3 credentials: Google Sheets OAuth2, OpenAI API key, Slack API (bot token with
-
- Run once manually against a single
pendingrow before enabling any schedule.
Packaged version: if you’d rather not rebuild it, I sell the pack (3 workflows + README + credentials checklist + test guide + sample CSV) for $19, instant ZIP download: Asaf | Draft+Approve
- Run once manually against a single
Happy to answer questions about the Slack approve/reject step - that part took the most iterations.