Vai al contenuto
WbizTool

Invia messaggi WhatsApp con PHP

Invia testi, immagini e file WhatsApp dal tuo sito o dalla tua app PHP, dal tuo numero collegato a WbizTool come WhatsApp Web. Bastano l'estensione cURL di PHP e una POST a un endpoint documentato.

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. Prepara la richiesta

    Metti client_id, api_key, whatsapp_client, il numero di telefono e msg in un array. Invialo come JSON con l'estensione cURL di PHP – o con qualsiasi client HTTP che usi già, con gli stessi campi.

  3. Invia il messaggio

    Invialo con una POST 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 PHP

Invia un testo
<?php
$payload = [
    '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.',
];

$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Queued with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no response');
}
Risposta
{"status": 1, "message": "Created", "msg_id": 9817263}
Invia un'immagine da un URL
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 1,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'img_url'         => 'https://example.com/offers/diwali-sale.jpg',
        'msg'             => 'Our Diwali sale starts today 🎉',
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);
Invia un PDF (caricamento del file)
<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    // An array body (not json_encode) makes cURL send multipart/form-data.
    CURLOPT_POSTFIELDS     => [
        'client_id'       => 12345,
        'api_key'         => 'YOUR_API_KEY',
        'whatsapp_client' => 678,
        'msg_type'        => 2,
        'country_code'    => '91',
        'phone'           => '9876543210',
        'msg'             => 'Your invoice for order #4821 is attached.',
        'file_name'       => 'invoice-4821.pdf',
        'file'            => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 120,
]);
echo curl_exec($ch);
curl_close($ch);
Pianifica un messaggio
<?php
$payload = [
    '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 is today at 11:30 AM.',
    'date'            => '24/12/2026',
    'time'            => '09:00',
    'timezone'        => 'Asia/Kolkata',
];

$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['status'] ?? 0) === 1) {
    echo 'Scheduled with msg_id ' . $result['msg_id'];
} else {
    echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}
Controlla lo stato del messaggio
<?php
$msgId = 9817263;
$payload = [
    'client_id' => 12345,
    'api_key'   => 'YOUR_API_KEY',
];

$ch = curl_init("https://wbiztool.com/api/v1/message/status/{$msgId}/");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (($result['message'] ?? '') === 'Unknown message id') {
    echo 'No message with this ID in your workspace';
} elseif (!isset($result['status_text'])) {
    echo 'Request failed: ' . ($result['message'] ?? 'no message in response');
} elseif ($result['status'] === 1) {
    echo 'Sent';
} elseif ($result['status'] === 2) {
    echo 'Failed: ' . $result['error'];
} else {
    echo 'Status: ' . $result['status_text'];
}
Ricevi il webhook di stato
<?php
// webhook.php – WbizTool posts form fields, so they arrive in $_POST.
$msgId  = $_POST['msg_id'] ?? '';
$status = $_POST['status'] ?? ''; // SENT, FAILED, CANCELLED or EXPIRED
error_log("WbizTool message $msgId: $status");
http_response_code(200);

Cosa puoi fare

  • Nessuna libreria da installare

    Gli esempi usano solo l'estensione cURL di PHP. L'API accetta JSON, campi di modulo o multipart form data quando carichi un file.

  • 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 con CURLFile.

  • Pianifica per più tardi

    Fai una POST a /api/v1/schedule_msg/ con date (gg/mm/aaaa), time (HH:MM) e un timezone come Asia/Kolkata o America/New_York.

  • Webhook per ogni stato

    Passa webhook e il tuo script riceve una POST form-encoded – leggi $_POST['msg_id'] e $_POST['status'] (SENT, FAILED, CANCELLED o EXPIRED).

  • Usi WordPress? Usa il plugin

    Il plugin WordPress di WbizTool invia messaggi WhatsApp per gli ordini WooCommerce, le prenotazioni WP Amelia e i moduli Contact Form 7 senza codice.

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 decodifica sempre il body e controlla status.
  • Per caricare un file, passa un array a CURLOPT_POSTFIELDS, non json_encode, così cURL invia multipart/form-data con il file in un campo chiamato file.
  • 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.
  • 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 SDK PHP?
Non c'è un pacchetto PHP ufficiale, e non ti serve: ogni chiamata è una singola POST con l'estensione cURL, come mostrato sopra. Qualsiasi client HTTP per PHP funziona con lo stesso URL e gli stessi campi.
Come invio una fattura PDF da PHP?
Usa msg_type 2. Indica un file_url pubblico, oppure carica il file con new CURLFile(...) in un campo chiamato file. Imposta file_name con la sua estensione, come invoice-4821.pdf.
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