تجمیع لیست املاک تجاری با n8n و ScrapeGraphAI

تجمیع لیست املاک تجاری با n8n و ScrapeGraphAI

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

دانلود workflow

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

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

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

تجمیع لیست املاک تجاری با ScrapeGraphAI، Baserow و Microsoft Teams

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

دسته‌بندی‌ها: تحقیقات بازار، تجمیع داده، اتوماسیون

فناوری‌های کلیدی:

  • ScrapeGraphAI: برای وب اسکرپینگ و استخراج داده.
  • Baserow: یک پایگاه داده بدون کد برای ذخیره و مدیریت لیست‌ها.
  • Microsoft Teams: برای ارسال اعلان‌ها.
  • n8n: پلتفرم اتوماسیونی که گردش کار را هماهنگ می‌کند.

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

---

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

عنوان: تجمیع لیست املاک تجاری با ScrapeGraphAI، Baserow و Teams

نام داخلی گردش کار: تجمیع کننده لیست املاک با Microsoft Teams و Baserow

هدف:

این گردش کار به صورت هفتگی اجرا می‌شود تا:

1. صفحات جستجوی متعدد املاک تجاری را با استفاده از ScrapeGraphAI اسکرپ کند.

2. داده‌های ساختاریافته لیست‌ها را استخراج کند.

3. داده‌ها را به یک طرحواره (schema) سازگار نرمال‌سازی کند.

4. لیست‌ها را در برابر یک جدول Baserow حذف تکرار کند، ورودی‌های جدید ایجاد کند یا موارد موجود را به‌روزرسانی کند.

5. برای هر لیست جدید یا به‌روزرسانی شده، اعلان‌هایی را به یک کانال Microsoft Teams ارسال کند.

موارد استفاده هدف:

  • نظارت بر در دسترس بودن املاک تجاری جدید یا تغییر یافته در پورتال‌های مختلف کارگزاران.
  • نگهداری یک پایگاه داده سبک و به‌روز از لیست‌ها در Baserow.
  • ارسال هشدارهای مختصر در مورد به‌روزرسانی املاک به ذینفعان تجاری از طریق Microsoft Teams.

۱.۱ بلوک‌های منطقی گردش کار

1. راه‌انداز و آماده‌سازی URL: گردش کار را در یک برنامه هفتگی آغاز می‌کند و لیستی از URLهای هدف برای اسکرپ کردن را تعریف می‌کند.

2. پردازش و جمع‌آوری موازی: هر URL هدف را پردازش می‌کند، لیست‌ها را با استفاده از ScrapeGraphAI اسکرپ می‌کند و نتایج را ادغام می‌کند.

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

4. حذف تکرار و ذخیره‌سازی (Baserow): لیست‌های موجود در Baserow را بررسی می‌کند، تعیین می‌کند که آیا هر لیست باید ایجاد، به‌روزرسانی یا نادیده گرفته شود و عملیات پایگاه داده لازم را انجام می‌دهد.

5. اعلان‌ها (Microsoft Teams): پیام‌ها را برای لیست‌های جدید یا به‌روزرسانی شده قالب‌بندی می‌کند و آن‌ها را به یک کانال Microsoft Teams اختصاص داده شده ارسال می‌کند.

---

۲. تحلیل بلوک به بلوک

۲.۱ راه‌انداز و آماده‌سازی URL

مرور کلی:

این بلوک اولیه، زمان‌بندی گردش کار را تنظیم کرده و لیست URLهای جستجوی املاک تجاری را برای اسکرپ کردن آماده می‌کند.

نودها:

  • راه‌انداز هفتگی (Schedule Trigger)
  • آماده‌سازی لیست URL (Code)

#### نود: راه‌انداز هفتگی

  • نوع: Schedule Trigger
  • نقش: نقطه شروع گردش کار، اجرای مبتنی بر یک برنامه زمان‌بندی شده را آغاز می‌کند.
  • پیکربندی: تنظیم شده برای اجرا هر 1 هفته.
  • ورودی/خروجی: ورودی ندارد؛ نود آماده‌سازی لیست URL را راه‌اندازی می‌کند.
  • نسخه: 1.1
  • ملاحظات:

* اجراهای از دست رفته ممکن است در صورتی رخ دهند که نمونه n8n در زمان برنامه‌ریزی شده در دسترس نباشد.

* تنظیمات منطقه زمانی نمونه n8n، زمان اجرای دقیق را تعیین می‌کند.

#### نود: آماده‌سازی لیست URL

  • نوع: Code
  • نقش: URLهای خاصی را که باید اسکرپ شوند، تعریف کرده و آن‌ها را برای پردازش بعدی فرمت می‌کند.
  • پیکربندی:

* یک آرایه جاوا اسکریپت به نام urls با URLهای صفحه جستجوی املاک تجاری نمونه، کدگذاری شده است.

* این نود یک آرایه از آیتم‌های n8n را خروجی می‌دهد، که هر آیتم حاوی یک url در بار داده JSON خود است (مثال: [{ json: { url } }, ...]).

  • فیلد خروجی کلیدی: $json.url
  • ورودی/خروجی: رویداد راه‌انداز را دریافت می‌کند؛ به نود تقسیم URLها خروجی می‌دهد.
  • نسخه: 2
  • ملاحظات:

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

* تعداد بسیار زیاد URLها می‌تواند زمان اجرا و هزینه‌ها را افزایش دهد و منجر به مشکلات محدودیت نرخ (rate limiting) شود.

---

۲.۲ پردازش و جمع‌آوری موازی

مرور کلی:

این بخش از لیست URLهای آماده شده عبور می‌کند، هر صفحه را برای لیست املاک با استفاده از ScrapeGraphAI اسکرپ می‌کند و سپس تمام نتایج اسکرپ شده را ادغام می‌کند.

نودها:

  • تقسیم URLها (Split In Batches)
  • اسکرپ لیست‌ها (ScrapeGraphAI)
  • جمع‌آوری لیست‌ها (Merge)

#### نود: تقسیم URLها

  • نوع: Split In Batches
  • نقش: لیست URLها را برای پردازش توزیع می‌کند و اجرای موازی یا دسته‌ای را امکان‌پذیر می‌سازد.
  • پیکربندی: از گزینه‌های پیش‌فرض دسته‌بندی استفاده می‌کند.
  • ورودی/خروجی:

* ورودی: آیتم‌ها از آماده‌سازی لیست URL.

* خروجی: آیتم‌ها را به هر دو نود اسکرپ لیست‌ها (پردازش اصلی) و جمع‌آوری لیست‌ها (برای ادغام بعدی) ارسال می‌کند.

  • نسخه: 3
  • ملاحظات:

* درجه واقعی موازی‌سازی به محیط و پیکربندی اجرای n8n بستگی دارد. تنظیمات پیش‌فرض ممکن است منجر به پردازش متوالی شوند اگر اندازه دسته به طور موثر 1 باشد.

#### نود: اسکرپ لیست‌ها

  • نوع: ScrapeGraphAI (نود جامعه: n8n-nodes-scrapegraphai.scrapegraphAi)
  • نقش: محتوای صفحه وب را واکشی کرده و داده‌های ساختاریافته را بر اساس یک اعلان (prompt) تعریف شده توسط کاربر استخراج می‌کند.
  • پیکربندی:

* websiteUrl: روی ={{ $json.url }} تنظیم شده است تا از URL نود قبلی استفاده کند.

* userPrompt: ScrapeGraphAI را برای استخراج لیست‌ها در یک کلید JSON سطح بالا به نام "listings" دستور می‌دهد. این کلید باید حاوی آرایه‌ای از اشیاء لیست باشد، که هر کدام دارای فیلدهایی مانند id, address, price, size_sqft, listing_url, broker_name, broker_phone و availability_date هستند. اعلان همچنین مشخص می‌کند که مقادیر عددی باید عدد و تاریخ‌ها باید در فرمت ISO 8601 باشند.

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

* ورودی: یک آیتم URL واحد از تقسیم URLها.

* خروجی: داده‌های لیست اسکرپ شده، به ورودی اول جمع‌آوری لیست‌ها ارسال می‌شود.

  • نسخه: 1
  • ملاحظات:

* به اعتبارنامه‌های معتبر ScrapeGraphAI نیاز دارد.

* وب‌سایت‌هایی که از اقدامات ضد اسکرپ قوی، CAPTCHA استفاده می‌کنند یا نیاز به رضایت کاربر دارند، ممکن است اسکرپ را مسدود کنند.

* ساختار خروجی ممکن است از اعلان منحرف شود (مثلاً کلید listings گم شده باشد، انواع داده نادرست باشند)، که نیاز به تنظیمات در مرحله نرمال‌سازی دارد.

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

#### نود: جمع‌آوری لیست‌ها

  • نوع: Merge
  • نقش: داده‌های اسکرپ شده از اسکرپ لیست‌ها را با آیتم‌های URL اصلی که از تقسیم URLها عبور کرده‌اند، ترکیب می‌کند.
  • پیکربندی:

* حالت: combine

* ورودی 0: خروجی از اسکرپ لیست‌ها.

* ورودی 1: آیتم‌های عبوری از تقسیم URLها.

  • ورودی/خروجی: داده‌های ترکیبی را به نود نرمال‌سازی لیست‌ها خروجی می‌دهد.
  • نسخه: 2
  • ملاحظات:

* حالت combine آیتم‌ها را بر اساس ترتیب آن‌ها جفت می‌کند. اگر تعداد نتایج اسکرپ شده با تعداد URLهای ورودی مطابقت نداشته باشد (مثلاً به دلیل خرابی اسکرپ)، ممکن است عدم تطابق داده یا از دست رفتن داده رخ دهد.

* برای صرفاً تجمیع تمام نتایج در یک لیست واحد، حالت append یا یک استراتژی تجمیع متفاوت ممکن است قوی‌تر باشد.

---

۲.۳ نرمال‌سازی و مسطح‌سازی

مرور کلی:

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

نودها:

  • نرمال‌سازی لیست‌ها (Code)
  • حلقه لیست‌ها (Split In Batches)

#### نود: نرمال‌سازی لیست‌ها

  • نوع: Code
  • نقش: آرایه listings را از خروجی ScrapeGraphAI مسطح کرده و نام فیلدها و انواع داده را استاندارد می‌کند.
  • منطق پیکربندی:

* تمام آیتم‌های ورودی را با استفاده از $input.all() می‌خواند.

* URL منبع را از item.json.url یا item.json.source استخراج می‌کند.

* آرایه listings را از داده‌های اسکرپ شده بازیابی می‌کند، در صورت عدم یافتن به صورت پیش‌فرض یک آرایه خالی.

* برای هر entry در آرایه listings، یک آیتم n8n جدید با فیلدهای نرمال‌سازی شده زیر ایجاد می‌کند:

* listing_id: مشتق شده از id, listing_id, یا listing_url.

* address: به صورت پیش‌فرض یک رشته خالی.

* price: به صورت پیش‌فرض null.

* size_sqft: به صورت پیش‌فرض null.

* listing_url: مشتق شده از listing_url یا url.

* فیلدهای کارگزار (broker_name, broker_phone): به صورت پیش‌فرض رشته‌های خالی.

* availability_date: به صورت پیش‌فرض null.

* source: URL منبع لیست.

* scraped_at: زمان فعلی در فرمت ISO.

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

* ورودی: آیتم‌های ترکیبی از جمع‌آوری لیست‌ها.

* خروجی: آیتم‌های لیست نرمال‌سازی شده به حلقه لیست‌ها ارسال می‌شوند.

  • نسخه: 2
  • ملاحظات:

* اگر ScrapeGraphAI داده‌ها را در یک ساختار غیرمنتظره برگرداند، آرایه listings ممکن است خالی باشد و منجر به خروجی صفر از این نود شود.

* اگر listing_id قابل تعیین نباشد، حذف موارد تکراری در مرحله بعدی مؤثر نخواهد بود.

* تبدیل نوع به طور دقیق اعمال نمی‌شود. مقادیر رشته‌ای برای قیمت (مثلاً "1,200") حفظ می‌شوند و ممکن است در هنگام مقایسه، پرچم‌های "تغییر یافته" کاذب ایجاد کنند اگر فیلد Baserow عددی باشد.

#### نود: حلقه لیست‌ها

  • نوع: Split In Batches
  • نقش: از هر آیتم لیست نرمال‌سازی شده عبور می‌کند و آن‌ها را برای پردازش فردی در بلوک تعامل Baserow آماده می‌کند.
  • پیکربندی: از گزینه‌های پیش‌فرض دسته‌بندی استفاده می‌کند.
  • ورودی/خروجی: هر آیتم لیست را به موارد زیر ارسال می‌کند:

* بررسی موجود (لیست Baserow) (برای پرس و جو از Baserow).

* ادغام لیست و نتیجه (برای ارائه بار داده لیست برای مقایسه).

  • نسخه: 3
  • ملاحظات:

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

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

---

۲.۴ حذف تکرار و ذخیره‌سازی (Baserow)

مرور کلی:

این بلوک حیاتی منطق بررسی اینکه آیا یک لیست از قبل در Baserow وجود دارد، تعیین اینکه آیا نیاز به ایجاد یا به‌روزرسانی دارد و انجام عملیات پایگاه داده مربوطه را مدیریت می‌کند.

نودها:

  • بررسی موجود (لیست Baserow) (Baserow)
  • ادغام لیست و نتیجه (Merge)
  • تعیین اقدام (Code)
  • نیاز به ایجاد؟ (IF)
  • ایجاد ردیف (Baserow)
  • نیاز به به‌روزرسانی؟ (IF)
  • به‌روزرسانی ردیف (Baserow)

#### نود: بررسی موجود (لیست Baserow)

  • نوع: Baserow
  • نقش: جدول Baserow را برای یافتن رکوردهای موجود پرس و جو می‌کند.
  • پیکربندی:

* عملیات: list

* tableId: از طریق متغیر محیطی $env.BASEROW_TABLE_ID تنظیم شده یا به صورت پیش‌فرض '1'.

* به طور حیاتی، هیچ فیلتری برای جستجو بر اساس listing_id اعمال نمی‌شود.

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

* ورودی: هر آیتم لیست از حلقه لیست‌ها.

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

  • نسخه: 1
  • ملاحظات:

* به اعتبارنامه‌ها و مجوزهای جدول Baserow صحیح نیاز دارد.

* اشکال منطقی عمده: از آنجایی که این نود بر اساس listing_id فیلتر نمی‌کند، اولین صفحه نتایج را از جدول Baserow بازیابی می‌کند. ارجاع existing[0] در نودهای بعدی احتمالاً به یک ردیف دلخواه اشاره خواهد کرد، نه لیست منطبق واقعی، که منجر به تصمیمات نادرست به‌روزرسانی/پرش می‌شود.

* مشکلات صفحه‌بندی: اگر جدول Baserow بزرگ باشد، ممکن است ردیف مربوطه در صفحه اول نتایج گنجانده نشود.

#### نود: ادغام لیست و نتیجه

  • نوع: Merge
  • نقش: داده‌های لیست فعلی را با نتایج پرس و جوی (بدون فیلتر) Baserow ترکیب می‌کند.
  • پیکربندی:

* حالت: combine

* ورودی 0: آیتم لیست از حلقه لیست‌ها.

* ورودی 1: نتیجه پرس و جوی Baserow از بررسی موجود (لیست Baserow).

  • ورودی/خروجی: داده‌های ترکیبی را به تعیین اقدام خروجی می‌دهد.
  • نسخه: 2
  • ملاحظات:

* از همان خطرات جفت‌سازی موقعیتی مانند نود Merge قبلی رنج می‌برد. به تطابق 1:1 بین آیتم‌های لیست و آیتم‌های پاسخ Baserow متکی است که با توجه به پرس و جوی بدون فیلتر بعید است.

#### نود: تعیین اقدام

  • نوع: Code
  • نقش: داده‌های ترکیبی را برای تصمیم‌گیری در مورد اینکه آیا باید لیست فعلی را ایجاد، به‌روزرسانی یا پرش کرد، تجزیه و تحلیل می‌کند.
  • منطق پیکربندی:

* داده‌های لیست و پاسخ Baserow را استخراج می‌کند.

* ردیف‌های existing را از baserowResponse.results شناسایی می‌کند.

* اقدام را به صورت پیش‌فرض create قرار می‌دهد.

* اگر ردیف‌های existing یافت شوند (که به دلیل مشکل بالادستی، احتمالاً تطابق صحیح نیستند):

* rowId را از اولین ردیف existing بازیابی می‌کند.

* price, size_sqft, و availability_date را بین لیست و ردیف existing مقایسه می‌کند.

* اگر هر یک از این فیلدها تغییر کرده باشند (!==)، اقدام را به update تنظیم می‌کند، در غیر این صورت آن را به skip تنظیم می‌کند.

* داده‌های لیست اصلی را به همراه فیلدهای _action و _rowId خروجی می‌دهد.

  • ورودی/خروجی: داده‌های تصمیم را به نیاز به ایجاد؟ خروجی می‌دهد.
  • نسخه: 2
  • ملاحظات:

* فرض می‌کند baserowResponse.results وجود دارد؛ اگر ساختار پاسخ Baserow متفاوت باشد، شکست خواهد خورد.

* مقایسه‌های سختگیرانه !== تفاوت‌های نوع را مدیریت نمی‌کنند (مثلاً "1200" در مقابل 1200)، که به طور بالقوه تغییرات را به اشتباه پرچم‌گذاری می‌کنند.

* منطق اصلی به دلیل پرس و جوی بدون فیلتر Baserow در مرحله قبل، معیوب است.

#### نود: نیاز به ایجاد؟

  • نوع: IF
  • نقش: گردش کار را بر اساس اینکه آیا اقدام تعیین شده create است، هدایت می‌کند.
  • پیکربندی: شرط: $json._action == 'create'
  • خروجی‌ها:

* True: به ایجاد ردیف ادامه می‌دهد.

* False: به نیاز به به‌روزرسانی؟ ادامه می‌دهد.

  • نسخه: 2
  • ملاحظات:

* اگر _action گم شده باشد، مسیر به صورت پیش‌فرض به False می‌رود و ممکن است منجر به مسیر ناخواسته skip یا update شود.

#### نود: ایجاد ردیف

  • نوع: Baserow
  • نقش: یک ردیف جدید را در جدول Baserow برای لیست‌هایی که نیاز به ایجاد دارند، درج می‌کند.
  • پیکربندی:

* عملیات: create

* tableId: از طریق متغیر محیطی $env.BASEROW_TABLE_ID تنظیم شده یا به صورت پیش‌فرض '1'.

* نگاشت فیلد به طور صریح در JSON گردش کار ارائه شده پیکربندی نشده است.

  • ورودی/خروجی: نتیجه ایجاد را به ایجاد پیام ارسال می‌کند.
  • نسخه: 1
  • ملاحظات:

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

* عملیات مکرر create می‌تواند منجر به محدودیت نرخ API Baserow شود.

#### نود: نیاز به به‌روزرسانی؟

  • نوع: IF
  • نقش: گردش کار را بر اساس اینکه آیا اقدام تعیین شده update است، هدایت می‌کند.
  • پیکربندی: شرط: $json._action == 'update'
  • خروجی‌ها:

* True: به به‌روزرسانی ردیف ادامه می‌دهد.

* False: (به طور ضمنی) مسیر پردازش را برای این لیست خاتمه می‌دهد و در صورت عدم ایجاد یا به‌روزرسانی، به طور مؤثر آن را پرش می‌کند.

  • نسخه: 2
  • ملاحظات:

* لیست‌هایی که به عنوان skip تعیین شده‌اند، مسیر False را در اینجا دنبال کرده و خاتمه می‌یابند.

#### نود: به‌روزرسانی ردیف

  • نوع: Baserow
  • نقش: یک ردیف موجود را در جدول Baserow به‌روزرسانی می‌کند.
  • پیکربندی:

* عملیات: update

* tableId: از طریق متغیر محیطی $env.BASEROW_TABLE_ID تنظیم شده یا به صورت پیش‌فرض '1'.

* rowId: برای هدف قرار دادن ردیف صحیح روی ={{ $json._rowId }} تنظیم شده است.

* نگاشت فیلد به طور صریح در JSON گردش کار ارائه شده پیکربندی نشده است.

  • ورودی/خروجی: نتیجه به‌روزرسانی را به به‌روزرسانی پیام ارسال می‌کند.
  • نسخه: 1
  • ملاحظات:

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

* rowId استفاده شده در اینجا بر اساس existing[0].id بالقوه نادرست از مرحله معیوب بررسی موجود است.

---

۲.۵ اعلان‌ها (Microsoft Teams)

مرور کلی:

این بلوک نهایی پیام‌های خلاصه‌کننده لیست‌های جدید یا به‌روز شده را فرمت کرده و آن‌ها را به یک کانال Microsoft Teams مشخص ارسال می‌کند.

نودها:

  • ایجاد پیام (Code)
  • ارسال پیام Teams (Microsoft Teams)
  • به‌روزرسانی پیام (Code)
  • ارسال پیام Teams (Microsoft Teams)
  • یادداشت چسبان (Sticky Note) - برای موارد پرش شده استفاده می‌شود.

#### نود: ایجاد پیام

  • نوع: Code
  • نقش: یک پیام HTML برای لیست‌های تازه ایجاد شده تولید می‌کند.
  • منطق پیکربندی:

* داده‌های لیست و نتیجه عملیات ایجاد ردیف را دریافت می‌کند.

* یک پیام HTML خلاصه کننده جزئیات لیست جدید (آدرس، قیمت، اندازه، URL و غیره) می‌سازد.

  • ورودی/خروجی: پیام فرمت شده را به اولین نود ارسال پیام Teams (برای ایجادها) ارسال می‌کند.
  • نسخه: 2
  • ملاحظات:

* فرض می‌کند عملیات ایجاد ردیف موفقیت‌آمیز بوده و داده‌های لازم را فراهم می‌کند.

* قالب‌بندی HTML پایه است؛ می‌توان برای خوانایی بهتر آن را بهبود بخشید.

#### نود: ارسال پیام Teams (برای ایجادها)

  • نوع: Microsoft Teams
  • نقش: پیام فرمت شده را به یک کانال Microsoft Teams ارسال می‌کند.
  • پیکربندی:

* URL وب‌هوک پیکربندی شده از طریق اعتبارنامه‌ها یا متغیر محیطی.

* محتوای پیام روی HTML تولید شده توسط ایجاد پیام تنظیم شده است.

  • ورودی/خروجی: پیام را به کانال Teams ارسال می‌کند.
  • نسخه: 1
  • ملاحظات:

* به پیکربندی صحیح وب‌هوک Microsoft Teams نیاز دارد.

#### نود: به‌روزرسانی پیام

  • نوع: Code
  • نقش: یک پیام HTML برای لیست‌های به‌روز شده تولید می‌کند.
  • منطق پیکربندی:

* داده‌های لیست و نتیجه عملیات به‌روزرسانی ردیف را دریافت می‌کند.

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

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

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

#### نود: ارسال پیام Teams (برای به‌روزرسانی‌ها)

  • نوع: Microsoft Teams
  • نقش: پیام به‌روزرسانی فرمت شده را به یک کانال Microsoft Teams ارسال می‌کند.
  • پیکربندی:

* URL وب‌هوک پیکربندی شده است.

* محتوای پیام روی HTML تولید شده توسط به‌روزرسانی پیام تنظیم شده است.

  • ورودی/خروجی: پیام را به کانال Teams ارسال می‌کند.
  • نسخه: 1
  • ملاحظات:

* به پیکربندی صحیح وب‌هوک Microsoft Teams نیاز دارد.

#### نود: یادداشت چسبان (برای موارد پرش شده)

  • نوع: Sticky Note
  • نقش: یک نشانگر بصری یا جای نگهدار برای لیست‌هایی که پرش شده‌اند (نه ایجاد و نه به‌روزرسانی شده‌اند) فراهم می‌کند. این نود عملیاتی انجام نمی‌دهد بلکه به عنوان مستندات در بوم گردش کار عمل می‌کند.
  • پیکربندی: حاوی متنی است که توضیح می‌دهد مورد پرش شده است.
  • ورودی/خروجی: مواردی را دریافت می‌کند که شرایط ایجاد یا به‌روزرسانی را در نودهای IF برآورده نکرده‌اند.
  • نسخه: 1
  • ملاحظات:

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

---

۳. ملاحظات مهم و بهبودهای بالقوه

  • منطق حذف تکرار در Baserow: مهم‌ترین مسئله، عدم وجود فیلتر در نود بررسی موجود (لیست Baserow) است. این مورد باید با افزودن یک فیلتر بر اساس listing_id برای اطمینان از تطابق دقیق، رفع شود. بدون این، گردش کار احتمالاً در به‌روزرسانی صحیح رکوردهای موجود شکست می‌خورد و ممکن است موارد تکراری ایجاد کند یا به‌روزرسانی‌های معتبر را نادیده بگیرد.
  • سازگاری انواع داده: پیاده‌سازی بررسی قوی انواع داده و تبدیل آن‌ها در نود نرمال‌سازی لیست‌ها (یا نودهای کد بعدی) برای اطمینان از فرمت‌بندی سازگار قیمت‌ها، اندازه‌ها و تاریخ‌ها قبل از مقایسه و ذخیره‌سازی. این کار از پرچم‌های "تغییر یافته" نادرست جلوگیری می‌کند.
  • مدیریت خطا: افزودن مراحل مدیریت خطای مشخص (مانند استفاده از گردش کارهای OnError یا نودهای اختصاصی مدیریت خطا) برای مدیریت صحیح شکست‌ها در طول فرآیند اسکرپ، عملیات Baserow یا اعلان‌های Teams.
  • نگاشت فیلد Baserow: نگاشت فیلدها را به طور صریح در نودهای ایجاد ردیف و به‌روزرسانی ردیف Baserow پیکربندی کنید تا اطمینان حاصل شود که داده‌ها به درستی در طرحواره جدول Baserow درج/به‌روزرسانی می‌شوند.
  • مقیاس‌پذیری: برای تعداد بسیار زیاد لیستینگ‌ها یا URLها، بهینه‌سازی اندازه‌های دسته (batch sizes)، پیاده‌سازی استراتژی‌های محدودیت نرخ (rate limiting) پیچیده‌تر و احتمالاً استفاده از سیستم صف n8n را در نظر بگیرید.
  • استحکام ScrapeGraphAI: در صورت مواجهه ScrapeGraphAI با مسدود شدن‌های مکرر یا خطا در وب‌سایت‌های هدف، مکانیزم‌های تلاش مجدد یا روش‌های اسکرپ جایگزین را پیاده‌سازی کنید.
  • محتوای اعلان: پیام‌های HTML ارسال شده به Microsoft Teams را برای وضوح و تجربه کاربری بهتر، احتمالاً با گنجاندن تصاویر یا اطلاعات دقیق‌تر ملک، بهبود بخشید.

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

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

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

این گردش کار به طور خودکار لیست املاک تجاری را از منابع آنلاین مختلف جمع‌آوری، داده‌ها را استخراج و ذخیره کرده و اعلان‌ها را از طریق Microsoft Teams ارسال می‌کند.

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

این گردش کار از n8n برای اتوماسیون، ScrapeGraphAI برای وب اسکرپینگ، Baserow برای پایگاه داده و Microsoft Teams برای اعلان‌ها استفاده می‌کند.

چگونه این گردش کار به تحقیقات بازار کمک می‌کند؟

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

workflowهای مرتبط

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