Inline Business Logic + BullMQ voor Async
Combineer Optie 1 (business logic verplaatsen naar agents) met Optie 3 (BullMQ voor async taken) als hybride architectuur.
A comprehensive evaluation of how n8n is used in the Magic Agent platform, whether it’s the right tool for the job, and what alternatives could improve the architecture.
n8n (cloud-hosted op apptractive.app.n8n.cloud) vervult drie rollen in het Magic Agent platform:
| Rol | Wat het doet | Complexiteit |
|---|---|---|
| Webhook Router | Entry point voor agent requests, valideert en normaliseert data | Laag |
| Business Logic Engine | Prijsberekeningen, voorraadcontrole, kortingsgoedkeuringen, conditionele branching | Hoog |
| Integration Orchestrator | Chaint DB queries → AI calls → PDF generatie → e-mail met bijlagen | Hoog |
Customer → Widget (iframe) → Agent (Express/PM2) → Claude AI ↓ Tool decision ↓ n8n webhook call ←→ PostgreSQL ↓ PDF / e-mail / search / etc.| Component | Technologie | Rol |
|---|---|---|
| Agents | Express.js + TypeScript, PM2 | Conversatie, intent herkenning, Claude tool use |
| n8n Cloud | n8n workflows (JSON) | Business logic, integraties, orchestratie |
| FlowExecutor | Custom TypeScript (3.848 regels) | State machine voor gestructureerde conversatieflows |
| Process Builder | React + ReactFlow | Visuele flow designer (apart van n8n) |
| Widget Server | Express.js (port 4060) | Multi-tenant chat widget voor klantwebsites |
| PostgreSQL | Twee pools per agent | Agent state + product data |
| Redis | Docker container (port 11003) | Beschikbaar maar ongebruikt |
Er draaien 13 agent instances als aparte PM2 processen:
| Agent | PM2 Process | Status |
|---|---|---|
| brinxx | magic-agent-brinxx | Actief |
| spranz | magic-agent-spranz | Actief |
| logohorloge | magic-agent-logohorloge | Actief |
| topgiving | magic-agent-topgiving | Actief |
| ollivanders | agent-ollivanders | Actief |
| magiceverse | agent-magiceverse | Actief |
| magic_dwf | agent-magic-dwf | Actief |
| princess | princess-agent | Actief |
| jodasign | - | Actief |
| langenberg | - | Geen PM2 |
| default_agent | - | Geen PM2 |
| support_agent | support-agent-wayne | Actief |
| widget server | magic-widget-server | Alle tenants |
Elke agent is een volledig onafhankelijke Express app met identieke codebase — wat resulteert in aanzienlijke code-duplicatie.
| Workflow | Nodes | Complexiteit | Functie |
|---|---|---|---|
| Brinxx Agent (hoofd) | ~50 | Hoog | 7 webhooks: voorraad, prijzen, kortingen, offertes, PDF, e-mail |
| Brinxx Quotation Request (AI) | 5 | Medium | Parse natuurlijke taal → gestructureerde offerte |
| Ollivanders Quote Email | 8 | Hoog | HTML e-mail met artwork previews en PDF bijlagen |
| Princess Agent | 6 | Laag | Klantenservice: bonnetjes opzoeken en e-mailen |
| Promz Booking | 3 | Laag | Simpele pass-through naar PHP API |
| JoDa Sign | 89 | Hoog | Volledig B2B portaal met voorraad, prijzen, levertijden |
| Stap | Duur |
|---|---|
| Send Message | ~100ms |
| Load History | ~50ms |
| Claude API | 2-5 sec |
| Format & Stream | ~50ms |
| Totaal | ~2-5 sec |
| Stap | Duur |
|---|---|
| Send Message | ~100ms |
| Load History | ~50ms |
| Claude API Tool Use | 2-3 sec |
| Tool Decision Logic | ~50ms |
| n8n Webhook Call | 1-10 sec |
| Update Flow Session | ~100ms |
| Execute Next Flow Node | 100ms - 5 sec |
| Format Response | ~50ms |
| Totaal | 5-20+ sec |
De n8n network round-trip (agent → n8n cloud → PostgreSQL → n8n → agent) voegt 1-10 seconden toe per tool call.
| Criterium | Score (1-10) | Toelichting |
|---|---|---|
| Gebruiksgemak | 8 | Visuele builder is goed voor snelle iteratie |
| Webhook handling | 9 | Native webhook nodes, eenvoudig op te zetten |
| Business logic | 5 | Code nodes werken maar worden rommelig op schaal, geen testing |
| Betrouwbaarheid | 6 | Cloud = afhankelijkheid, 30s timeouts, geen gegarandeerde delivery |
| Debuggability | 4 | Moeilijk fouten te tracen over agent → n8n → DB → terug |
| Kosten op schaal | 4 | n8n Cloud pricing schaalt met executions, 13 agents = veel executions |
| Code hergebruik | 3 | Elke workflow is standalone, logica gedupliceerd per tenant |
| Versiebeheer | 3 | Workflows zijn JSON blobs, niet code-reviewbaar, geen git flow |
| Testbaarheid | 2 | Geen unit tests voor n8n workflows, geen staging omgeving |
| Vendor lock-in | 5 | Kan self-hosten, maar workflows zijn niet portable |
| Latency | 5 | Extra network hop voegt 1-10s toe per call |
Vervang n8n webhook calls door directe function calls in de agent codebase. Gebruik de bestaande FlowExecutor als orchestrator.
Huidig: Agent → HTTP → n8n Cloud → DB → n8n → HTTP → AgentNieuw: Agent → function call → DB → response| Criterium | Score |
|---|---|
| Gebruiksgemak | 7 |
| Betrouwbaarheid | 9 |
| Debuggability | 9 |
| Kosten | 10 |
| Latency | 10 |
| Testbaarheid | 9 |
| Versiebeheer | 10 |
| Totaal | 9.1 |
Voordelen:
Nadelen:
Durable workflow engine. Workflows zijn code (TypeScript) met ingebouwde retries, timeouts en state persistence.
| Criterium | Score |
|---|---|
| Gebruiksgemak | 5 |
| Betrouwbaarheid | 10 |
| Debuggability | 8 |
| Kosten | 7 |
| Latency | 8 |
| Testbaarheid | 9 |
| Versiebeheer | 10 |
| Totaal | 8.1 |
Voordelen:
Nadelen:
Best voor: Als gegarandeerde uitvoering kritiek is (offerte aanmaken MOET slagen, zelfs bij server crash halverwege).
Redis-based job queue voor Node.js. Vervang n8n webhooks door queued jobs.
| Criterium | Score |
|---|---|
| Gebruiksgemak | 7 |
| Betrouwbaarheid | 8 |
| Debuggability | 8 |
| Kosten | 9 |
| Latency | 9 |
| Testbaarheid | 8 |
| Versiebeheer | 10 |
| Totaal | 8.4 |
Voordelen:
Nadelen:
Best voor: Asynchrone taken zoals e-mail versturen, PDF generatie, foto verwerking — dingen die geen directe response nodig hebben.
Dezelfde n8n, maar op eigen server in plaats van cloud.
| Criterium | Score |
|---|---|
| Gebruiksgemak | 8 |
| Betrouwbaarheid | 7 |
| Kosten | 8 |
| Latency | 7 |
| Testbaarheid | 2 |
| Versiebeheer | 3 |
| Totaal | 6.5 |
Voordelen: Behoudt visuele builder, elimineert cloud kosten, iets lagere latency (lokaal netwerk)
Nadelen: Alle fundamentele problemen blijven (ontestbare logica, debugging, duplicatie). Alleen goedkoper.
Moderne workflow-as-code platforms met TypeScript SDK.
| Criterium | Score |
|---|---|
| Gebruiksgemak | 8 |
| Betrouwbaarheid | 9 |
| Testbaarheid | 8 |
| Versiebeheer | 10 |
| Totaal | 7.8 |
Voordelen: TypeScript-native, event-driven, goede DX, ingebouwde retries en scheduling
Nadelen: Externe afhankelijkheid, minder mature dan Temporal, cloud-hosted kosten
| n8n Cloud (huidig) | Inline + BullMQ | Temporal | Self-hosted n8n | Inngest | |
|---|---|---|---|---|---|
| Totaalscore | 4.9 | 9.1 | 8.1 | 6.5 | 7.8 |
| Testbaarheid | 2 | 9 | 9 | 2 | 8 |
| Latency | 5 | 10 | 8 | 7 | 7 |
| Kosten | 4 | 10 | 7 | 8 | 6 |
| Debuggability | 4 | 9 | 8 | 4 | 7 |
| Versiebeheer | 3 | 10 | 10 | 3 | 10 |
| Leercurve | Laag | Laag | Hoog | Laag | Medium |
| Visuele builder | Ja | Nee* | Nee | Ja | Nee |
*Process Builder blijft beschikbaar als visuele tool
Inline Business Logic + BullMQ voor Async
Combineer Optie 1 (business logic verplaatsen naar agents) met Optie 3 (BullMQ voor async taken) als hybride architectuur.
Synchroon (directe response nodig): Agent → Lokale service functie → DB → response Voorbeelden: voorraadcheck, prijsopvraag, product search
Asynchroon (mag op achtergrond): Agent → BullMQ job → Worker verwerkt het Voorbeelden: PDF generatie, e-mail versturen, foto verwerking, kortingsnotificaties| Workflow | Complexiteit | Migratie Effort | Prioriteit |
|---|---|---|---|
| Promz Booking | Laag | Klein | 1 (pilot) |
| Princess Agent | Laag | Klein | 2 |
| Brinxx Quotation Request (AI) | Medium | Medium | 3 |
| Ollivanders Quote Email | Hoog | Medium | 4 |
| Brinxx Agent (hoofd) | Hoog | Groot | 5 (laatst) |
| JoDa Sign | Hoog | Groot | 6 (laatst) |
| Flow | Hops | Pad |
|---|---|---|
| Photo Search | 6 | widget → flow node → rembg → Claude Vision → n8n ML → database |
| Escalation | 3+ | escalation-handler.ts + engage-check.ts + flow logic |
| Tool Routing | 3 | sendMessage.ts → flow executor → SDK handler → Claude |
| Bestand | Locatie | Beschrijving |
|---|---|---|
| ecosystem.config.js | /home/adminwayne/magic_agent/ | PM2 configuratie |
| docker-compose.yml | /home/adminwayne/magic_agent/ | PostgreSQL + Redis services |
| deploy-agent-update.sh | /home/adminwayne/magic_agent/ | Deployment script (rebuild/restart/deploy) |
| n8n-bridge.ts | agents/*/src/runtime/ | HTTP wrapper voor n8n webhook calls |
| flow-executor.ts | agents/*/src/runtime/ | 3.848-regels flow engine |
| widget-core.js | widget/ | 238KB chat widget (speech + camera) |
| n8n workflows | n8n-workflows/ | Alle n8n workflow JSON exports |