Automation

المهام المجدولة

Cron هو المجدول المدمج في Gateway. يحتفظ بالمهام، ويوقظ الوكيل في الوقت المناسب، ويمكنه تسليم المخرجات مرة أخرى إلى قناة دردشة أو نقطة نهاية Webhook.

البدء السريع

  • Add a one-shot reminder

    bash
    openclaw cron create "2026-02-01T16:00:00Z" \  --name "Reminder" \  --session main \  --system-event "Reminder: check the cron docs draft" \  --wake now \  --delete-after-run
  • Check your jobs

    bash
    openclaw cron listopenclaw cron get <job-id>openclaw cron show <job-id>
  • See run history

    bash
    openclaw cron runs --id <job-id>
  • كيفية عمل cron

    • يعمل Cron داخل عملية Gateway (وليس داخل النموذج).
    • تستمر تعريفات المهام وحالة التشغيل وسجل التشغيل في قاعدة بيانات حالة SQLite المشتركة في OpenClaw، لذلك لا تؤدي عمليات إعادة التشغيل إلى فقدان الجداول.
    • عند الترقية، شغّل openclaw doctor --fix لاستيراد ملفات ~/.openclaw/cron/jobs.json وjobs-state.json وruns/*.jsonl القديمة إلى SQLite وإعادة تسميتها بلاحقة .migrated. يتم تخطي صفوف المهام المشوهة من وقت التشغيل ونسخها إلى jobs-quarantine.json لإصلاحها أو مراجعتها لاحقًا.
    • ما زال cron.store يحدد مفتاح مخزن cron المنطقي ومسار استيراد doctor. بعد الاستيراد، لم يعد تعديل ملف JSON ذلك يغير مهام cron النشطة؛ استخدم openclaw cron add|edit|remove أو طرائق RPC الخاصة بـ cron في Gateway بدلًا من ذلك.
    • تنشئ كل عمليات تنفيذ cron سجلات مهمة خلفية.
    • عند بدء تشغيل Gateway، يُعاد جدولة مهام دورات الوكيل المعزولة المتأخرة خارج نافذة اتصال القناة بدلًا من إعادة تشغيلها فورًا، وبذلك يبقى بدء تشغيل Discord/Telegram وإعداد الأوامر الأصلية مستجيبين بعد عمليات إعادة التشغيل.
    • تُحذف المهام لمرة واحدة (--at) تلقائيًا بعد النجاح افتراضيًا.
    • تغلق تشغيلات cron المعزولة، قدر الإمكان، علامات تبويب/عمليات المتصفح المتتبعة لجلسة cron:<jobId> الخاصة بها عند اكتمال التشغيل، حتى لا تترك أتمتة المتصفح المنفصلة عمليات يتيمة.
    • تستطيع تشغيلات cron المعزولة التي تتلقى منحة التنظيف الذاتي الضيقة الخاصة بـ cron قراءة حالة المجدول، وقائمة ذاتية التصفية لمهمتها الحالية، وسجل تشغيل تلك المهمة، حتى تتمكن فحوصات الحالة/Heartbeat من فحص جدولها الخاص دون الحصول على وصول أوسع لتعديل cron.
    • تحمي تشغيلات cron المعزولة أيضًا من ردود الإقرار القديمة. إذا كانت النتيجة الأولى مجرد تحديث حالة مؤقت (on it، وpulling everything together، وتلميحات مشابهة) ولم يعد أي تشغيل وكيل فرعي تابع مسؤولًا عن الإجابة النهائية، يعيد OpenClaw المطالبة مرة واحدة للحصول على النتيجة الفعلية قبل التسليم.
    • تستخدم تشغيلات cron المعزولة بيانات وصفية منظمة لرفض التنفيذ من التشغيل المضمن، بما في ذلك أغلفة node-host UNAVAILABLE التي تبدأ رسالة الخطأ المتداخلة فيها بـ SYSTEM_RUN_DENIED أو INVALID_REQUEST، بحيث لا يُبلّغ عن أمر محظور كتشغيل ناجح، بينما لا يُعامل نثر المساعد العادي كرفض.
    • تتعامل تشغيلات cron المعزولة أيضًا مع إخفاقات الوكيل على مستوى التشغيل كأخطاء مهام حتى عندما لا تُنتج حمولة رد، بحيث تزيد إخفاقات النموذج/المزوّد عدادات الأخطاء وتطلق إشعارات الفشل بدلًا من اعتبار المهمة ناجحة.
    • عندما تصل مهمة دورة وكيل معزولة إلى timeoutSeconds، يجهض cron تشغيل الوكيل الأساسي ويمنحه نافذة تنظيف قصيرة. إذا لم يُفرّغ التشغيل، فإن التنظيف المملوك لـ Gateway يزيل قسرًا ملكية جلسة ذلك التشغيل قبل أن يسجل cron انتهاء المهلة، حتى لا يبقى عمل الدردشة المنتظر خلف جلسة معالجة قديمة.
    • إذا توقفت دورة وكيل معزولة قبل بدء المشغل أو قبل أول استدعاء للنموذج، يسجل cron انتهاء مهلة خاصًا بالمرحلة مثل setup timed out before runner start أو stalled before first model call (last phase: context-engine). تغطي هذه المراقبات المزوّدين المضمنين والمزوّدين المدعومين بـ CLI قبل بدء عملية CLI الخارجية فعليًا، وتُحدد بسقوف مستقلة عن قيم timeoutSeconds الطويلة حتى تظهر إخفاقات البدء البارد/المصادقة/السياق بسرعة بدلًا من انتظار ميزانية المهمة الكاملة.
    • إذا كنت تستخدم cron النظامي أو مجدولًا خارجيًا آخر لتشغيل openclaw agent، فغلّفه بتصعيد قتل صارم حتى لو كان CLI يتعامل مع SIGTERM/SIGINT. تطلب التشغيلات المدعومة بـ Gateway من Gateway إجهاض التشغيلات المقبولة؛ وتتلقى تشغيلات الرجوع المحلية والمضمنة إشارة الإجهاض نفسها. بالنسبة إلى GNU timeout، فضّل timeout -k 60 600 openclaw agent ... على timeout 600 ... فقط؛ فقيمة -k هي مسند المشرف إذا تعذر تفريغ العملية. بالنسبة إلى وحدات systemd، حافظ على الشكل نفسه باستخدام إشارة إيقاف SIGTERM مع نافذة سماح مثل TimeoutStopSec قبل أي قتل نهائي. إذا أعادت محاولة استخدام --run-id بينما ما زال تشغيل Gateway الأصلي نشطًا، يُبلّغ عن النسخة المكررة على أنها قيد التنفيذ بدلًا من بدء تشغيل ثانٍ.

    أنواع الجداول

    النوع علم CLI الوصف
    at --at طابع زمني لمرة واحدة (ISO 8601 أو نسبي مثل 20m)
    every --every فاصل ثابت
    cron --cron تعبير cron من 5 حقول أو 6 حقول مع --tz اختياري

    تُعامل الطوابع الزمنية من دون منطقة زمنية على أنها UTC. أضف --tz America/New_York للجدولة حسب وقت الحائط المحلي.

    تُزاح تعبيرات التكرار عند رأس الساعة تلقائيًا بما يصل إلى 5 دقائق لتقليل ذروات الحمل. استخدم --exact لفرض توقيت دقيق أو --stagger 30s لنافذة صريحة.

    يستخدم يوم الشهر ويوم الأسبوع منطق OR

    تُحلل تعبيرات Cron بواسطة croner. عندما لا يكون حقلا يوم الشهر ويوم الأسبوع حرفي بدل، يطابق croner عندما يطابق أي من الحقلين، وليس كلاهما. هذا هو سلوك Vixie cron القياسي.

    Code
    # Intended: "9 AM on the 15th, only if it's a Monday"# Actual:   "9 AM on every 15th, AND 9 AM on every Monday"0 9 15 * 1

    ينطلق هذا نحو 5-6 مرات في الشهر بدلًا من 0-1 مرة في الشهر. يستخدم OpenClaw هنا سلوك OR الافتراضي في Croner. لاشتراط تحقق الشرطين، استخدم معدّل يوم الأسبوع + في Croner (0 9 15 * +1) أو جدوِل على أحد الحقلين واحرس الآخر في مطالبة مهمتك أو أمرها.

    أنماط التنفيذ

    النمط قيمة --session يعمل في الأنسب لـ
    الجلسة الرئيسية main مسار إيقاظ cron مخصص التذكيرات، أحداث النظام
    معزول isolated cron:<jobId> مخصص التقارير، الأعمال الخلفية
    الجلسة الحالية current مرتبط عند وقت الإنشاء العمل المتكرر الواعي بالسياق
    جلسة مخصصة session:custom-id جلسة مسماة مستمرة سير العمل الذي يبني على السجل
    Main session vs isolated vs custom

    تضيف مهام الجلسة الرئيسية حدث نظام إلى مسار تشغيل مملوك لـ cron وتوقظ Heartbeat اختياريًا (--wake now أو --wake next-heartbeat). يمكنها استخدام آخر سياق تسليم للجلسة الرئيسية المستهدفة للردود، لكنها لا تضيف دورات cron الروتينية إلى مسار دردشة الإنسان ولا تمدد حداثة إعادة الضبط اليومية/الخاملة للجلسة المستهدفة. تعمل المهام المعزولة كدورة وكيل مخصصة مع جلسة جديدة. تحتفظ الجلسات المخصصة (session:xxx) بالسياق عبر التشغيلات، مما يتيح سير عمل مثل الاجتماعات اليومية التي تبني على الملخصات السابقة.

    أحداث cron للجلسة الرئيسية هي تذكيرات أحداث نظام قائمة بذاتها. إنها لا تتضمن تلقائيًا تعليمة مطالبة Heartbeat الافتراضية "Read HEARTBEAT.md". إذا كان ينبغي لتذكير متكرر الرجوع إلى HEARTBEAT.md، فاذكر ذلك صراحة في نص حدث cron أو في تعليمات الوكيل نفسه.

    What 'fresh session' means for isolated jobs

    بالنسبة إلى المهام المعزولة، تعني "الجلسة الجديدة" معرف نسخة/جلسة جديدًا لكل تشغيل. قد يحمل OpenClaw تفضيلات آمنة مثل إعدادات التفكير/السرعة/الإسهاب، والتسميات، وتجاوزات النموذج/المصادقة المختارة صراحة من المستخدم، لكنه لا يرث سياق محادثة محيطًا من صف cron أقدم: توجيه القناة/المجموعة، وسياسة الإرسال أو قائمة الانتظار، والرفع، والأصل، أو ربط وقت تشغيل ACP. استخدم current أو session:<id> عندما ينبغي لمهمة متكررة أن تبني عمدًا على سياق المحادثة نفسه.

    Runtime cleanup

    بالنسبة إلى المهام المعزولة، يتضمن تفكيك وقت التشغيل الآن تنظيفًا للمتصفح، قدر الإمكان، لجلسة cron تلك. يتم تجاهل إخفاقات التنظيف حتى تبقى نتيجة cron الفعلية هي الحاسمة.

    تتخلص تشغيلات cron المعزولة أيضًا من أي نُسخ وقت تشغيل MCP مضمّنة أُنشئت للمهمة عبر مسار تنظيف وقت التشغيل المشترك. يطابق هذا طريقة تفكيك عملاء MCP للجلسة الرئيسية والجلسة المخصصة، بحيث لا تُسرّب مهام cron المعزولة عمليات فرعية عبر stdio أو اتصالات MCP طويلة العمر عبر التشغيلات.

    Subagent and Discord delivery

    عندما تنسق تشغيلات cron المعزولة وكلاء فرعيين، يفضل التسليم أيضًا مخرج التابع النهائي على النص المؤقت القديم من الأصل. إذا كانت التوابع ما زالت قيد التشغيل، يكتم OpenClaw ذلك التحديث الجزئي من الأصل بدلًا من إعلانه.

    بالنسبة إلى أهداف إعلان Discord النصية فقط، يرسل OpenClaw نص المساعد النهائي القانوني مرة واحدة بدلًا من إعادة تشغيل كل من حمولات النص المتدفقة/الوسيطة والإجابة النهائية. ما زال يتم تسليم وسائط وحمولات Discord المنظمة كحمولات منفصلة حتى لا تُسقط المرفقات والمكونات.

    حمولات الأوامر

    استخدم حمولات الأوامر للسكربتات الحتمية التي ينبغي أن تعمل داخل مجدول Gateway دون بدء دورة وكيل معزولة مدعومة بنموذج. تُنفذ مهام الأوامر على مضيف Gateway، وتلتقط stdout/stderr، وتسجل التشغيل في سجل cron، وتعيد استخدام أوضاع التسليم نفسها announce وwebhook وnone كالمهام المعزولة.

    bash
    openclaw cron create "*/15 * * * *" \  --name "Queue depth probe" \  --command "scripts/check-queue.sh" \  --command-cwd "/srv/app" \  --announce \  --channel telegram \  --to "-1001234567890"

    يخزن --command <shell> القيمة argv: ["sh", "-lc", <shell>]. استخدم --command-argv '["node","scripts/report.mjs"]' عندما تريد تنفيذ argv دقيقًا دون تحليل shell. تتحكم الحقول الاختيارية --command-env KEY=VALUE و--command-input و--timeout-seconds و--no-output-timeout-seconds و--output-max-bytes في بيئة العملية وstdin وحدود المخرجات.

    إذا كان stdout غير فارغ، فذلك النص هو النتيجة المسلّمة. إذا كان stdout فارغًا وكان stderr غير فارغ، فسيتم تسليم stderr. إذا كان كلا الدفقين موجودين، يسلّم cron كتلة صغيرة stdout: / stderr:. يسجّل رمز خروج صفري التشغيل على أنه ok؛ أما الخروج غير الصفري أو الإشارة أو انتهاء المهلة أو انتهاء مهلة عدم وجود مخرجات فيسجّل error ويمكن أن يؤدي إلى تشغيل تنبيهات الفشل. الأمر الذي يطبع NO_REPLY فقط يستخدم كبت رمز الصمت العادي في cron ولا ينشر أي شيء مرة أخرى في الدردشة.

    خيارات الحمولة للمهام المعزولة

    --messagestringrequired

    نص الموجّه (مطلوب للمعزول).

    --modelstring

    تجاوز النموذج؛ يستخدم النموذج المسموح المحدد للمهمة.

    --fallbacksstring

    قائمة نماذج احتياطية لكل مهمة، مثل --fallbacks openrouter/gpt-4.1-mini,openai/gpt-5. مرّر --fallbacks "" لتشغيل صارم بلا احتياطيات.

    --clear-fallbacksboolean

    عند cron edit، يزيل تجاوز الاحتياطي لكل مهمة بحيث تتبع المهمة أسبقية الاحتياطي المكوّنة. لا يمكن دمجه مع --fallbacks.

    --clear-modelboolean

    عند cron edit، يزيل تجاوز النموذج لكل مهمة بحيث تتبع المهمة أسبقية اختيار النموذج العادية في cron (تجاوز جلسة cron مخزّن إن كان مضبوطًا، وإلا نموذج الوكيل/الافتراضي). لا يمكن دمجه مع --model.

    --thinkingstring

    تجاوز مستوى التفكير.

    --clear-thinkingboolean

    عند cron edit، يزيل تجاوز التفكير لكل مهمة بحيث تتبع المهمة أسبقية التفكير العادية في cron. لا يمكن دمجه مع --thinking.

    --light-contextboolean

    تخطَّ حقن ملفات تمهيد مساحة العمل.

    --toolsstring

    قيّد الأدوات التي يمكن للمهمة استخدامها، مثل --tools exec,read.

    يستخدم --model النموذج المسموح المحدد كنموذج أساسي لتلك المهمة. وهو ليس مثل تجاوز /model في جلسة دردشة: لا تزال سلاسل الاحتياطي المكوّنة تنطبق عندما يفشل النموذج الأساسي للمهمة. إذا لم يكن النموذج المطلوب مسموحًا به أو تعذّر حله، يفشل cron التشغيل بخطأ تحقق صريح بدل الرجوع بصمت إلى اختيار نموذج الوكيل/الافتراضي الخاص بالمهمة.

    يمكن لمهام Cron أيضًا حمل fallbacks على مستوى الحمولة. عند وجودها، تستبدل تلك القائمة سلسلة الاحتياطي المكوّنة للمهمة. استخدم fallbacks: [] في حمولة المهمة/API عندما تريد تشغيل Cron صارمًا يجرّب النموذج المحدد فقط. إذا كانت المهمة تحتوي على --model ولكن لا توجد احتياطيات في الحمولة ولا احتياطيات مكوّنة، يمرّر OpenClaw تجاوز احتياطي فارغًا صريحًا حتى لا يُضاف النموذج الأساسي للوكيل كهدف إعادة محاولة إضافي مخفي.

    تفحص اختبارات التمهيد المسبق للمزوّد المحلي الاحتياطيات المكوّنة قبل وسم تشغيل Cron بأنه skipped؛ يبقي fallbacks: [] مسار التمهيد المسبق هذا صارمًا.

    أسبقية اختيار النموذج للمهام المعزولة هي:

    1. تجاوز نموذج ربط Gmail (عندما يأتي التشغيل من Gmail ويكون ذلك التجاوز مسموحًا)
    2. model في حمولة كل مهمة
    3. تجاوز نموذج جلسة Cron المخزّن المحدد من المستخدم
    4. اختيار نموذج الوكيل/الافتراضي

    يتبع الوضع السريع الاختيار الحي المحلول أيضًا. إذا كان تكوين النموذج المحدد يحتوي على params.fastMode، يستخدمه Cron المعزول افتراضيًا. يظل تجاوز fastMode لجلسة مخزّنة متقدمًا على التكوين في كلا الاتجاهين. يستخدم الوضع التلقائي حد params.fastAutoOnSeconds للنموذج المحدد عند وجوده، ويكون الافتراضي 60 ثانية.

    إذا صادف تشغيل معزول تسليم تبديل نموذج حي، يعيد cron المحاولة بالمزوّد/النموذج الذي تم التبديل إليه ويحفظ ذلك الاختيار الحي للتشغيل النشط قبل إعادة المحاولة. عندما يحمل التبديل أيضًا ملف تعريف مصادقة جديدًا، يحفظ cron تجاوز ملف تعريف المصادقة ذلك للتشغيل النشط أيضًا. إعادة المحاولات محدودة: بعد المحاولة الأولية إضافة إلى محاولتي تبديل، يُجهض cron بدل الدوران إلى الأبد.

    قبل أن يدخل تشغيل Cron معزول إلى مشغّل الوكيل، يتحقق OpenClaw من نقاط نهاية المزوّدين المحليين القابلة للوصول للمزوّدين المكوّنين api: "ollama" وapi: "openai-completions" الذين يكون baseUrl لديهم local loopback أو شبكة خاصة أو .local. إذا كانت نقطة النهاية تلك متوقفة، يُسجّل التشغيل على أنه skipped مع خطأ واضح للمزوّد/النموذج بدل بدء استدعاء نموذج. تُخزّن نتيجة نقطة النهاية مؤقتًا لمدة 5 دقائق، لذلك تشترك عدة مهام مستحقة تستخدم خادم Ollama أو vLLM أو SGLang أو LM Studio المحلي نفسه المتوقف في مسبار صغير واحد بدل إنشاء عاصفة طلبات. لا تزيد عمليات التشغيل التي تم تخطيها في تمهيد المزوّد المسبق تراجع أخطاء التنفيذ؛ فعّل failureAlert.includeSkipped عندما تريد إشعارات تخطٍّ متكررة.

    التسليم والمخرجات

    الوضع ما يحدث
    announce تسليم احتياطي للنص النهائي إلى الهدف إذا لم يرسل الوكيل
    webhook POST حمولة حدث الانتهاء إلى URL
    none لا يوجد تسليم احتياطي من المشغّل

    استخدم --announce --channel telegram --to "-1001234567890" للتسليم إلى قناة. لموضوعات منتدى Telegram، استخدم -1001234567890:topic:123؛ يقبل OpenClaw أيضًا الاختصار المملوك من Telegram -1001234567890:123. يمكن لمستدعي RPC/التكوين المباشرين تمرير delivery.threadId كسلسلة أو رقم. يجب أن تستخدم أهداف Slack/Discord/Mattermost بادئات صريحة (channel:<id>، user:<id>). معرفات غرف Matrix حساسة لحالة الأحرف؛ استخدم معرف الغرفة الدقيق أو صيغة room:!room:server من Matrix.

    عندما يستخدم تسليم الإعلان channel: "last" أو يحذف channel، يمكن لهدف ذي بادئة مزوّد مثل telegram:123 اختيار القناة قبل أن يرجع cron إلى سجل الجلسة أو قناة مكوّنة واحدة. البادئات التي يعلن عنها Plugin المحمّل فقط هي محددات مزوّد. إذا كان delivery.channel صريحًا، فيجب أن تسمي بادئة الهدف المزوّد نفسه؛ على سبيل المثال، يُرفض channel: "whatsapp" مع to: "telegram:123" بدل السماح لـ WhatsApp بتفسير معرف Telegram كرقم هاتف. تظل بادئات نوع الهدف والخدمة مثل channel:<id> وuser:<id> وimessage:<handle> وsms:<number> صيغة أهداف مملوكة للقناة، وليست محددات مزوّد.

    بالنسبة للمهام المعزولة، يكون تسليم الدردشة مشتركًا. إذا كان مسار دردشة متاحًا، يمكن للوكيل استخدام أداة message حتى عندما تستخدم المهمة --no-deliver. إذا أرسل الوكيل إلى الهدف المكوّن/الحالي، يتخطى OpenClaw إعلان الاحتياطي. وإلا فإن announce وwebhook وnone تتحكم فقط فيما يفعله المشغّل بالرد النهائي بعد دور الوكيل.

    عندما ينشئ وكيل تذكيرًا معزولًا من دردشة نشطة، يخزّن OpenClaw هدف التسليم الحي المحفوظ لمسار إعلان الاحتياطي. قد تكون مفاتيح الجلسة الداخلية بأحرف صغيرة؛ لا تُعاد إعادة بناء أهداف تسليم المزوّدين من تلك المفاتيح عندما يكون سياق الدردشة الحالي متاحًا.

    يستخدم تسليم الإعلان الضمني قوائم السماح للقنوات المكوّنة للتحقق من الأهداف القديمة وإعادة توجيهها. موافقات مخزن اقتران الرسائل المباشرة ليست مستلمي أتمتة احتياطية؛ عيّن delivery.to أو كوّن إدخال allowFrom للقناة عندما يجب أن ترسل مهمة مجدولة بشكل استباقي إلى رسالة مباشرة.

    لغة المخرجات

    لا تستنتج مهام Cron لغة الرد من القناة أو الإعداد المحلي أو الرسائل السابقة. ضع قاعدة اللغة في الرسالة أو القالب المجدول:

    bash
    openclaw cron edit <jobId> \  --message "Summarize the updates. Respond in Chinese; keep URLs, code, and product names unchanged."

    بالنسبة لملفات القوالب، أبقِ تعليمة اللغة في الموجّه المعروض وتحقق من ملء العناصر النائبة مثل {{language}} قبل تشغيل المهمة. إذا مزجت المخرجات بين اللغات، فاجعل القاعدة صريحة، مثل: "Use Chinese for narrative text and keep technical terms in English."

    تتبع إشعارات الفشل مسار وجهة منفصلًا:

    • يعيّن cron.failureDestination افتراضيًا عامًا لإشعارات الفشل.
    • يتجاوز job.delivery.failureDestination ذلك لكل مهمة.
    • إذا لم يُضبط أي منهما وكانت المهمة تسلّم بالفعل عبر announce، ترجع إشعارات الفشل الآن إلى هدف الإعلان الأساسي ذلك.
    • لا يكون delivery.failureDestination مدعومًا إلا في مهام sessionTarget="isolated" ما لم يكن وضع التسليم الأساسي webhook.
    • يختار failureAlert.includeSkipped: true لمهمة أو سياسة تنبيه Cron عالمية الدخول في تنبيهات التشغيل المتخطى المتكررة. تحتفظ عمليات التشغيل المتخطاة بعداد تخطٍ متتالٍ منفصل، لذلك لا تؤثر في تراجع أخطاء التنفيذ.

    أمثلة CLI

    One-shot reminder

    bash
    openclaw cron add \  --name "Calendar check" \  --at "20m" \  --session main \  --system-event "Next heartbeat: check calendar." \  --wake now

    Recurring isolated job

    bash
    openclaw cron create "0 7 * * *" \  "Summarize overnight updates." \  --name "Morning brief" \  --tz "America/Los_Angeles" \  --session isolated \  --announce \  --channel slack \  --to "channel:C1234567890"

    Model and thinking override

    bash
    openclaw cron add \  --name "Deep analysis" \  --cron "0 6 * * 1" \  --tz "America/Los_Angeles" \  --session isolated \  --message "Weekly deep analysis of project progress." \  --model "opus" \  --thinking high \  --announce

    Webhook output

    bash
    openclaw cron create "0 18 * * 1-5" \  "Summarize today's deploys as JSON." \  --name "Deploy digest" \  --webhook "https://example.invalid/openclaw/cron"

    Command output

    bash
    openclaw cron create "*/15 * * * *" \  --name "Queue depth probe" \  --command "scripts/check-queue.sh" \  --command-cwd "/srv/app" \  --announce \  --channel telegram \  --to "-1001234567890"

    Webhooks

    يمكن لـ Gateway كشف نقاط نهاية Webhook عبر HTTP للمشغلات الخارجية. فعّلها في التكوين:

    json5
    {  hooks: {    enabled: true,    token: "shared-secret",    path: "/hooks",  },}

    المصادقة

    يجب أن يتضمن كل طلب رمز الربط عبر الترويسة:

    • Authorization: Bearer <token> (موصى به)
    • x-openclaw-token: <token>

    تُرفض رموز سلسلة الاستعلام.

    POST /hooks/wake

    أدرج حدث نظام في طابور الجلسة الرئيسية:

    bash
    curl -X POST http://127.0.0.1:18789/hooks/wake \  -H 'Authorization: Bearer SECRET' \  -H 'Content-Type: application/json' \  -d '{"text":"New email received","mode":"now"}'
    textstringrequired

    وصف الحدث.

    modestringdefault: now

    now أو next-heartbeat.

    POST /hooks/agent

    شغّل دور وكيل معزول:

    bash
    curl -X POST http://127.0.0.1:18789/hooks/agent \  -H 'Authorization: Bearer SECRET' \  -H 'Content-Type: application/json' \  -d '{"message":"Summarize inbox","name":"Email","model":"openai/gpt-5.4"}'

    الحقول: message (مطلوب)، name، agentId، wakeMode، deliver، channel، to، model، fallbacks، thinking، timeoutSeconds.

    OPENCLAW_DOCS_MARKER:accordionOpen:IHRpdGxlPSJNYXBwZWQgaG9va3MgKFBPU1QgL2hvb2tzLzxuYW1l )"> تُحل أسماء الروابط المخصصة عبر hooks.mappings في التكوين. يمكن للتعيينات تحويل أي حمولات إلى إجراءات wake أو agent باستخدام قوالب أو تحويلات برمجية.

    تكامل Gmail PubSub

    اربط مشغّلات صندوق وارد Gmail بـ OpenClaw عبر Google PubSub.

    إعداد المعالج (موصى به)

    bash
    openclaw webhooks gmail setup --account openclaw@gmail.com

    يكتب هذا إعدادات hooks.gmail، ويفعّل الإعداد المسبق لـ Gmail، ويستخدم Tailscale Funnel لنقطة نهاية الدفع.

    بدء Gateway تلقائيًا

    عندما يكون hooks.enabled=true وhooks.gmail.account مضبوطًا، يبدأ Gateway تشغيل gog gmail watch serve عند الإقلاع ويجدد المراقبة تلقائيًا. اضبط OPENCLAW_SKIP_GMAIL_WATCHER=1 لإلغاء الاشتراك.

    إعداد يدوي لمرة واحدة

  • اختيار مشروع GCP

    اختر مشروع GCP الذي يملك عميل OAuth المستخدم بواسطة gog:

    bash
    gcloud auth logingcloud config set project <project-id>gcloud services enable gmail.googleapis.com pubsub.googleapis.com
  • إنشاء موضوع ومنح Gmail صلاحية وصول الدفع

    bash
    gcloud pubsub topics create gog-gmail-watchgcloud pubsub topics add-iam-policy-binding gog-gmail-watch \  --member=serviceAccount:gmail-api-push@system.gserviceaccount.com \  --role=roles/pubsub.publisher
  • بدء المراقبة

    bash
    gog gmail watch start \  --account openclaw@gmail.com \  --label INBOX \  --topic projects/<project-id>/topics/gog-gmail-watch
  • تجاوز نموذج Gmail

    json5
    {  hooks: {    gmail: {      model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",      thinking: "off",    },  },}

    إدارة المهام

    bash
    # سرد كل المهامopenclaw cron list # جلب مهمة واحدة مخزنة بصيغة JSONopenclaw cron get <jobId> # عرض مهمة واحدة، بما في ذلك مسار التسليم المحلولopenclaw cron show <jobId> # تعديل مهمةopenclaw cron edit <jobId> --message "Updated prompt" --model "opus" # فرض تشغيل مهمة الآنopenclaw cron run <jobId> # فرض تشغيل مهمة الآن وانتظار حالتها النهائيةopenclaw cron run <jobId> --wait --wait-timeout 10m --poll-interval 2s # التشغيل فقط إذا كان موعدها قد حانopenclaw cron run <jobId> --due # عرض سجل التشغيلopenclaw cron runs --id <jobId> --limit 50 # عرض تشغيل محدد بدقةopenclaw cron runs --id <jobId> --run-id <runId> # حذف مهمةopenclaw cron remove <jobId> # اختيار الوكيل (إعدادات متعددة الوكلاء)openclaw cron create "0 6 * * *" "Check ops queue" --name "Ops sweep" --session isolated --agent opsopenclaw cron edit <jobId> --clear-agent

    يعيد openclaw cron run <jobId> بعد وضع التشغيل اليدوي في الصف. استخدم --wait لخطّافات الإيقاف، أو سكربتات الصيانة، أو أي أتمتة أخرى يجب أن تحجب التنفيذ حتى ينتهي التشغيل الموجود في الصف. يستطلع وضع الانتظار runId المُعاد بدقة؛ ويخرج بالقيمة 0 للحالة ok وبقيمة غير صفرية للحالات error أو skipped أو انتهاء مهلة الانتظار.

    تعيد أداة الوكيل cron ملخصات مهام مضغوطة (id، name، enabled، nextRunAtMs، scheduleKind، lastRunStatus) من cron(action: "list")؛ استخدم cron(action: "get", jobId: "...") لتعريف مهمة كامل واحد. يمكن لمستدعي Gateway المباشرين تمرير compact: true إلى cron.list؛ ويؤدي حذفها إلى الحفاظ على الاستجابة الكاملة الحالية مع معاينات التسليم.

    openclaw cron create هو اسم بديل لـ openclaw cron add، ويمكن للمهام الجديدة استخدام جدولة موضعية ("0 9 * * 1" أو "every 1h" أو "20m" أو طابع زمني ISO) يليها موجّه وكيل موضعي. استخدم --webhook <url> على cron add|create أو cron edit لإرسال حمولة التشغيل المكتمل بطريقة POST إلى نقطة نهاية HTTP. لا يمكن جمع تسليم Webhook مع أعلام تسليم الدردشة مثل --announce أو --channel أو --to أو --thread-id أو --account. في cron edit، تلغي --clear-channel و--clear-to و--clear-thread-id و--clear-account ضبط حقول التوجيه هذه كلٌّ على حدة (ويُرفض كل منها مع علم الضبط المطابق له)، وهذا يختلف عن تعطيل --no-deliver لتسليم الرجوع الاحتياطي الخاص بالمشغّل.

    الإعداد

    json5
    {  cron: {    enabled: true,    store: "~/.openclaw/cron/jobs.json",    maxConcurrentRuns: 8,    retry: {      maxAttempts: 3,      backoffMs: [60000, 120000, 300000],      retryOn: ["rate_limit", "overloaded", "network", "server_error"],    },    webhookToken: "replace-with-dedicated-webhook-token",    sessionRetention: "24h",    runLog: { maxBytes: "2mb", keepLines: 2000 },  },}

    يحد maxConcurrentRuns كلًا من إرسال Cron المجدول وتنفيذ دورات الوكيل المعزولة، وقيمته الافتراضية 8. تستخدم دورات وكيل Cron المعزولة داخليًا مسار تنفيذ cron-nested المخصص للصف، لذا فإن رفع هذه القيمة يسمح لعمليات تشغيل LLM الخاصة بـ Cron والمستقلة بالتقدم بالتوازي بدلًا من الاكتفاء ببدء أغلفة Cron الخارجية. لا يوسّع هذا الإعداد مسار nested المشترك غير الخاص بـ Cron.

    cron.store هو مفتاح مخزن منطقي ومسار استيراد قديم عبر doctor. شغّل openclaw doctor --fix لاستيراد مخازن JSON الحالية إلى SQLite وأرشفتها؛ وينبغي أن تمر تغييرات Cron المستقبلية عبر CLI أو API Gateway.

    تعطيل Cron: cron.enabled: false أو OPENCLAW_SKIP_CRON=1.

    سلوك إعادة المحاولة

    إعادة محاولة لمرة واحدة: يُعاد محاولة الأخطاء العابرة (حد المعدل، الحمل الزائد، الشبكة، خطأ الخادم) حتى 3 مرات مع تراجع أسي. تؤدي الأخطاء الدائمة إلى التعطيل فورًا.

    إعادة محاولة متكررة: تراجع أسي (من 30ث إلى 60د) بين المحاولات. يُعاد ضبط التراجع بعد التشغيل الناجح التالي.

    الصيانة

    يزيل cron.sessionRetention (الافتراضي 24h) إدخالات جلسات التشغيل المعزولة القديمة. يحد cron.runLog.keepLines صفوف سجل التشغيل المحتفظ بها في SQLite لكل مهمة؛ ويتم الاحتفاظ بـ maxBytes للتوافق في الإعداد مع سجلات التشغيل القديمة المدعومة بالملفات.

    استكشاف الأخطاء وإصلاحها

    سلّم الأوامر

    bash
    openclaw statusopenclaw gateway statusopenclaw cron statusopenclaw cron listopenclaw cron runs --id <jobId> --limit 20openclaw system heartbeat lastopenclaw logs --followopenclaw doctor
    Cron لا يبدأ
    • تحقق من cron.enabled ومتغير البيئة OPENCLAW_SKIP_CRON.
    • تأكد من أن Gateway يعمل باستمرار.
    • بالنسبة إلى جداول cron، تحقق من المنطقة الزمنية (--tz) مقابل المنطقة الزمنية للمضيف.
    • يعني reason: not-due في مخرجات التشغيل أن التشغيل اليدوي فُحص باستخدام openclaw cron run <jobId> --due وأن موعد المهمة لم يحن بعد.
    Cron بدأ لكن بلا تسليم
    • يعني وضع التسليم none أنه لا يُتوقع إرسال رجوع احتياطي من المشغّل. لا يزال بإمكان الوكيل الإرسال مباشرة باستخدام أداة message عند توفر مسار دردشة.
    • يعني هدف التسليم المفقود/غير الصالح (channel/to) أن الإرسال الصادر تم تخطيه.
    • بالنسبة إلى Matrix، يمكن أن تفشل المهام المنسوخة أو القديمة ذات معرّفات غرف delivery.to المكتوبة بأحرف صغيرة لأن معرّفات غرف Matrix حساسة لحالة الأحرف. عدّل المهمة إلى قيمة !room:server أو room:!room:server الدقيقة من Matrix.
    • تعني أخطاء مصادقة القناة (unauthorized، Forbidden) أن التسليم حُظر بسبب بيانات الاعتماد.
    • إذا كان التشغيل المعزول يعيد الرمز الصامت فقط (NO_REPLY / no_reply)، فإن OpenClaw يمنع التسليم الصادر المباشر ويمنع أيضًا مسار ملخص الصف الاحتياطي، لذلك لا يُنشر شيء مرة أخرى في الدردشة.
    • إذا كان ينبغي للوكيل مراسلة المستخدم بنفسه، فتحقق من أن لدى المهمة مسارًا قابلًا للاستخدام (channel: "last" مع دردشة سابقة، أو قناة/هدف صريح).
    يبدو أن Cron أو Heartbeat يمنع انتقال نمط /new
    • لا تعتمد حداثة إعادة الضبط اليومية والخاملة على updatedAt؛ راجع إدارة الجلسات.
    • قد تحدّث إيقاظات Cron، وتشغيلات Heartbeat، وإشعارات exec، ومسك دفاتر Gateway صف الجلسة للتوجيه/الحالة، لكنها لا تمدد sessionStartedAt أو lastInteractionAt.
    • بالنسبة إلى الصفوف القديمة التي أُنشئت قبل وجود هذه الحقول، يستطيع OpenClaw استعادة sessionStartedAt من ترويسة جلسة transcript JSONL عندما يظل الملف متاحًا. تستخدم صفوف الخمول القديمة بلا lastInteractionAt وقت البدء المستعاد هذا كأساس خمول لها.
    مزالق المناطق الزمنية
    • يستخدم Cron بدون --tz المنطقة الزمنية لمضيف Gateway.
    • تُعامل جداول at بلا منطقة زمنية على أنها UTC.
    • يستخدم Heartbeat activeHours حل المنطقة الزمنية المضبوط.

    ذات صلة

    Was this useful?
    On this page

    On this page