Erinnerungs-API
Erinnerung erstellen (API)
Erstellen Sie eine wiederkehrende WhatsApp-Nachricht, die automatisch nach einem Zeitplan gesendet wird. Nutzen Sie die API für Zahlungserinnerungen, wöchentliche Rückfragen, tägliche Nachfassaktionen und andere sich wiederholende Nachrichten.
https://wbiztool.com/api/v1/reminder/create/Body: JSON oder Formularfelder
Sie beschreiben den Zeitplan mit einem Cron-Ausdruck und einer Zeitzone. Jedes Mal, wenn der Zeitplan zutrifft, stellt Wbiztool eine Nachricht an die Telefonnummer oder Gruppe in die Warteschlange, genau wie eine mit Nachricht senden gesendete Nachricht. Hier erstellte Erinnerungen erscheinen auch auf der Seite Erinnerungen in Ihrem Dashboard, wo Sie sie pausieren oder bearbeiten können.
Kurzes Beispiel#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Monthly rent reminder",
"phone": "919876543210",
"message": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"cron_expression": "0 10 1 * *",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
try:
result = response.json() # read the body even when the HTTP code is 400
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] == 1:
print("Reminder created with reminder_id", result["reminder_id"])
else:
print("Failed:", result["message"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Monthly rent reminder",
phone: "919876543210",
message: "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
cron_expression: "0 10 1 * *",
timezone: "Asia/Kolkata",
}),
});
// Read the body even when the HTTP code is 400. A non-JSON reply means the api_key wasn't found.
const text = await response.text();
let result;
try {
result = JSON.parse(text);
} catch {
throw new Error(`HTTP ${response.status}: not JSON. Check that your api_key exists.`);
}
if (result.status === 1) {
console.log("Reminder created with reminder_id", result.reminder_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Monthly rent reminder',
'phone' => '919876543210',
'message' => 'Hi Aman, a reminder that your rent is due on {current_date_formatted}.',
'cron_expression' => '0 10 1 * *',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
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);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($result === null) {
echo "HTTP $httpCode: not JSON. Check that your api_key exists.";
} elseif ($result['status'] === 1) {
echo 'Reminder created with reminder_id ' . $result['reminder_id'];
} else {
echo 'Failed: ' . $result['message'];
}Diese Erinnerung wird am 1. jedes Monats um 10:00 Uhr indischer Zeit gesendet. Ersetzen Sie 12345, YOUR_API_KEY und 678 durch Ihre eigenen Werte. Wo Sie diese finden, steht unter Authentifizierung.
Request-Parameter#
Senden Sie die Parameter als JSON-Body oder als Formularfelder. Senden Sie in JSON jeden Textwert (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) als String.
Authentifizierung
client_idintegererforderlichIhre API-Client-ID aus Einstellungen → API-Schlüssel.
api_keystringerforderlichIhr API-Schlüssel von derselben Seite.
Absender
whatsapp_clientintegeroptionalID der WhatsApp-Nummer, von der gesendet wird, aus den WhatsApp-Einstellungen. Wenn Sie den Parameter weglassen oder die ID nicht zu Ihrem Arbeitsbereich gehört, wird jede Erinnerung von der ersten Nummer gesendet, die zum Ausführungszeitpunkt in Ihrem Arbeitsbereich verbunden ist.
Erinnerung
reminder_namestringerforderlichEin Name für die Erinnerung, der auf der Seite Erinnerungen angezeigt wird und in der Nachricht als
{reminder_name}verfügbar ist.phonestringerforderlichDie WhatsApp-Nummer des Empfängers mit Ländervorwahl, zum Beispiel
919876543210. Es gibt keinen separaten Parametercountry_code. Leerzeichen,+,-,.und Klammern werden entfernt, ebenso eine führende0(in einem JSON-Body bis zu zwei führende Nullen). Ein Wert, der nicht nur aus Ziffern besteht, wird als Name einer WhatsApp-Gruppe behandelt.messagestringerforderlichDer Nachrichtentext. Er kann Vorlagenvariablen enthalten, die bei jeder Ausführung der Erinnerung ausgefüllt werden. WhatsApp-Formatierung funktioniert:
*bold*,_italic_,~strikethrough~.cron_expressionstringerforderlichWann gesendet wird, als Cron-Ausdruck mit fünf Feldern wie
0 9 * * 1-5. Siehe Cron-Ausdrücke.timezonestringoptionalDie Zeitzone, in der der Cron-Ausdruck ausgeführt wird, als IANA-Zeitzonenname wie
Asia/Kolkata,America/New_YorkoderEurope/London. Lassen Sie den Parameter weg, umUTCzu verwenden. Ein leerer String liefertInvalid timezone. Die vollständige Liste finden Sie in der Zeitzonen-Referenz.
Bilder und Dateien
msg_typeintegeroptional0Text (Standard),1Bild oder2Datei, jeweils mitmessageals Bildunterschrift. Jeder andere Wert wird als0behandelt.img_urlstringErforderlich, wenn msg_type 1 oder 2 istÖffentliche
http- oderhttps-URL des Bildes bzw. beimsg_type2 der Datei, bis zu 1.000 Zeichen. Die Datei wird bei jeder Ausführung der Erinnerung heruntergeladen, halten Sie den Link also funktionsfähig. Dateien können Sie mit der Media-Upload-API hosten.file_namestringErforderlich, wenn msg_type 2 istBei
msg_type2 der Dateiname mit Endung, bis zu 100 Zeichen, zum Beispielinvoice.pdf. Bei anderen Nachrichtentypen wird er ignoriert.
Cron-Ausdrücke#
Ein Cron-Ausdruck besteht aus fünf durch Leerzeichen getrennten Werten. Die Erinnerung wird ausgeführt, wenn die aktuelle Zeit in timezone allen fünf Werten entspricht:
┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-7, where 0 and 7 are Sunday)
│ │ │ │ │
0 9 * * 1-5
| Symbol | Bedeutung | Beispiel |
|---|---|---|
* | Jeder Wert | * im Stundenfeld bedeutet jede Stunde. |
, | Eine Liste von Werten | 9,18 im Stundenfeld bedeutet 9:00 und 18:00 Uhr. |
- | Ein Bereich | 1-5 im Wochentagsfeld bedeutet Montag bis Freitag. |
/ | Eine Schrittweite | */6 im Stundenfeld bedeutet alle 6 Stunden. |
Häufige Beispiele#
| Ausdruck | Wird ausgeführt |
|---|---|
0 9 * * * | Jeden Tag um 9:00 Uhr |
0 9 * * 1-5 | Montag bis Freitag um 9:00 Uhr |
0 9 * * 1 | Jeden Montag um 9:00 Uhr |
30 18 * * 0 | Jeden Sonntag um 18:30 Uhr |
0 9,18 * * * | Jeden Tag um 9:00 und 18:00 Uhr |
0 */6 * * * | Alle 6 Stunden, jeweils zur vollen Stunde |
*/30 9-17 * * 1-5 | Alle 30 Minuten von 9:00 bis 17:30 Uhr, Montag bis Freitag |
0 9 1 * * | Am 1. jedes Monats um 9:00 Uhr |
0 10 15 * * | Am 15. jedes Monats um 10:00 Uhr |
0 8 1 1 * | Jedes Jahr am 1. Januar um 8:00 Uhr |
Die Uhrzeiten gelten in der timezone der Erinnerung. Verwenden Sie nur fünf Felder: Fügen Sie kein Sekundenfeld und keine Kurzformen wie @daily hinzu.
Vorlagenvariablen#
Diese Platzhalter in message werden bei jeder Ausführung der Erinnerung ersetzt. Datum und Uhrzeit gelten in der timezone der Erinnerung.
| Variable | Ersetzt durch | Beispiel |
|---|---|---|
{current_date} | Datum | 2026-10-01 |
{current_date_formatted} | Datum in Worten, Tag mit führender Null | October 01, 2026 |
{current_time} | Uhrzeit im 24-Stunden-Format | 09:00:00 |
{current_time_12h} | Uhrzeit im 12-Stunden-Format | 09:00 AM |
{current_datetime} | Datum und Uhrzeit | 2026-10-01 09:00:00 |
{timezone} | Der Wert von timezone | Asia/Kolkata |
{timezone_short} | Zeitzonenabkürzung | IST |
{reminder_name} | Der Wert von reminder_name | Monthly rent reminder |
{to_number} | Der gespeicherte Wert von phone | 919876543210 |
{client_name} | Name des Inhabers des Arbeitsbereichs | |
{organisation_name} | Name Ihres Arbeitsbereichs |
Erinnerung mit Bild#
curl -X POST https://wbiztool.com/api/v1/reminder/create/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week'\''s timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/create/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"reminder_name": "Weekly class timetable",
"phone": "919876543210",
"msg_type": 1,
"img_url": "https://example.com/timetable.png",
"message": "Here is this week's timetable.",
"cron_expression": "0 8 * * 1",
"timezone": "Asia/Kolkata",
},
timeout=60,
)
print(response.status_code, response.text)// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/reminder/create/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
reminder_name: "Weekly class timetable",
phone: "919876543210",
msg_type: 1,
img_url: "https://example.com/timetable.png",
message: "Here is this week's timetable.",
cron_expression: "0 8 * * 1",
timezone: "Asia/Kolkata",
}),
});
console.log(response.status, await response.text());<?php
$ch = curl_init('https://wbiztool.com/api/v1/reminder/create/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'reminder_name' => 'Weekly class timetable',
'phone' => '919876543210',
'msg_type' => 1,
'img_url' => 'https://example.com/timetable.png',
'message' => "Here is this week's timetable.",
'cron_expression' => '0 8 * * 1',
'timezone' => 'Asia/Kolkata',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Das PHP-Beispiel sendet Formularfelder statt JSON. Beides funktioniert.
Antwort#
Ein erfolgreicher Request gibt HTTP 200 zurück:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| Feld | Typ | Beschreibung |
|---|---|---|
status | integer | 1, wenn die Erinnerung erstellt wurde, 0, wenn der Request fehlgeschlagen ist. |
message | string | Reminder created successfully, andernfalls der Fehler. |
reminder_id | integer | ID der neuen Erinnerung. Speichern Sie sie, um die Erinnerung später zu stornieren. Nur bei Erfolg vorhanden. |
Neue Erinnerungen sind sofort aktiv.
Fehler#
Fehler geben HTTP 400 mit status gleich 0 zurück, sofern nicht anders angegeben:
{ "status": 0, "message": "Invalid timezone" }
| Meldung | Lösung |
|---|---|
Invalid JSON format: … | Der JSON-Body ist ungültig, oft wegen eines abschließenden Kommas oder eines nicht maskierten Zeilenumbruchs in message. Verwenden Sie \n für neue Zeilen. Diese Meldung erhalten Sie auch bei einem Formular-Request ohne client_id oder bei jedem GET-Request. |
Invalid client id. | Senden Sie client_id als Zahl. |
Reminder name cannot be null | Fügen Sie reminder_name hinzu. |
Phone number cannot be null | Fügen Sie phone hinzu. |
Message template cannot be null | Fügen Sie message hinzu. |
Cron expression cannot be null | Fügen Sie cron_expression hinzu. |
Auth Error - Please send correct API key and Client id | Senden Sie einen nicht leeren api_key. |
Invalid cron expression | Prüfen Sie, ob der Ausdruck fünf gültige Felder hat. Siehe Cron-Ausdrücke. |
Invalid timezone | Verwenden Sie einen IANA-Namen wie Asia/Kolkata, keine Abkürzung wie IST. |
Image URL cannot be null for image messages | Senden Sie für msg_type 1 eine img_url. |
File URL cannot be null for file messages | Senden Sie für msg_type 2 einen file_name. |
Auth Error: invalid api key | Der Schlüssel gehört zu einer anderen client_id. |
Auth Error: please check client id | Der Schlüssel ist mit keinem Arbeitsbereich verknüpft. Erstellen Sie einen neuen Schlüssel in dem Arbeitsbereich, den Sie verwenden möchten. |
Demo Account cannot access APIs | Verwenden Sie ein reguläres Konto. |
Not enough credits | Ihr Plan hat keine Nachrichten mehr übrig. |
Upgrade your plan to use reminders feature | Ihr Plan enthält keine Erinnerungen. Führen Sie ein Upgrade Ihres Plans durch. |
WhatsApp Logged Out. Please Reconnect!! | Die Nummer whatsapp_client ist getrennt. Verbinden Sie sie in den WhatsApp-Einstellungen erneut. |
Invalid WhatsApp client id | Senden Sie whatsapp_client als Zahl. |
Error creating reminder: … (HTTP 500) | Die Erinnerung konnte nicht gespeichert werden. Prüfen Sie die gesendeten Werte, zum Beispiel ob img_url höchstens 1.000 und file_name höchstens 100 Zeichen lang ist. |
Wie Erinnerungen ausgeführt werden#
- Der Zeitplan wird in der
timezoneder Erinnerung geprüft, und die Nachricht wird in die Warteschlange gestellt, wenn die aktuelle Zeit dem Cron-Ausdruck entspricht. - Jede Ausführung erzeugt eine normale Nachricht, die von Ihrer WhatsApp-Nummer gesendet wird. Die Nummer muss also verbunden bleiben.
- Eine Ausführung wird übersprungen, wenn Ihr Arbeitsbereich keine Credits mehr hat oder wenn kein
whatsapp_clientfestgelegt wurde und in diesem Moment keine Nummer in Ihrem Arbeitsbereich verbunden ist. - Ist
whatsapp_clientfestgelegt, wird jede Ausführung auf dieser Nummer in die Warteschlange gestellt, auch wenn sie inzwischen getrennt wurde, und wartet dort. Es gibt keinen Wechsel auf eine andere Nummer. - Erinnerungen werden in regelmäßigen Abständen geprüft, nicht sekundengenau, und die Nachricht wartet dann wie jede andere in der Sendewarteschlange. Verlassen Sie sich nicht auf ein exaktes Timing. Läuft eine Prüfung verspätet, wird die Ausführung noch bis zu 10 Minuten zu spät gesendet (bei der ersten Ausführung einer Erinnerung bis zu 1 Minute zu spät); danach wird sie übersprungen. Dieselbe Ausführung wird nie doppelt gesendet.
Tipps#
- Auflisten und aufräumen: Rufen Sie Ihre Erinnerungen und deren IDs mit Erinnerungen auflisten ab und stoppen Sie eine mit Erinnerung stornieren.
- Pausieren und Bearbeiten ist über die API nicht möglich. Verwenden Sie die Seite Erinnerungen in Ihrem Dashboard.
- Viele Erinnerungen auf einmal: Auf der Seite Erinnerungen können Sie Erinnerungen auch aus einer CSV-Datei importieren.
- Zeilenumbrüche in JSON: Schreiben Sie sie in
messageals\n. Ein echter Zeilenumbruch macht das JSON ungültig.
