Messaging-API
WhatsApp-Nachrichten planen (Schedule Message API)
Planen Sie einen WhatsApp-Text, ein Bild oder ein Dokument, das zu einem von Ihnen gewählten Datum und einer Uhrzeit an eine Telefonnummer oder Gruppe gesendet wird. Nutzen Sie die API für Terminerinnerungen, Geburtstagsgrüße, Nachfassaktionen und zeitlich begrenzte Angebote.
https://wbiztool.com/api/v1/schedule_msg/Body: JSON oder Formularfelder
Die Nachricht wartet bis zum geplanten Zeitpunkt in Ihrer Warteschlange und wird dann von Ihrer WhatsApp-Nummer gesendet. Die Antwort enthält eine msg_id, mit der Sie ihren Status prüfen oder sie stornieren können.
Kurzes Beispiel#
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"
}'import requests
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 is today at 11:30 AM.",
"date": "24/12/2026",
"time": "09:00",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Scheduled with msg_id", result["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/schedule_msg/", {
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",
msg: "Hi Aman, a reminder that your appointment is today at 11:30 AM.",
date: "24/12/2026",
time: "09:00",
timezone: "Asia/Kolkata",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Scheduled with msg_id", result.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' => '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');
}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.
Zeitplan
datestringerforderlichTag, an dem die Nachricht gesendet wird, im Format
dd/mm/yyyy, zum Beispiel24/12/2026.timestringerforderlichUhrzeit, zu der die Nachricht gesendet wird, im 24-Stunden-Format
HH:MM, zum Beispiel09:00oder18:45. Geben Sie keine Sekunden an.timezonestringoptionalZeitzone, in der
dateundtimeangegeben sind. Standard istIST(Indien), wenn Sie den Parameter weglassen. Siehe Zeitzonen.
Empfänger und Nachricht
phonestringErforderlich, sofern Sie nicht group_name sendenDie WhatsApp-Nummer des Empfängers, nur Ziffern. Leerzeichen,
+,-,.und Klammern werden automatisch entfernt. Senden Sie die Nummer entweder mit Ländervorwahl (919876543210) oder ohne (9876543210) zusammen mitcountry_code.group_namestringErforderlich, sofern Sie nicht phone sendenName einer WhatsApp-Gruppe, in der Ihre Nummer Mitglied ist. Die Gruppe wird genauso gesucht wie bei An Gruppe senden. Senden Sie
phoneodergroup_name, niemals beide.country_codestringoptionalInternationale Vorwahl ohne
+, zum Beispiel91für Indien oder1für die USA. Sie wird vorphonegesetzt, sofern die Nummer nicht bereits damit beginnt. Ausnahme: Bei91erhält eine 10-stellige Nummer die Vorwahl immer. Bei anderen Vorwahlen senden Sie lokale Nummern, die mit denselben Ziffern beginnen, mit bereits enthaltener Ländervorwahl. Bei Gruppen wird sie ignoriert.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 der Empfänger sieht, zum Beispiel
invoice-4821.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 einen
POSTerhält, wenn die Nachricht gesendet wird oder fehlschlägt. Der Payload ist derselbe wie bei Nachricht senden.
Wann die Nachricht gesendet wird#
- Wbiztool rechnet
date,timeundtimezonein einen einzigen Zeitpunkt um und sendet die Nachricht, sobald dieser Zeitpunkt erreicht ist, sofern Ihre WhatsApp-Nummer verbunden ist. - Ein Zeitpunkt in der Vergangenheit wird akzeptiert. Die Nachricht wird dann sofort gesendet, wie bei einem normalen Versand. Prüfen Sie das Datumsformat (
dd/mm/yyyy, Tag zuerst) genau, damit Sie keine Nachricht Monate zu früh senden. - Ist Ihre Nummer zum geplanten Zeitpunkt getrennt, wartet die Nachricht und wird gesendet, sobald die Nummer wieder verbunden ist, auch wenn das viel später als geplant ist. Dieser Endpoint hat keinen Ablauf. Stornieren Sie die Nachricht daher, wenn sie nicht mehr relevant ist. Eine Nachricht, die 90 Tage nach ihrem geplanten Zeitpunkt noch auf eine getrennte oder gelöschte Nummer wartet, wird gelöscht.
- Bis zum Versand hat die Nachricht den Status
0(Created) und kann storniert werden. Während sie wartet, wird sie außerdem von Ihren verbleibenden Credits abgezogen.
Zeitzonen#
timezone akzeptiert entweder einen Zeitzonennamen oder eine der unten aufgeführten Abkürzungen.
Zeitzonennamen wie Asia/Kolkata, America/New_York, Europe/London oder Australia/Sydney. Jeder Name aus der IANA-Zeitzonendatenbank funktioniert. Das ist die zuverlässigste Option. Eine Liste finden Sie in der Zeitzonen-Referenz.
Abkürzungen müssen in Großbuchstaben geschrieben werden. Jede entspricht einer Region, und die Sommerzeit dieser Region wird automatisch angewendet:
| Abkürzung | Wird behandelt als |
|---|---|
IST | Asia/Kolkata |
UTC | UTC |
GMT | GMT |
EST | US/Eastern |
CST | US/Central |
MST | US/Mountain |
PST | US/Pacific |
CET, CEST | Europe/Paris |
EET, EEST | Europe/Athens |
JST | Asia/Tokyo |
AEST, AEDT | Australia/Sydney |
Zum Beispiel bedeutet EST im Juli die New Yorker Sommerzeit (UTC−4), nicht fest UTC−5.
Für eine Gruppe planen#
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"
}'import requests
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,
"group_name": "Sales Team Mumbai",
"msg": "Team meeting starts in 15 minutes.",
"date": "24/12/2026",
"time": "14:45",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.json())// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/schedule_msg/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
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",
}),
});
console.log(await response.json());<?php
$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([
'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',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Antwort#
Ein erfolgreicher Request gibt HTTP 200 zurück:
{
"msg_id": 9817263,
"message": "Created",
"status": 1
}
| Feld | Typ | Beschreibung |
|---|---|---|
status | integer | 1, wenn die Nachricht geplant wurde, 0, wenn der Request fehlgeschlagen ist. |
message | string | Created bei Erfolg, andernfalls der Fehler. |
msg_id | integer | ID der geplanten Nachricht. Speichern Sie sie, um später den Status zu prüfen oder die Nachricht zu stornieren. Nur bei Erfolg vorhanden. |
Die Antwort wiederholt weder die geplante Uhrzeit noch die Zeitzone. Protokollieren Sie also, was Sie gesendet haben.
Fehler#
Die meisten Fehler geben HTTP 200 mit status gleich 0 zurück. Prüfen Sie daher immer status im Body:
{ "message": "Scheduled date & time is not in valid format", "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. |
Either phone or group_name parameter is required | Fügen Sie phone oder group_name hinzu. |
Please provide either phone OR group_name, not both | Entfernen Sie einen der beiden Parameter. |
Invalid phone number | phone darf nur Ziffern enthalten (6–17), optional mit einem + am Anfang. |
Invalid Contact Number "…" | Einschließlich Ländervorwahl muss die Nummer 6–15 Ziffern lang sein. |
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. |
Scheduled date & time is not in valid format | date oder time fehlt, oder timezone ist ein leerer String. |
Not enough credits | Ihr Plan hat keine Nachrichten mehr übrig. |
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#
-
Datum sorgfältig zusammensetzen: Verwenden Sie in Python
strftime("%d/%m/%Y")undstrftime("%H:%M"). Formatieren Sie in JavaScript Datum und Uhrzeit in derselben Zeitzone, die Sie intimezonesenden, nicht in der lokalen Zeit Ihres Servers: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" -
Uhrzeit überprüfen: Planen Sie eine Testnachricht fünf Minuten im Voraus und prüfen Sie, ob sie zur erwarteten Zeit ankommt.
-
Planänderung: Um eine Nachricht neu zu planen, stornieren Sie sie und planen Sie eine neue.
-
Verwenden Sie zum Planen vorerst nicht die offiziellen Clients:
schedule_messagein Python sendet das Datum alsYYYY-MM-DD(die Antwort ist{}), undscheduleMessagein Node sendetschedule_time, das dieser Endpoint nicht ausliest. Rufen Sie den Endpoint direkt auf, wie oben gezeigt. -
Wiederkehrende Nachrichten: Für Nachrichten, die sich wiederholen, etwa monatliche Zahlungserinnerungen, siehe Erinnerung erstellen.
