This architecture uses n8n to automate inbound lead processing, draft deliverables with an AI engine, pause for a human review via interactive approval buttons, and dispatch the final product to the client.
High-Level Architecture Flow
[Client Form/Webhook]
│
▼
[n8n: Ingest & Clean] ──► [Database: Store Record]
│
▼
[AI Node: Draft Content / Plan]
│
▼
[Wait for Webhook Node] ──► [Interactive Slack / Discord / Email Ping]
│ │
│ (Human Click:
│ Approve or Revise)
│ │
▼ ▼
[n8n Resumes Execution] ◄───────────────────┘
│
[If Approved?]
├──► YES: [Send Deliverable to Client] ──► [Update DB: "Done"]
└──► NO: [Route to Manual Inbox / Flag for Revision]
Step-by-Step Node Configuration in n8n
1.Set Up Ingestion via Webhook Node:Trigger point for client submissions.
Use an n8n Webhook Node (or native app triggers like Typeform, Google Forms, or Tally).
HTTP Method:
POSTPath:
/client-intakeIncoming Payload: Capture standard fields:
client_name,client_email,service_requested,project_brief, anddeadline.Data Sanitization: Follow immediately with a Code (JavaScript) Node or Edit Fields Node to trim whitespace, validate email structure, and assign a unique
lead_id(e.g., usingcrypto.randomUUID()).
2.Log the Lead in Your Database:Creates a persistent single source of truth.
Connect a database node (PostgreSQL, Supabase, or Directus/Airtable) to persist the record before running any heavy processing.
Set status to
pending_draft.Store all raw fields and metadata timestamps.
This prevents losing lead information if an external AI API experiences a timeout or outage.
3.Generate the Initial Output via the AI Agent Node:
Route the sanitized payload into an AI Agent Node (or an HTTP Request Node pointing to your model endpoint).
Model Choice: Use a fast reasoning model for structured tasks or vision-capable models if analyzing uploaded assets.
System Prompt: Constrain the AI strictly to production requirements:
"You are an expert agency assistant. Given the client's input brief: {{ $json.project_brief }}, generate a 3-part deliverable: (1) Scope confirmation, (2) Initial draft or project outline, and (3) Follow-up questions. Output clean, markdown-ready text. Do not invent pricing or guarantees."
Output: Pass the generated draft into an Edit Fields Node mapping to
ai_draft_content.
4.Implement the 'Human-in-the-Loop' Pause via the Wait Node:Execution halts until human approval is received.
Use the Wait Node set to "On Webhook Call" to hold the workflow state.
In the Wait Node settings, set the Resume mechanism to
Webhook.n8n automatically generates a unique resumption URL:
[https://your-n8n-instance.com/webhook-waiting/](https://your-n8n-instance.com/webhook-waiting/){resume-webhook-id}Configure two action query parameters for the resume URL:
?action=approve?action=reject
5.Dispatch Notification with Interactive Review Links: Slack, Discord, Telegram, or Email.
Immediately before or in parallel with the Wait Node, send an alert to your internal channels (Slack, Telegram, or Email Node) containing:
Client Name & Service:
{{ $json.client_name }} | {{ $json.service_requested }}AI Draft Preview:
{{ $json.ai_draft_content }}Action Buttons / Direct Links:
Approve Link:
{{ $execution.resumeUrl }}?action=approveRevise / Reject Link:
{{ $execution.resumeUrl }}?action=reject
The workflow remains suspended in memory (or persisted to the database) until you click one of those links on your phone or desktop.
6.Route Decision with an If Node and Deliver:
When you click a link, the Wait Node resumes execution and outputs the incoming click parameters.
Connect an If Node: Check if
$json.query.action === 'approve'.Branch True (Approved):
Trigger an Email / SendGrid / Gmail Node to dispatch the approved draft directly to
{{ $json.client_email }}.Update the Database Node status from
pending_drafttodelivered.
Branch False (Rejected / Needs Edits):
Send a task creation request to your internal tracker (ClickUp, Notion, or Trello).
Update the Database Node status to
manual_review_required.
Production Best Practices
Set a Wait Timeout: In the Wait Node, configure an expiration timeout (e.g., 24 hours). If no human clicks approve within that window, route the payload to a priority fallback alert so the client isn't left waiting indefinitely.
Keep API Keys in n8n Credentials: Never hardcode LLM or database credentials inside HTTP Request nodes. Use n8n’s encrypted credential manager.
Log Error Triggers: Attach an Error Trigger Workflow to this canvas. If the AI model hits a rate limit or returns malformed text, an automatic notification alerts you immediately without failing the client-facing webhook silently.
Discussion
Sign in with GitHub to comment. Comments are moderated.