रिमाइंडर API
रिमाइंडर बनाएं API
ऐसा रिकरिंग WhatsApp संदेश बनाएं जो तय शेड्यूल पर अपने आप भेजा जाए। इसका इस्तेमाल पेमेंट रिमाइंडर, साप्ताहिक चेक-इन, रोज़ाना फॉलो-अप और बार-बार भेजे जाने वाले दूसरे संदेशों के लिए करें।
https://wbiztool.com/api/v1/reminder/create/बॉडी: JSON या फॉर्म फील्ड
आप शेड्यूल को एक cron एक्सप्रेशन और एक टाइमज़ोन से तय करते हैं। हर बार जब शेड्यूल मैच होता है, Wbiztool फोन नंबर या ग्रुप के लिए एक संदेश कतार में डालता है, ठीक वैसे ही जैसे संदेश भेजें से भेजा गया संदेश। यहां बनाए गए रिमाइंडर आपके डैशबोर्ड के रिमाइंडर पेज पर भी दिखते हैं, जहां आप उन्हें रोक (pause) या एडिट कर सकते हैं।
छोटा उदाहरण#
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'];
}यह रिमाइंडर हर महीने की 1 तारीख को भारतीय समय के अनुसार 10:00 बजे भेजा जाता है। 12345, YOUR_API_KEY और 678 की जगह अपनी वैल्यू डालें। ये कहां मिलेंगी, यह जानने के लिए ऑथेंटिकेशन देखें।
रिक्वेस्ट पैरामीटर#
पैरामीटर JSON बॉडी या फॉर्म फील्ड के रूप में भेजें। JSON में हर टेक्स्ट वैल्यू (api_key, reminder_name, phone, message, cron_expression, timezone, img_url, file_name) को string के रूप में भेजें।
ऑथेंटिकेशन
client_idintegerआवश्यकसेटिंग्स → API Keys से आपका API क्लाइंट ID।
api_keystringआवश्यकउसी पेज से आपकी API की।
भेजने वाला
whatsapp_clientintegerवैकल्पिकWhatsApp सेटिंग्स से उस WhatsApp नंबर का ID जिससे संदेश भेजना है। अगर आप इसे छोड़ देते हैं, या ID आपके वर्कस्पेस में नहीं है, तो हर रिमाइंडर उसके चलने के समय आपके वर्कस्पेस के पहले कनेक्टेड नंबर से भेजा जाता है।
रिमाइंडर
reminder_namestringआवश्यकरिमाइंडर का नाम, जो रिमाइंडर पेज पर दिखता है और संदेश में
{reminder_name}के रूप में उपलब्ध होता है।phonestringआवश्यकप्राप्तकर्ता का WhatsApp नंबर, कंट्री कोड के साथ, जैसे
919876543210। अलग से कोईcountry_codeपैरामीटर नहीं है। स्पेस,+,-,.और ब्रैकेट हटा दिए जाते हैं, और शुरुआत का0भी हटा दिया जाता है (JSON बॉडी में शुरुआत के ज़्यादा से ज़्यादा दो शून्य)। जो वैल्यू पूरी तरह अंकों की नहीं है, उसे WhatsApp ग्रुप का नाम माना जाता है।messagestringआवश्यकसंदेश का टेक्स्ट। इसमें टेम्प्लेट वेरिएबल हो सकते हैं, जो हर बार रिमाइंडर चलने पर भरे जाते हैं। WhatsApp फॉर्मेटिंग काम करती है:
*bold*,_italic_,~strikethrough~।cron_expressionstringआवश्यकसंदेश कब भेजना है, पांच फील्ड वाले cron एक्सप्रेशन के रूप में, जैसे
0 9 * * 1-5। cron एक्सप्रेशन देखें।timezonestringवैकल्पिकवह टाइमज़ोन जिसमें cron एक्सप्रेशन चलता है, IANA टाइमज़ोन नाम के रूप में, जैसे
Asia/Kolkata,America/New_YorkयाEurope/London।UTCइस्तेमाल करने के लिए इसे न भेजें। खाली string भेजने परInvalid timezoneलौटता है। पूरी सूची के लिए टाइमज़ोन रेफरेंस देखें।
इमेज और फाइलें
msg_typeintegerवैकल्पिक0टेक्स्ट (डिफ़ॉल्ट),1इमेज या2फाइल, जिसमेंmessageकैप्शन होता है। कोई भी दूसरी वैल्यू0मानी जाती है।img_urlstringmsg_type 1 या 2 होने पर आवश्यकइमेज का, या
msg_type2 के लिए फाइल का, पब्लिकhttpयाhttpsURL, अधिकतम 1,000 कैरेक्टर। रिमाइंडर हर बार चलने पर इसे डाउनलोड करता है, इसलिए लिंक चालू रखें। आप मीडिया अपलोड करें API से फाइलें होस्ट कर सकते हैं।file_namestringmsg_type 2 होने पर आवश्यकmsg_type2 के लिए, एक्सटेंशन के साथ फाइल का नाम, अधिकतम 100 कैरेक्टर, जैसेinvoice.pdf। दूसरे संदेश टाइप के लिए इसे नज़रअंदाज़ किया जाता है।
cron एक्सप्रेशन#
cron एक्सप्रेशन स्पेस से अलग की गई पांच वैल्यू होती है। जब भी timezone में मौजूदा समय पांचों से मैच करता है, रिमाइंडर चलता है:
┌───────── 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
| चिह्न | मतलब | उदाहरण |
|---|---|---|
* | हर वैल्यू | घंटे वाले फील्ड में * का मतलब है हर घंटे। |
, | वैल्यू की सूची | घंटे वाले फील्ड में 9,18 का मतलब है 9:00 और 18:00। |
- | रेंज | हफ्ते के दिन वाले फील्ड में 1-5 का मतलब है सोमवार से शुक्रवार। |
/ | स्टेप | घंटे वाले फील्ड में */6 का मतलब है हर 6 घंटे में। |
आम उदाहरण#
| एक्सप्रेशन | कब चलता है |
|---|---|
0 9 * * * | हर दिन 9:00 बजे |
0 9 * * 1-5 | सोमवार से शुक्रवार 9:00 बजे |
0 9 * * 1 | हर सोमवार 9:00 बजे |
30 18 * * 0 | हर रविवार 18:30 बजे |
0 9,18 * * * | हर दिन 9:00 और 18:00 बजे |
0 */6 * * * | हर 6 घंटे में, घंटे की शुरुआत पर |
*/30 9-17 * * 1-5 | सोमवार से शुक्रवार, 9:00 से 17:30 तक हर 30 मिनट में |
0 9 1 * * | हर महीने की 1 तारीख को 9:00 बजे |
0 10 15 * * | हर महीने की 15 तारीख को 10:00 बजे |
0 8 1 1 * | हर साल 1 जनवरी को 8:00 बजे |
समय रिमाइंडर के timezone में होता है। सिर्फ पांच फील्ड इस्तेमाल करें: सेकंड का फील्ड या @daily जैसे शॉर्टकट न जोड़ें।
टेम्प्लेट वेरिएबल#
message में मौजूद ये प्लेसहोल्डर हर बार रिमाइंडर चलने पर बदल दिए जाते हैं। तारीख और समय रिमाइंडर के timezone में होते हैं।
| वेरिएबल | किससे बदला जाता है | उदाहरण |
|---|---|---|
{current_date} | तारीख | 2026-10-01 |
{current_date_formatted} | शब्दों में तारीख, दिन शून्य से भरा हुआ | October 01, 2026 |
{current_time} | 24-घंटे वाला समय | 09:00:00 |
{current_time_12h} | 12-घंटे वाला समय | 09:00 AM |
{current_datetime} | तारीख और समय | 2026-10-01 09:00:00 |
{timezone} | timezone की वैल्यू | Asia/Kolkata |
{timezone_short} | टाइमज़ोन का संक्षिप्त रूप | IST |
{reminder_name} | reminder_name की वैल्यू | Monthly rent reminder |
{to_number} | सेव की गई phone वैल्यू | 919876543210 |
{client_name} | वर्कस्पेस के मालिक का नाम | |
{organisation_name} | आपके वर्कस्पेस का नाम |
इमेज रिमाइंडर#
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 उदाहरण JSON की जगह फॉर्म फील्ड भेजता है। दोनों तरीके काम करते हैं।
रिस्पॉन्स#
सफल रिक्वेस्ट HTTP 200 लौटाती है:
{
"reminder_id": 3187,
"message": "Reminder created successfully",
"status": 1
}
| फील्ड | टाइप | विवरण |
|---|---|---|
status | integer | रिमाइंडर बन जाने पर 1, रिक्वेस्ट फेल होने पर 0। |
message | string | Reminder created successfully, वरना एरर। |
reminder_id | integer | नए रिमाइंडर का ID। बाद में रिमाइंडर कैंसल करने के लिए इसे सेव करें। केवल सफल होने पर मौजूद होता है। |
नए रिमाइंडर तुरंत एक्टिव हो जाते हैं।
एरर#
एरर HTTP 400 के साथ लौटते हैं और status 0 होता है, जब तक अलग से न बताया गया हो:
{ "status": 0, "message": "Invalid timezone" }
| संदेश | कैसे ठीक करें |
|---|---|
Invalid JSON format: … | JSON बॉडी सही नहीं है, अक्सर आखिर में छूटे कॉमा (trailing comma) या message में बिना escape किए लाइन ब्रेक की वजह से। नई लाइन के लिए \n इस्तेमाल करें। client_id के बिना भेजी गई फॉर्म रिक्वेस्ट पर, या किसी भी GET रिक्वेस्ट पर भी यही एरर मिलता है। |
Invalid client id. | client_id को नंबर के रूप में भेजें। |
Reminder name cannot be null | reminder_name जोड़ें। |
Phone number cannot be null | phone जोड़ें। |
Message template cannot be null | message जोड़ें। |
Cron expression cannot be null | cron_expression जोड़ें। |
Auth Error - Please send correct API key and Client id | खाली न हो ऐसी api_key भेजें। |
Invalid cron expression | जांचें कि एक्सप्रेशन में पांच सही फील्ड हैं। cron एक्सप्रेशन देखें। |
Invalid timezone | IST जैसे संक्षिप्त रूप की जगह Asia/Kolkata जैसा IANA नाम इस्तेमाल करें। |
Image URL cannot be null for image messages | msg_type 1 के लिए img_url भेजें। |
File URL cannot be null for file messages | msg_type 2 के लिए file_name भेजें। |
Auth Error: invalid api key | की किसी दूसरे client_id की है। |
Auth Error: please check client id | की किसी वर्कस्पेस से जुड़ी नहीं है। जिस वर्कस्पेस का इस्तेमाल करना है, उसमें नई की बनाएं। |
Demo Account cannot access APIs | सामान्य अकाउंट इस्तेमाल करें। |
Not enough credits | आपके प्लान में कोई संदेश नहीं बचा है। |
Upgrade your plan to use reminders feature | आपके प्लान में रिमाइंडर शामिल नहीं हैं। अपना प्लान अपग्रेड करें। |
WhatsApp Logged Out. Please Reconnect!! | whatsapp_client वाला नंबर डिसकनेक्ट है। उसे WhatsApp सेटिंग्स में दोबारा कनेक्ट करें। |
Invalid WhatsApp client id | whatsapp_client को नंबर के रूप में भेजें। |
Error creating reminder: … (HTTP 500) | रिमाइंडर सेव नहीं हो सका। भेजी गई वैल्यू जांचें, जैसे कि img_url 1,000 कैरेक्टर या उससे कम है और file_name 100 या उससे कम। |
रिमाइंडर कैसे चलते हैं#
- शेड्यूल रिमाइंडर के
timezoneमें जांचा जाता है, और जब मौजूदा समय cron एक्सप्रेशन से मैच करता है तब संदेश कतार में डाला जाता है। - हर बार चलने पर एक सामान्य संदेश बनता है जो आपके WhatsApp नंबर से भेजा जाता है, इसलिए नंबर कनेक्टेड रहना चाहिए।
- अगर आपके वर्कस्पेस में कोई क्रेडिट नहीं बचा है, या
whatsapp_clientसेट नहीं है और उस समय आपके वर्कस्पेस का कोई नंबर कनेक्टेड नहीं है, तो उस बार का रन छोड़ दिया जाता है। - अगर
whatsapp_clientसेट है, तो हर रन उसी नंबर की कतार में डाला जाता है, भले ही वह नंबर बाद में डिसकनेक्ट हो गया हो, और वहीं इंतज़ार करता है। किसी दूसरे नंबर पर फॉलबैक नहीं होता। - रिमाइंडर समय-समय पर जांचे जाते हैं, सेकंड-दर-सेकंड नहीं, और फिर संदेश किसी भी दूसरे संदेश की तरह भेजने की कतार में इंतज़ार करता है। बिल्कुल सटीक समय पर भरोसा न करें। अगर कोई जांच देर से चलती है, तो रन फिर भी 10 मिनट तक की देरी से भेजा जाता है (रिमाइंडर के पहले रन के लिए 1 मिनट तक); उसके बाद वह छोड़ दिया जाता है। एक ही रन कभी दो बार नहीं भेजा जाता।
सुझाव#
- सूची देखें और साफ करें: रिमाइंडर की सूची से अपने रिमाइंडर और उनके ID पाएं, और रिमाइंडर कैंसल करें से किसी रिमाइंडर को बंद करें।
- रोकना (pause) और एडिट करना API से उपलब्ध नहीं है। अपने डैशबोर्ड का रिमाइंडर पेज इस्तेमाल करें।
- एक साथ कई रिमाइंडर: रिमाइंडर पेज CSV फाइल से भी रिमाइंडर इम्पोर्ट कर सकता है।
- JSON में नई लाइन:
messageके अंदर इन्हें\nके रूप में लिखें। सीधा लाइन ब्रेक JSON को अमान्य बना देता है।
