Vai al contenuto
WbizTool

Invia messaggi WhatsApp con Python

Invia testi, immagini e file WhatsApp da uno script Python, dal tuo numero collegato a WbizTool come WhatsApp Web. Usa il pacchetto ufficiale wbiztool-client oppure una semplice chiamata con requests allo stesso endpoint.

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 requests

    Esegui pip install wbiztool-client per il client ufficiale. Se preferisci non aggiungere un pacchetto, la libreria requests funziona altrettanto bene – gli esempi qui sotto mostrano entrambi.

  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 Python

Installa il client ufficiale
pip install wbiztool-client
Invia un testo con il client ufficiale
from wbiztool_client import WbizToolClient

client = WbizToolClient(api_key="YOUR_API_KEY", client_id="12345")

result = client.send_message(
    phone="9876543210",
    country_code="91",
    msg="Hi Aman, your order #4821 has shipped.",
    whatsapp_client=678,
)
print(result)
Invia un testo con requests
import requests

response = requests.post(
    "https://wbiztool.com/api/v1/send_msg/",
    json={
        "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.",
    },
    timeout=60,
)
result = response.json()  # read the body even when the HTTP code is 400

if result.get("status") == 1:
    print("Queued with msg_id", result["msg_id"])
else:
    print("Failed:", result.get("message"))
Risposta
{"status": 1, "message": "Created", "msg_id": 9817263}
Invia un PDF (caricamento del file)
import requests

with open("invoice-4821.pdf", "rb") as f:
    response = requests.post(
        "https://wbiztool.com/api/v1/send_msg/",
        data={
            "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",
        },
        files={"file": f},
        timeout=120,
    )
print(response.json())
Controlla lo stato del messaggio
import requests

msg_id = 9817263
response = requests.post(
    f"https://wbiztool.com/api/v1/message/status/{msg_id}/",
    json={
        "client_id": 12345,
        "api_key": "YOUR_API_KEY",
    },
    timeout=60,
)
result = response.json()  # read the body even when the HTTP code is 400

if result.get("message") == "Unknown message id":
    print("No message with this ID in your workspace")
elif "status_text" not in result:
    print("Request failed:", result.get("message", "no message in response"))
elif result["status"] == 1:
    print("Sent")
elif result["status"] == 2:
    print("Failed:", result["error"])
else:
    print("Status:", result["status_text"])
Pianifica un messaggio per più tardi
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

import requests

send_at = datetime.now(ZoneInfo("Asia/Kolkata")) + timedelta(hours=2)

response = requests.post(
    "https://wbiztool.com/api/v1/schedule_msg/",
    json={
        "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": send_at.strftime("%d/%m/%Y"),
        "time": send_at.strftime("%H:%M"),
        "timezone": "Asia/Kolkata",
    },
    timeout=60,
)
result = response.json()  # schedule errors come back with HTTP 200 and "status": 0

if result.get("status") == 1:
    print("Scheduled with msg_id", result["msg_id"])
else:
    print("Failed:", result.get("message", "no message in response"))
Ricevi il webhook di stato (Flask)
from flask import Flask, request

app = Flask(__name__)

@app.post("/wbiztool-webhook")
def wbiztool_webhook():
    # WbizTool posts form fields, not JSON.
    msg_id = request.form["msg_id"]
    status = request.form["status"]  # SENT, FAILED, CANCELLED or EXPIRED
    print(msg_id, status)
    return "", 200

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 stesso con files= in requests.

  • Messaggi personali dai tuoi dati

    Costruisci msg dai tuoi dati – un nome, un numero d'ordine, una scadenza. La formattazione di WhatsApp come *grassetto* e _corsivo_ funziona, fino a 3.000 caratteri.

  • Stato via webhook o su richiesta

    Un webhook riceve una POST con il msg_id e SENT, FAILED, CANCELLED o EXPIRED. Oppure chiama Stato del messaggio: un messaggio fallito arriva con il suo errore, come Phone number invalid.

  • 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. strftime("%d/%m/%Y") e strftime("%H:%M") li costruiscono per te.

  • 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 leggi response.json() e controlla status invece del codice HTTP. Il client ufficiale solleva requests.HTTPError: leggi il motivo con e.response.json()["message"].
  • Il client ufficiale non copre ancora correttamente tutti gli endpoint: i suoi schedule_message e check_credentials() non funzionano con l'API attuale. Chiama /api/v1/schedule_msg/ con requests come mostrato sopra, e /api/v1/me/ allo stesso modo.
  • 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 una libreria Python ufficiale per l'API di WbizTool?
Sì: wbiztool-client su PyPI (pip install wbiztool-client). Usa i suoi send_message e get_message_status. Per pianificare e verificare le credenziali, chiama gli endpoint con requests.
Come invio un PDF o un'immagine da Python?
Usa msg_type 1 con img_url per un'immagine, oppure msg_type 2 con file_url per un file. Per inviare un file dal disco, caricalo come multipart form data in un campo chiamato file e 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