Workflow فحص حالة المواقع في n8n

أتمتة جاهزة للاستيراد في n8n تستقبل طلب التشغيل، تُنفّذ طلبات HTTP حقيقية للمواقع الثلاثة، ثم تُعيد النتائج إلى Project OS عبر Callback.

الاستيراد

1. افتح n8n ثم اختر Workflows ← Import from File. 2. حدّد الملف n8n/site-check-workflow.json. 3. فعّل الـ Workflow (زر Active) ليعمل الـ Webhook على المسار:

POST /webhook/site-check
في وضع الاختبار يكون المسار /webhook-test/site-check ويحتاج ضغطة Execute workflow مرة واحدة.

شكل الطلب

{
  "runId": "معرّف التشغيل من Project OS",
  "callbackUrl": "رابط استقبال النتائج في Project OS",
  "sites": [
    { "label": "Project OS", "url": "https://projectos.smvapp.cloud" },
    { "label": "n8n", "url": "https://n8n.smvapp.cloud" },
    { "label": "Student Tutor", "url": "https://student.smvapp.cloud" }
  ]
}

شكل الاستجابة (عقد site.check)

{
  "runId": "…",
  "kind": "site.check",
  "completedAt": "2026-09-12T13:30:00.000Z",
  "summary": { "total": 3, "ok": 2, "down": 1 },
  "results": [
    {
      "url": "https://projectos.smvapp.cloud",
      "label": "Project OS",
      "ok": true,
      "statusCode": 200,
      "latencyMs": 145,
      "error": null
    }
  ]
}

تصنيف كل موقع في عقدة تجهيز نتيجة الفحص:

| الحقل | المعنى | | --- | --- | | ok: true | وصلت استجابة HTTP فعلية ورمزها أقل من 400 | | ok: false | خطأ شبكة (لم تصل استجابة، ويُوضع نص الخطأ في error) أو رمز 400 وأعلى | | statusCode | رمز HTTP عند توفره، وإلا null | | latencyMs | زمن الاستجابة بالملي ثانية، مقاس من لحظة بدء طلب ذلك الموقع مباشرة |

مسار العقد

طلب التشغيل (Webhook)
  → تجهيز طلب الفحص
  → توزيع المواقع
  → فحص موقعًا بموقع (Split In Batches، موقع واحد في كل دورة)
        ├ المخرج «loop»: توقيت بداية الفحص → طلب HTTP حقيقي (مهلة 10 ثوانٍ، لا يُوقف عند الخطأ)
        │                 → تجهيز نتيجة الفحص → يعود إلى الحلقة
        └ المخرج «done»: تجميع النتائج
             → هل يوجد رابط Callback؟
                  ├ نعم → إرسال النتائج إلى Project OS (POST إلى callbackUrl)
                  └ لا  → إرجاع النتائج للمُشغِّل (Respond to Webhook)

الفحص يمرّ على المواقع موقعًا بموقع حتى يُقاس زمن استجابة كل موقع بدقة (لحظة بدء الفحص تُسجَّل قبل طلب ذلك الموقع مباشرة)، وطلب HTTP لكل موقع لا يُوقف الـ Workflow عند الفشل بل يتحول إلى نتيجة ok: false.

ربط واجهة التطبيق

لا تستدعي الواجهة الـ Webhook مباشرة ولا تعرض أي مفاهيم n8n للمستخدم. زر «فحص المواقع الآن» في index.html يستدعي نقطة الأتمتة المُدارة في Project OS:

POST /api/app/automations/<automationId>/run
GET  /api/app/automations/runs/<runId>

يقوم Project OS بتشغيل الـ Workflow في n8n (HTTP Request حقيقي للمواقع الثلاثة)، ثم تستقبل الواجهة النتائج عبر الاستعلام الدوري عن حالة التشغيل وتطابقها مع البطاقات عبر حقل url وتعرضها. عند فشل التشغيل تُعرض رسالة الخطأ كما وردت، ولا تعرض الواجهة نتائج وهمية إطلاقًا.