Vai al contenuto
Wbiztool

API di messaggistica

API Invia a più numeri

Invia lo stesso messaggio WhatsApp a più numeri di telefono e gruppi in un'unica richiesta. Usala per piccoli invii broadcast come newsletter, offerte e annunci.

POSThttps://wbiztool.com/api/v1/send_msg/multi/

Corpo: JSON o campi di un modulo

Wbiztool crea un messaggio per ogni destinatario e restituisce un msg_id per ciascuno, così puoi verificarne lo stato singolarmente.

Esempio rapido#

curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -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,9812345670,Sales Team Mumbai",
    "msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
  }'

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.

Destinatari e messaggio

phonestringobbligatorio

Numeri di telefono e nomi di gruppi in un'unica stringa separata da virgole, ad esempio 9876543210,9812345670,Sales Team Mumbai. Non inviare un array JSON. Vedi Come vengono letti i destinatari.

country_codestringfacoltativo

Prefisso internazionale senza +, ad esempio 91. Viene aggiunto davanti a ogni numero di telefono, a meno che il numero non inizi già con esso. In JSON, invialo come stringa ("91"), non come numero. Se lo invii come numero, ogni numero di telefono dell'elenco viene trattato come nome di gruppo (is_group: true) e quei messaggi non riescono.

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 vedono i destinatari, ad esempio price-list.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 per ogni messaggio quando viene inviato o non riesce. Il payload è lo stesso di Invia messaggio.

Immagine da un URLcURL
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 1,
    "country_code": "91",
    "phone": "9876543210,9812345670",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts tomorrow."
  }'

Come vengono letti i destinatari#

Wbiztool divide phone in corrispondenza delle virgole, rimuove gli spazi attorno a ogni elemento e poi decide che cos'è ciascun elemento:

  • Solo cifre (un + iniziale o degli zeri iniziali vanno bene): viene trattato come numero di telefono. country_code viene aggiunto a meno che il numero non inizi già con esso; poi il numero deve avere da 6 a 15 cifre.
  • Qualsiasi altra cosa: viene trattata come nome di un gruppo WhatsApp, trovato nello stesso modo di Invia a un gruppo.
  • Un gruppo il cui nome è composto solo da cifre (ad esempio 2024) viene trattato come numero di telefono, e i nomi di gruppo che contengono virgole non possono essere inviati da questo endpoint. Per questi usa Invia a un gruppo.

Altre cose da sapere:

  • I numeri troppo corti o troppo lunghi dopo l'aggiunta del prefisso internazionale vengono saltati senza avviso. Non compaiono nella risposta e non ricevono un msg_id.
  • I duplicati non vengono rimossi. Un numero presente due volte riceve due messaggi.
  • Se un numero locale inizia per caso con le stesse cifre di country_code (ad esempio 9123456780 con country_code 91), il prefisso non viene aggiunto. Invia questi numeri con il prefisso internazionale già incluso (919123456780).
  • Gli URL di immagini e file non vengono controllati quando chiami l'API. Vengono scaricati al momento dell'invio di ogni messaggio, quindi un link non funzionante fa fallire i messaggi in un secondo momento anziché la richiesta. Valgono le stesse regole di Invia messaggio al momento dell'invio: le immagini oltre 16 MB e i video oltre 64 MB non riescono, l'audio WAV e OGG non è supportato, e ai file (msg_type 2) senza un'estensione supportata viene aggiunto .pdf. Vedi Invio di immagini e file.

Crediti#

L'intero lotto viene confrontato con i tuoi crediti rimanenti prima che venga creato qualsiasi messaggio. Ogni elemento non vuoto di phone conta, compresi quelli che vengono poi saltati. Se il totale supera i tuoi crediti rimanenti, non viene creato alcun messaggio e ricevi:

{
  "message": "Not enough credits: 120 messages requested, 85 credits remaining",
  "status": 0
}

Anche i messaggi in coda ma non ancora inviati vengono conteggiati sui crediti rimanenti. Dividi gli elenchi grandi in richieste più piccole o ricarica il tuo piano. Per campagne di grandi dimensioni, carica invece un foglio di calcolo dalla pagina Campagne.

Risposta#

Una richiesta riuscita restituisce HTTP 200:

{
  "msg_ids": [9817263, 9817264, 9817265],
  "messages": [
    { "msg_id": 9817263, "contact": "919876543210", "is_group": false },
    { "msg_id": 9817264, "contact": "919812345670", "is_group": false },
    { "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
  ],
  "message": "Successfully created 3 messages",
  "status": 1
}
CampoTipoDescrizione
statusinteger1 se almeno un messaggio è stato messo in coda, altrimenti 0.
messagestringSuccessfully created N messages in caso di successo, altrimenti l'errore.
msg_idsarray of integersID dei messaggi in coda, nell'ordine di phone. Presente solo in caso di successo.
messagesarrayUn oggetto per ogni messaggio in coda. Presente solo in caso di successo.
messages[].msg_idintegerID del messaggio.
messages[].contactstringIl numero di telefono con il prefisso internazionale applicato, oppure il nome del gruppo.
messages[].is_groupbooleantrue se l'elemento è stato trattato come nome di gruppo.

Confronta messages con l'elenco che hai inviato per individuare i numeri saltati e verifica che is_group sia false per ogni elemento che intendevi come numero di telefono.

Errori#

La maggior parte degli errori restituisce HTTP 200 con status impostato su 0, quindi controlla sempre status nel corpo. Tranne che per gli errori HTTP 400 e 403, le risposte (comprese quelle riuscite) sono JSON inviati con Content-Type: text/html, quindi analizza tu stesso il corpo invece di affidarti al rilevamento automatico del JSON (ad esempio negli strumenti no-code):

{ "message": "Invalid whatsapp client", "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.
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.
Not enough credits: … messages requested, … credits remainingInvia a meno destinatari o aggiungi crediti. Vedi Crediti.
Invalid whatsapp clientQuell'ID whatsapp_client non è nel tuo spazio di lavoro.
No valid contacts foundOgni elemento di phone era vuoto o è stato saltato. Verifica che i numeri abbiano da 6 a 15 cifre con il prefisso internazionale.
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#

  • Invia phone come stringa: unisci il tuo elenco con le virgole. Un array JSON restituisce {}.
  • Per ora non usare send_bulk_messages del client Python: invia l'elenco come phones, che questo endpoint ignora. Chiama l'endpoint direttamente come negli esempi sopra.
  • Traccia ogni messaggio: salva ogni msg_id da messages, oppure passa un webhook per ricevere una notifica quando ciascun messaggio viene inviato o non riesce.
  • Mantieni il numero collegato: ogni messaggio viene inviato dal tuo numero WhatsApp, quindi deve restare collegato nelle Impostazioni WhatsApp finché non è partito l'intero lotto.
  • Testo diverso per ogni persona: questo endpoint invia lo stesso msg a tutti. Chiama Invia messaggio una volta per destinatario per personalizzare ogni messaggio.