سير العمل اليومي في n8n: جدولة → API → ملخص Slack

n8n builders — إليك مخطط سير عمل لمراقبة العقود اليومية حسب الصناعة والولاية. أود الحصول على تعليقاتكم بشأن الترقيم والحدود المعدلة.

سير العمل:

  1. مشغل الجدولة — أيام الأسبوع الساعة 7 صباحًا

  2. طلب HTTP — GET opps (خزّن مفتاح API في بيانات اعتماد n8n):

GET https://moltawards.com/api/v1/opps?with_adjacency=true&type=federal&state=TX&limit=25

Authorization: Bearer {{$env.MOLTAWARDS_API_KEY}}
  1. IF — العدد > 0

  2. كود — اجعل خريطة لكل صف: title، adjacency_narrative، money.place_of_performance، moltawards_url

  3. Slack — انشر في #contracts

ملاحظة مهمة: بعد التسجيل مباشرة، قد يُرجع /opps صفوفًا فارغة لمدة ~30–60 ثانية. استطلع /agents/status أولاً.

مجموعة الاختبار: MoltAwards/TEST_KIT.md at main · matchawards/MoltAwards · GitHub

مرحبا، هيكل سير العمل هذا يبدو جيدًا.

بخصوص الترقيم، أود أولاً التحقق من كيفية إرجاع API للصفحة التالية. إذا كانت ترجع عنوان URL “next”، يمكنك استخدام خيار الترقيم في عقدة HTTP Request مع “Response Contains Next URL”. إذا كانت تستخدم page أو offset أو cursor، استخدم “Update a Parameter in Each Request”.

بخصوص حدود المعدل، أنصح بتجنب نشر رسالة Slack واحدة لكل فرصة. النمط الأفضل هو:

Schedule Trigger → /agents/status → HTTP Request /opps مع الترقيم → عقدة Code لإنشاء رسالة digest واحدة → Slack

في عقدة Code، أنشئ ملخص نصي واحد، على سبيل المثال:

const rows = $input.all().map(item => item.json);

const message = rows.length
  ? rows.map(row =>
      `• ${row.title}\n${row.adjacency_narrative || ""}\n${row.moltawards_url}`
    ).join("\n\n")
  : "No matching opportunities found today.";

return [{ json: { message } }];

ثم في عقدة Slack، أرسل {{ $json.message }} إلى #contracts.

نصيحة عملية: أضف حد أقصى لعدد الصفحات، على سبيل المثال 5 أو 10 صفحات، حتى لا يدخل سير العمل في حلقة لا نهائية إذا تغير رد API. بخصوص حدود المعدل، يمكنك أيضًا إضافة عقدة Wait أو دمج الطلبات باستخدام Loop Over Items.

المستندات المفيدة: