تجمیع آگهی‌های شغلی از منابع مختلف در Supabase و Google Shee…

تجمیع آگهی‌های شغلی از منابع مختلف در Supabase و Google Shee…

8 دقیقه مطالعه · منتشر شده ۱۴۰۵/۴/۲۷

دانلود workflow

فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.

  1. فایل JSON را دانلود کنید.
  2. در n8n: Workflows → Import from File.
  3. Credentialهای هر node را متصل کنید.
  4. workflow را فعال کنید.

شناسه workflow: 14806 · منبع: کاتالوگ Axeto

تجمیع تابلوهای شغلی چند منبعی در Supabase و Google Sheets

این Workflow به صورت خودکار جمع‌آوری، نرمال‌سازی و همگام‌سازی آگهی‌های شغلی را از سیستم‌های مختلف ردیابی متقاضی (ATS) و تابلوهای شغلی جهانی به یک پایگاه داده متمرکز (Supabase) و یک صفحه گسترده ردیابی (Google Sheets) انجام می‌دهد.

این سیستم برای مدیریت ساختارهای داده‌ای بسیار ناسازگار در پلتفرم‌های مختلف طراحی شده است و از یک موتور نرمال‌سازی سفارشی برای اطمینان از اینکه تمام داده‌های خروجی از یک طرحواره واحد و سختگیرانه پیروی می‌کنند، استفاده می‌کند.

نمای کلی Workflow

این Workflow به سه بلوک منطقی تقسیم شده است:

1. کشف منبع و راه‌انداز (Trigger): اجرای زمان‌بندی شده را آغاز می‌کند و لیستی از شرکت‌های هدف و پلتفرم‌های ATS مربوطه را تعریف می‌کند.

2. درخواست و نرمال‌سازی: نقاط پایانی API را می‌سازد، صفحه‌بندی را مدیریت می‌کند، داده‌های خام را واکشی می‌کند و محموله‌های JSON متنوع را به یک فرمت استاندارد تبدیل می‌کند.

3. ذخیره‌سازی و خروجی: عملیات "upsert" (به‌روزرسانی یا درج) را برای جلوگیری از تکرار در Supabase و Google Sheets انجام می‌دهد.

---

تحلیل دقیق Workflow

۱. کشف منبع و راه‌انداز

این بلوک Workflow را بر اساس یک برنامه زمان‌بندی شده آغاز می‌کند و آرایه پیکربندی تابلوهای شغلی هدف را فراهم می‌کند.

  • گره‌های (Nodes) درگیر: ⏰ Daily 8AM IST، 📋 Company List، 🔄 Loop Batches (5)
  • جزئیات گره‌ها:

* ⏰ Daily 8AM IST (راه‌انداز زمان‌بندی): Workflow را روزانه در ساعت ۰۸:۰۰ IST راه‌اندازی می‌کند.

* 📋 Company List (Code): یک گره JavaScript که به عنوان یک رجیستری پیکربندی عمل می‌کند. این گره آرایه‌ای از اشیاء حاوی ats (نوع پلتفرم)، slug (شناسه شرکت) و company (نام نمایشی) را برمی‌گرداند. این گره منابع را به تابلوهای جهانی، Greenhouse، SmartRecruiters، Ashby، Workable، Lever و RemoteOK دسته‌بندی می‌کند.

* 🔄 Loop Batches (5) (Split In Batches): جریان پیکربندی‌های منبع را در دسته‌های ۵ تایی مدیریت می‌کند تا از محدودیت نرخ API یا timeout در مرحله درخواست HTTP جلوگیری شود.

۲. درخواست و نرمال‌سازی

این بلوک پیکربندی‌های شرکت را به فراخوانی‌های API واقعی ترجمه کرده و داده‌های خام حاصل را تجزیه می‌کند.

  • گره‌های (Nodes) درگیر: 🔧 Prepare Request، 🌐 HTTP Request، 🔍 Parse + Enrich + Filter1
  • جزئیات گره‌ها:

* 🔧 Prepare Request (Code):

* نقش فنی: سازنده URL و Header.

منطق: نوع ats را به یک نقطه پایانی API خاص نگاشت می‌کند. منطق صفحه‌بندی را برای SmartRecruiters (مبتنی بر offset) و Himalayas* (مبتنی بر page) پیاده‌سازی می‌کند.

* خروجی‌ها: لیستی از URLها و هدرهای HTTP مربوطه (User-Agent، Accept) که برای هر منبع لازم است.

* 🌐 HTTP Request (HTTP Request):

* پیکربندی: از عبارات پویا برای URL و هدرها استفاده می‌کند. برای اطمینان از اینکه یک API آفلاین کل فرآیند تجمیع را متوقف نمی‌کند، روی "Continue on Fail" تنظیم شده است.

* دسته‌بندی: برای پایداری با اندازه دسته ۵ تنظیم شده است.

* 🔍 Parse + Enrich + Filter1 (Code):

* نقش فنی: "موتور نرمال‌سازی".

* منطق کلیدی:

* تجزیه حقوق و دستمزد: فرمت‌های مختلف (عددی، رشته‌ای، اشیاء تودرتو) را به یک رشته قابل خواندن توسط انسان تبدیل می‌کند (مانند "$100k–$120k/yr USD").

* نگاشت مکان: از نقشه‌های کشور ISO و لیست شهرها (مانند INDIA_CITIES) برای استانداردسازی "Bengaluru" به "India" یا "Remote" به "Global" استفاده می‌کند.

* فیلتر دامنه: فقط مشاغلی را که با ALLOWED_DOMAINS مطابقت دارند (مانند Product Manager، Full Stack Engineer، Data Analyst) نگه می‌دارد.

* حذف موارد تکراری: یک job_hash بر اساس ATS، شرکت، عنوان و مکان برای شناسایی آگهی‌های شغلی منحصر به فرد تولید می‌کند.

* تجزیه HTML/JSON-LD: به طور خاص داده‌های @type: JobPosting را از صفحات HTML خام استخراج می‌کند.

۳. ذخیره‌سازی و خروجی

این بلوک داده‌های پاکسازی شده را در سیستم‌های ذخیره‌سازی خارجی ذخیره می‌کند.

  • گره‌های (Nodes) درگیر: 💾 Upsert to Supabase، 📊 Write to Google Sheet
  • جزئیات گره‌ها:

* 💾 Upsert to Supabase (Postgres):

* عملیات: Upsert.

* ستون تطبیق: job_hash. این تضمین می‌کند که اگر شغلی در ATS به‌روزرسانی شود، به جای تکراری شدن، در پایگاه داده به‌روزرسانی می‌شود.

* داده‌های نگاشت شده: عنوان، شرکت، مکان، کشور، حالت کار، حقوق و دستمزد و غیره.

* 📊 Write to Google Sheet (Google Sheets):

* عملیات: Append or Update.

* ستون تطبیق: job_hash.

* اتصال: همان فیلدهای استاندارد شده گره Supabase را همگام‌سازی می‌کند.

---

جدول خلاصه

نام گره (Node Name)نوع گره (Node Type)نقش عملکردی (Functional Role)گره(های) ورودی (Input Node(s))گره(های) خروجی (Output Node(s))یادداشت چسبان (Sticky Note)
⏰ Daily 8AM ISTSchedule Triggerراه‌انداز اجرا (Execution Trigger)-📋 Company Listکشف منبع و راه‌انداز (Source Discovery & Trigger)
📋 Company ListCodeپیکربندی منبع (Source Configuration)⏰ Daily 8AM IST🔄 Loop Batches (5)کشف منبع و راه‌انداز (Source Discovery & Trigger)
🔄 Loop Batches (5)Split In Batchesکنترل جریان/دسته‌بندی (Flow Control/Batching)📋 Company List, 📊 Write to Google Sheet🔧 Prepare Requestکشف منبع و راه‌انداز (Source Discovery & Trigger)
🔧 Prepare RequestCodeتولیدکننده URL/Header (URL/Header Generator)🔄 Loop Batches (5)🌐 HTTP Requestدرخواست و نرمال‌سازی (Request & Normalization)
🌐 HTTP RequestHTTP Requestکسب داده (Data Acquisition)🔧 Prepare Request🔍 Parse + Enrich + Filter1درخواست و نرمال‌سازی (Request & Normalization)
🔍 Parse + Enrich + Filter1Codeنرمال‌سازی و فیلتر (Normalization & Filtering)🌐 HTTP Request💾 Upsert to Supabaseدرخواست و نرمال‌سازی (Request & Normalization)
💾 Upsert to SupabasePostgresهمگام‌سازی پایگاه داده (DB Synchronization)🔍 Parse + Enrich + Filter1📊 Write to Google Sheetذخیره‌سازی و خروجی (Storage & Output)
📊 Write to Google SheetGoogle Sheetsهمگام‌سازی صفحه گسترده (Sheet Synchronization)💾 Upsert to Supabase🔄 Loop Batches (5)ذخیره‌سازی و خروجی (Storage & Output)

---

بازسازی Workflow از ابتدا

مرحله ۱: راه‌انداز و پیکربندی

1. یک گره Schedule Trigger اضافه کرده و آن را روی ۸ صبح روزانه تنظیم کنید.

2. یک Code Node (📋 Company List) اضافه کنید. آرایه JavaScript حاوی پیکربندی‌های منبع (ATS، Slug، Company) را در آن قرار دهید.

3. یک گره Split In Batches اضافه کنید. Batch Size را روی ۵ تنظیم کنید. گره Code را به این گره متصل کنید.

مرحله ۲: خط لوله درخواست

4. یک Code Node (🔧 Prepare Request) اضافه کنید. منطق نگاشت انواع ats به URLها (مانند Greenhouse API، Lever API) را پیاده‌سازی کنید. حلقه‌های صفحه‌بندی را برای SmartRecruiters و Himalayas بگنجانید.

5. یک گره HTTP Request اضافه کنید.

* URL: {{ $json._url }}.

* Headers: روی "JSON" تنظیم کنید و از {{ JSON.stringify($json._headers) }} استفاده کنید.

* "Error Handling" را روی Continue (Regular Output) تنظیم کنید.

مرحله ۳: موتور نرمال‌سازی

6. یک Code Node (🔍 Parse + Enrich + Filter1) اضافه کنید. منطق JS زیر را پیاده‌سازی کنید:

* یک تابع parseSalary برای مدیریت انواع ترکیبی ارز و عددی ایجاد کنید.

* یک تابع makeHash برای تولید یک شناسه منحصر به فرد بر اساس ats|company|title|location ایجاد کنید.

* یک آرایه ALLOWED_DOMAINS برای فیلتر کردن عناوین شغلی تعریف کنید.

* فیلدهای پاسخ خام (مانند j.absolute_url برای Greenhouse) را به فیلدهای استاندارد (apply_url) نگاشت کنید.

مرحله ۴: راه‌اندازی مقصد

7. یک گره Postgres (Supabase) اضافه کنید.

* عملیات: Upsert.

* تطبیق ستون: job_hash.

* تمام فیلدهای استاندارد شده از گره Code قبلی را نگاشت کنید.

اعتبارنامه (Credential):* جزئیات اتصال Supabase را ارائه دهید.

8. یک گره Google Sheets اضافه کنید.

* عملیات: Append or Update.

* تطبیق ستون: job_hash.

* Document ID: شناسه Sheet هدف خود را ارائه دهید.

اعتبارنامه (Credential):* اعتبارنامه Google OAuth2 را ارائه دهید.

9. گره Google Sheets را به گره Split In Batches برگردانید تا حلقه کامل شود.

---

یادداشت‌ها و منابع عمومی

محتوای یادداشت (Note Content)زمینه یا پیوند (Context or Link)
استراتژی حذف موارد تکراریjob_hash حیاتی است. این امر از پر شدن پایگاه داده با ورودی‌های تکراری هنگام یافتن همان شغل در صفحات متعدد یا اجراهای روزانه بعدی جلوگیری می‌کند.
فیلتر دامنهبرای تغییر انواع مشاغل جمع‌آوری شده، آرایه ALLOWED_DOMAINS را در داخل گره Parse + Enrich + Filter1 تغییر دهید.
محدودیت نرخاندازه دسته برای جلوگیری از خطاهای 429 Too Many Requests از APIهای سختگیرانه ATS روی ۵ تنظیم شده است.
کاتالوگ n8n در Axeto.aiWorkflowهای بیشتر n8n را در Axeto.ai کاوش کنید

Nodeهای استفاده‌شده

سوالات متداول

این Workflow چه کاری انجام می‌دهد؟

این Workflow آگهی‌های شغلی را از منابع مختلف مانند ATS و تابلوهای شغلی به طور خودکار جمع‌آوری، داده‌های ناسازگار را نرمال‌سازی کرده و سپس آن‌ها را در Supabase و Google Sheets ذخیره می‌کند.

چگونه داده‌های ناسازگار نرمال‌سازی می‌شوند؟

این Workflow از یک موتور نرمال‌سازی سفارشی استفاده می‌کند که فرمت‌های مختلف حقوق و دستمزد، مکان‌ها و سایر جزئیات را به یک طرحواره استاندارد و قابل خواندن تبدیل می‌کند.

چگونه از تکرار آگهی‌های شغلی جلوگیری می‌شود؟

با تولید یک "job_hash" منحصر به فرد بر اساس اطلاعات کلیدی آگهی شغلی (مانند ATS، شرکت، عنوان و مکان)، Workflow می‌تواند موارد تکراری را شناسایی و از درج مجدد آن‌ها در Supabase و Google Sheets جلوگیری کند.

چه منابعی پشتیبانی می‌شوند؟

این Workflow از منابع مختلفی مانند تابلوهای شغلی جهانی، Greenhouse، SmartRecruiters، Ashby، Workable، Lever و RemoteOK پشتیبانی می‌کند.

workflowهای مرتبط

این workflow در کاتالوگ Axeto.ai بایگانی شده است. لایسنس اصلی متعلق به سازنده workflow است.