اتوماسیون بایگانی صفحات خالی Notion

اتوماسیون بایگانی صفحات خالی Notion

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

دانلود workflow

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

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

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

اتوماسیون بایگانی صفحات Notion: بایگانی صفحات خالی در پایگاه‌های داده شما

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

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

این گردش کار به طور سیستماتیک پایگاه‌های داده Notion شما را برای صفحاتی که کاملاً خالی هستند یا هیچ داده معنی‌داری در خصوصیات خود ندارند، بررسی می‌کند. سپس این صفحات را بایگانی می‌کند تا فضای کاری شما مرتب بماند.

این فرآیند به مراحل منطقی زیر تقسیم می‌شود:

1. تریگر زمان‌بندی شده: گردش کار را در زمان از پیش تعیین شده (پیش‌فرض ۲ بامداد روزانه) آغاز می‌کند.

2. بازیابی پایگاه داده و صفحه: تمام پایگاه‌های داده قابل دسترسی Notion را واکشی کرده و سپس تمام صفحات را در هر یک از آن پایگاه‌های داده بازیابی می‌کند.

3. بررسی اولیه خصوصیات: خصوصیات هر صفحه را اسکن می‌کند تا صفحاتی را که به نظر خالی می‌رسند، شناسایی کند.

4. تحلیل محتوای دقیق: برای صفحاتی که در مرحله قبل علامت‌گذاری شده‌اند، این مرحله بلوک‌های محتوای واقعی را بازیابی و تحلیل می‌کند تا تأیید کند که صفحه واقعاً خالی است.

5. اجرای بایگانی: صفحاتی را که تأیید شده خالی هستند، بایگانی می‌کند.

---

تشریح گام به گام گردش کار

۱. تریگر زمان‌بندی شده

  • هدف: شروع خودکار فرآیند بایگانی در زمان تعیین شده.
  • نود: Every day @ 2am (تریگر Cron)
  • پیکربندی: تنظیم شده برای اجرا یک بار در روز ساعت ۲:۰۰ بامداد. اطمینان حاصل کنید که منطقه زمانی نمونه n8n شما به درستی پیکربندی شده است.
  • خروجی: نود Get All Databases را راه‌اندازی می‌کند.

---

۲. بازیابی پایگاه داده و صفحه

  • هدف: جمع‌آوری تمام داده‌های لازم از Notion، شامل پایگاه‌های داده و صفحات آن‌ها.
  • نودها:

* Get All Databases (Notion API: منبع database، عملیات getAll)

* Get All Database Pages (Notion API: منبع databasePage، عملیات getAll)

  • پیکربندی:

* Get All Databases: returnAll را روی true تنظیم کنید. نیاز به اعتبارنامه‌های Notion API دارد.

* Get All Database Pages: returnAll را روی true تنظیم کنید. از عبارتی مانند {{$json["id"]}} برای پارامتر databaseId استفاده کنید تا به صورت پویا هر شناسه پایگاه داده دریافتی از نود قبلی را پردازش کنید. نیاز به همان اعتبارنامه‌های Notion API دارد.

  • ورودی: Get All Databases توسط نود Cron راه‌اندازی می‌شود. Get All Database Pages داده‌ها را از Get All Databases دریافت می‌کند.
  • خروجی: لیستی از تمام صفحات از تمام پایگاه‌های داده قابل دسترسی.
  • ملاحظات: اطمینان حاصل کنید که اعتبارنامه‌های Notion API شما مجوزهای لازم را دارند. به محدودیت‌های نرخ API، به خصوص با تعداد زیادی پایگاه داده یا صفحه، توجه داشته باشید.

---

۳. بررسی اولیه خصوصیات

  • هدف: فیلتر سریع صفحاتی که حداقل یک خصوصیت غیر خالی دارند.
  • نودها:

* Check for empty properties (نود Function)

* If Empty Properties (نود If)

  • پیکربندی:

* Check for empty properties: این تابع سفارشی جاوا اسکریپت از طریق خصوصیات هر صفحه تکرار می‌شود. یک فیلد بولی toDelete را اختصاص می‌دهد: true اگر تمام خصوصیات خالی باشند، در غیر این صورت false.

* If Empty Properties: برای بررسی اینکه آیا فیلد toDelete برابر با true است، پیکربندی شده است.

  • ورودی: Check for empty properties صفحات را از Get All Database Pages دریافت می‌کند. If Empty Properties خروجی را از نود تابع دریافت می‌کند.
  • خروجی: فقط صفحاتی که تمام خصوصیات خالی دارند به مرحله بعدی منتقل می‌شوند.
  • قطعه منطق (نود Function):

```javascript

for (item of items) {

let toDelete = true; // فرض بر خالی بودن در ابتدا

const properties = item.json.properties;

for (const key in properties) {

const prop = properties[key];

const type = prop.type;

const data = prop[type];

// بررسی وجود داده و داشتن محتوا

if (data && (typeof data === 'string' && data.length > 0 || (Array.isArray(data) && data.length > 0))) {

toDelete = false; // محتوا پیدا شد، خالی نیست

break;

}

// انواع خاصی مانند 'select', 'status' و غیره را که ممکن است فیلد 'data' مستقیمی نداشته باشند اما 'name' یا مشابه آن را داشته باشند، بررسی کنید

if (prop[type] && prop[type].name) {

toDelete = false;

break;

}

}

item.json.toDelete = toDelete;

}

return items;

```

---

۴. تحلیل محتوای دقیق

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

* SplitInBatches (نود SplitInBatches)

* Get Page Blocks (Notion API: منبع block، عملیات getAll)

* Process Blocks (نود Function)

* If toDelete (نود If)

  • پیکربندی:

* SplitInBatches: batchSize را روی 1 تنظیم کنید تا هر صفحه خالی بالقوه به صورت جداگانه پردازش شود و از بارگذاری بیش از حد API جلوگیری شود.

* Get Page Blocks: از عبارتی مانند {{$json["id"]}} برای پارامتر blockId استفاده کنید تا بلوک‌های صفحه فعلی را دریافت کنید. نیاز به اعتبارنامه‌های Notion API دارد.

* Process Blocks: این تابع سفارشی جاوا اسکریپت بررسی می‌کند که آیا صفحه حاوی بلوک محتوایی است یا خیر. اگر هیچ بلوکی یافت نشد یا اگر تمام بلوک‌ها حاوی متن نبودند، toDelete را روی true تنظیم می‌کند.

* If toDelete: برای بررسی اینکه آیا فیلد toDelete برابر با true است، پیکربندی شده است.

  • ورودی: صفحات از If Empty Properties به SplitInBatches می‌روند. نودهای بعدی داده‌ها را به صورت متوالی پردازش می‌کنند.
  • خروجی: فقط صفحاتی که تأیید شده‌اند واقعاً خالی هستند به مرحله نهایی بایگانی منتقل می‌شوند.
  • قطعه منطق (نود Function Process Blocks):

```javascript

for (item of items) {

let toDelete = true; // فرض بر خالی بودن

const blocks = item.json; // بلوک‌ها در این زمینه خود آیتم‌ها هستند

if (!blocks || blocks.length === 0) {

// هیچ بلوکی یافت نشد، صفحه خالی در نظر گرفته می‌شود

toDelete = true;

} else {

for (const block of blocks) {

// بررسی محتوای متنی در انواع بلوک‌های رایج

if (block.type === 'paragraph' && block.paragraph.rich_text && block.paragraph.rich_text.length > 0 && block.paragraph.rich_text[0].plain_text.trim().length > 0) {

toDelete = false;

break;

}

if (block.type === 'heading_1' && block.heading_1.rich_text && block.heading_1.rich_text.length > 0 && block.heading_1.rich_text[0].plain_text.trim().length > 0) {

toDelete = false;

break;

}

// در صورت نیاز، بررسی برای انواع بلوک‌های دیگر را اضافه کنید (مانند لیست‌ها، نقل قول‌ها، کد)

// برای سادگی، این مثال بر پاراگراف‌ها و سرتیترها تمرکز دارد.

}

}

// یک شیء واحد با تصمیم و شناسه صفحه برگردانید

return [{ json: { toDelete: toDelete, pageID: item.json.pageId || item.json.id } }];

}

return []; // در صورت عدم وجود آیتم، خالی برگردانید

```

---

۵. اجرای بایگانی

  • هدف: بایگانی صفحاتی که به عنوان خالی تأیید شده‌اند.
  • نود: Archive Page (Notion API: عملیات archive page)
  • پیکربندی: از عبارتی مانند {{$json["pageID"]}} برای مشخص کردن pageId صفحه‌ای که باید بایگانی شود، استفاده کنید. نیاز به اعتبارنامه‌های Notion API با مجوزهای بایگانی دارد.
  • ورودی: صفحات تأیید شده به عنوان خالی از نود If toDelete.
  • خروجی: تأیید عملیات بایگانی.
  • ملاحظات: اطمینان حاصل کنید که ادغام Notion مجوز "Can edit" را برای پایگاه‌های داده‌ای که پردازش می‌شوند، دارد.

خلاصه گردش کار (Workflow)

نام گره (Node Name)نوع گره (Node Type)نقش (Role)گره(های) ورودی (Input Node(s))گره(های) خروجی (Output Node(s))یادداشت چسبان (Sticky Note)
Every day @ 2amCronفعال‌ساز زمان‌بندی شدهGet All Databasesزمان‌بندی پیش‌فرض ۲ بامداد روزانه است. در صورت نیاز منطقه زمانی را در تنظیمات n8n تنظیم کنید.
Get All DatabasesNotion APIبازیابی تمام پایگاه‌های داده NotionEvery day @ 2amGet All Database Pagesنیاز به اعتبارنامه Notion دارد. اطمینان حاصل کنید که ادغام به پایگاه‌های داده هدف اضافه شده است.
Get All Database PagesNotion APIبازیابی صفحات از هر پایگاه دادهGet All DatabasesCheck for empty propertiesنیاز به اعتبارنامه Notion دارد. از عبارت پویا databaseId استفاده می‌کند.
Check for empty propertiesFunctionبررسی اولیه برای خصوصیات خالیGet All Database PagesIf Empty Propertiesجاوا اسکریپت سفارشی صفحاتی را که تمام خصوصیات آن‌ها خالی به نظر می‌رسد، پرچم‌گذاری می‌کند.
If Empty PropertiesIfفیلتر کردن صفحات با خصوصیات خالیCheck for empty propertiesSplitInBatchesفقط صفحاتی که به عنوان بالقوه خالی پرچم‌گذاری شده‌اند، ادامه می‌یابند.
SplitInBatchesSplitInBatchesپردازش صفحات به صورت جداگانهIf Empty PropertiesGet Page BlocksbatchSize روی ۱ تنظیم شده است تا درخواست‌های API در هر صفحه مدیریت شود.
Get Page BlocksNotion APIبازیابی بلوک‌های محتوای یک صفحهSplitInBatchesProcess Blocksنیاز به اعتبارنامه Notion دارد. از عبارت پویا blockId استفاده می‌کند.
Process BlocksFunctionتجزیه و تحلیل بلوک‌ها برای محتوای واقعیGet Page BlocksIf toDeleteجاوا اسکریپت سفارشی تأیید می‌کند که آیا محتوای صفحه واقعاً خالی است یا خیر.
If toDeleteIfتصمیم‌گیری در مورد بایگانی صفحهProcess BlocksArchive Pageفقط صفحاتی که خالی تأیید شده‌اند، به بایگانی ادامه می‌یابند.
Archive PageNotion APIبایگانی صفحه خالی تأیید شدهIf toDeleteنیاز به اعتبارنامه Notion با مجوزهای بایگانی دارد.

ساخت گردش کار از ابتدا

برای بازسازی گردش کار، مراحل زیر را دنبال کنید:

1. افزودن Cron Trigger:

* نام Node: Every day @ 2am

* نوع: Cron

* زمان‌بندی: برای فعال‌سازی روزانه در ساعت ۲:۰۰ بامداد تنظیم کنید (ساعت: ۲).

2. افزودن Node نوت‌شن (دریافت پایگاه‌های داده):

* نام Node: Get All Databases

* نوع: Notion

* منبع: Database

* عملیات: Get All

* گزینه‌ها: Return All را روی true تنظیم کنید.

* اعتبارنامه‌ها: اعتبارنامه‌های API نوت‌شن خود را پیکربندی کنید.

* اتصال: خروجی Node Cron را به این Node متصل کنید.

3. افزودن Node نوت‌شن (دریافت صفحات پایگاه داده):

* نام Node: Get All Database Pages

* نوع: Notion

* منبع: Database Page

* عملیات: Get All

* گزینه‌ها: Return All را روی true تنظیم کنید.

* پارامترها: برای Database ID، از عبارت {{$json["id"]}} استفاده کنید.

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

* اتصال: خروجی Get All Databases را به این Node متصل کنید.

4. افزودن Function Node (بررسی خصوصیات):

* نام Node: Check for empty properties

* نوع: Function

* کد جاوا اسکریپت:

```javascript

for (item of items) {

let toDelete = true; // فرض بر خالی بودن اولیه

const properties = item.json.properties;

for (const key in properties) {

const prop = properties[key];

const type = prop.type;

const data = prop[type];

// بررسی وجود داده و داشتن محتوا

if (data && (typeof data === 'string' && data.length > 0 || (Array.isArray(data) && data.length > 0))) {

toDelete = false; // محتوا یافت شد، خالی نیست

break;

}

// بررسی انواع خاص مانند 'select', 'status' و غیره که ممکن است فیلد 'data' مستقیمی نداشته باشند اما 'name' یا مشابه آن را داشته باشند

if (prop[type] && prop[type].name) {

toDelete = false;

break;

}

}

item.json.toDelete = toDelete;

}

return items;

```

* اتصال: خروجی Get All Database Pages را به این Node متصل کنید.

5. افزودن If Node (فیلتر خصوصیات):

* نام Node: If Empty Properties

* نوع: If

* شرط: {{$json["toDelete"]}} is true.

* اتصال: خروجی Check for empty properties را به این Node متصل کنید.

6. افزودن SplitInBatches Node:

* نام Node: SplitInBatches

* نوع: SplitInBatches

* اندازه دسته: 1

* اتصال: خروجی true از If Empty Properties را به این Node متصل کنید.

7. افزودن Notion Node (دریافت بلاک‌ها):

* نام Node: Get Page Blocks

* نوع: Notion

* منبع: Block

* عملیات: Get All

* پارامترها: برای Block ID، از عبارت {{$json["id"]}} استفاده کنید.

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

* اتصال: خروجی SplitInBatches را به این Node متصل کنید.

8. افزودن Function Node (پردازش بلاک‌ها):

* نام Node: Process Blocks

* نوع: Function

* کد جاوا اسکریپت:

```javascript

for (item of items) {

let toDelete = true; // فرض بر خالی بودن

const blocks = item.json; // بلاک‌ها در این زمینه خود آیتم‌ها هستند

if (!blocks || blocks.length === 0) {

// هیچ بلاکی یافت نشد، صفحه خالی در نظر گرفته می‌شود

toDelete = true;

} else {

for (const block of blocks) {

// بررسی محتوای متنی در انواع بلوک‌های رایج

if (block.type === 'paragraph' && block.paragraph.rich_text && block.paragraph.rich_text.length > 0 && block.paragraph.rich_text[0].plain_text.trim().length > 0) {

toDelete = false;

break;

}

if (block.type === 'heading_1' && block.heading_1.rich_text && block.heading_1.rich_text.length > 0 && block.heading_1.rich_text[0].plain_text.trim().length > 0) {

toDelete = false;

break;

}

// بررسی‌های دیگر برای انواع بلاک‌ها در صورت نیاز (مانند لیست‌ها، نقل قول‌ها، کد)

// برای سادگی، این مثال بر پاراگراف‌ها و عنوان‌ها تمرکز دارد.

}

}

// بازگرداندن یک شیء واحد با تصمیم و شناسه صفحه

return [{ json: { toDelete: toDelete, pageID: item.json.pageId || item.json.id } }];

}

return []; // در صورت عدم وجود آیتم، خالی برگردانده می‌شود

```

* اتصال: خروجی Get Page Blocks را به این Node متصل کنید.

9. افزودن If Node (تصمیم بایگانی):

* نام Node: If toDelete

* نوع: If

* شرط: {{$json["toDelete"]}} is true.

* اتصال: خروجی Process Blocks را به این Node متصل کنید.

10. افزودن Notion Node (بایگانی صفحه):

* نام Node: Archive Page

* نوع: Notion

* عملیات: Archive Page

* پارامترها: برای Page ID، از عبارت {{$json["pageID"]}} استفاده کنید.

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

* اتصال: خروجی true از If toDelete را به این Node متصل کنید.

---

برای دسترسی به این و سایر گردش کارهای اتوماسیون قدرتمند، از کاتالوگ Axeto.ai دیدن کنید: https://axeto.ai/n8n

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

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

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

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

چگونه این گردش کار صفحات خالی را تشخیص می‌دهد؟

گردش کار ابتدا خصوصیات هر صفحه را بررسی می‌کند و سپس محتوای واقعی بلوک‌های صفحه را تحلیل می‌کند تا تأیید کند که صفحه واقعاً خالی است.

آیا این گردش کار قابل برنامه‌ریزی است؟

بله، این گردش کار با استفاده از یک تریگر زمان‌بندی شده (Cron) طراحی شده است تا به طور منظم در زمان مشخصی اجرا شود و فرآیند بایگانی را انجام دهد.

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

شما به یک نمونه n8n فعال و اعتبارنامه‌های معتبر Notion API با مجوزهای لازم برای دسترسی و مدیریت پایگاه‌های داده و صفحات نیاز دارید.

workflowهای مرتبط

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