Vai al contenuto
Wbiztool

API di messaggistica

API Pianifica messaggi WhatsApp

Pianifica l'invio di un testo, un'immagine o un documento WhatsApp a un numero di telefono o a un gruppo, alla data e all'ora che scegli. Usala per promemoria di appuntamenti, auguri di compleanno, follow-up e offerte a tempo.

POSThttps://wbiztool.com/api/v1/schedule_msg/

Corpo: JSON o campi di un modulo

Il messaggio attende nella tua coda fino all'orario pianificato e viene poi inviato dal tuo numero WhatsApp. La risposta ti restituisce un msg_id che puoi usare per verificarne lo stato o annullarlo.

Esempio rapido#

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -H "Content-Type: application/json" \
  -d '{
    "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"
  }'

Sostituisci 12345, YOUR_API_KEY e 678 con i tuoi valori. Consulta Autenticazione per sapere dove trovarli.

Parametri della richiesta#

Autenticazione

client_idintegerobbligatorio

Il tuo ID Client API, da Impostazioni → Chiavi API.

api_keystringobbligatorio

La tua chiave API, dalla stessa pagina.

whatsapp_clientintegerobbligatorio

ID del numero WhatsApp da cui inviare, dalle Impostazioni WhatsApp. A differenza di Invia messaggio, questo endpoint non sceglie mai un numero al posto tuo.

Pianificazione

datestringobbligatorio

Giorno di invio del messaggio, nel formato dd/mm/yyyy, ad esempio 24/12/2026.

timestringobbligatorio

Ora di invio del messaggio, nel formato 24 ore HH:MM, ad esempio 09:00 o 18:45. Non includere i secondi.

timezonestringfacoltativo

Fuso orario in cui sono espressi date e time. Se lo ometti, il valore predefinito è IST (India). Vedi Fusi orari.

Destinatario e messaggio

phonestringObbligatorio se non invii group_name

Il numero WhatsApp del destinatario, solo cifre. Spazi, +, -, . e parentesi vengono rimossi automaticamente. Invia il numero con il prefisso internazionale (919876543210) oppure senza (9876543210) insieme a country_code.

group_namestringObbligatorio se non invii phone

Nome di un gruppo WhatsApp di cui fa parte il tuo numero. Viene trovato nello stesso modo di Invia a un gruppo. Invia phone o group_name, mai entrambi.

country_codestringfacoltativo

Prefisso internazionale senza +, ad esempio 91 per l'India o 1 per gli USA. Viene aggiunto davanti a phone, a meno che il numero non inizi già con esso. Eccezione: con 91, a un numero di 10 cifre viene sempre aggiunto il prefisso. Con altri prefissi, invia i numeri locali che iniziano con le stesse cifre già comprensivi del prefisso internazionale. Ignorato per i gruppi.

msg_typeintegerfacoltativo

0 testo (predefinito), 1 immagine, 2 file o documento.

msgstringObbligatorio quando msg_type è 0

Testo del messaggio. Per immagini e file è la didascalia e può essere vuoto. La formattazione di WhatsApp funziona: *bold*, _italic_, ~strikethrough~. message è accettato come alias.

Immagini e file

img_urlstringObbligatorio quando msg_type è 1

URL pubblico http o https dell'immagine.

file_urlstringObbligatorio quando msg_type è 2

URL pubblico http o https da cui il file può essere scaricato direttamente.

file_namestringfacoltativo

Nome del file che vede il destinatario, ad esempio invoice-4821.pdf. Viene inviato in minuscolo, caratteri come & : ? * $ ; vengono sostituiti con _ e viene troncato a 150 caratteri. Se lo ometti, il nome viene preso dall'URL.

Opzioni di consegna

webhookstringfacoltativo

URL che riceve una POST quando il messaggio viene inviato o non riesce. Il payload è lo stesso di Invia messaggio.

Quando viene inviato il messaggio#

  • Wbiztool converte date, time e timezone in un unico istante e invia il messaggio una volta superato quell'istante, purché il tuo numero WhatsApp sia collegato.
  • È accettato anche un orario nel passato. Il messaggio viene inviato subito, come un invio normale. Ricontrolla il formato della data (dd/mm/yyyy, prima il giorno) per non inviare un messaggio con mesi di anticipo.
  • Se il tuo numero è scollegato all'orario pianificato, il messaggio attende e parte non appena il numero si ricollega, anche se ciò avviene molto più tardi del previsto. Questo endpoint non prevede una scadenza, quindi annulla il messaggio se non è più rilevante. Un messaggio ancora in attesa su un numero disconnesso o eliminato 90 giorni dopo l'orario pianificato viene eliminato.
  • Finché non viene inviato, il messaggio ha stato 0 (Created) e può essere annullato. Mentre attende, viene anche conteggiato sui tuoi crediti rimanenti.

Fusi orari#

timezone accetta un nome di fuso orario oppure una delle abbreviazioni riportate sotto.

Nomi di fuso orario come Asia/Kolkata, America/New_York, Europe/London o Australia/Sydney. Funziona qualsiasi nome del database dei fusi orari IANA. È l'opzione più affidabile. Consulta il Riferimento fusi orari per un elenco.

Abbreviazioni: devono essere in lettere maiuscole. Ognuna corrisponde a una regione e l'ora legale di quella regione viene applicata automaticamente:

AbbreviazioneInterpretata come
ISTAsia/Kolkata
UTCUTC
GMTGMT
ESTUS/Eastern
CSTUS/Central
MSTUS/Mountain
PSTUS/Pacific
CET, CESTEurope/Paris
EET, EESTEurope/Athens
JSTAsia/Tokyo
AEST, AEDTAustralia/Sydney

Ad esempio, EST a luglio indica l'ora legale di New York (UTC−4), non un UTC−5 fisso.

Pianificare per un gruppo#

curl -X POST https://wbiztool.com/api/v1/schedule_msg/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "group_name": "Sales Team Mumbai",
    "msg": "Team meeting starts in 15 minutes.",
    "date": "24/12/2026",
    "time": "14:45",
    "timezone": "Asia/Kolkata"
  }'

Risposta#

Una richiesta riuscita restituisce HTTP 200:

{
  "msg_id": 9817263,
  "message": "Created",
  "status": 1
}
CampoTipoDescrizione
statusinteger1 se il messaggio è stato pianificato, 0 se la richiesta non è riuscita.
messagestringCreated in caso di successo, altrimenti l'errore.
msg_idintegerID del messaggio pianificato. Salvalo per verificarne lo stato o annullarlo in seguito. Presente solo in caso di successo.

La risposta non riporta l'orario né il fuso orario pianificati, quindi registra tu ciò che hai inviato.

Errori#

La maggior parte degli errori restituisce HTTP 200 con status impostato su 0, quindi controlla sempre status nel corpo:

{ "message": "Scheduled date & time is not in valid format", "status": 0 }
MessaggioCome risolvere
Auth ErrorInvia sia client_id sia api_key.
Invalid Client IdInvia client_id come numero. Restituito con HTTP 403.
Auth Error: invalid api keyVerifica che la chiave esista, non sia stata eliminata e appartenga a questo client_id. Restituito con HTTP 400.
Either phone or group_name parameter is requiredAggiungi phone o group_name.
Please provide either phone OR group_name, not bothRimuovi uno dei due.
Invalid phone numberphone deve contenere solo cifre (da 6 a 17), eventualmente precedute da +.
Invalid Contact Number "…"Con il prefisso internazionale aggiunto, il numero deve avere da 6 a 15 cifre.
Msg cant be nullI messaggi di testo (msg_type 0) richiedono msg.
Image Url Can't be nullPer msg_type 1, invia img_url.
File Url Can't be nullPer msg_type 2, invia file_url.
Scheduled date & time is not in valid formatdate o time mancano, oppure timezone è una stringa vuota.
Not enough creditsIl tuo piano non ha più messaggi disponibili.
Demo Account can not access apisUsa un account normale.
Invalid JSON format: …Il corpo JSON non è valido, oppure hai inviato campi di un modulo senza client_id.

Suggerimenti#

  • Costruisci la data con attenzione: in Python usa strftime("%d/%m/%Y") e strftime("%H:%M"). In JavaScript, formatta data e ora nello stesso fuso orario che invii in timezone, non nell'ora locale del tuo server:

    const tz = "Asia/Kolkata"; // d is the Date to send at
    const date = new Intl.DateTimeFormat("en-GB", { timeZone: tz, day: "2-digit", month: "2-digit", year: "numeric" }).format(d); // "24/12/2026"
    const time = new Intl.DateTimeFormat("en-GB", { timeZone: tz, hour: "2-digit", minute: "2-digit", hourCycle: "h23" }).format(d); // "09:00"
  • Verifica l'orario: pianifica un messaggio di prova cinque minuti più avanti e controlla che arrivi quando te lo aspetti.

  • Cambio di programma: per ripianificare, annulla il messaggio e pianificane uno nuovo.

  • Per ora non usare i client ufficiali per pianificare: schedule_message di Python invia la data come YYYY-MM-DD (la risposta è {}), e scheduleMessage di Node invia schedule_time, che questo endpoint non legge. Chiama direttamente l'endpoint come mostrato sopra.

  • Messaggi ricorrenti: per i messaggi che si ripetono, come i promemoria di pagamento mensili, consulta Crea promemoria.