API التذكيرات
API إنشاء تذكير
أنشئ رسالة WhatsApp متكررة تُرسَل تلقائيًا وفق جدول زمني. استخدمه لتذكيرات الدفع، والمتابعات الأسبوعية واليومية، وغيرها من الرسائل التي تتكرر.
https://wbiztool.com/api/v1/reminder/create/النص (Body): JSON أو حقول نموذج
تصف الجدول الزمني بتعبير cron ومنطقة زمنية. وفي كل مرة يتطابق فيها الجدول، يضع Wbiztool رسالة في قائمة الانتظار إلى رقم الهاتف أو المجموعة، تمامًا مثل رسالة أُرسلت عبر إرسال رسالة. تظهر التذكيرات التي تنشئها هنا أيضًا في صفحة التذكيرات في لوحة التحكم، حيث يمكنك إيقافها مؤقتًا أو تعديلها.
مثال سريع#
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'];
}يُرسَل هذا التذكير في الساعة 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 (API Client ID) من Settings → API keys (الإعدادات ← مفاتيح API).
api_keystringمطلوبمفتاح API الخاص بك من الصفحة نفسها.
المُرسِل
whatsapp_clientintegerاختياريمعرّف رقم WhatsApp الذي ستُرسَل منه الرسالة، من إعدادات WhatsApp. إذا حذفته، أو لم يكن المعرّف موجودًا في مساحة العمل الخاصة بك، فسيُرسَل كل تذكير من أول رقم متصل في مساحة العمل وقت تشغيله.
التذكير
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. النص الفارغ يُرجعInvalid timezone. راجع مرجع المناطق الزمنية للاطلاع على القائمة الكاملة.
الصور والملفات
msg_typeintegerاختياري
0نص (افتراضي)، أو1صورة، أو2ملف، معmessageكتعليق. أي قيمة أخرى تُعامَل على أنها0.img_urlstringمطلوب عندما تكون قيمة msg_type هي 1 أو 2عنوان URL عام يبدأ بـ
httpأوhttpsللصورة، أو للملف عندmsg_type2، حتى 1,000 حرف. يُنزَّل في كل مرة يُشغَّل فيها التذكير، لذا أبقِ الرابط صالحًا. يمكنك استضافة الملفات باستخدام API رفع الوسائط.file_namestringمطلوب عندما تكون قيمة msg_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 | كل 30 دقيقة من 9:00 إلى 17:30، من الاثنين إلى الجمعة |
0 9 1 * * | اليوم الأول من كل شهر الساعة 9:00 |
0 10 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 | معرّف التذكير الجديد. احفظه لإلغاء التذكير لاحقًا. يظهر عند النجاح فقط. |
تكون التذكيرات الجديدة نشطة فورًا.
الأخطاء#
تُرجع الأخطاء HTTP 400 مع status بقيمة 0، ما لم يُذكر خلاف ذلك:
{ "status": 0, "message": "Invalid timezone" }
| الرسالة | طريقة الإصلاح |
|---|---|
Invalid JSON format: … | جسم JSON غير صالح، وغالبًا بسبب فاصلة زائدة في النهاية أو سطر جديد غير مُهرَّب داخل message. استخدم \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 | استخدم اسم IANA مثل Asia/Kolkata، لا اختصارًا مثل IST. |
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 دقائق (وحتى دقيقة واحدة لأول تشغيل للتذكير)؛ وبعد ذلك تُتخطّى. لا تُرسَل عملية التشغيل نفسها مرتين أبدًا.
نصائح#
- العرض والتنظيف: احصل على تذكيراتك ومعرّفاتها باستخدام عرض التذكيرات، وأوقف أيًّا منها باستخدام إلغاء تذكير.
- الإيقاف المؤقت والتعديل غير متاحين عبر API. استخدم صفحة التذكيرات في لوحة التحكم.
- تذكيرات كثيرة دفعة واحدة: يمكن لصفحة التذكيرات أيضًا استيراد التذكيرات من ملف CSV.
- الأسطر الجديدة في JSON: اكتبها بالشكل
\nداخلmessage. السطر الجديد الخام يجعل JSON غير صالح.
