Messaging-API
An mehrere Nummern senden (Send to Multiple Numbers API)
Senden Sie dieselbe WhatsApp-Nachricht in einem Request an mehrere Telefonnummern und Gruppen. Nutzen Sie die API für kleine Rundsendungen wie Newsletter, Angebote und Ankündigungen.
https://wbiztool.com/api/v1/send_msg/multi/Body: JSON oder Formularfelder
Wbiztool erstellt pro Empfänger eine Nachricht und gibt für jede eine msg_id zurück, damit Sie ihren Status einzeln prüfen können.
Kurzes Beispiel#
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!"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/multi/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": ",".join(["9876543210", "9812345670", "Sales Team Mumbai"]),
"msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
for item in result["messages"]:
print(item["contact"], "->", item["msg_id"])
else:
print("Failed:", result.get("message", "no message in response"))// 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/multi/", {
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", "9812345670", "Sales Team Mumbai"].join(","),
msg: "Our Diwali sale starts tomorrow. Get 20% off on all orders!",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
for (const item of result.messages) {
console.log(item.contact, "->", item.msg_id);
}
} else {
console.error("Failed:", result.message ?? "no message in response");
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => implode(',', ['9876543210', '9812345670', 'Sales Team Mumbai']),
'msg' => 'Our Diwali sale starts tomorrow. Get 20% off on all orders!',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/multi/');
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) {
foreach ($result['messages'] as $item) {
echo $item['contact'] . ' -> ' . $item['msg_id'] . PHP_EOL;
}
} else {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}Ersetzen Sie 12345, YOUR_API_KEY und 678 durch Ihre eigenen Werte. Wo Sie diese finden, steht unter Authentifizierung.
Request-Parameter#
Authentifizierung
client_idintegererforderlichIhre API-Client-ID aus Einstellungen → API-Schlüssel.
api_keystringerforderlichIhr API-Schlüssel von derselben Seite.
whatsapp_clientintegererforderlichID der WhatsApp-Nummer, von der gesendet wird, aus den WhatsApp-Einstellungen. Anders als Nachricht senden wählt dieser Endpoint nie automatisch eine Nummer für Sie aus.
Empfänger und Nachricht
phonestringerforderlichTelefonnummern und Gruppennamen in einem kommagetrennten String, zum Beispiel
9876543210,9812345670,Sales Team Mumbai. Senden Sie kein JSON-Array. Siehe Wie Empfänger gelesen werden.country_codestringoptionalInternationale Vorwahl ohne
+, zum Beispiel91. Sie wird vor jede Telefonnummer gesetzt, sofern die Nummer nicht bereits damit beginnt. Senden Sie sie in JSON als String ("91"), nicht als Zahl. Senden Sie eine Zahl, wird jede Telefonnummer der Liste als Gruppenname behandelt (is_group: true), und diese Nachrichten schlagen fehl.msg_typeintegeroptional0Text (Standard),1Bild,2Datei oder Dokument.msgstringErforderlich, wenn msg_type 0 istNachrichtentext. Bei Bildern und Dateien ist es die Bildunterschrift, die leer sein darf. WhatsApp-Formatierung funktioniert:
*bold*,_italic_,~strikethrough~.messagewird als Alias akzeptiert.
Bilder und Dateien
img_urlstringErforderlich, wenn msg_type 1 istÖffentliche
http- oderhttps-URL des Bildes.file_urlstringErforderlich, wenn msg_type 2 istÖffentliche
http- oderhttps-URL, von der die Datei direkt heruntergeladen werden kann.file_namestringoptionalDateiname, den die Empfänger sehen, zum Beispiel
price-list.pdf. Er wird in Kleinbuchstaben gesendet, Zeichen wie& : ? * $ ;werden durch_ersetzt, und er wird auf 150 Zeichen gekürzt. Wenn Sie den Parameter weglassen, wird der Name aus der URL übernommen.
Zustelloptionen
webhookstringoptionalURL, die für jede Nachricht einen
POSTerhält, wenn sie gesendet wird oder fehlschlägt. Der Payload ist derselbe wie bei Nachricht senden.
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."
}'Wie Empfänger gelesen werden#
Wbiztool teilt phone an den Kommas auf, entfernt Leerzeichen um jeden Eintrag und entscheidet dann, was jeder Eintrag ist:
- Nur Ziffern (ein führendes
+oder führende Nullen sind erlaubt): wird als Telefonnummer behandelt.country_codewird vorangestellt, sofern die Nummer nicht bereits damit beginnt; danach muss die Nummer 6 bis 15 Ziffern lang sein. - Alles andere: wird als Name einer WhatsApp-Gruppe behandelt, die genauso gesucht wird wie bei An Gruppe senden.
- Eine Gruppe, deren Name nur aus Ziffern besteht (zum Beispiel
2024), wird als Telefonnummer behandelt, und Gruppennamen mit Kommas können über diesen Endpoint nicht gesendet werden. Verwenden Sie dafür An Gruppe senden.
Außerdem wichtig:
- Nummern, die nach dem Hinzufügen der Ländervorwahl zu kurz oder zu lang sind, werden stillschweigend übersprungen. Sie erscheinen nicht in der Antwort und erhalten keine
msg_id. - Duplikate werden nicht entfernt. Eine doppelt aufgeführte Nummer erhält zwei Nachrichten.
- Wenn eine lokale Nummer zufällig mit denselben Ziffern wie
country_codebeginnt (zum Beispiel9123456780mitcountry_code91), wird die Vorwahl nicht hinzugefügt. Senden Sie solche Nummern mit bereits enthaltener Ländervorwahl (919123456780). - Bild- und Datei-URLs werden beim Aufruf der API nicht geprüft. Sie werden erst beim Senden jeder Nachricht heruntergeladen, daher führt ein defekter Link später zum Fehlschlagen der Nachrichten und nicht des Requests. Es gelten dieselben Regeln beim Senden wie bei Nachricht senden: Bilder über 16 MB und Videos über 64 MB schlagen fehl, WAV- und OGG-Audio wird nicht unterstützt, und an Dateien (
msg_type2) ohne unterstützte Endung wird.pdfangehängt. Siehe Bilder und Dateien senden.
Credits#
Der gesamte Stapel wird mit Ihren verbleibenden Credits abgeglichen, bevor etwas erstellt wird. Jeder nicht leere Eintrag in phone zählt, auch Einträge, die später übersprungen werden. Ist die Anzahl höher als Ihre verbleibenden Credits, werden keine Nachrichten erstellt und Sie erhalten:
{
"message": "Not enough credits: 120 messages requested, 85 credits remaining",
"status": 0
}
Nachrichten, die in der Warteschlange stehen, aber noch nicht gesendet wurden, werden ebenfalls von Ihren verbleibenden Credits abgezogen. Teilen Sie große Listen auf kleinere Requests auf oder laden Sie Ihren Plan auf. Für große Kampagnen laden Sie stattdessen eine Tabelle auf der Seite Kampagnen hoch.
Antwort#
Ein erfolgreicher Request gibt HTTP 200 zurück:
{
"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
}
| Feld | Typ | Beschreibung |
|---|---|---|
status | integer | 1, wenn mindestens eine Nachricht in die Warteschlange gestellt wurde, sonst 0. |
message | string | Successfully created N messages bei Erfolg, andernfalls der Fehler. |
msg_ids | array of integers | IDs der Nachrichten in der Warteschlange, in der Reihenfolge von phone. Nur bei Erfolg vorhanden. |
messages | array | Ein Objekt pro Nachricht in der Warteschlange. Nur bei Erfolg vorhanden. |
messages[].msg_id | integer | ID der Nachricht. |
messages[].contact | string | Die Telefonnummer mit angewendeter Ländervorwahl oder der Gruppenname. |
messages[].is_group | boolean | true, wenn der Eintrag als Gruppenname behandelt wurde. |
Vergleichen Sie messages mit der gesendeten Liste, um übersprungene Nummern zu finden, und prüfen Sie, dass is_group bei jedem Eintrag, den Sie als Telefonnummer gemeint haben, false ist.
Fehler#
Die meisten Fehler geben HTTP 200 mit status gleich 0 zurück. Prüfen Sie daher immer status im Body. Mit Ausnahme der Fehler mit HTTP 400 und 403 werden Antworten (auch erfolgreiche) als JSON mit Content-Type: text/html gesendet. Parsen Sie den Body daher selbst, statt sich auf die automatische JSON-Erkennung zu verlassen (zum Beispiel in No-Code-Tools):
{ "message": "Invalid whatsapp client", "status": 0 }
| Meldung | Lösung |
|---|---|
Auth Error | Senden Sie client_id und api_key. |
Invalid Client Id | Senden Sie client_id als Zahl. Wird mit HTTP 403 zurückgegeben. |
Auth Error: invalid api key | Prüfen Sie, ob der Schlüssel existiert, nicht gelöscht wurde und zu dieser client_id gehört. Wird mit HTTP 400 zurückgegeben. |
Msg cant be null | Textnachrichten (msg_type 0) benötigen msg. |
Image Url Can't be null | Senden Sie für msg_type 1 eine img_url. |
File Url Can't be null | Senden Sie für msg_type 2 eine file_url. |
Not enough credits: … messages requested, … credits remaining | Senden Sie an weniger Empfänger oder fügen Sie Credits hinzu. Siehe Credits. |
Invalid whatsapp client | Diese whatsapp_client-ID gehört nicht zu Ihrem Arbeitsbereich. |
No valid contacts found | Jeder Eintrag in phone war leer oder wurde übersprungen. Prüfen Sie, ob die Nummern mit Ländervorwahl 6 bis 15 Ziffern haben. |
Demo Account can not access apis | Verwenden Sie ein reguläres Konto. |
Invalid JSON format: … | Der JSON-Body ist ungültig, oder Sie haben Formularfelder ohne client_id gesendet. |
Tipps#
- Senden Sie
phoneals String: Verbinden Sie Ihre Liste mit Kommas. Ein JSON-Array liefert{}zurück. - Verwenden Sie
send_bulk_messagesdes Python-Clients vorerst nicht: Die Methode sendet die Liste alsphones, was dieser Endpoint ignoriert. Rufen Sie den Endpoint direkt auf, wie in den Beispielen oben. - Jede Nachricht verfolgen: Speichern Sie jede
msg_idausmessagesoder übergeben Sie einenwebhook, um benachrichtigt zu werden, sobald jede Nachricht gesendet wird oder fehlschlägt. - Halten Sie Ihre Nummer verbunden: Jede Nachricht wird von Ihrer WhatsApp-Nummer gesendet, daher muss sie in den WhatsApp-Einstellungen verbunden bleiben, bis der gesamte Stapel versendet ist.
- Unterschiedlicher Text pro Person: Dieser Endpoint sendet allen dieselbe
msg. Rufen Sie Nachricht senden einmal pro Empfänger auf, um jede Nachricht zu personalisieren.
