Hatırlatıcılar API'si
Hatırlatıcı oluşturma API'si
Bir zamanlamaya göre otomatik olarak gönderilen tekrarlanan bir WhatsApp mesajı oluşturun. Ödeme hatırlatmaları, haftalık kontroller, günlük takip mesajları ve tekrarlanan diğer mesajlar için kullanın.
https://wbiztool.com/api/v1/reminder/create/Gövde: JSON veya form alanları
Zamanlamayı bir cron ifadesi ve bir saat dilimiyle tanımlarsınız. Zamanlama her eşleştiğinde Wbiztool, Mesaj gönderme ile gönderilen bir mesaj gibi telefon numarasına veya gruba bir mesaj kuyruğa alır. Burada oluşturduğunuz hatırlatıcılar, panelinizdeki Hatırlatıcılar sayfasında da görünür; orada onları duraklatabilir veya düzenleyebilirsiniz.
Hızlı örnek#
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'];
}Bu hatırlatıcı her ayın 1'inde Hindistan saatiyle 10:00'da gönderilir. 12345, YOUR_API_KEY ve 678 değerlerini kendi değerlerinizle değiştirin. Bunları nerede bulacağınız için Kimlik doğrulama bölümüne bakın.
İstek parametreleri#
Parametreleri bir JSON gövdesi veya form alanları olarak gönderin. JSON'da her metin değerini (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) string olarak gönderin.
Kimlik doğrulama
client_idintegerzorunluAyarlar → API anahtarları sayfasındaki API Client ID'niz.
api_keystringzorunluAynı sayfadaki API anahtarınız.
Gönderen
whatsapp_clientintegeristeğe bağlıGönderimin yapılacağı WhatsApp numarasının ID'si; WhatsApp ayarları sayfasında bulunur. Bu alanı göndermezseniz veya ID çalışma alanınızda değilse, her hatırlatıcı çalıştığı anda çalışma alanınızdaki ilk bağlı numaradan gönderilir.
Hatırlatıcı
reminder_namestringzorunluHatırlatıcı için bir ad; Hatırlatıcılar sayfasında gösterilir ve mesajda
{reminder_name}olarak kullanılabilir.phonestringzorunluAlıcının ülke koduyla birlikte WhatsApp numarası, örneğin
919876543210. Ayrı bircountry_codeparametresi yoktur. Boşluklar,+,-,.ve parantezler kaldırılır; baştaki bir0da kaldırılır (JSON gövdesinde baştaki en fazla iki sıfır). Tamamı rakamlardan oluşmayan bir değer WhatsApp grup adı olarak değerlendirilir.messagestringzorunluMesaj metni. Hatırlatıcı her çalıştığında doldurulan şablon değişkenleri içerebilir. WhatsApp biçimlendirmesi çalışır:
*bold*,_italic_,~strikethrough~.cron_expressionstringzorunluNe zaman gönderileceği;
0 9 * * 1-5gibi beş alanlı bir cron ifadesi olarak. Bkz. Cron ifadeleri.timezonestringisteğe bağlıCron ifadesinin çalıştığı saat dilimi;
Asia/Kolkata,America/New_YorkveyaEurope/Londongibi bir IANA saat dilimi adı olarak.UTCkullanmak için göndermeyin. Boş bir metinInvalid timezonedöndürür. Tam liste için Saat dilimi referansı sayfasına bakın.
Görseller ve dosyalar
msg_typeintegeristeğe bağlımessageaçıklama metni olmak üzere0metin (varsayılan),1görsel veya2dosya. Diğer her değer0olarak değerlendirilir.img_urlstringmsg_type 1 veya 2 olduğunda zorunluGörselin veya
msg_type2 için dosyanın herkese açıkhttpya dahttpsURL'si, en fazla 1.000 karakter. Hatırlatıcı her çalıştığında indirilir, bu yüzden bağlantıyı çalışır durumda tutun. Dosyaları Medya yükleme API'si ile barındırabilirsiniz.file_namestringmsg_type 2 olduğunda zorunlumsg_type2 için uzantısıyla birlikte dosyanın adı, en fazla 100 karakter; örneğininvoice.pdf. Diğer mesaj türlerinde yok sayılır.
Cron ifadeleri#
Bir cron ifadesi, boşluklarla ayrılmış beş değerden oluşur. Hatırlatıcı, timezone içindeki geçerli saat beşiyle de eşleştiğinde çalışır:
┌───────── 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
| Sembol | Anlamı | Örnek |
|---|---|---|
* | Her değer | Saat alanındaki * her saat anlamına gelir. |
, | Değer listesi | Saat alanındaki 9,18 9:00 ve 18:00 anlamına gelir. |
- | Aralık | Haftanın günü alanındaki 1-5 pazartesiden cumaya anlamına gelir. |
/ | Adım | Saat alanındaki */6 her 6 saatte bir anlamına gelir. |
Yaygın örnekler#
| İfade | Çalışma zamanı |
|---|---|
0 9 * * * | Her gün 9:00'da |
0 9 * * 1-5 | Pazartesiden cumaya 9:00'da |
0 9 * * 1 | Her pazartesi 9:00'da |
30 18 * * 0 | Her pazar 18:30'da |
0 9,18 * * * | Her gün 9:00 ve 18:00'de |
0 */6 * * * | Her 6 saatte bir, saat başında |
*/30 9-17 * * 1-5 | Pazartesiden cumaya 9:00'dan 17:30'a kadar her 30 dakikada bir |
0 9 1 * * | Her ayın 1'inde 9:00'da |
0 10 15 * * | Her ayın 15'inde 10:00'da |
0 8 1 1 * | Her 1 Ocak'ta 8:00'de |
Saatler hatırlatıcının timezone değerine göredir. Yalnızca beş alan kullanın: saniye alanı veya @daily gibi kısayollar eklemeyin.
Şablon değişkenleri#
message içindeki bu yer tutucular, hatırlatıcı her çalıştığında değiştirilir. Tarihler ve saatler hatırlatıcının timezone değerine göredir.
| Değişken | Yerine gelen | Örnek |
|---|---|---|
{current_date} | Tarih | 2026-10-01 |
{current_date_formatted} | Sözcüklerle tarih, gün sıfırla doldurulmuş | October 01, 2026 |
{current_time} | 24 saatlik saat | 09:00:00 |
{current_time_12h} | 12 saatlik saat | 09:00 AM |
{current_datetime} | Tarih ve saat | 2026-10-01 09:00:00 |
{timezone} | timezone değeri | Asia/Kolkata |
{timezone_short} | Saat dilimi kısaltması | IST |
{reminder_name} | reminder_name değeri | Monthly rent reminder |
{to_number} | Kaydedilen phone değeri | 919876543210 |
{client_name} | Çalışma alanı sahibinin adı | |
{organisation_name} | Çalışma alanınızın adı |
Görsel hatırlatıcı#
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);PHP örneği JSON yerine form alanları gönderir. İkisi de çalışır.
Yanıt#
Başarılı bir istek HTTP 200 döndürür:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| Alan | Tür | Açıklama |
|---|---|---|
status | integer | Hatırlatıcı oluşturulduysa 1, istek başarısız olduysa 0. |
message | string | Reminder created successfully, aksi halde hata mesajı. |
reminder_id | integer | Yeni hatırlatıcının ID'si. Daha sonra hatırlatıcıyı iptal etmek için kaydedin. Yalnızca başarıda bulunur. |
Yeni hatırlatıcılar hemen etkin olur.
Hatalar#
Aksi belirtilmedikçe hatalar, status değeri 0 olarak HTTP 400 döndürür:
{ "status": 0, "message": "Invalid timezone" }
| Mesaj | Nasıl düzeltilir |
|---|---|
Invalid JSON format: … | JSON gövdesi geçerli değil; genellikle sondaki bir virgül veya message içindeki kaçışsız bir satır sonu nedeniyle. Yeni satırlar için \n kullanın. Bunu client_id olmayan bir form isteğinde veya herhangi bir GET isteğinde de alırsınız. |
Invalid client id. | client_id değerini sayı olarak gönderin. |
Reminder name cannot be null | reminder_name ekleyin. |
Phone number cannot be null | phone ekleyin. |
Message template cannot be null | message ekleyin. |
Cron expression cannot be null | cron_expression ekleyin. |
Auth Error - Please send correct API key and Client id | Boş olmayan bir api_key gönderin. |
Invalid cron expression | İfadenin beş geçerli alanı olduğunu kontrol edin. Bkz. Cron ifadeleri. |
Invalid timezone | IST gibi bir kısaltma değil, Asia/Kolkata gibi bir IANA adı kullanın. |
Image URL cannot be null for image messages | msg_type 1 için img_url gönderin. |
File URL cannot be null for file messages | msg_type 2 için file_name gönderin. |
Auth Error: invalid api key | Anahtar farklı bir client_id değerine ait. |
Auth Error: please check client id | Anahtar bir çalışma alanına bağlı değil. Kullanmak istediğiniz çalışma alanında yeni bir anahtar oluşturun. |
Demo Account cannot access APIs | Normal bir hesap kullanın. |
Not enough credits | Planınızda mesaj hakkı kalmadı. |
Upgrade your plan to use reminders feature | Planınız hatırlatıcıları içermiyor. Planınızı yükseltin. |
WhatsApp Logged Out. Please Reconnect!! | whatsapp_client numarasının bağlantısı kesik. WhatsApp ayarları sayfasından yeniden bağlayın. |
Invalid WhatsApp client id | whatsapp_client değerini sayı olarak gönderin. |
Error creating reminder: … (HTTP 500) | Hatırlatıcı kaydedilemedi. Gönderdiğiniz değerleri kontrol edin; örneğin img_url 1.000 karakter veya daha kısa, file_name 100 veya daha kısa olmalıdır. |
Hatırlatıcılar nasıl çalışır#
- Zamanlama hatırlatıcının
timezonedeğerine göre kontrol edilir ve geçerli saat cron ifadesiyle eşleştiğinde mesaj kuyruğa alınır. - Her çalıştırma, WhatsApp numaranızdan gönderilen normal bir mesaj oluşturur; bu yüzden numaranın bağlı kalması gerekir.
- Çalışma alanınızda kredi kalmamışsa veya
whatsapp_clientayarlanmamışsa ve o anda çalışma alanınızda bağlı bir numara yoksa, çalıştırma atlanır. whatsapp_clientayarlanmışsa, o numaranın bağlantısı sonradan kesilmiş olsa bile her çalıştırma o numarada kuyruğa alınır ve orada bekler. Başka bir numaraya geçiş yapılmaz.- Hatırlatıcılar saniyesi saniyesine değil, belirli aralıklarla kontrol edilir ve mesaj ardından diğer mesajlar gibi gönderim kuyruğunda bekler. Kesin zamanlamaya güvenmeyin. Bir kontrol geç çalışırsa, çalıştırma 10 dakikaya kadar gecikmeyle yine de gönderilir (hatırlatıcının ilk çalıştırmasında en fazla 1 dakika); bundan sonra atlanır. Aynı çalıştırma asla iki kez gönderilmez.
İpuçları#
- Listeleyin ve temizleyin: hatırlatıcılarınızı ve ID'lerini Hatırlatıcıları listeleme ile alın, birini Hatırlatıcı iptal etme ile durdurun.
- Duraklatma ve düzenleme API üzerinden yapılamaz. Panelinizdeki Hatırlatıcılar sayfasını kullanın.
- Aynı anda çok sayıda hatırlatıcı: Hatırlatıcılar sayfası hatırlatıcıları bir CSV dosyasından da içe aktarabilir.
- JSON'da yeni satırlar: bunları
messageiçinde\nolarak yazın. Ham bir satır sonu JSON'u geçersiz kılar.
