استدعِ webhook تلقائيًا حسب جدول Cron
هذه أداة جدولة تستدعي عنوان webhook الذي تحدده تلقائيًا في كل موعد تضبطه بصيغة Cron، فتنفّذ مهامًا دورية — إرسال تقرير، مزامنة بيانات، تنظيف سجل — دون أن تُبقي خادمًا أو سكربتًا يعمل باستمرار عندك لمراقبة الوقت. تناسب فرق التطوير الصغيرة التي لا تريد إدارة بنية تحتية إضافية لمهمة تتكرر مرة أو مرتين يوميًا فقط.
لماذا لا تكفي معرفة صيغة Cron وحدها؟
يعرف أي مطوّر صيغة Cron الخماسية، لكن تشغيلها يتطلب خادمًا يبقى حيًّا على مدار الساعة لتنفيذ المهمة في موعدها، وهذا عبء إضافي حين يكون كل ما تحتاجه استدعاء رابط واحد بين حين وآخر. تتولى الأداة هذا الجزء بالكامل: تضبط صيغة Cron وعنوان الـwebhook مرة واحدة، وتستدعيه هي في كل موعد، فيختفي داعي إبقاء عملية خلفية تراقب الساعة نيابة عنك. هذا الفارق يشبه استبدال منبّه يدوي بمساعد يتذكر عنك كل موعد دون أن تطلب منه ذلك في كل مرة.
ما الذي يصل إلى الرابط عند كل استدعاء؟
في كل موعد مضبوط، تُرسل الأداة طلب POST إلى عنوان الـwebhook الذي حددته، ويحمل الطلب بيانات بسيطة عن موعد التنفيذ ومعرّف الجدولة، فيتولى الطرف المستقبل تنفيذ المنطق الفعلي — إرسال تقرير، تحديث قاعدة بيانات، تنظيف ملفات مؤقتة. إن تعذّر الوصول إلى الرابط في لحظة الاستدعاء تُسجَّل المحاولة، فتراجع سجل التنفيذ لاحقًا وتعرف بالضبط متى نجحت المهمة ومتى فشلت. يمكن أيضًا ضبط أكثر من موعد واحد لنفس المهمة، كتشغيلها كل ساعة في أوقات الذروة وكل ست ساعات خارجها، دون كتابة أي منطق جدولة إضافي بنفسك.
أمثلة تستخدمها فرق التطوير فعليًا
يجدول فريق تقنية المعلومات في شركة الخليج الرقمية استدعاءً يوميًا في الساعة السادسة صباحًا لمزامنة مخزون المنتجات بين نظامين داخليين، بينما يستخدمها مطوّر مستقل لإرسال تقرير أسبوعي بأداء موقعه كل يوم أحد. كلا الاستخدامين لا يحتاج خادمًا مخصصًا لمراقبة الوقت؛ يكفي ضبط الجدولة مرة واحدة عبر الـAPI لتعمل تلقائيًا بعدها. يمكن أيضًا ضبط أكثر من جدولة واحدة على العنوان نفسه لأغراض مختلفة، فيخدم الرابط الواحد أكثر من مهمة دورية دون تعقيد إضافي في الإعداد.
حالات الاستخدام
مزامنة مخزون يومية
يجدول فريق تقنية المعلومات في شركة الخليج الرقمية استدعاء webhook كل صباح لمزامنة أرقام المخزون بين نظام المبيعات ونظام المستودع.
تقرير أسبوعي تلقائي
يضبط مطوّر مستقل جدولة أسبوعية تستدعي رابطًا يرسل له ملخص أداء موقعه كل يوم أحد، دون أن يشغّل خادمًا خاصًا لهذه المهمة وحدها.
تنظيف دوري لسجلات النظام
تستخدم مؤسسة النخيل للمقاولات جدولة شهرية تستدعي webhook داخليًا لتنظيف سجلات النظام القديمة وأرشفتها تلقائيًا.
الأسئلة الشائعة
ما الفرق بينها وبين تشغيل Cron على خادمي الخاص؟
توفّر عليك إبقاء خادم يعمل باستمرار لمراقبة الوقت؛ تضبط صيغة Cron وعنوان webhook مرة واحدة، وتتولى الأداة الاستدعاء في كل موعد.
كم السعر؟
$0.002 لكل تنفيذ ناجح، دون اشتراك شهري ولا حد أدنى للاستخدام.
ماذا يحدث إن تعذّر الوصول إلى رابطي في لحظة التنفيذ؟
تُسجَّل المحاولة الفاشلة في سجل التنفيذ، فتعرف بالضبط متى فشل الاستدعاء ولماذا.
هل تُحفظ بيانات جدولتي؟
يُحفظ عنوان webhook وصيغة Cron طالما الجدولة نشطة؛ لا يوجد محتوى ملفات لأن الأداة لا ترسل سوى طلب استدعاء فارغ تقريبًا.
هل تعمل من المتصفح مجانًا؟
لا، الجدولة الدورية تحتاج خادمًا يعمل نيابة عنك على مدار الساعة، لذلك هي خدمة عبر الـAPI فقط، بلا نسخة مجانية في المتصفح.
هل يمكنني إلغاء جدولة نشطة؟
نعم، عبر استدعاء واحد إلى الـAPI يوقف الجدولة فورًا، ولا تُحتسب أي تنفيذات بعد الإلغاء.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev/cron-webhook \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/cron-webhook", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/cron-webhook",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/cron-webhook", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/cron-webhook", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"input": "…"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.cron_webhook",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |