خودکارسازی بایگانی اسناد منابع انسانی با n8n و سرویس‌های ابری

خودکارسازی بایگانی اسناد منابع انسانی با n8n و سرویس‌های ابری

17 دقیقه مطالعه · منتشر شده ۱۴۰۵/۵/۶

دانلود workflow

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

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

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

بایگانی اسناد منابع انسانی و حقوقی با UploadToURL، Google Drive و Airtable

این گردش کار، بایگانی اسناد منابع انسانی و حقوقی را خودکار می‌کند. این گردش کار اسناد امضا شده (از طریق URL از راه دور یا آپلود مستقیم) را دریافت، فراداده‌های کارمند را اعتبارسنجی و نرمال‌سازی می‌کند، با استفاده از Airtable از تکرار جلوگیری می‌کند، سند را از طریق UploadToURL به یک CDN پایدار آپلود می‌کند، آن را در Google Drive ذخیره می‌کند و رکوردهای Airtable را به‌روزرسانی می‌کند. این گردش کار همچنین شامل اعلان‌های ایمیلی و پاسخ‌های وب‌هوک ساختاریافته برای تأیید، همراه با مدیریت اختصاصی تضاد و خطای عمومی است.

دسته‌بندی‌ها: استخراج سند

گره‌ها (Nodes): n8n-nodes-base.if, n8n-nodes-base.code, n8n-nodes-base.gmail, n8n-nodes-base.webhook, n8n-nodes-base.airtable, n8n-nodes-base.stickyNote, n8n-nodes-base.googleDrive, n8n-nodes-base.respondToWebhook, n8n-nodes-uploadtourl.uploadToUrl

کاتالوگ Axeto: https://axeto.ai/n8n

---

۱. نمای کلی گردش کار

این گردش کار برای ساده‌سازی فرآیند بایگانی اسناد منابع انسانی و حقوقی طراحی شده است. این گردش کار روش‌های مختلف ورودی را مدیریت می‌کند، یکپارچگی داده‌ها را تضمین می‌کند و مکانیسم‌های بازخورد قوی را ارائه می‌دهد.

۱.۱ دریافت و اعتبارسنجی ورودی

گردش کار با دریافت اسناد ورودی از طریق یک وب‌هوک (Webhook) آغاز می‌شود. سپس به طور دقیق فراداده‌های حیاتی کارمندان را اعتبارسنجی و نرمال‌سازی می‌کند، نام فایل‌ها و انواع MIME سازگار را تولید می‌کند و مسیر پوشه مناسب در Google Drive را تعیین می‌کند.

۱.۲ جلوگیری از تکرار (پیش از بارگذاری)

قبل از شروع هرگونه عملیات بارگذاری، گردش کار Airtable را برای بررسی وجود قرارداد برای کارمند مربوطه پرس‌وجو می‌کند. این مرحله پیشگیرانه از بارگذاری‌های تکراری جلوگیری کرده و منابع را حفظ می‌کند. در صورت شناسایی مورد تکراری، گردش کار بلافاصله پاسخ 409 Conflict را برمی‌گرداند.

۱.۳ زنجیره بارگذاری (CDN + Google Drive)

اسناد در UploadToURL بارگذاری می‌شوند که یک لینک CDN پایدار را فراهم می‌کند. متعاقباً، گردش کار پوشه تعیین شده را در Google Drive بر اساس فراداده‌های نرمال‌شده پیدا کرده یا ایجاد می‌کند و سند را در آنجا بارگذاری می‌کند.

۱.۴ به‌روزرسانی یا ایجاد در Airtable (Upsert)

سپس گردش کار با Airtable تعامل می‌کند تا یا رکورد موجود کارمند را با جزئیات سند جدید (شامل URLهای Google Drive و CDN) به‌روزرسانی کند یا در صورت عدم وجود، رکورد جدیدی ایجاد کند.

۱.۵ پاسخ به اعلان و وب‌هوک

پس از بایگانی موفقیت‌آمیز، ایمیل‌های تأیید از طریق Gmail ارسال می‌شوند. گردش کار با برگرداندن پاسخ وب‌هوک 201 Created به پایان می‌رسد که خلاصه‌ای مختصر از سند بایگانی شده را برای اهداف حسابرسی ارائه می‌دهد.

۱.۶ مدیریت خطا و تضاد

گردش کار شامل مدیریت خاصی برای ورودی‌های تکراری (برگرداندن 409 Conflict) و یک مدیر خطای عمومی است که با برگرداندن 400 Bad Request، مشکلات دیگر را ثبت و گزارش می‌کند.

---

۲. تحلیل گره به گره (Node Analysis)

بلوک A: دریافت و اعتبارسنجی ورودی

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

#### گره: Webhook - دریافت قرارداد

  • نوع/نقش: Webhook (گره اصلی n8n) - به عنوان نقطه ورود برای درخواست‌های HTTP POST ورودی عمل می‌کند.
  • پیکربندی کلیدی:

* متد (Method): POST

* مسیر (Path): hr-contract-archive

* حالت پاسخ (Response Mode): responseNode (نیاز به گره‌های Respond to Webhook بعدی دارد).

منابع CORS (CORS Origins): (اجازه درخواست‌های بین مبدا را می‌دهد).

  • ورودی/خروجی:

* ورودی: درخواست HTTP خارجی.

* خروجی: داده‌ها را به گره اعتبارسنجی و غنی‌سازی Payload ارسال می‌کند.

  • یادداشت‌های نسخه: از نسخه نوع (Type Version) 2 برای پیکربندی‌های مدرن وب‌هوک استفاده می‌کند.
  • حالت‌های شکست/موارد مرزی (Failure Modes/Edge Cases):

* مشکلات ساختار payload (مانند عدم وجود پوشش body) توسط گره کد بعدی مدیریت می‌شود.

* آپلود فایل‌های بزرگ ممکن است محدودیت‌های نمونه n8n را برای اندازه بدنه یا داده‌های باینری تجاوز کند.

#### گره: اعتبارسنجی و غنی‌سازی Payload

  • نوع/نقش: Code (گره اصلی n8n) - اعتبارسنجی دقیق را انجام می‌دهد و فراداده استاندارد تولید می‌کند.
  • منطق پیکربندی کلیدی:

* Payload را از $input.first().json.body یا $input.first().json می‌خواند.

* فیلدهای مورد نیاز: employeeName و یکی از fileUrl (برای فایل‌های از راه دور) یا filename (برای آپلودهای باینری).

* نرمال‌سازی نام کارمند: کاراکترهای خاص (به جز فاصله، خط تیره، آپوستروف) را حذف می‌کند، فضای خالی را فشرده می‌کند و هر کلمه را به صورت Title Case در می‌آورد.

* نرمال‌سازی شناسه کارمند: حروف بزرگ را اعمال کرده و کاراکترهای نامعتبر را حذف می‌کند؛ در صورت عدم وجود، به صورت پیش‌فرض EMP-{Date.now()} تنظیم می‌شود.

* اسلاگ نوع قرارداد (Contract Type Slug): به فرمت حروف بزرگ، خط تیره دار و الفبایی عددی تبدیل می‌شود.

* مدیریت تاریخ:

* effectiveDate: به صورت پیش‌فرض تاریخ فعلی (YYYY-MM-DD) تنظیم می‌شود.

* filedAt: زمان فعلی ISO را ثبت می‌کند.

* yearFolder: از effectiveDate مشتق می‌شود.

* فراداده فایل:

* originalFilename: از filename یا آخرین بخش fileUrl استخراج می‌شود.

* پسوندهای مجاز: pdf, jpg, jpeg, png, docx, tiff. برای انواع پشتیبانی نشده خطا ایجاد می‌کند.

* structuredFilename: به صورت {employeeId}_{LASTNAME}_{CONTRACTTYPESLUG}_{effectiveDate}.{ext} ساخته می‌شود.

* mimeType: با استفاده از نگاشت از پیش تعریف شده برای انواع فایل رایج تعیین می‌شود.

* مسیر پوشه Google Drive:

* department: به صورت پیش‌فرض General تنظیم می‌شود.

* driveFolderPath: به صورت HR/Contracts/{year}/{department}/{employeeName} ساخته می‌شود.

* متغیرهای محیطی/گردش کار (Environment/Workflow Variables):

* rootFolderId: از $vars.GDRIVE_ROOT_FOLDER_ID استفاده می‌کند یا به صورت پیش‌فرض 'root' تنظیم می‌شود.

* پیش‌فرض اعلان (Notification Default): notifyEmployee به صورت پیش‌فرض true است مگر اینکه صراحتاً روی false تنظیم شود.

  • ورودی/خروجی:

* ورودی: وب‌هوک payload.

* خروجی: فراداده غنی‌شده را به گره Airtable - بررسی تکراری ارسال می‌کند.

  • یادداشت‌های نسخه: از نسخه نوع (Type Version) 2 برای اجرای کد مدرن استفاده می‌کند.
  • حالت‌های شکست/موارد مرزی:

* پسوندهای فایل نامعتبر باعث ایجاد خطا می‌شوند و در صورت نیاز به مدیریت مسیر خطا نیاز دارند.

* department یا employeeEmail ممکن است گم شده باشند؛ گره‌های پایین‌دستی باید مقاوم باشند.

* اگر $vars.GDRIVE_ROOT_FOLDER_ID تنظیم نشده باشد، آپلودها ممکن است به ریشه Drive هدف قرار گیرند مگر اینکه توسط تنظیمات گره Google Drive لغو شوند.

---

بلوک B: جلوگیری از تکرار و پاسخ به تضاد

این بلوک وجود رکوردهای موجود در Airtable را بررسی کرده و ورودی‌های تکراری را به صورت منظم مدیریت می‌کند.

#### گره: Airtable - بررسی تکراری

  • نوع/نقش: Airtable (گره اصلی n8n) - جستجوی پیش از آپلود را در Airtable انجام می‌دهد.
  • گزینه‌های پیکربندی کلیدی:

* عملیات (Operation): search

* فرمول فیلتر (Filter Formula): AND({Employee ID} = '{{ $json.employeeId }}', {Contract Received} = TRUE())

* فیلدهای بازگشتی (Return Fields): Employee ID, Employee Name, Contract Received, Contract URL, Filed At.

* پایگاه/جدول (Base/Table): باید به صورت دستی پیکربندی شود زیرا در JSON ارائه شده مشخص نشده‌اند.

  • اعتبارنامه‌ها (Credentials): نیاز به یک توکن دسترسی شخصی Airtable دارد.
  • ورودی/خروجی:

* ورودی: فراداده اعتبارسنجی شده از اعتبارسنجی و غنی‌سازی Payload.

* خروجی: نتایج جستجو را به گره آیا تکراری وجود دارد؟ ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* نام‌های نادرست پایگاه، جدول یا فیلد منجر به خطاهای API Airtable می‌شود.

* اگر {Contract Received} یک فیلد بولی نباشد یا نام متفاوتی داشته باشد، فرمول ممکن است شکست بخورد یا هیچ تطابقی برنگرداند.

* احتمال محدودیت‌های نرخ API Airtable یا تایم‌اوت‌ها.

#### گره: آیا تکراری وجود دارد؟

  • نوع/نقش: IF (گره اصلی n8n) - گردش کار را بر اساس نتایج جستجوی Airtable منشعب می‌کند.
  • شرط (Condition): ({{ $json.records?.length ?? 0 }}) > 0 (بررسی می‌کند که آیا هیچ رکوردی برگردانده شده است یا خیر).
  • ورودی/خروجی:

* شاخه True: به پاسخ - 409 تکراری ادامه می‌دهد.

* شاخه False: به آیا URL از راه دور وجود دارد؟ ادامه می‌دهد.

  • حالت‌های شکست/موارد مرزی:

* تغییرات در ساختار خروجی گره Airtable (مثلاً عدم استفاده از records) می‌تواند باعث ارزیابی نادرست شرط شود.

#### گره: پاسخ - 409 تکراری

  • نوع/نقش: Respond to Webhook (گره اصلی n8n) - گردش کار را زودتر با یک پاسخ تضاد خاتمه می‌دهد.
  • گزینه‌های پیکربندی کلیدی:

* کد HTTP (HTTP Code): 409

* بدنه JSON (JSON Body): شامل existingContractUrl و filedAt از اولین تطابق Airtable، همراه با پیامی که به نام کارمند و شناسه نرمال‌شده اشاره دارد.

  • وابستگی‌ها: به عباراتی که به گره اعتبارسنجی و غنی‌سازی Payload و نتایج جستجوی Airtable ($json.records[0].fields[...]) ارجاع می‌دهند، متکی است.
  • حالت‌های شکست/موارد مرزی:

* اگر Airtable رکوردها را برگرداند اما فیلدهای مورد نیاز (Contract URL, Filed At) گم شده باشند، بدنه پاسخ ممکن است مقادیر خالی داشته باشد یا در صورت عدم وجود غیرمنتظره records[0]، هنگام ایندکس‌گذاری خطا ایجاد کند.

---

بلوک C: زنجیره آپلود (از راه دور در مقابل باینری → UploadToURL → Google Drive Folder Resolve/Create → Google Drive Upload)

این بلوک آپلود واقعی اسناد را به UploadToURL و Google Drive، از جمله منطق یافتن یا ایجاد پوشه‌های لازم را مدیریت می‌کند.

#### گره: آیا URL از راه دور وجود دارد؟

  • نوع/نقش: IF (گره اصلی n8n) - روش آپلود مناسب را بر اساس ورودی تعیین می‌کند.
  • شرط: بررسی می‌کند که آیا اعتبارسنجی و غنی‌سازی Payload.fileUrl خالی نیست.

* مقدار سمت چپ (Left Value): {{ $('Validate & Enrich Payload').first().json.fileUrl }}

* عملگر (Operator): string notEmpty

  • ورودی/خروجی:

* True: به آپلود به URL - از راه دور ادامه می‌دهد.

* False: به آپلود به URL - باینری ادامه می‌دهد.

  • حالت‌های شکست/موارد مرزی:

* اگر هم fileUrl و هم داده‌های باینری ارائه شوند، گردش کار به مسیر آپلود از راه دور پیش‌فرض خواهد شد.

* اگر fileUrl وجود داشته باشد اما نامعتبر یا غیرقابل دسترس باشد، گره UploadToURL - Remote بعداً شکست خواهد خورد.

#### گره: آپلود به URL - از راه دور

  • نوع/نقش: UploadToURL (گره جامعه) - فایلی را از یک URL از راه دور آپلود می‌کند.
  • پیکربندی کلیدی: عملیات روی uploadFile تنظیم شده است. جزئیات خاص به پیاده‌سازی گره جامعه بستگی دارد.
  • اعتبارنامه‌ها: نیاز به اعتبارنامه‌های Upload to URL API دارد.
  • ورودی/خروجی:

* ورودی: داده‌ها از گره آیا URL از راه دور وجود دارد؟.

* خروجی: نتایج را به گره استخراج URL CDN ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* گره جامعه n8n-nodes-uploadtourl.uploadToUrl باید نصب شده باشد.

* واکشی از راه دور ممکن است به دلیل خطاهای 403/404، الزامات احراز هویت یا تایم‌اوت‌ها شکست بخورد.

* ساختار پاسخ از ارائه‌دهنده UploadToURL ممکن است متفاوت باشد و به طور بالقوه بر گره استخراج URL CDN تأثیر بگذارد.

#### گره: آپلود به URL - باینری

  • نوع/نقش: UploadToURL (گره جامعه) - داده‌های فایل باینری را آپلود می‌کند.
  • پیکربندی کلیدی: عملیات روی uploadFile تنظیم شده است.
  • اعتبارنامه‌ها: مشابه آپلود به URL - از راه دور.
  • ورودی/خروجی:

* خروجی: نتایج را به گره استخراج URL CDN ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* وب‌هوک باید داده‌های باینری را به درستی دریافت کند (معمولاً از طریق multipart/form-data).

* اگر هیچ ویژگی باینری نگاشت نشده یا در دسترس نباشد، آپلود ممکن است شکست بخورد یا URL خالی برگرداند.

#### گره: استخراج URL CDN

  • نوع/نقش: Code (گره اصلی n8n) - پاسخ UploadToURL را نرمال‌سازی کرده و آن را با فراداده موجود ادغام می‌کند.
  • منطق کلیدی:

* سعی می‌کند URL CDN را از فیلدهای بالقوه مختلف پیدا کند (url, link, data.url, file.url, shortUrl).

* اطمینان حاصل می‌کند که URL با https:// شروع می‌شود با جایگزینی http://.

* در صورت وجود، uploadId و fileSizeBytes را شامل می‌شود.

* در صورت عدم یافتن URL CDN، خطا ایجاد می‌کند و پاسخ خام را برای اشکال‌زدایی ارائه می‌دهد.

  • ورودی/خروجی:

* خروجی: داده‌های غنی‌شده را به گره Drive - یافتن پوشه کارمند ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* تغییرات در طرح‌بندی پاسخ UploadToURL می‌تواند باعث شود گره نتواند فیلد URL صحیح را پیدا کند.

* عملیات cdnUrl.replace(...) فرض می‌کند cdnUrl یک رشته است؛ مقادیر غیر رشته‌ای می‌توانند باعث خطا شوند.

#### گره: Drive - یافتن پوشه کارمند

  • نوع/نقش: Google Drive (گره اصلی n8n) - پوشه موجود را در Google Drive جستجو می‌کند.
  • پیکربندی کلیدی: عملیات روی search تنظیم شده است.

* نکته: پرس و جوی جستجوی خاص در اینجا مشخص نشده است اما باید برای جستجو در مسیر والد/ریشه مورد نظر و مطابقت با نام پوشه/مسیر مشتق شده از فراداده (مثلاً HR/Contracts/{year}/{department}/{employeeName}) پیکربندی شود.

  • اعتبارنامه‌ها: نیاز به اعتبارنامه‌های Google Drive OAuth2 دارد.
  • ورودی/خروجی:

* خروجی: نتایج جستجو را به گره Resolve Folder ID ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* یک پرس و جوی جستجوی نادرست پیکربندی شده ممکن است هیچ نتیجه‌ای یا پوشه اشتباهی را برگرداند.

* حساب OAuth باید مجوزهای لازم برای دسترسی به پوشه Google Drive هدف را داشته باشد.

#### گره: Resolve Folder ID

  • نوع/نقش: Code (گره اصلی n8n) - تعیین می‌کند که آیا پوشه هدف از قبل وجود دارد یا خیر.
  • منطق کلیدی:

* شناسه پوشه را از اولین نتیجه جستجوی Google Drive (searchResult.files[0] یا searchResult.items[0]) استخراج می‌کند.

* existingFolderId و needsNewFolder (true اگر هیچ شناسه پوشه‌ای یافت نشد) را تنظیم می‌کند.

* این اطلاعات را با فراداده گره استخراج URL CDN ادغام می‌کند.

  • ورودی/خروجی:

* خروجی: وضعیت پوشه را به گره آیا پوشه جدید لازم است؟ ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر جستجوی Google Drive قبل از پوشه هدف واقعی، آیتم‌های غیر پوشه را برگرداند، ممکن است یک شناسه نادرست انتخاب شود مگر اینکه جستجو به پوشه‌ها محدود شود.

#### گره: آیا پوشه جدید لازم است؟

  • نوع/نقش: IF (گره اصلی n8n) - گردش کار را بر اساس اینکه آیا نیاز به ایجاد پوشه جدید است یا خیر، منشعب می‌کند.
  • شرط: بررسی می‌کند که آیا متغیر needsNewFolder true است.
  • ورودی/خروجی:

* True: به Drive - ایجاد پوشه کارمند ادامه می‌دهد.

* False: به ادغام شناسه پوشه ادامه می‌دهد.

#### گره: Drive - ایجاد پوشه کارمند

  • نوع/نقش: Google Drive (گره اصلی n8n) - پوشه جدیدی را در Google Drive ایجاد می‌کند.
  • پیکربندی کلیدی: عملیات روی createFolder تنظیم شده است.

* نام پوشه (Folder Name): {{ $('Validate & Enrich Payload').first().json.employeeName }}

* شناسه پوشه والد (Parent Folder ID): {{ $('Resolve Folder ID').first().json.existingFolderId ?? $('Validate & Enrich Payload').first().json.rootFolderId }} (از شناسه موجود استفاده می‌کند یا به شناسه ریشه برمی‌گردد).

  • اعتبارنامه‌ها: مشابه Drive - یافتن پوشه کارمند.
  • ورودی/خروجی:

* خروجی: شناسه پوشه ایجاد شده را به گره ادغام شناسه پوشه ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر حساب Google Drive مجوزهای لازم برای ایجاد پوشه در مکان مشخص شده را نداشته باشد، شکست می‌خورد.

* اگر نام پوشه حاوی کاراکترهای نامعتبر باشد، ممکن است Google Drive خطا ایجاد کند.

#### گره: ادغام شناسه پوشه

  • نوع/نقش: Code (گره اصلی n8n) - شناسه پوشه نهایی Google Drive را برای استفاده در مرحله آپلود تعیین می‌کند.
  • منطق کلیدی:

* اگر پوشه از قبل وجود داشته باشد (existingFolderId)، از آن استفاده می‌کند.

* در غیر این صورت، از شناسه پوشه ایجاد شده در گره قبلی استفاده می‌کند.

* این شناسه را به فراداده موجود اضافه می‌کند.

  • ورودی/خروجی:

* خروجی: داده‌های غنی‌شده نهایی را به گره Drive - آپلود فایل ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر هر دو ورودی (existingFolderId و شناسه پوشه ایجاد شده) در دسترس نباشند، ممکن است یک خطا رخ دهد.

#### گره: Drive - آپلود فایل

  • نوع/نقش: Google Drive (گره اصلی n8n) - سند را در پوشه Google Drive تعیین شده آپلود می‌کند.
  • پیکربندی کلیدی: عملیات روی uploadFile تنظیم شده است.

* نام فایل (File Name): {{ $('Validate & Enrich Payload').first().json.structuredFilename }}

* شناسه پوشه (Folder ID): {{ $('Merge Folder ID').first().json.finalFolderId }}

* فایل (File): باید به داده‌های فایل ورودی از گره قبلی نگاشت شود (مثلاً از طریق URL یا داده‌های باینری). این به نحوه دریافت داده‌های فایل توسط گره‌های قبلی بستگی دارد.

  • اعتبارنامه‌ها: مشابه Drive - یافتن پوشه کارمند.
  • ورودی/خروجی:

* خروجی: نتایج آپلود Google Drive را به گره Airtable - Upsert Record ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر داده‌های فایل به درستی به گره ارسال نشوند، آپلود شکست می‌خورد.

* محدودیت‌های اندازه فایل Google Drive ممکن است اعمال شود.

* مشکلات مجوز یا خطاهای API Google Drive.

---

بلوک D: به‌روزرسانی Airtable و اعلان

این بلوک رکورد Airtable را با جزئیات سند بایگانی شده به‌روزرسانی یا ایجاد می‌کند و سپس اعلان‌های لازم را ارسال می‌کند.

#### گره: Airtable - Upsert Record

  • نوع/نقش: Airtable (گره اصلی n8n) - رکورد Airtable را به‌روزرسانی یا ایجاد می‌کند.
  • پیکربندی کلیدی:

* عملیات (Operation): upsert

* شناسه منحصر به فرد فیلد (Unique Identifier Field): {Employee ID} (یا فیلد مشابهی که برای شناسایی منحصر به فرد کارمند استفاده می‌شود).

* مقدار شناسه منحصر به فرد (Unique Identifier Value): {{ $('Validate & Enrich Payload').first().json.employeeId }}

* فیلدهای به‌روزرسانی/ایجاد (Fields to Update/Create):

* Employee Name: {{ $('Validate & Enrich Payload').first().json.employeeName }}

* Contract Received: true

* Contract URL: {{ $('Merge Folder ID').first().json.googleDriveUrl }} (URL فایل آپلود شده در Google Drive).

* CDN URL: {{ $('Extract CDN URL').first().json.cdnUrl }} (URL پایدار از UploadToURL).

* Filed At: {{ $('Validate & Enrich Payload').first().json.filedAt }}

* Effective Date: {{ $('Validate & Enrich Payload').first().json.effectiveDate }}

* Contract Type: {{ $('Validate & Enrich Payload').first().json.contractTypeSlug }}

  • اعتبارنامه‌ها: مشابه Airtable - بررسی تکراری.
  • ورودی/خروجی:

* خروجی: نتایج Upsert را به گره آیا باید اعلان شود؟ ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر فیلد شناسه منحصر به فرد به درستی پیکربندی نشده باشد یا داده‌های کارمند در Airtable وجود نداشته باشد، یک رکورد جدید ایجاد می‌شود.

* اگر فیلدهای مورد نیاز برای به‌روزرسانی وجود نداشته باشند یا نام‌های متفاوتی داشته باشند، ممکن است به‌روزرسانی‌ها ناموفق باشند.

#### گره: آیا باید اعلان شود؟

  • نوع/نقش: IF (گره اصلی n8n) - تعیین می‌کند که آیا اعلان ایمیلی لازم است یا خیر.
  • شرط: بررسی می‌کند که آیا اعتبارسنجی و غنی‌سازی Payload.notifyEmployee برابر با true است.
  • ورودی/خروجی:

* True: به Gmail - ارسال ایمیل تأیید ادامه می‌دهد.

* False: به پاسخ - 201 ایجاد شد ادامه می‌دهد.

#### گره: Gmail - ارسال ایمیل تأیید

  • نوع/نقش: Gmail (گره اصلی n8n) - ایمیل تأیید را به کارمند ارسال می‌کند.
  • پیکربندی کلیدی:

* عملیات (Operation): sendEmail

* به (To): {{ $('Validate & Enrich Payload').first().json.employeeEmail }} (فرض می‌کند که employeeEmail در payload وجود دارد).

* موضوع (Subject): تأیید بایگانی قرارداد شما

* بدنه (Body): یک پیام قالب‌بندی شده شامل جزئیات قرارداد، URLهای Google Drive و CDN.

  • اعتبارنامه‌ها: نیاز به اعتبارنامه‌های Gmail OAuth2 دارد.
  • ورودی/خروجی:

* خروجی: نتایج ارسال ایمیل را به گره پاسخ - 201 ایجاد شد ارسال می‌کند.

  • حالت‌های شکست/موارد مرزی:

* اگر employeeEmail در payload وجود نداشته باشد یا نامعتبر باشد، ایمیل ارسال نمی‌شود یا با خطا مواجه می‌شود.

* حساب Gmail باید مجوزهای لازم برای ارسال ایمیل را داشته باشد.

---

بلوک E: پاسخ نهایی و مدیریت خطا

این بلوک پاسخ نهایی وب‌هوک را مدیریت می‌کند و شامل یک مسیر خطای عمومی برای رسیدگی به استثنائات غیرمنتظره است.

#### گره: پاسخ - 201 ایجاد شد

  • نوع/نقش: Respond to Webhook (گره اصلی n8n) - پاسخ موفقیت‌آمیز را به تماس گیرنده وب‌هوک برمی‌گرداند.
  • گزینه‌های پیکربندی کلیدی:

* کد HTTP (HTTP Code): 201

* بدنه JSON (JSON Body): خلاصه‌ای از داده‌های بایگانی شده، شامل employeeName, structuredFilename, googleDriveUrl, cdnUrl, و filedAt.

  • وابستگی‌ها: به داده‌های پردازش شده از گره‌های قبلی متکی است.
  • حالت‌های شکست/موارد مرزی:

* اگر هر یک از فیلدهای مورد نیاز برای بدنه پاسخ در مراحل قبلی تولید نشده باشند، پاسخ ممکن است ناقص باشد.

#### گره: مدیریت خطای عمومی

  • نوع/نقش: Code (گره اصلی n8n) - هر خطایی را که در طول اجرای گردش کار رخ می‌دهد، ثبت و گزارش می‌کند.
  • منطق کلیدی:

* ورودی خطا را از طریق مسیر خطا دریافت می‌کند.

* اطلاعات خطا (مانند پیام خطا، گره‌ای که در آن رخ داده است) را ثبت می‌کند.

* یک پاسخ خطای عمومی را برای وب‌هوک آماده می‌کند.

  • ورودی/خروجی:

* خروجی: به گره پاسخ - 400 درخواست نامعتبر ادامه می‌دهد.

  • حالت‌های شکست/موارد مرزی:

* این گره باید در انتهای مسیر خطای گردش کار قرار گیرد تا اطمینان حاصل شود که همه خطاها را دریافت می‌کند.

#### گره: پاسخ - 400 درخواست نامعتبر

  • نوع/نقش: Respond to Webhook (گره اصلی n8n) - یک پاسخ خطای عمومی را به تماس گیرنده وب‌هوک برمی‌گرداند.
  • گزینه‌های پیکربندی کلیدی:

* کد HTTP (HTTP Code): 400

* بدنه JSON (JSON Body): شامل پیام خطای ثبت شده از گره مدیریت خطای عمومی.

  • وابستگی‌ها: به خروجی گره مدیریت خطای عمومی متکی است.
  • حالت‌های شکست/موارد مرزی:

* این گره باید به عنوان نقطه پایانی برای تمام مسیرهای خطای گردش کار عمل کند.

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

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

این گردش کار n8n چه کاری انجام می‌دهد؟

این گردش کار، فرآیند بایگانی اسناد منابع انسانی و حقوقی را خودکار می‌کند. اسناد را دریافت، اعتبارسنجی، از تکرار جلوگیری کرده و در Google Drive و UploadToURL ذخیره می‌کند.

چه سرویس‌های ابری در این گردش کار استفاده شده‌اند؟

این گردش کار از Google Drive برای ذخیره‌سازی و از UploadToURL برای ایجاد لینک CDN پایدار استفاده می‌کند. همچنین از Airtable برای جلوگیری از تکرار و به‌روزرسانی رکوردها بهره می‌برد.

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

قبل از بارگذاری، گردش کار با Airtable بررسی می‌کند که آیا سندی برای کارمند مربوطه از قبل وجود دارد یا خیر. در صورت وجود، از بارگذاری مجدد جلوگیری کرده و پاسخ تضاد (Conflict) را برمی‌گرداند.

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

این گردش کار می‌تواند اسناد را از طریق یک وب‌هوک (Webhook) دریافت کند که امکان ارسال از طریق URL از راه دور یا آپلود مستقیم را فراهم می‌سازد.

workflowهای مرتبط

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