
اتوماسیون بایگانی صفحات خالی Notion
12 دقیقه مطالعه · منتشر شده ۱۴۰۵/۵/۶
دانلود workflow
فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.
- فایل JSON را دانلود کنید.
- در n8n: Workflows → Import from File.
- Credentialهای هر node را متصل کنید.
- 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 @ 2am | Cron | فعالساز زمانبندی شده | — | Get All Databases | زمانبندی پیشفرض ۲ بامداد روزانه است. در صورت نیاز منطقه زمانی را در تنظیمات n8n تنظیم کنید. |
Get All Databases | Notion API | بازیابی تمام پایگاههای داده Notion | Every day @ 2am | Get All Database Pages | نیاز به اعتبارنامه Notion دارد. اطمینان حاصل کنید که ادغام به پایگاههای داده هدف اضافه شده است. |
Get All Database Pages | Notion API | بازیابی صفحات از هر پایگاه داده | Get All Databases | Check for empty properties | نیاز به اعتبارنامه Notion دارد. از عبارت پویا databaseId استفاده میکند. |
Check for empty properties | Function | بررسی اولیه برای خصوصیات خالی | Get All Database Pages | If Empty Properties | جاوا اسکریپت سفارشی صفحاتی را که تمام خصوصیات آنها خالی به نظر میرسد، پرچمگذاری میکند. |
If Empty Properties | If | فیلتر کردن صفحات با خصوصیات خالی | Check for empty properties | SplitInBatches | فقط صفحاتی که به عنوان بالقوه خالی پرچمگذاری شدهاند، ادامه مییابند. |
SplitInBatches | SplitInBatches | پردازش صفحات به صورت جداگانه | If Empty Properties | Get Page Blocks | batchSize روی ۱ تنظیم شده است تا درخواستهای API در هر صفحه مدیریت شود. |
Get Page Blocks | Notion API | بازیابی بلوکهای محتوای یک صفحه | SplitInBatches | Process Blocks | نیاز به اعتبارنامه Notion دارد. از عبارت پویا blockId استفاده میکند. |
Process Blocks | Function | تجزیه و تحلیل بلوکها برای محتوای واقعی | Get Page Blocks | If toDelete | جاوا اسکریپت سفارشی تأیید میکند که آیا محتوای صفحه واقعاً خالی است یا خیر. |
If toDelete | If | تصمیمگیری در مورد بایگانی صفحه | Process Blocks | Archive Page | فقط صفحاتی که خالی تأیید شدهاند، به بایگانی ادامه مییابند. |
Archive Page | Notion 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های مرتبط
- احراز هویت کاربران با OpenID Connect در n8nBuilding Blocks
- تحلیل هوشمند دادههای Google Sheets با عامل AIEngineering
- مدیریت پیامهای متوالی تلگرام برای چتباتهای هوش مصنوعیBuilding Blocks
- خودکارسازی وظایف تکرارشونده در Airtable با n8nBuilding Blocks
- دموی اتوماسیون هوش مصنوعی n8n: دستهبندی ایمیل، RAG و رزرو ق…Building Blocks
- اتوماسیون ثبت ایمیل Gmail در Google Sheets با n8nOther
