| name | building-germanexam-workflows |
| description | Build and debug n8n workflows for GermanExam.pro. Use when creating blog automation, content generation, or any n8n workflow for this project. Includes server config, credentials setup, and known issues. |
Building GermanExam.pro Workflows
Project-specific guide for n8n workflows in GermanExam.pro.
n8n Server Config
URL: http://49.12.238.110:5678
API URL: http://49.12.238.110:5678/api/v1
Webhook Base: http://49.12.238.110:5678/webhook/
# Login Credentials: See .env.local or ask user
# API Key: See N8N_API_KEY in .env.local or c:/tmp/fix_*.py scripts
⚠️ KRITISCH FÜR ALLE AGENTS - LIES DAS!
Server verwendet HTTP, NICHT HTTPS!
- URL muss
http://49.12.238.110:5678sein - NIEMALS
https://verwenden!
- URL muss
API-Key finden:
- Check
c:/tmp/fix_*.py- dort ist der aktuelle Key - Der Key ist unbegrenzt gültig
- NICHT nach neuem Key fragen wenn einer in den Scripts existiert!
- Check
Test-Befehl:
# Ersetze $N8N_API_KEY mit dem Key aus c:/tmp/fix_*.py curl -s "http://49.12.238.110:5678/api/v1/workflows" -H "X-N8N-API-KEY: $N8N_API_KEY" | head -c 100
Required Environment Variables
In n8n (Settings → Variables)
BLOG_WEBHOOK_TOKEN=<generate with: openssl rand -hex 32>
ANTHROPIC_API_KEY=<from Anthropic console>
OPENAI_API_KEY=<from OpenAI - for fact checking>
In Vercel (must match n8n)
BLOG_WEBHOOK_TOKEN=<same token as n8n>
Blog Workflow
File: docs/n8n/blog-workflow-v2-premium.json
Flow:
Trigger (Cron/Webhook)
↓
Content Research (picks topic)
↓
Build Prompt (SEO template)
↓
Claude (generate content)
↓
┌─────────┴─────────┐
Fact Check Unsplash Image
└─────────┬─────────┘
↓
Process & Merge
↓
Quality Gate (≥500 words + fact check)
↓
POST /api/blog/posts
↓
Success/Error Email
Manual Trigger
curl -X POST http://49.12.238.110:5678/webhook/blog-generation \
-H "Content-Type: application/json" \
-d '{"title": "Your Title", "keywords": "keyword1, keyword2", "category": "exam_tips"}'
Known Issues (FIXED)
| Issue | Was | Fix |
|---|---|---|
| Quality Gate always fails | Threshold 1500 words, prompt generates 600-800 | Changed to 500 |
Remaining Setup Tasks
Configure Credentials in n8n:
- Anthropic API (for Claude node)
- OpenAI API (for fact check node)
- Unsplash API (for images)
- SMTP (for notifications - optional)
Set Blog Webhook Auth:
- Create HTTP Header Auth credential in n8n
- Name:
Blog Webhook Auth - Header:
x-webhook-token - Value:
={{$env.BLOG_WEBHOOK_TOKEN}}
Activate Workflow:
- Open workflow in n8n UI
- Click Activate toggle (top-right)
API Endpoint
POST /api/blog/posts
// Required headers
X-Webhook-Token: (use BLOG_WEBHOOK_TOKEN from env)
Content-Type: application/json
// Body schema
{
slug: string, // URL-safe, lowercase
title: string,
content: string, // Markdown
excerpt?: string,
category?: string, // default: "language_learning"
tags?: string[],
meta_description?: string,
featured_image_url?: string,
status?: "draft" | "published",
reading_time_minutes?: number,
generated_by_ai?: boolean,
ai_model_used?: string
}
Debugging Checklist
Blog Post Not Publishing:
- [ ] BLOG_WEBHOOK_TOKEN matches in n8n AND Vercel
- [ ] Workflow is activated (not just saved)
- [ ] Credentials configured (not placeholder IDs)
- [ ] API endpoint accessible: curl https://germanexam.pro/api/blog/posts
Quality Gate Failing:
- [ ] Check word count in execution output
- [ ] Verify fact check response parsed correctly
- [ ] Threshold is 500 words (not 1500)
AI Node Errors:
- [ ] API key set in n8n variables
- [ ] Credential linked to node
- [ ] Model name correct (claude-3-5-sonnet-20241022)
Workflow Files
| File | Description |
|---|---|
blog-workflow-v2-premium.json |
Current version (use this) |
blog-workflow-clean.json |
Minimal version |
blog-workflow-final.json |
Older version |
Related Skills
- n8n-mcp-tools-expert - MCP tool usage
- n8n-validation-expert - Fix validation errors
- n8n-workflow-patterns - Architectural patterns