Come collegare WhatsApp Business a n8n: guida completa all'automazione
Scopri come integrare WhatsApp Business API con n8n per automatizzare risposte ai clienti, notifiche ordini e invio di messaggi programmati. Workflow completi e codice funzionante.

Introduzione: perché automatizzare WhatsApp con n8n
WhatsApp è l'app di messaggistica più utilizzata in Italia, con oltre 36 milioni di utenti attivi mensili. Per le aziende, questo rappresenta un canale di comunicazione diretto con i clienti che non può essere ignorato. Tuttavia, gestire manualmente centinaia di messaggi al giorno è inefficiente e soggetto a errori.
n8n permette di creare workflow automatizzati che collegano WhatsApp Business API ai tuoi sistemi esistenti: CRM, e-commerce, database, sistemi di ticketing e molto altro. Il risultato è una comunicazione rapida, coerente e disponibile 24 ore su 24.
In questa guida vedremo passo dopo passo come configurare l'integrazione, creare workflow reali e gestire le best practice per rimanere conformi alle policy di WhatsApp.
Requisiti preliminari
Prima di iniziare, assicurati di avere a disposizione questi elementi:
- Account Meta Business Manager: necessario per accedere alla WhatsApp Business Platform
- Numero di telefono dedicato: un numero non associato a un account WhatsApp personale
- istanza n8n in esecuzione: versione 1.0 o superiore, self-hosted o cloud
- Certificato SSL valido: WhatsApp API richiede comunicazioni cifrate (HTTPS)
Creare l'account WhatsApp Business Platform
- Accedi al Meta Business Manager
- Seleziona "Business Settings" dal menu laterale
- Nella sezione "Accounts", clicca su "WhatsApp Accounts"
- Segui la procedura guidata per aggiungere un nuovo account
- Inserisci il numero di telefono e verifica la proprietà tramite SMS o chiamata
Al termine della configurazione, annota questi dati che ti serviranno più avanti:
- Phone Number ID: identificativo del numero nella piattaforma
- Business Account ID: identificativo del tuo account business
- Access Token: token di autenticazione permanente o temporaneo
Ottenere il token di accesso
Meta fornisce due tipi di token:
- Token temporaneo: scade dopo 24 ore, utile per i test iniziali
- Token permanente (System User Token): non scade, necessario per la produzione
Per il token permanente, vai su Business Settings > System Users, crea un utente con permessi "whatsapp_business_messaging" e genera il token.
Configurazione del Webhook in n8n
Il cuore dell'integrazione è il webhook: WhatsApp invia i messaggi in arrivo al tuo endpoint n8n, che elabora la richiesta e restituisce una risposta.
Step 1: creare il nodo Webhook in n8n
Crea un nuovo workflow in n8n e aggiungi un nodo Webhook con questa configurazione:
{
"parameters": {
"httpMethod": "POST",
"path": "whatsapp-webhook",
"responseMode": "responseNode",
"options": {
"rawBody": false
}
},
"type": "n8n-nodes-base.webhook",
"name": "WhatsApp Webhook"
}
Il tuo webhook sarà raggiungibile all'URL:
https://<tuo-dominio-n8n>/webhook/whatsapp-webhook
Nota importante: l'URL deve essere pubblico e raggiungibile da internet. Se usi n8n in locale, configura un tunnel con ngrok o un reverse proxy con Nginx e certificato SSL.
Step 2: verificare il webhook con Meta
WhatsApp richiede una verifica iniziale del webhook inviando una richiesta GET con un parametro hub.challenge. In n8n, configura il nodo Webhook per gestire sia GET che POST:
Aggiungi un nodo Respond to Webhook dopo il Webhook e un nodo IF che distingue tra la verifica GET (mode = "subscribe") e i messaggi POST:
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.query['hub.mode'] }}",
"operation": "equals",
"value2": "subscribe"
}
]
}
},
"type": "n8n-nodes-base.if",
"name": "Verifica Webhook"
}
Il ramo true restituisce il hub.challenge, il ramo false elabora il messaggio.
Step 3: registrare il webhook su Meta
Vai su WhatsApp Manager > Configuration > Webhook e inserisci:
- Callback URL: il tuo URL webhook completo
- Verify Token: un token segreto a tua scelta (es.
mio_token_segreto_2026) - Subscribed Fields: seleziona
messagescome minimo
Workflow 1: risposte automatiche ai clienti
Il primo workflow che creeremo gestisce le risposte automatiche ai messaggi dei clienti. L'obiettivo è riconoscere l'intento del messaggio e fornire una risposta pertinente.
Struttura del workflow
Webhook (ricezione messaggio)
-> IF (è un messaggio di testo?)
-> true: HTTP Request (analisi con AI o keyword matching)
-> Switch (intento riconosciuto)
-> "orari": HTTP Request (invio risposta orari)
-> "prezzi": HTTP Request (invio risposta prezzi)
-> "contatti": HTTP Request (invio risposta contatti)
-> default: HTTP Request (messaggio di default)
-> false: Respond to Webhook (ignora media)
Nodo HTTP Request per l'invio messaggi
Ogni risposta utilizza un nodo HTTP Request configurato così:
{
"parameters": {
"method": "POST",
"url": "https://graph.facebook.com/v19.0/<PHONE_NUMBER_ID>/messages",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer <IL_TUO_ACCESS_TOKEN>"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"contentType": "json",
"body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.entry[0].changes[0].value.messages[0].from, type: 'text', text: { body: 'Grazie per averci contattato! I nostri orari sono: Lun-Ven 9:00-18:00, Sab 9:00-13:00.' } }) }}"
},
"type": "n8n-nodes-base.httpRequest",
"name": "Invia Risposta"
}
Parsing del messaggio in arrivo
Il payload di WhatsApp ha una struttura annidata. Per estrarre il testo del messaggio e il numero del mittente, usa un nodo Set:
{
"parameters": {
"assignments": {
"assignments": [
{
"name": "numero_mittente",
"value": "={{ $json.entry[0].changes[0].value.messages[0].from }}"
},
{
"name": "testo_messaggio",
"value": "={{ $json.entry[0].changes[0].value.messages[0].text.body }}"
},
{
"name": "timestamp",
"value": "={{ $json.entry[0].changes[0].value.messages[0].timestamp }}"
}
]
}
},
"type": "n8n-nodes-base.set",
"name": "Estrai Dati Messaggio"
}
Keyword matching con nodo Switch
Per un sistema semplice ma efficace, usa il nodo Switch per confrontare il testo del messaggio con parole chiave:
{
"parameters": {
"dataType": "string",
"value1": "={{ $json.testo_messaggio.toLowerCase() }}",
"rules": {
"rules": [
{
"value2": "orario",
"output": 0
},
{
"value2": "prezzo",
"output": 1
},
{
"value2": "contatto",
"output": 2
}
]
},
"fallbackOutput": 3
},
"type": "n8n-nodes-base.switch",
"name": "Classifica Intento"
}
Suggerimento avanzato: per una classificazione più sofisticata, puoi integrare il nodo OpenAI o Anthropic di n8n per analizzare il messaggio con un LLM e restituire l'intento. Questo approccio gestisce varianti linguistiche e sinonimi che il keyword matching non copre.
Workflow 2: notifiche automatiche ordini
Uno degli usi più preziosi di WhatsApp per le aziende è la notifica in tempo reale dello stato degli ordini. Creiamo un workflow che invia aggiornamenti automatici quando cambia lo stato di un ordine.
Architettura del workflow
Webhook (trigger da sistema ordini)
-> Set (format dati ordine)
-> IF (tipo notifica)
-> "conferma": Template WhatsApp (ordine confermato)
-> "spedito": Template WhatsApp (ordine in spedizione)
-> "consegnato": Template WhatsApp (ordine consegnato)
-> HTTP Request (invio messaggio template)
-> Respond to Webhook (ack)
Preparazione dei messaggi template
WhatsApp Business richiede che i messaggi inviati fuori dalla finestra di 24 ore siano template approvati da Meta. I template vanno creati dal WhatsApp Manager seguendo le linee guida.
Esempi di template utili per l'e-commerce:
nome_template: ordine_confermato
corpo: "Gentile {{1}}, il tuo ordine #{{2}} è stato confermato. Totale: {{3}} EUR. Prevista spedizione entro 24 ore lavorative."
nome_template: ordine_spedito
corpo: "Gentile {{1}}, il tuo ordine #{{2}} è stato spedito con corriere {{3}}. Tracking: {{4}}. Segui la spedizione: {{5}}"
nome_template: ordine_consegnato
corpo: "Gentile {{1}}, il tuo ordine #{{2}} è stato consegnato il {{3}}. Grazie per il tuo acquisto! Lascia una recensione: {{4}}"
Invio di un messaggio template
Il nodo HTTP Request per inviare un template WhatsApp:
{
"parameters": {
"method": "POST",
"url": "https://graph.facebook.com/v19.0/<PHONE_NUMBER_ID>/messages",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer <IL_TUO_ACCESS_TOKEN>"
}
]
},
"sendBody": true,
"contentType": "json",
"body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.numero_cliente, type: 'template', template: { name: 'ordine_confermato', language: { code: 'it' }, components: [{ type: 'body', parameters: [{ type: 'text', text: $json.nome_cliente }, { type: 'text', text: $json.numero_ordine }, { type: 'text', text: $json.totale }] }] } }) }}"
},
"type": "n8n-nodes-base.httpRequest",
"name": "Invia Template Ordine"
}
Trigger dal sistema e-commerce
Il webhook che riceve gli eventi dal tuo sistema e-commerce (Shopify, WooCommerce, PrestaShop) potrebbe avere questa struttura:
{
"event": "order.created",
"order_id": "ORD-2026-12345",
"customer_name": "Marco Rossi",
"customer_phone": "393331234567",
"total": "149.90",
"items": [
{ "sku": "SHOE-001", "name": "Scarpe running", "qty": 1 }
]
}
Configura un secondo nodo Webhook (o usa la path differentiation) per ricevere questi eventi dal tuo negozio online.
Workflow 3: menu interattivo e raccolta dati
WhatsApp supporta messaggi interattivi che permettono di creare menu a scelta rapida, elenchi di opzioni e pulsanti. Questo è ideale per guidare il cliente verso l'informazione corretta.
Creare un menu a pulsanti
{
"messaging_product": "whatsapp",
"to": "393331234567",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "Benvenuto nel nostro servizio clienti! Come possiamo aiutarti?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "track_order",
"title": "Traccia Ordine"
}
},
{
"type": "reply",
"reply": {
"id": "reschedule",
"title": "Modifica Appuntamento"
}
},
{
"type": "reply",
"reply": {
"id": "talk_agent",
"title": "Parla con un Operatore"
}
}
]
}
}
}
Gestire la risposta al pulsante
Quando l'utente clicca un pulsante, WhatsApp invia un messaggio con type: "interactive" e il reply.id selezionato. In n8n, usa un nodo Switch per gestire ogni opzione:
{
"parameters": {
"dataType": "string",
"value1": "={{ $json.entry[0].changes[0].value.messages[0].interactive.button_reply.id }}",
"rules": {
"rules": [
{
"value2": "track_order",
"output": 0
},
{
"value2": "reschedule",
"output": 1
},
{
"value2": "talk_agent",
"output": 2
}
]
}
},
"type": "n8n-nodes-base.switch",
"name": "Gestisci Selezione Menu"
}
Per "Traccia Ordine", puoi chiedere il numero ordine e poi interrogare il tuo database o API del corriere.
Gestione delle immagini e dei documenti
WhatsApp permette di inviare e ricevere immagini, documenti e messaggi vocali. Ecco come gestirli in n8n.
Ricevere un'immagine
Quando un cliente invia un'immagine, il payload contiene l'ID del media, non l'URL diretto. Devi fare una chiamata aggiuntiva per scaricarlo:
{
"parameters": {
"method": "GET",
"url": "=https://graph.facebook.com/v19.0/{{ $json.entry[0].changes[0].value.messages[0].image.id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer <IL_TUO_ACCESS_TOKEN>"
}
]
}
},
"type": "n8n-nodes-base.httpRequest",
"name": "Ottieni Info Media"
}
La risposta contiene il campo url che puoi usare per scaricare l'immagine con un secondo nodo HTTP Request.
Inviare un'immagine
Per inviare un'immagine a un cliente (ad esempio, una foto prodotto):
{
"messaging_product": "whatsapp",
"to": "393331234567",
"type": "image",
"image": {
"link": "https://tuo-sito.it/prodotti/scarpa-running.jpg",
"caption": "Scarpe running modello Sprint - Disponibili in 3 colori"
}
}
Gestione degli errori e del rate limiting
Rate limiting di WhatsApp
La WhatsApp Business API impone limiti di invio:
- Tier 1 (default): 1.000 conversazioni business-initiated al giorno
- Tier 2: 10.000 conversazioni al giorno
- Tier 3: 100.000 conversazioni al giorno
In n8n, implementa un meccanismo di coda con il nodo Wait per distribuire gli invii nel tempo:
{
"parameters": {
"amount": 5,
"unit": "seconds"
},
"type": "n8n-nodes-base.wait",
"name": "Rate Limit Delay"
}
Gestione degli errori HTTP
Aggiungi un nodo Error Trigger al workflow per catturare e loggare gli errori:
{
"parameters": {
"operation": "everyError"
},
"type": "n8n-nodes-base.errorTrigger",
"name": "Gestione Errori"
}
Collega l'Error Trigger a un nodo che invia una notifica su Slack o Telegram all'amministratore di sistema, con i dettagli dell'errore.
Conformità e best practice
Policy di WhatsApp da rispettare
- Finestra di 24 ore: puoi inviare messaggi gratuiti solo entro 24 ore dall'ultimo messaggio del cliente. Oltre questa finestra, devi usare i template (che hanno un costo)
- Opt-in esplicito: il cliente deve aver acconsentito a ricevere comunicazioni
- Niente spam: non inviare messaggi promozionali non richiesti
- Opt-out semplice: fornisci sempre un modo per disiscriversi (es. rispondi "STOP")
Salvare i messaggi nel database
Per analisi e conformità, salva ogni conversazione in un database. In n8n, aggiungi un nodo Postgres o MySQL dopo la ricezione del messaggio:
{
"parameters": {
"operation": "insert",
"table": "whatsapp_messages",
"fieldsUi": {
"fieldValues": [
{
"fieldName": "message_id",
"fieldValue": "={{ $json.entry[0].changes[0].value.messages[0].id }}"
},
{
"fieldName": "phone_number",
"fieldValue": "={{ $json.entry[0].changes[0].value.messages[0].from }}"
},
{
"fieldName": "message_text",
"fieldValue": "={{ $json.entry[0].changes[0].value.messages[0].text?.body || '' }}"
},
{
"fieldName": "message_type",
"fieldValue": "={{ $json.entry[0].changes[0].value.messages[0].type }}"
},
{
"fieldName": "received_at",
"fieldValue": "={{ new Date($json.entry[0].changes[0].value.messages[0].timestamp * 1000).toISOString() }}"
}
]
}
},
"type": "n8n-nodes-base.postgres",
"name": "Salva Messaggio DB"
}
Costi della WhatsApp Business API
La WhatsApp Business API ha un modello di costo basato su conversazioni:
- Conversazioni user-initiated: gratuite per le prime 1.000 al giorno (tier 1)
- Conversazioni business-initiated: costo a conversazione, varia per categoria (autenticazione, marketing, utilità)
- In Italia, i prezzi partono da circa 0,01-0,08 EUR per conversazione a seconda della categoria
Consiglio: privilegia le conversazioni user-initiated incoraggiando i clienti a scrivere per primi, ad esempio con un widget WhatsApp sul sito web.
Conclusione
Integrare WhatsApp Business con n8n apre possibilità enormi per il customer service e il marketing conversazionale. I workflow che abbiamo costruito coprono i casi d'uso più comuni: risposte automatiche, notifiche ordini e menu interattivi.
Il passo successivo è personalizzare questi workflow per il tuo business specifico, aggiungere integrazioni con il tuo CRM e implementare analytics per misurare l'efficacia delle comunicazioni.
Con n8n hai il pieno controllo sulla logica di automazione, la flessibilità di adattare i workflow nel tempo e il vantaggio di un costo significativamente inferiore rispetto alle piattaforme dedicate di automazione WhatsApp.
Marco Ferri
Automation Architect
Specialista in workflow automation e integrazioni enterprise. Oltre 15 anni di esperienza in architetture IT per PMI italiane.
Articoli correlati

Cos'è n8n e perché dovresti usarlo nel 2026
Scopri cos'è n8n, la piattaforma di workflow automation open source che sta rivoluzionando il modo i...
Leggi di più
Automazione per PMI italiane: guida strategica e roadmap in 30 giorni
Quali processi automatizzare per primi nella tua azienda? Una guida pratica con dati sul mercato ita...
Leggi di più
n8n e CRM: la guida completa per automazione vendite e lead management
Scopri come usare n8n come alternativa flessibile e conveniente a Zapier per la gestione CRM: sincro...
Leggi di più