API v2 (beta)
Hatırlatıcılar
Bir hatırlatıcı aynı mesajı tek bir alıcıya bir zamanlamaya göre tekrar tekrar gönderir: her ay kira, her pazartesi bir ders, her akşam bir rapor. Zamanlama, seçtiğiniz bir saat diliminde 5 parçalı bir cron ifadesidir. API ile oluşturulan hatırlatıcılar, paneldeki Hatırlatıcılar sayfasındakilerle aynıdır.
| İşlem | Endpoint | Kapsam |
|---|---|---|
| Hatırlatıcı oluşturun | POST /api/v2/reminders | reminders |
| Hatırlatıcıları listeleyin | GET /api/v2/reminders | reminders |
| Bir hatırlatıcıyı alın | GET /api/v2/reminders/{id} | reminders |
| Değiştirin, duraklatın veya sürdürün | PATCH /api/v2/reminders/{id} | reminders |
| Bir hatırlatıcıyı silin | DELETE /api/v2/reminders/{id} | reminders |
Hatırlatıcı oluşturmak ve değiştirmek için hatırlatıcıları içeren bir plan gerekir; aksi halde 403 plan_required yanıtı alırsınız. Listeleme, okuma, duraklatma ve silme her planda çalışır. Belirli bir saatte bir kez gönderilen bir mesaj için bunun yerine Mesaj gönderme içindeki send_at alanını kullanın.
Hatırlatıcı oluşturun#
https://wbiztool.com/api/v2/remindersGövde: JSON (application/json)
curl -X POST https://wbiztool.com/api/v2/reminders \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rent-flat-4b" \
-d '{
"name": "Weekly rent",
"from": 101,
"to": { "phone": "+919876543210" },
"text": "Hi, a reminder that the rent is due on Friday.",
"schedule": { "cron": "0 9 * * 1", "timezone": "Asia/Kolkata" }
}'import os
import requests
response = requests.post(
"https://wbiztool.com/api/v2/reminders",
headers={
"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}",
"Idempotency-Key": "rent-flat-4b",
},
json={
"name": "Weekly rent",
"from": 101,
"to": {"phone": "+919876543210"},
"text": "Hi, a reminder that the rent is due on Friday.",
"schedule": {"cron": "0 9 * * 1", "timezone": "Asia/Kolkata"},
},
timeout=30,
)
reminder = response.json()
print(response.status_code, reminder.get("id"), reminder.get("next_run_at"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v2/reminders", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "rent-flat-4b",
},
body: JSON.stringify({
name: "Weekly rent",
from: 101,
to: { phone: "+919876543210" },
text: "Hi, a reminder that the rent is due on Friday.",
schedule: { cron: "0 9 * * 1", timezone: "Asia/Kolkata" },
}),
});
const reminder = await response.json();
console.log(response.status, reminder.id, reminder.next_run_at);<?php
$ch = curl_init('https://wbiztool.com/api/v2/reminders');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY'),
'Content-Type: application/json',
'Idempotency-Key: rent-flat-4b',
],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Weekly rent',
'from' => 101,
'to' => ['phone' => '+919876543210'],
'text' => 'Hi, a reminder that the rent is due on Friday.',
'schedule' => ['cron' => '0 9 * * 1', 'timezone' => 'Asia/Kolkata'],
]),
CURLOPT_RETURNTRANSFER => true,
]);
$reminder = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $reminder['id'] . ' next: ' . $reminder['next_run_at'];Yanıt (201):
{
"id": 812,
"name": "Weekly rent",
"active": true,
"to": { "phone": "+919876543210" },
"from": 101,
"text": "Hi, a reminder that the rent is due on Friday.",
"media": null,
"schedule": { "cron": "0 9 * * 1", "timezone": "Asia/Kolkata" },
"next_run_at": "2026-10-19T09:00:00+05:30",
"created_at": "2026-10-18T10:20:11.004Z"
}
Gövde
namestringzorunluHatırlatıcının Hatırlatıcılar sayfasında gösterilen adı, en fazla 100 karakter.
toobjectzorunluMesajlar → Alıcılar bölümündeki gibi
phone(+ile uluslararası biçimde),group(bir WhatsApp grubunun tam adı),contact_idveyausername(Telegram) alanlarından tam olarak biri.frominteger or nullBazı numaralarla sınırlı bir anahtar için zorunluHatırlatıcıyı gönderen numaranın
iddeğeri. Ayarladığınız anda bağlı olmalıdır. Gönderilmezse veyanullise çalışma alanının bağlı herhangi bir numarası gönderir.textstringzorunluMesaj, en fazla 3.000 karakter.
mediagönderildiğinde açıklama metni de budur.mediaobject or nullisteğe bağlıHer seferinde gönderilecek bir görsel veya dosya: Mesajlar → Medya bölümündeki gibi
urlveyamedia_id, isteğe bağlı olarak datype.scheduleobjectzorunlucron(zorunlu) vetimezone. Bkz. Zamanlama.activebooleanisteğe bağlıtrue(varsayılan) hatırlatıcıyı çalıştırır;falseonu duraklatılmış olarak oluşturur.
Zamanlama#
schedule.cron boşluklarla ayrılmış beş parçadan oluşur: dakika, saat, ayın günü, ay, haftanın günü. * "her" anlamına gelir. Bir noktada çalışan bir zamanlama olmalıdır (31 Şubat olmaz).
cron | Çalışma zamanı |
|---|---|
0 9 * * 1 | Pazartesileri 09:00'da |
30 18 * * * | Her gün 18:30'da |
0 10 1 * * | Her ayın 1'inde 10:00'da |
0 9 * * 1-5 | Hafta içi günlerde 09:00'da |
0 8,20 * * * | Her gün 08:00'de ve 20:00'de |
0 9 15 1 * | Her yıl 15 Ocak'ta 09:00'da |
schedule.timezone, Asia/Kolkata, Europe/London veya America/New_York gibi bir IANA saat dilimi adıdır (varsayılan UTC). Cron saatleri o saat dilimindedir ve next_run_at da farkıyla birlikte o saat diliminde verilir. Bkz. Saat dilimi referansı.
Her çalıştırma diğer mesajlar gibi bir mesaj gönderir: planda mesaj kalmış olması gerekir ve mesaj Mesajları listeleme sonuçlarında görünür.
Oluştururken alınan hatalar#
| HTTP | Kod | Ne zaman |
|---|---|---|
400 | validation_failed | Zorunlu bir alan eksik veya boş, bir alan bilinmiyor veya çok uzun (name, to.group) ya da media geçerli değil |
400 | text_required | text boş |
400 | text_too_long | text 3.000 karakterden uzun |
400 | invalid_cron | schedule.cron 5 parçadan oluşmuyor veya hiç çalışmıyor |
400 | invalid_timezone | schedule.timezone bir IANA saat dilimi değil |
403 | plan_required | Plan hatırlatıcıları içermiyor |
403 | number_not_allowed | Anahtar bazı numaralarla sınırlı ve from bunlardan biri değil ya da eksik |
422 | invalid_phone | to.phone, + ile uluslararası biçimde geçerli bir numara değil |
422 | invalid_username | to.username bir Telegram kullanıcı adı, bağlantısı veya tg: ID'si değil |
422 | username_needs_telegram | Bir Telegram kullanıcı adı verilmiş, ancak from bir Telegram hesabı değil (veya from olmadan hiçbir Telegram hesabı bağlı değil) |
422 | contact_not_found | Bu to.contact_id ile bir kişi yok |
422 | media_not_found | Bu media.media_id ile bir dosya yok |
422 | invalid_media_url | media.url herkese açık bir http(s) bağlantısı değil |
422 | number_not_connected | from bu çalışma alanının bağlı bir numarası değil |
Hatırlatıcıları listeleyin#
https://wbiztool.com/api/v2/remindersÇalışma alanının hatırlatıcıları, en yeniden başlayarak sayfalar halinde (limit 1 ile 100 arası, varsayılan 25, ve cursor). Duraklatılmış olanlar "active": false ile dahil edilir. Bazı numaralarla sınırlı bir anahtar yalnızca bu numaralardan gönderen hatırlatıcıları görür.
curl "https://wbiztool.com/api/v2/reminders?limit=50" \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Yanıt {"data": [Reminder, …], "next_cursor": "…" or null} biçimindedir.
Bir hatırlatıcıyı alın#
https://wbiztool.com/api/v2/reminders/{id}curl https://wbiztool.com/api/v2/reminders/812 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
Var olmayan, silinmiş veya anahtarın kullanamadığı bir numaradan gönderen bir hatırlatıcı 404 reminder_not_found ile yanıt verir.
Bir hatırlatıcıyı değiştirin, duraklatın veya sürdürün#
https://wbiztool.com/api/v2/reminders/{id}Gövde: JSON (application/json)
Yalnızca değişen alanları gönderin; diğerleri değerlerini korur. Alanlar Hatırlatıcı oluşturun bölümündekilerle aynıdır. Yanıt, hatırlatıcının şimdiki haliyle 200 olur.
- Duraklatma:
{"active": false}. Hatırlatıcı çalışmayı bırakır venext_run_atdeğerinullolur. Duraklatma her planda çalışır. - Sürdürme:
{"active": true}. Hatırlatıcı bir sonraki zamanından itibaren yeniden çalışır. Sürdürmek için hatırlatıcıları içeren bir plan gerekir. schedulebir bütün olarak değiştirilir: onunla birliktecrongönderin.timezoneolmadan hatırlatıcı mevcut saat dilimini korur.
# Pause
curl -X PATCH https://wbiztool.com/api/v2/reminders/812 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"active": false}'
# Move it to Fridays at 10:00 and change the text
curl -X PATCH https://wbiztool.com/api/v2/reminders/812 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"schedule": {"cron": "0 10 * * 5"}, "text": "Hi, the rent is due today."}'import os
import requests
headers = {"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"}
url = "https://wbiztool.com/api/v2/reminders/812"
paused = requests.patch(url, headers=headers, json={"active": False}, timeout=30).json()
print(paused["active"], paused["next_run_at"]) # False None
resumed = requests.patch(url, headers=headers, json={"active": True}, timeout=30).json()
print(resumed["active"], resumed["next_run_at"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v2/reminders/812", {
method: "PATCH",
headers: { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ active: false }),
});
const reminder = await response.json();
console.log(reminder.active, reminder.next_run_at); // false null<?php
$ch = curl_init('https://wbiztool.com/api/v2/reminders/812');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['active' => false]),
CURLOPT_RETURNTRANSFER => true,
]);
$reminder = json_decode(curl_exec($ch), true);
curl_close($ch);
var_dump($reminder['active']);Bir değişiklik, oluşturmadakiyle aynı hatalarla ve 404 reminder_not_found ile yanıt verir. Bir alan yanlışsa hiçbir şey değiştirilmez.
Bir hatırlatıcıyı silin#
https://wbiztool.com/api/v2/reminders/{id}Hatırlatıcıyı siler: bir daha hiç çalışmaz. Daha önce gönderdiği mesajlar geçmişte kalır. Bunun yerine bir süreliğine durdurmak için onu duraklatın.
curl -X DELETE https://wbiztool.com/api/v2/reminders/812 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{ "id": 812, "deleted": true }
Reminder nesnesi#
| Alan | Tür | Açıklama |
|---|---|---|
id | integer | Hatırlatıcının ID'si. |
name | string | Adı. |
active | boolean | Çalışırken true, duraklatılmışken false. |
to | object | Alıcı: phone (+ ile), group veya username. contact_id ile oluşturulan bir hatırlatıcı, kişinin numarasını veya grubunu gösterir. |
from | integer veya null | Gönderen numaranın id değeri veya bağlı herhangi bir numara için null. |
text | string | Mesaj. |
media | object veya null | type (image veya file), url ve file_name. |
schedule | object | cron ve timezone. |
next_run_at | string veya null | Bir sonraki çalışma zamanı; kendi saat diliminde ve farkıyla birlikte, örneğin 2026-10-19T09:00:00+05:30. Duraklatılmışken null. |
created_at | string | Oluşturulma zamanı (UTC). |
İlgili sayfalar#
- Paneldeki Hatırlatıcılar
- Saat dilimi referansı
- Mesajlar:
send_atile belirli bir saatte tek bir mesaj - Hatalar
