API التذكيرات
API عرض التذكيرات
احصل على التذكيرات في مساحة العمل الخاصة بك، 50 تذكيرًا في كل مرة، من الأحدث إلى الأقدم. استخدمه للعثور على معرّفات التذكيرات، أو لمراجعة عمليات الأتمتة لديك، أو لنسخها احتياطيًا.
https://wbiztool.com/api/v1/reminder/list/النص (Body): JSON أو حقول نموذج
لا تقبل نقطة النهاية هذه إلا POST. طلب GET، حتى مع سلسلة استعلام (query string)، يُرجع HTTP 400 مع Invalid JSON format: Expecting value….
تتضمن القائمة التذكيرات النشطة والموقوفة مؤقتًا من مساحة العمل كلها، سواء أُنشئت عبر API أو من صفحة التذكيرات. لا تُدرج التذكيرات الملغاة.
مثال سريع#
curl -X POST https://wbiztool.com/api/v1/reminder/list/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"page": 1
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/reminder/list/",
json={"client_id": 12345, "api_key": "YOUR_API_KEY", "page": 1},
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(f"{result['total']} reminders in total")
for reminder in result["reminders"]:
print(reminder["id"], reminder["name"], reminder["cron_expression"], reminder["is_active"])
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/list/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_id: 12345, api_key: "YOUR_API_KEY", page: 1 }),
});
// 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(`${result.total} reminders in total`);
for (const reminder of result.reminders) {
console.log(reminder.id, reminder.name, reminder.cron_expression, reminder.is_active);
}
} else {
console.error("Failed:", result.message);
}<?php
$ch = curl_init('https://wbiztool.com/api/v1/reminder/list/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'page' => 1,
]),
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) {
foreach ($result['reminders'] as $reminder) {
echo $reminder['id'] . ' ' . $reminder['name'] . ' ' . $reminder['cron_expression'] . "\n";
}
} else {
echo 'Failed: ' . $result['message'];
}استبدل 12345 وYOUR_API_KEY بقيمك الخاصة. راجع المصادقة لمعرفة مكان العثور عليها.
معاملات الطلب#
client_idintegerمطلوبمعرّف العميل في API (API Client ID) من Settings → API keys (الإعدادات ← مفاتيح API).
api_keystringمطلوبمفتاح API الخاص بك من الصفحة نفسها.
pageintegerاختياريرقم الصفحة، بدءًا من
1(القيمة الافتراضية). تحتوي كل صفحة على 50 تذكيرًا، ولا يمكن تغيير حجم الصفحة. القيمة التي ليست عددًا صحيحًا يساوي 1 أو أكثر تُعامَل على أنها1.
الاستجابة#
يُرجع الطلب الناجح HTTP 200:
{
"reminders": [
{
"id": 3187,
"name": "Monthly rent reminder",
"to_number": "919876543210",
"message_template": "Hi Aman, a reminder that your rent is due on {current_date_formatted}.",
"msg_type": 0,
"msg_type_display": "Text",
"img_url": "",
"file_name": "",
"cron_expression": "0 10 1 * *",
"next_run": "2026-10-01 10:00:00 UTC",
"is_active": true,
"whatsapp_client_id": 678,
"created_at": "2026-09-16 04:45:12"
}
],
"total": 1,
"page": 1,
"page_size": 50,
"message": "Success",
"status": 1
}
| الحقل | النوع | الوصف |
|---|---|---|
status | integer | 1 عند النجاح، و0 إذا فشل الطلب. |
message | string | Success، وإلا نص الخطأ. |
reminders | array | التذكيرات في هذه الصفحة، من الأحدث إلى الأقدم. تكون فارغة إذا كانت الصفحة بعد النهاية. |
total | integer | عدد التذكيرات في مساحة العمل، عبر كل الصفحات. |
page | integer | الصفحة المُرجَعة. |
page_size | integer | دائمًا 50. |
حقول التذكير#
| الحقل | النوع | الوصف |
|---|---|---|
id | integer | معرّف التذكير. استخدمه مع إلغاء تذكير. |
name | string | اسم التذكير، أو Unnamed Reminder إذا لم يكن له اسم. |
to_number | string | رقم الهاتف أو اسم المجموعة الذي يُرسَل إليه التذكير. |
message_template | string | الرسالة، مع متغيرات القالب قبل ملئها. |
msg_type | integer | 0 نص، و1 صورة، و2 ملف. |
msg_type_display | string | Text أو Image أو File. |
img_url | string or null | عنوان URL للصورة في تذكيرات الصور، أو عنوان URL للملف في تذكيرات الملفات التي أُنشئت عبر API. يمكن أن يكون فارغًا أو null في الحالات الأخرى. |
file_name | string or null | في تذكيرات الملفات: عنوان URL للملف (للتذكيرات التي أُنشئت من لوحة التحكم) أو اسم الملف (للتذكيرات التي أُنشئت عبر API، وعنوان URL الخاص بها موجود في img_url). يمكن أن يكون فارغًا أو null في الحالات الأخرى. |
cron_expression | string | الجدول الزمني. راجع تعبيرات cron. |
next_run | string | الموعد التالي الذي يتطابق فيه الجدول الزمني، بالصيغة YYYY-MM-DD HH:MM:SS UTC، أو Invalid cron إذا تعذّرت قراءة التعبير. راجع التحذير أدناه. |
is_active | boolean | true إذا كان التذكير يعمل، وfalse إذا كان موقوفًا مؤقتًا. |
whatsapp_client_id | integer or null | رقم WhatsApp الذي يُرسَل منه، أو null إذا كان يستخدم أول رقم متصل. |
created_at | string | وقت إنشاء التذكير، بتوقيت UTC، بالصيغة YYYY-MM-DD HH:MM:SS. |
الأخطاء#
تُرجع الأخطاء HTTP 400 مع status بقيمة 0، ما لم يُذكر خلاف ذلك:
{ "status": 0, "message": "Upgrade your plan to use reminders feature" }
| الرسالة | طريقة الإصلاح |
|---|---|
Invalid JSON format: … | جسم JSON غير صالح. تحصل على هذا الخطأ أيضًا مع طلب GET أو مع طلب نموذج بدون client_id. |
Auth Error - Please send correct API key and Client id | أرسل client_id وapi_key كليهما. |
Invalid client id | أرسل client_id كرقم. |
Auth Error: invalid api key | المفتاح ينتمي إلى client_id مختلف. |
Auth Error: please check client id | المفتاح غير مرتبط بمساحة عمل. أنشئ مفتاحًا جديدًا في مساحة العمل التي تريد استخدامها. |
Demo Account cannot access APIs | استخدم حسابًا عاديًا. |
Upgrade your plan to use reminders feature | باقتك لا تتضمن التذكيرات. قم بترقية باقتك. تستمر التذكيرات الموجودة في العمل واستهلاك الرصيد بعد الانتقال إلى باقة أقل، ولا يمكن عرضها أو إلغاؤها أو إيقافها مؤقتًا حتى تقوم بالترقية. |
Error fetching reminders: … (HTTP 500) | حدث خطأ من جانبنا. حاول مرة أخرى. |
إذا كان api_key غير موجود أو حُذف، فستكون الاستجابة صفحة خطأ بصيغة HTML مع HTTP 500 بدلًا من JSON. اختبر مفتاحك باستخدام التحقق من بيانات الاعتماد.
قراءة كل الصفحات#
واصل طلب الصفحة التالية حتى تحصل على صفحة تحتوي على أقل من 50 تذكيرًا.
import requests
reminders, page = [], 1
while True:
response = requests.post(
"https://wbiztool.com/api/v1/reminder/list/",
json={"client_id": 12345, "api_key": "YOUR_API_KEY", "page": page},
timeout=60,
)
try:
result = response.json()
except ValueError:
raise SystemExit(f"HTTP {response.status_code}: not JSON. Check that your api_key exists.")
if result["status"] != 1:
raise RuntimeError(result["message"])
reminders += result["reminders"]
if len(result["reminders"]) < result["page_size"]:
break
page += 1
print(len(reminders), "reminders")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const reminders = [];
let page = 1;
while (true) {
const response = await fetch("https://wbiztool.com/api/v1/reminder/list/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ client_id: 12345, api_key: "YOUR_API_KEY", page }),
});
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) throw new Error(result.message);
reminders.push(...result.reminders);
if (result.reminders.length < result.page_size) break;
page += 1;
}
console.log(reminders.length, "reminders");نصائح#
- احتفظ بنسختك الخاصة من قيمة
timezoneلكل تذكير عند إنشائه، لأن نقطة النهاية هذه لا تُرجعها. - اعثر على التذكيرات الموقوفة مؤقتًا بالتصفية على
is_activeبقيمةfalse. استأنفها من صفحة التذكيرات. - نظّف عمليات الأتمتة القديمة: اجمع أولًا المعرّفات التي تريد إلغاءها من كل الصفحات، ثم استدعِ إلغاء تذكير لكل منها. الإلغاء أثناء التنقل بين الصفحات ينقل التذكيرات اللاحقة إلى صفحات سابقة، فيُتخطّى بعضها.
