Vai al contenuto
WbizTool

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

  1. 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.

  2. Installa il client, o usa fetch

    Esegui npm install wbiztool-client per il client ufficiale. Oppure chiama l'API con fetch, che su Node.js 18 e successivi non richiede pacchetti.

  3. 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": 1 e un msg_id significa che il messaggio è in coda sul tuo numero.

  4. Controlla che sia partito

    Passa un URL webhook per sapere quando il messaggio viene inviato o fallisce, oppure interroga l'endpoint Stato del messaggio con il msg_id.

Esempi di codice Node.js

Installa il client ufficiale
npm install wbiztool-client
Invia un testo con il client ufficiale
const { 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);
Invia un testo con fetch
// 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);
}
Risposta
{"status": 1, "message": "Created", "msg_id": 9817263}
Invia un PDF (caricamento del file)
// 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());
Controlla lo stato del messaggio
// 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);
}
Pianifica un messaggio per più tardi
// 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");
}
Ricevi il webhook di stato (Express)
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_type a 0 per il testo, 1 per un'immagine o 2 per un file. Indica un img_url o un file_url pubblico, oppure carica il file come multipart form data in un campo chiamato file.

  • Messaggi personali dai tuoi dati

    Compila msg con 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 webhook e il tuo server riceve una POST form-encoded come msg_id=9817263&status=SENT quando il messaggio viene inviato, fallisce, viene annullato o scade.

  • Pianifica per più tardi

    Fai una POST a /api/v1/schedule_msg/ con date (gg/mm/aaaa), time (HH:MM) e un timezone. Formatta la data con Intl.DateTimeFormat in quello stesso fuso orario, non in quello del tuo server.

  • Scarta i messaggi che arrivano troppo tardi

    expire_after_seconds segna 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": 1 significa 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 controlla status invece di response.ok.
  • Il scheduleMessage del 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-client su npm (npm install wbiztool-client). Il suo sendMessage invia 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": 1 e un msg_id significa che è in coda. Passa un URL webhook per ricevere una POST con SENT, FAILED, CANCELLED o EXPIRED, oppure chiama l'endpoint Stato del messaggio con il msg_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

Pagine correlate

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 gratis

I piani a pagamento partono da $25 al mese negli USA. Prezzi