13 min read

Collegare il tuo software a WhatsApp

Genera una chiave API, mappa un template WhatsApp approvato, indirizza un webhook verso il tuo server e chiama l’API REST — la guida completa alla Gestione API.

Collegare il tuo software a WhatsApp

La Gestione API è il modo in cui un altro sistema — il tuo software di fatturazione, il tuo negozio online, il tuo backend — invia messaggi WhatsApp tramite WizMessage. Qui gli assegni una chiave API, gli indichi quale template WhatsApp approvato può inviare e lo colleghi a un webhook per ricevere le risposte. Questa guida percorre l’intero tragitto e documenta poi l’API REST che i tuoi sviluppatori chiameranno.

La dashboard

Dove si trovano le tue chiavi API

Ogni chiave che hai generato compare qui, nella sezione «API Keys». Ogni riga mostra lo stato della chiave, il suo prefisso pubblico (l’unica parte della chiave che venga mostrata di nuovo dopo la creazione) e quante chiamate ha effettuato oggi. «Manage» apre la chiave; l’interruttore la mette in pausa senza eliminarla.

Video guidato — 2 passi, 0:05. Scegli un passo per riprodurre solo quella parte.
La dashboard API Keys che elenca ogni chiave generata con il suo stato, il prefisso pubblico e il numero di chiamate giornaliere

Una chiave non ancora completa

Una chiave a cui non è mappato alcun template riporta il badge «Needs setup». Può autenticarsi, ma non può inviare un messaggio template finché non ne mappi uno — così un’integrazione configurata a metà si nota a colpo d’occhio, invece di fallire più tardi al momento dell’invio.

La riga di una chiave API che mostra il badge Needs setup perché non le è ancora mappato alcun template

Configurazione guidata

Passo 1 — Che cosa stai collegando?

«Connect your software» apre una procedura guidata in quattro passi. Inizia dando alla chiave il nome del sistema che la userà e scegli il preset corrispondente. I preset si limitano a suggerire nomi di campo sensati — quello per la fatturazione propone invoice_number, amount, due_date, customer_name — ma non limitano ciò che puoi mappare.

Video guidato — 4 passi, 0:19. Scegli un passo per riprodurre solo quella parte.
Passo 1 della procedura guidata: assegnazione del nome alla chiave API e scelta del preset corrispondente al sistema da collegare

Passo 2 — Scegli il messaggio

Scegli uno dei tuoi template WhatsApp approvati. I template risiedono su Meta, non qui — questo elenco viene recuperato in tempo reale dal tuo account WhatsApp collegato e possono essere inviati solo i template APPROVATI. Questo passo è facoltativo: saltalo se la chiave invia esclusivamente testo semplice e mappa un template in un secondo momento.

Passo 2 della procedura guidata: scelta di uno dei template WhatsApp approvati recuperati in tempo reale da Meta

Passo 3 — Dove devono arrivare le risposte?

Quando qualcuno risponde al tuo messaggio, o quando arriva una conferma di consegna, inviamo i dati in POST a un URL che controlli tu. Lascia disattivata questa opzione se il tuo sistema si limita a inviare. Puoi aggiungerla in seguito dalla scheda «Webhooks» della chiave — qui nulla è definitivo.

Passo 3 della procedura guidata: impostazione dell’URL webhook a cui vengono inviate le risposte e le conferme di consegna

Passo 4 — Vai in produzione

È la pressione di «Next» nel passo precedente a creare effettivamente la chiave: questa schermata è la conferma. Copia subito tutti e tre i valori: la chiave API, il segreto API e il segreto di firma del webhook vengono mostrati una sola volta e non sono più recuperabili in seguito. Se perdi il segreto devi ruotarlo, il che comporta aggiornare qualunque sistema lo stesse usando.

Passo 4 della procedura guidata: la chiave API, il segreto API e il segreto di firma del webhook mostrati una sola volta

Gestire una chiave

Panoramica

Aprendo una chiave si arriva alla scheda «Overview»: che cosa le è consentito fare, quanto viene utilizzata e quali endpoint può chiamare. I conteggi di utilizzo sono letti dal log delle richieste, quindi riflettono il traffico reale.

Video guidato — 1 passo, 0:05.
La scheda Overview di una chiave API con i relativi permessi, l’utilizzo e gli endpoint chiamabili

Una chiave ancora da configurare

Una chiave senza alcun template mappato si apre invece sulla scheda «Setup» — la stessa procedura guidata, integrata nella pagina. Nota che le schede differiscono dallo screenshot precedente: finché una chiave non ha almeno un template, «Templates» e «Webhooks» non vengono proposte, perché non avrebbero ancora nulla su cui agire.

Video guidato — 1 passo, 0:05.
Una chiave non configurata che si apre sulla scheda Setup, con le schede Templates e Webhooks non ancora proposte

Template

Ogni card della scheda «Templates» corrisponde a un template che questa chiave può inviare. Il testo del corpo è il messaggio così come è stato approvato da Meta, e i chip sottostanti sono i nomi delle variabili che il tuo sistema dovrà fornire. «Try it» invia un test, «Get code» genera una richiesta pronta all’uso in otto linguaggi.

Video guidato — 2 passi, 0:07. Scegli un passo per riprodurre solo quella parte.
La scheda Templates: una card per ogni template, con il testo approvato del corpo e i chip con i nomi delle variabili

Leggere le variabili — l’unica cosa su cui vale la pena rallentare

Osserva la card payment_failed_alert. Il suo messaggio presenta {{1}}, poi {{3}}, poi {{2}} — nel testo i segnaposto NON seguono l’ordine numerico. I chip sottostanti sono invece elencati in ordine numerico: customer_name riempie {{1}}, renewal_date riempie {{2}}, plan_name riempie {{3}}. Abbina i tuoi valori al NUMERO, mai all’ordine in cui i segnaposto compaiono nella frase. È l’errore più frequente con i template tradotti, dove l’ordine delle parole sposta i segnaposto.

La card di un template i cui segnaposto compaiono nel corpo del messaggio senza seguire l’ordine numerico

I tre pulsanti presenti su ogni template

«Try it» — invia un test senza scrivere codice

Il pulsante con l’aeroplanino di carta apre questo template precompilato con valori di esempio, uno per ogni nome di variabile. È il modo più rapido di verificare che una mappatura sia corretta prima ancora che i tuoi sviluppatori la tocchino. Nota l’interruttore: «Simulate Only» è l’impostazione predefinita e nulla esce davvero — il server ti restituisce il payload così com’è. Portalo su «Send Real Message» e parte un vero messaggio WhatsApp verso il numero indicato, che viene anche addebitato.

Video guidato — 7 passi, 0:21. Scegli un passo per riprodurre solo quella parte.
La finestra Try it, precompilata con un valore di esempio per ogni variabile e con l’interruttore Simulate Only

Che cosa restituisce un invio simulato

Premendo «Send Request» in modalità «Simulate Only» ottieni la richiesta così come la piattaforma l’ha ricevuta, con lo stato HTTP e il tempo di andata e ritorno. Leggilo come un controllo di forma, non come una prova generale: conferma che il tuo JSON è stato interpretato e che la chiave è stata accettata, ma NON verifica i nomi delle tue variabili rispetto alla mappatura e non contatta mai Meta. Un payload che si simula senza errori può comunque essere rifiutato nella realtà. Per dimostrare la mappatura vera e propria, attiva «Send Real Message» e invia al tuo telefono.

La risposta di un invio simulato, che restituisce la richiesta con lo stato HTTP e il tempo di andata e ritorno

«Get code» — la richiesta, già scritta per te

Il pulsante con le parentesi angolari genera una richiesta funzionante per questo preciso template in otto linguaggi: cURL, JavaScript, Node.js, Python, PHP, Ruby, Go e C#. Consegnala a chi sta scrivendo l’integrazione. Le variabili compaiono come {{placeholders}} con i nomi della tua mappatura, e le credenziali restano YOUR_API_KEY / YOUR_API_SECRET — questa finestra non stampa mai la tua chiave reale, quindi lo snippet si può incollare in un ticket senza rischi.

La finestra Get code con una richiesta pronta all’uso per questo template e credenziali segnaposto

Cambiare linguaggio

Clicca su un linguaggio qualsiasi in alto e lo snippet viene riscritto per quel linguaggio — stessa chiamata, stessi header, il client HTTP di quel linguaggio. Ognuno viene generato al primo clic, quindi un breve indicatore di caricamento al primo cambio è normale. «Copy» prende lo snippet così come appare: è completo, import inclusi, e se questa chiave richiede le firme il passaggio di firma è già dentro.

La stessa richiesta riscritta per un altro linguaggio dopo averlo cliccato nella riga dei linguaggi

«Edit» — cambia ciò che invia il tuo sistema

La matita apre la mappatura vera e propria. Il mockup di telefono in alto è il messaggio reale con i tuoi nomi attuali già sostituiti, così vedi che cosa leggerà il cliente. Sotto, ogni variabile rilevata può essere rinominata, riordinata, resa obbligatoria o tipizzata — una data, un importo, un’immagine. Rinominare una variabile la rinomina anche nel payload della tua API, quindi un sistema che invia ancora il vecchio nome inizierà a fallire: cambia entrambe le cose insieme.

La finestra di modifica della mappatura, con l’anteprima su telefono sopra l’elenco di variabili rinominabili e riordinabili

Test API — lo stesso strumento, qualsiasi endpoint

«Test API», in cima alla scheda, è «Try it» senza il vincolo del template: scegli uno qualsiasi dei tre endpoint di invio, cambia template dal secondo menu a discesa e modifica liberamente il corpo. Usalo per verificare le chiamate grezze /messages/text o /messages/template, che non hanno una card propria perché non sono legate ad alcuna mappatura. Nota che le variabili di questo template si chiamano ancora body_1, body_2, body_3 — è così che si presenta un template non mappato, ed è esattamente ciò che «Edit» serve a sistemare.

La finestra Test API con un menu per l’endpoint, uno per il template e un corpo liberamente modificabile

Risposte

Webhook — ricevere le risposte

Inviare è solo metà di un’integrazione. Dalla scheda «Webhooks» indirizza un webhook verso un tuo endpoint HTTPS e WizMessage vi invierà in POST i messaggi in entrata e gli aggiornamenti di consegna. Il segreto di firma viene mostrato una sola volta al momento della generazione; verificalo a ogni consegna, così sai che la chiamata proviene davvero da noi.

La scheda Webhooks, dove un endpoint HTTPS riceve i messaggi in entrata e gli aggiornamenti di consegna

Riferimento API REST

Tutto quanto precede serve a configurare la chiave. Questo è ciò che i tuoi sviluppatori chiameranno davvero. L’URL di base è /api/v1/external. Ogni endpoint richiede le intestazioni di autenticazione indicate di seguito ed è soggetto ai limiti di velocità della chiave.

Autenticazione

Invia la tua chiave API a ogni richiesta. Se sulla chiave è attiva l’opzione «Require signature», devi anche firmare la richiesta — e una chiave con questa opzione attiva rifiuta senza appello qualsiasi chiamata non firmata.

IntestazioneValore
X-API-KeyLa tua chiave API — il valore pk_live_… completo, non solo il prefisso mostrato nella dashboard.
X-TimestampTimestamp Unix in secondi. Rifiutato se si discosta di oltre 5 minuti dall’ora del server.
X-API-SignatureHMAC-SHA256 di timestamp + "." + rawBody, con chiave SHA256(api_secret), in esadecimale minuscolo.

Nota: Le firme vengono verificate solo quando sulla chiave è attivo require_signature. In caso contrario, la sola chiave API è sufficiente per inviare messaggi — ed è esattamente per questo che la chiave è un segreto, non un identificatore. Trattala come una password: viene mostrata una sola volta e chiunque la possieda può scrivere ai tuoi clienti.

const crypto = require('node:crypto')

const body = JSON.stringify({ to: '+919876543210', message: 'Hello' })
const timestamp = Math.floor(Date.now() / 1000).toString()

const secretHash = crypto.createHash('sha256').update(API_SECRET).digest('hex')
const signature = crypto.createHmac('sha256', secretHash)
	.update(timestamp + '.' + body)
	.digest('hex')

await fetch('https://your-host/api/v1/external/messages/text', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json',
		'X-API-Key': API_KEY,
		'X-Timestamp': timestamp,
		'X-API-Signature': signature,
	},
	body,
})

Endpoint

MetodoPercorsoScopo
POST/messages/textInvia un messaggio di testo semplice. Funziona solo all’interno di una finestra di conversazione aperta di 24 ore.
POST/messages/templateInvia un template fornendo tu stesso l’array components grezzo di Meta.
POST/messages/template/sendInvia un template usando la mappatura che hai configurato nella dashboard. È questo l’endpoint da usare.
POST/messages/interactive/listInvia un messaggio con elenco interattivo.
POST/messages/interactive/buttonInvia fino a tre pulsanti di risposta.
GET/messages/:uuidVerifica lo stato di consegna di un messaggio che hai inviato.
POST/media/uploadCarica un PDF, un’immagine o un video su Meta e ottieni un media_id da usare nell’intestazione di un template.
GET/templatesElenca i template disponibili per questa chiave.
GET/templates/:nameRecupera i dettagli di un singolo template.

Inviare un template mappato

Questo è il payload che si abbina alla scheda «Templates». Le variabili si inviano per NOME — i nomi mostrati come chip sulla card del template — e la piattaforma assembla per te i components di Meta. È tutto qui il senso di mappare un template: il tuo sistema di fatturazione non ha bisogno di sapere nulla del formato dei componenti di Meta.

POST /api/v1/external/messages/template/send

{
	"to": "+919876543210",
	"template_name": "payment_failed_alert",
	"language": "en",
	"variables": {
		"customer_name": "Priya Sharma",
		"renewal_date": "12 Aug 2026",
		"plan_name": "Wiz Pro"
	},
	"reference": "invoice-2026-0817"
}

Nota: I nomi delle variabili devono corrispondere esattamente alla mappatura — un nome non riconosciuto viene ignorato, mentre l’assenza di uno obbligatorio comporta un rifiuto con 400. reference è a tua disposizione: viene restituito nei webhook, così puoi collegare una conferma di consegna a un record del tuo sistema.

Limiti di velocità

Ogni chiave ha i propri limiti, visibili nella scheda «Overview» — per impostazione predefinita 60 richieste al minuto e 1.000 messaggi al giorno. Le risposte indicano il margine residuo: rallenta quando si sta esaurendo, invece di ostinarti a riprovare contro un muro.