Torna al Blog
Tutorial

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.

Marco Ferri- Automation Architect28 marzo 202611 min read
Come collegare WhatsApp Business a n8n: guida completa all'automazione

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

  1. Accedi al Meta Business Manager
  2. Seleziona "Business Settings" dal menu laterale
  3. Nella sezione "Accounts", clicca su "WhatsApp Accounts"
  4. Segui la procedura guidata per aggiungere un nuovo account
  5. 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 messages come 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.

M

Marco Ferri

Automation Architect

Specialista in workflow automation e integrazioni enterprise. Oltre 15 anni di esperienza in architetture IT per PMI italiane.

Articoli correlati