Invia messaggi WhatsApp con Node.js
Invia testi, immagini e file WhatsApp dalla tua app Node.js, dal tuo numero collegato a WbizTool come WhatsApp Web. Usa il pacchetto ufficiale wbiztool-client oppure il fetch integrato in Node.js 18 e successivi.
Prova gratuita: 50 messaggi in qualsiasi arco di 30 giorni, senza carta.
Come funziona
Ottieni la chiave API e collega il tuo numero
Registrati, poi collega il tuo numero WhatsApp nella pagina Numeri WhatsApp con un codice QR o un codice di abbinamento, come WhatsApp Web. In Impostazioni → Chiavi API, crea una chiave e copia il tuo Client ID (la guida Chiavi API qui sotto mostra dove). L'ID sulla scheda del numero (come ID 678) è il tuo
whatsapp_client.Installa il client, o usa fetch
Esegui
npm install wbiztool-clientper il client ufficiale. Oppure chiama l'API con fetch, che su Node.js 18 e successivi non richiede pacchetti.Invia il messaggio
Invia con una POST le credenziali, il numero di telefono e il testo a
https://wbiztool.com/api/v1/send_msg/. Una risposta con"status": 1e unmsg_idsignifica che il messaggio è in coda sul tuo numero.Controlla che sia partito
Passa un URL
webhookper sapere quando il messaggio viene inviato o fallisce, oppure interroga l'endpoint Stato del messaggio con ilmsg_id.
Esempi di codice Node.js
npm install wbiztool-clientconst { WbizToolClient } = require("wbiztool-client");
const client = new WbizToolClient({
clientId: 12345,
apiKey: "YOUR_API_KEY",
whatsappClient: 678,
});
(async () => {
// Errors throw, with the API's response in the error message.
const result = await client.sendMessage({
phone: "9876543210",
countryCode: "91",
message: "Hi Aman, your order #4821 has shipped.",
});
console.log(result);
})().catch(console.error);// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: "9876543210",
msg: "Hi Aman, your order #4821 has shipped and will arrive on Thursday.",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Queued with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message);
}{"status": 1, "message": "Created", "msg_id": 9817263}// Node.js 20+ (built-in fetch, FormData and fs.openAsBlob). Save as .mjs to use top-level await.
import { openAsBlob } from "node:fs";
const form = new FormData();
form.append("client_id", "12345");
form.append("api_key", "YOUR_API_KEY");
form.append("whatsapp_client", "678");
form.append("msg_type", "2");
form.append("country_code", "91");
form.append("phone", "9876543210");
form.append("msg", "Your invoice for order #4821 is attached.");
form.append("file_name", "invoice-4821.pdf");
form.append("file", await openAsBlob("./invoice-4821.pdf"), "invoice-4821.pdf");
// Don't set Content-Type yourself; fetch adds the multipart boundary.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/", { method: "POST", body: form });
console.log(await response.json());// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const msgId = 9817263;
const response = await fetch(`https://wbiztool.com/api/v1/message/status/${msgId}/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.message === "Unknown message id") {
console.log("No message with this ID in your workspace");
} else if (!("status_text" in result)) {
console.error("Request failed:", result.message ?? "no message in response");
} else if (result.status === 1) {
console.log("Sent");
} else if (result.status === 2) {
console.log("Failed:", result.error);
} else {
console.log("Status:", result.status_text);
}// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const tz = "Asia/Kolkata";
const sendAt = new Date(Date.now() + 2 * 60 * 60 * 1000); // two hours from now
// Format the date and time in the timezone you send, not your server's.
const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(sendAt); // "24/12/2026"
const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(sendAt); // "09:00"
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
country_code: "91",
phone: "9876543210",
msg: "Hi Aman, a reminder that your appointment starts in 30 minutes.",
date,
time,
timezone: tz,
}),
});
const result = await response.json(); // schedule errors come back with HTTP 200 and "status": 0
if (result.status === 1) {
console.log("Scheduled with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message ?? "no message in response");
}const express = require("express");
const app = express();
// WbizTool posts form fields, not JSON.
app.post("/wbiztool-webhook", express.urlencoded({ extended: false }), (req, res) => {
const { msg_id, status } = req.body; // status: SENT, FAILED, CANCELLED or EXPIRED
console.log(msg_id, status);
res.sendStatus(200);
});
app.listen(3000);Cosa puoi fare
Testi, immagini e file
Imposta
msg_typea 0 per il testo, 1 per un'immagine o 2 per un file. Indica unimg_urlo unfile_urlpubblico, oppure carica il file come multipart form data in un campo chiamatofile.Messaggi personali dai tuoi dati
Compila
msgcon i tuoi dati – un nome, un numero d'ordine, una scadenza. La formattazione di WhatsApp come *grassetto* e _corsivo_ funziona, fino a 3.000 caratteri.Webhook per ogni stato
Passa
webhooke il tuo server riceve una POST form-encoded comemsg_id=9817263&status=SENTquando il messaggio viene inviato, fallisce, viene annullato o scade.Pianifica per più tardi
Fai una POST a
/api/v1/schedule_msg/condate(gg/mm/aaaa),time(HH:MM) e untimezone. Formatta la data conIntl.DateTimeFormatin quello stesso fuso orario, non in quello del tuo server.Scarta i messaggi che arrivano troppo tardi
expire_after_secondssegna un messaggio come scaduto se non è partito in tempo, utile per i messaggi urgenti come gli orari di consegna previsti.Promemoria ricorrenti
L'API Promemoria ripete un messaggio con una pianificazione cron, ad esempio alle 10:00 del 1° di ogni mese. I promemoria richiedono un piano a pagamento.
Buono a sapersi
"status": 1significa che il messaggio è in coda, non consegnato. Inviato è lo stato finale di successo; l'API non segnala se il messaggio è stato consegnato o letto.- Gli errori di Invia messaggio arrivano con HTTP 400 (429 al limite giornaliero); quelli di Pianifica messaggio arrivano di solito con HTTP 200 e
"status": 0, quindi analizza sempre il body e controllastatusinvece diresponse.ok. - Il
scheduleMessagedel client ufficiale invia un campo che l'endpoint di pianificazione non legge. Chiama invece/api/v1/schedule_msg/con fetch, come mostrato sopra. - Tieni la chiave API sul tuo server, ad esempio in una variabile d'ambiente. Chiunque la possieda può inviare dai tuoi numeri, quindi non metterla mai in JavaScript eseguito nel browser, in un'app mobile o in codice che pubblichi.
- Per scrivere in un gruppo WhatsApp invece che a un numero, vedi l'esempio dei messaggi ai gruppi: funziona con ogni piano, compresa la prova gratuita.
- La prova gratuita offre 50 messaggi in qualsiasi arco di 30 giorni e 1 numero, senza carta. I piani a pagamento partono da $25 al mese negli USA (il tuo prezzo è nella pagina Prezzi) e inviano messaggi illimitati con uso corretto: fino a 1.000 al giorno per numero.
- I messaggi partono dal tuo numero WhatsApp, quindi valgono le regole di WhatsApp: scrivi a persone che si aspettano di sentirti.
Domande
- Esiste un pacchetto Node.js ufficiale per l'API di WbizTool?
- Sì:
wbiztool-clientsu npm (npm install wbiztool-client). Il suosendMessageinvia un messaggio. Per pianificare e controllare lo stato, chiama gli endpoint con fetch come mostrato sopra. - Posso chiamare l'API dal browser?
- Meglio di no: la richiesta contiene la tua chiave API, e chiunque la possieda può inviare dai tuoi numeri. Chiama l'API dal tuo server Node.js e tieni la chiave in una variabile d'ambiente.
- Come faccio a sapere che il messaggio è stato inviato?
- Una risposta con
"status": 1e unmsg_idsignifica che è in coda. Passa un URLwebhookper ricevere una POST conSENT,FAILED,CANCELLEDoEXPIRED, oppure chiama l'endpoint Stato del messaggio con ilmsg_id. Inviato è lo stato finale: l'API non segnala se il messaggio è stato consegnato o letto. - In che formato devo inviare il numero di telefono?
- Invia il numero con il prefisso internazionale (393471234567), oppure senza (3471234567) insieme a
country_code(39). Spazi, +, trattini e parentesi vengono rimossi per te, quindi funziona anche +39 347-123 4567. - Mi servono la WhatsApp Business API o l'approvazione di Meta?
- No. WbizTool invia dal tuo numero WhatsApp o WhatsApp Business, collegato come WhatsApp Web. Non serve l'approvazione di Meta e non ci sono template di messaggio da far approvare.
- Si paga per ogni messaggio?
- No. La prova gratuita include 50 messaggi in qualsiasi arco di 30 giorni. I piani a pagamento inviano messaggi illimitati con uso corretto, fino a 1.000 al giorno per numero: Lite $25, Standard $59 e Advanced $149 al mese negli USA; la pagina Prezzi mostra il prezzo del tuo Paese.
Leggi le guide
- API Invia messaggio
- API Stato del messaggio
- API Pianifica messaggio
- Chiavi API e Client ID
- Collega il tuo numero WhatsApp
Pagine correlate
- PythonInvia messaggi WhatsApp da Python con il client ufficiale o con requests.
- cURLInvia, pianifica e segui i messaggi WhatsApp con un solo comando cURL.
- n8nInvia messaggi WhatsApp da n8n con il community node di WbizTool.
- Aggiornamenti sugli ordiniConferme d'ordine, aggiornamenti di spedizione e avvisi di nuovi ordini per Shopify, WooCommerce e altro.
Invia oggi il tuo primo messaggio WhatsApp automatizzato
Crea un account, scansiona il codice QR e invia un messaggio in meno di cinque minuti.
Inizia gratisI piani a pagamento partono da $25 al mese negli USA. Prezzi
