Vuoi portare conversazioni intelligenti nei tuoi canali digitali senza scrivere un’app da zero? Questa guida ti mostra come creare chatbot in n8n sfruttando LangChain per la memoria conversazionale e, quando serve, un vector database per chatbot in stile RAG. Partiremo dall’orchestrazione con n8n automazione workflow (ingesti multicanale via webhook, normalizzazione dei payload), passeremo alla gestione stato conversazione e alla retrieval augmented generation (RAG) con un endpoint AI (es. LangServe), e chiuderemo con sicurezza, osservabilità e ottimizzazione dei costi/latency. Troverai configurazioni funzionanti dei nodi core (Webhook Trigger, HTTP Request, Error Trigger), pattern di prompt engineering in italiano e consigli pratici per handoff a operatore umano. L’obiettivo è darti uno schema replicabile per il go‑live: flussi robusti, memoria coerente e risultati di qualità su più canali (Instagram/Messenger, sito, WhatsApp via provider), con policy sicurezza API key e tracciamento conversazioni. Che tu stia costruendo un assistente di prevendita o un post‑vendita con FAQ personalizzate, vedrai come operazionalizzare il tutto con n8n e integrare facilmente strumenti AI evoluti come LangChain.
[IMG: diagramma alto-livello con canali chat → Webhook Trigger → normalizzazione → memoria → RAG → risposta]
Architettura end‑to‑end: n8n + LangChain (RAG opzionale) per un chatbot con memoria
Un chatbot efficace non è solo “domanda‑risposta”: deve capire contesto, ricordare una sessione, e integrare contenuti proprietari. Il flusso consigliato:
- Ingest multicanale: ogni canale (site chat, Instagram/Messenger via API, WhatsApp via provider) manda eventi a un webhook n8n per messaggistica.
- Normalizzazione payload: un primo passaggio uniforma mittente, testo, canale, timestamp e id di sessione.
- Memoria conversazionale: LangChain memoria conversazionale (buffer o window) per riferimenti ai turni precedenti.
- RAG opzionale: vector database per chatbot per recuperare documenti aziendali (schede prodotto, policy, articoli).
- Generazione risposta: chiamata a un endpoint AI (es. LangServe endpoint) per la risposta finale.
- Orchestrazione chatbot multi‑canale: instradamento verso il canale di origine, con eventuale handoff a operatore umano.
Vantaggi operativi:
- Scalabilità rapida: nuovi canali = nuovi webhook, stessa logica centrale.
- Governance: policy sicurezza API key, gestione stato conversazione, tracciamento conversazioni e metriche.
- Iterazione: prompt engineering in italiano con versioning, A/B test e osservabilità (logging/tracing).
[IMG: canvas n8n con rami per canali, branch “RAG on/off”, branch “handoff umano”]
Ingresso messaggi e normalizzazione: Webhook Trigger e payload coerente
Il punto d’ingresso consigliato è il Webhook Trigger di n8n, configurato per rispondere subito e continuare l’elaborazione in background (riduce timeout dei provider di messaggistica).
Esempio di configurazione del Webhook Trigger:
{
"path": "incoming-message",
"methods": ["POST"],
"responseMode": "onReceived",
"responseData": {
"statusCode": 200,
"body": "Webhook received successfully"
}
}
Perché così:
- responseMode: “onReceived” conferma rapidamente la ricezione al canale.
- path e methods sono chiari e filtrati; se più canali, usa path diversi (es. incoming-ig, incoming-web).
Subito dopo, normalizza i campi in un nodo di utilità (Set/Code) per avere una struttura uniforme:
- channel: web, ig, messenger, whatsapp
- userId: id della persona (fonte canale)
- message: testo utente
- sessionId: generato o estratto se presente
- timestamp: normalizzato
Snippet (Code) per correlationId/sessionId:
const items = $input.all();
return items.map((i, idx) => ({
json: {
...i.json,
correlationId: i.json.correlationId || `${$now}-${Math.random().toString(36).slice(2,8)}-${idx}`,
sessionId: i.json.sessionId || `${i.json.userId || 'anon'}-${new Date().getTime()}`
}
}));
Con una normalizzazione coerente, ogni nodo successivo (memoria, RAG, generazione) lavora sempre sugli stessi campi, riducendo errori e semplificando il debug.
[IMG: editor Webhook Trigger e nodo Set/Code con mapping campi]
Memoria conversazionale e gestione stato: buffer, window e storage
La memoria rende “umano” il bot. Due approcci:
- Buffer semplice: memorizza tutti i turni recenti (“assistant”/“user”).
- Window: conserva solo gli ultimi N turni per contenere i token e migliorare latenza.
Con n8n puoi modellare la memoria in due modi:
- Nodo memory dedicato (pattern “Memory Buffer Window”) per inserire il contesto nei prompt.
- Code + storage esterno (session store Redis/PostgreSQL) per sessioni persistenti cross‑workflow.
Pattern pratico (Code) per aggiornare history in item.json:
const items = $input.all();
return items.map(i => {
const history = i.json.history || [];
const userTurn = { role: 'user', content: i.json.message, ts: $now };
const newHist = [...history, userTurn].slice(-8); // finestra ultimi 8 turni
return { json: { ...i.json, history: newHist } };
});
Consigli:
- gestione stato conversazione: usa sessionId per recuperare e aggiornare la history al prossimo messaggio
- limiti: mantieni la finestra stretta (p.es. 6‑10 turni) per contenere costi/latency
- persistenza: se servono sessioni lunghe, salva history in DB e riprendi in ingresso
Insight: per il marketing, una finestra mirata (ultimi turni + 1 snippet profilo) offre risposte contestuali senza sforare budget token.
[IMG: nodo che mostra history aggregata e taglio a finestra]
RAG con vector database: quando usare la retrieval e come integrarla
La retrieval augmented generation (RAG) consente al bot di rispondere con contenuti proprietari. Flusso tipico:
1) Embedding e indicizzazione del corpus (una tantum o periodico)
2) Query embedding del messaggio utente
3) Similarity search sul vector database per chatbot
4) Costruzione prompt con contesto top‑K
5) Generazione risposta
In n8n, la parte “online” (2‑5) è semplice via HTTP Request:
- Step 2: crea l’embedding (se lo fai esternamente, invoca l’endpoint embedding)
- Step 3: chiama il tuo vector DB (es. un servizio esterno) con HTTP Request
- Step 4: concatena i passaggi rilevanti nel prompt
Esempio HTTP Request (query al tuo vector store):
{
"name": "Vector Query",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"parameters": {
"url": "https://your-vector-db.example.com/query",
"method": "POST",
"responseFormat": "json",
"jsonParameters": true,
"bodyParametersJson": {
"embedding": "={{$json[\"userEmbedding\"]}}",
"top_k": 5
},
"headerParametersUi": {
"parameter": [
{ "name": "Authorization", "value": "Bearer YOUR_API_TOKEN" }
]
},
"options": { "bodyContentType": "JSON" }
}
}
Suggerimenti:
- cache embedding e token usage: se l’utente ripete input simili, riusa embedding per ridurre costi
- normalizzazione payload chat: pulisci testo (spazi, emoji), taglia a max lunghezza prima di embedding
- prompt engineering in italiano: inserisci istruzioni chiare su tono, stile e “usa SOLO le fonti recuperate”
[IMG: branch RAG con embedding → query vector → builder prompt]
Chiamata al modello (LangServe o API AI) con HTTP Request
La generazione finale passa da un endpoint AI (es. LangServe endpoint). In n8n usa “n8n-nodes-base.httpRequest” con body JSON e header Authorization.
Esempio configurazione:
{
"name": "AI Generate",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"parameters": {
"url": "https://ai-service.example.com/invoke",
"method": "POST",
"responseFormat": "json",
"jsonParameters": true,
"bodyParametersJson": {
"input": {
"message": "={{$json[\"message\"]}}",
"history": "={{$json[\"history\"]}}",
"context": "={{$json[\"context\"]}}"
}
},
"headerParametersUi": {
"parameter": [
{ "name": "Authorization", "value": "Bearer YOUR_API_TOKEN" }
]
},
"options": { "bodyContentType": "JSON" }
}
}
Consigli pratici:
- se l’endpoint supporta streaming, valuta una variante del flusso per canali che lo consentono
- valida sempre output: se non arriva testo (o flagged), invia fallback gentile o handoff a operatore umano
- differenzia prompt per canale: su IG/Messenger tieni risposte concise; su web puoi estendere
[IMG: nodo AI Generate con body dinamico “input.message/history/context”]
Orchestrazione multi‑canale e handoff a operatore umano
Ogni canale ha differenze di payload e limiti. Pattern consigliato:
- Un Webhook Trigger per canale, stessa catena logica interna (normalizzazione → memoria → RAG → AI → risposta).
- Ramo “handoff a operatore umano”: se confidenza bassa, keyword vietate o richiesta specifica (es. “parlare con agente”), inoltra a una inbox umana o apri ticket.
Esempio di smistamento:
- If: se score < 0.6 → attiva handoff
- HTTP Request verso CRM/Helpdesk per creare ticket
- Messaggio utente: “Ti metto in contatto con un collega; riceverai risposta a breve.”
Benefici:
- garantisci continuità anche quando l’AI non è sicura
- riduci escalation manuali con routing mirato
- mantieni standard di brand e compliance
[IMG: flow con branch “AI ok” e “handoff umano”]
Sicurezza e osservabilità: credenziali, webhook e tracciamento
La sicurezza e la visibilità sono fondamentali in produzione.
Hardening delle credenziali e dei webhook:
- usa credenziali nel vault n8n e header Authorization configurati nel nodo HTTP Request
- separa ambienti (staging/prod), rota API key e limita la visibilità delle credenziali
- se il provider supporta firma o segreto, verifica la signature in ingresso subito dopo il Webhook Trigger
Osservabilità (logging/tracing):
- genera un correlationId all’inizio e propagalo nei log e negli header delle chiamate esterne
- registra workflowName, versione, durata, esito, nodeName
- Error Trigger: crea un workflow di gestione errori per notifiche e tracking
Esempio nodo “Debuggable Call” con opzioni utili:
{
"name": "Debuggable Call",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"parameters": {
"url": "https://api.example.com/check",
"method": "GET",
"responseFormat": "json",
"headerParametersUi": {
"parameter": [
{ "name": "Authorization", "value": "Bearer {{$json[\"access_token\"]}}" }
]
},
"options": {
"timeout": 90000,
"redirect": { "followRedirects": true },
"lowercaseHeaders": true
}
}
}
[IMG: dashboard con errori per workflow e tempi p95]
Esempio end‑to‑end: bot FAQ prodotto con memoria + RAG
Obiettivo: rispondere a FAQ prodotto con contesto proprietario e memoria di sessione.
1) Webhook Trigger (risposta immediata)
{
"path": "incoming-faq",
"methods": ["POST"],
"responseMode": "onReceived",
"responseData": { "statusCode": 200, "body": "Webhook received successfully" }
}
2) Normalizzazione (Set/Code)
- normalizza {channel, userId, message, sessionId}
3) Memoria (Code)
- aggiorna history (ultima finestra di 8 turni)
4) RAG (opzionale)
- “Vector Query” (HTTP Request) per top‑K contesti
- costruisci context con snippet pertinenti
5) Generazione (HTTP Request → “AI Generate”)
- invia input.message, history e context
6) Invio risposta al canale
- HTTP Request verso l’API del canale (es. Messenger/IG o widget web)
7) Errori e fallback
- Error Trigger per alert
- If su output nullo → messaggio di fallback + handoff
Risultato: un flusso con n8n automazione workflow che bilancia qualità della risposta, costi e robustezza operativa.
[IMG: canvas con i nodi 1→7 e label chiari]
Ottimizzazione: A/B test prompt, costi/latency e routing
- A/B test: duplica “AI Generate” con due prompt diversi; randomizza a monte e misura soddisfazione/CTR risposta
- Costo/latency: limita window della history, usa RAG solo quando la domanda matcha categorie prodotto, metti timeout e retry ragionati
- Routing: per richieste “transazionali” (traccia ordine, prenotazioni), instrada a microservizi dedicati e combina la risposta con l’AI per il tono/contesto
- Tracciamento conversazioni: integra un sistema di tracking per valutare drop‑off, tempi di risposta e top intent
[IMG: branch A/B con metriche aggregate per prompt]
Quick Takeaways
- Progetta ingressi puliti con Webhook Trigger e normalizzazione; rispondi “onReceived” per ridurre timeout.
- Implementa LangChain memoria conversazionale con buffer/window e sessionId; mantieni finestre corte per costi/latency.
- Attiva RAG solo quando serve: vector database per chatbot, prompt con contesti top‑K e istruzioni chiare in italiano.
- Usa HTTP Request per integrare endpoint AI (es. LangServe endpoint) con body JSON coerente e header Authorization.
- Metti sicurezza al centro: credenziali nel vault, rotazione API key, verifica webhook e Error Trigger per allarmi.
- Misura e migliora: A/B test sui prompt, timeout e retry calibrati, logging con correlationId e metriche p95/p99.
Conclusione
Creare chatbot ai n8n significa costruire un sistema, non un singolo workflow. Con ingressi affidabili (Webhook Trigger) e una normalizzazione coerente, puoi orchestrare memoria, RAG e generazione con pochi nodi: l’HTTP Request integra facilmente endpoint AI e vector DB, mentre la memoria conversazionale mantiene il contesto appropriato per risposte più utili. Per i marketers, il valore è immediato: più richieste gestite in autonomia, tono uniforme di brand, possibilità di testare prompt, e handoff automatico quando serve l’intervento umano. Aggiungendo tracciamento conversazioni e policy sicurezza API key, il tuo bot cresce in modo sostenibile. Il prossimo passo? Scegli un canale prioritario, definisci 15‑20 FAQ ad alto impatto, imposta la finestra di memoria e decidi se attivare RAG su una knowledge base mirata. In poche iterazioni, passerai da prototipo a assistente “always‑on” che sostiene campagne e customer care, con un flusso chiaro, misurabile e facile da migliorare.
FAQ
- Posso usare n8n senza un LLM esterno?
- Sì, ma per un chatbot AI personalizzato è consigliabile un endpoint AI; n8n gestisce l’orchestrazione, LangChain memoria conversazionale e l’integrazione RAG tramite HTTP Request.
- Come gestisco la memoria tra più messaggi?
- Usa un sessionId e una finestra (buffer/window) con gli ultimi turni. Puoi salvare la history in un session store Redis/PostgreSQL per sessioni persistenti multi‑canale.
- Quando ha senso aggiungere RAG?
- Se le risposte dipendono da contenuti proprietari. Attiva il vector database per chatbot, fai retrieval top‑K e inserisci i passaggi nel prompt in italiano.
- È possibile orchestrare canali diversi con lo stesso flusso?
- Sì: un Webhook Trigger per canale, normalizzazione payload chat e una catena centrale comune (memoria → RAG → generazione). Reindirizza l’output al canale originario.
- Come minimizzo costi e latenza?
- Limita la finestra di memoria, attiva RAG solo quando necessario, imposta timeout ragionati e fai A/B test sui prompt per ridurre token e migliorare la qualità.
Hai già iniziato a costruire il tuo bot? Racconta quale canale vuoi attivare per primo e condividi questa guida: quale parte (memoria, RAG o orchestrazione) farà la differenza nel tuo progetto questa settimana?
Scopri la consulenza →

