مستندات n8n
74+ نود
📝

نوشن

Notion

فضای کاری همه‌کاره - یادداشت، دیتابیس، ویکی و مدیریت پروژه

ابزارهای کاری
متوسط
۰ بازدید
n8n 1.0+

نمای کلی

نود Notion یکی از کاربردی‌ترین نودهای n8n برای مدیریت دانش و سازماندهی اطلاعات است.

Notion چیست؟

Notion یک فضای کاری همه‌کاره (All-in-One Workspace) است که یادداشت‌برداری، مدیریت پروژه، ویکی تیمی و دیتابیس را در یک پلتفرم ترکیب کرده است. API رسمی Notion امکان اتوماسیون کامل محتوا را فراهم می‌کند.

مفاهیم کلیدی:

  • Pages: صفحات Notion، واحد اصلی محتوا هستند. هر صفحه می‌تواند شامل متن، Blockها و زیرصفحات باشد
  • Databases: جداول ساختاریافته با Propertyهای مختلف (متن، عدد، تاریخ، Select، Relation و غیره)
  • Blocks: واحدهای سازنده محتوا (متن، هدینگ، لیست، کد، تصویر، Embed و ...)
  • Properties: فیلدهای دیتابیس با انواع مختلف (Title, Rich Text, Number, Select, Multi-select, Date, Checkbox, URL, Email, Phone, Formula, Relation, Rollup, People, Files, Created Time, Last Edited Time)

انواع نمایش دیتابیس (Views):

  • Table: نمای جدولی (مانند Excel)
  • Board: نمای Kanban (مانند Trello)
  • Timeline: نمای زمانی (Gantt Chart)
  • Calendar: نمای تقویمی
  • List: نمای لیستی ساده
  • Gallery: نمای گالری با کارت‌های تصویری

انواع Block:

  • متن (Paragraph)، هدینگ (H1, H2, H3)، لیست (Bulleted, Numbered)
  • چک‌لیست (To-do)، Toggle، Callout، Quote
  • بلوک کد (Code)، تصویر (Image)، ویدیو (Video)
  • Embed، Bookmark، فایل، Divider، Table of Contents

محدودیت‌های API:

  • Rate Limit: میانگین 3 درخواست در ثانیه
  • حداکثر 100 آیتم در هر درخواست pagination
  • حداکثر 2000 کاراکتر برای rich_text در هر بلوک
  • فقط صفحات و دیتابیس‌هایی که با Integration به اشتراک گذاشته شده‌اند قابل دسترسی هستند

احراز هویت

احراز هویت Notion

روش ۱: Internal Integration (توصیه شده)

#### مراحل ساخت Integration:

  1. 1به آدرس [notion.so/my-integrations](https://www.notion.so/my-integrations) بروید
  2. 2روی "New integration" کلیک کنید
  3. 3نام Integration را وارد کنید (مثل: "n8n Automation")
  4. 4Workspace مورد نظر را انتخاب کنید
  5. 5قابلیت‌ها (Capabilities) را تنظیم کنید:
  • Read content: خواندن محتوای صفحات و دیتابیس‌ها
  • Update content: ویرایش محتوا
  • Insert content: ایجاد محتوای جدید
  • Read user information: دسترسی به اطلاعات کاربران (اختیاری)
  1. 1Internal Integration Secret را کپی کنید:
code
secret_abc123XYZ...

#### اتصال به صفحات/دیتابیس‌ها (بسیار مهم!):

  1. 1صفحه یا دیتابیس مورد نظر را در Notion باز کنید
  2. 2از منوی (سه نقطه بالا-راست) گزینه "Connections" را انتخاب کنید
  3. 3Integration خود را پیدا و انتخاب کنید
  4. 4بدون این مرحله، API هیچ دسترسی‌ای به محتوا ندارد!

#### تنظیم در n8n:

  1. 1Credentials > Notion API
  2. 2Internal Integration Secret وارد کنید
  3. 3Test Connection بزنید

روش ۲: OAuth2 (برای Public Integrations)

  • مناسب برای اپلیکیشن‌هایی که چندین کاربر دارند
  • نیاز به Client ID و Client Secret
  • کاربر باید دسترسی را تایید کند

نکات امنیتی:

  • Secret را در جایی امن ذخیره کنید
  • حداقل دسترسی‌های لازم را فعال کنید
  • برای هر پروژه Integration جداگانه بسازید

عملیات‌های موجود

1

createPage

ایجاد صفحه جدید در Notion (درون صفحه والد یا دیتابیس)

2

getPage

دریافت اطلاعات و Propertyهای یک صفحه با Page ID

3

updatePage

ویرایش Propertyها، آیکون یا کاور یک صفحه موجود

4

archivePage

آرشیو (حذف نرم) یک صفحه - قابل بازیابی است

5

queryDatabase

کوئری دیتابیس با فیلتر، مرتب‌سازی و pagination

6

createDatabaseItem

افزودن رکورد جدید به دیتابیس Notion

7

updateDatabaseItem

ویرایش Propertyهای یک رکورد موجود در دیتابیس

8

getDatabase

دریافت ساختار و تنظیمات دیتابیس (Propertyها و انواع آنها)

9

search

جستجو در تمام صفحات و دیتابیس‌های قابل دسترسی

10

appendBlockChildren

اضافه کردن محتوا (Blockها) به انتهای یک صفحه یا بلوک والد

11

getBlockChildren

دریافت لیست Blockهای فرزند یک صفحه یا بلوک

12

deleteBlock

حذف یک بلوک از صفحه (آرشیو می‌شود)

13

getUser

دریافت اطلاعات یک کاربر Workspace

14

listUsers

دریافت لیست تمام کاربران و ربات‌های Workspace

کاربردهای متداول

کاربردهای رایج

۱. یادداشت خودکار جلسات (Meeting Notes)

ثبت خودکار یادداشت جلسات از Google Calendar:

code
Google Calendar Trigger (جلسه جدید)
  → Notion (createPage)
    Parent: database_id (دیتابیس جلسات)
    Properties:
      Title: "جلسه: {{$json.summary}}"
      Date: {{$json.start.dateTime}}
      Attendees: {{$json.attendees.map(a => a.email).join(', ')}}
    Children:
      - heading_2: "دستور جلسه"
      - to_do: "بررسی وضعیت پروژه"
      - to_do: "تصمیمات"
      - heading_2: "نتایج"
      - paragraph: ""

۲. CRM در دیتابیس Notion

مدیریت مشتریان و سرنخ‌ها:

code
Webhook (فرم تماس سایت)
  → Notion (createDatabaseItem)
    Database: "CRM مشتریان"
    Properties:
      Name: {{$json.name}}
      Email: {{$json.email}}
      Phone: {{$json.phone}}
      Status: "سرنخ جدید"
      Source: "وبسایت"
      Date: {{$now}}
  → Telegram (اعلان به تیم فروش)

۳. خط تولید محتوا (Content Pipeline)

انتشار خودکار مطالب از Notion به وبسایت:

code
Schedule (هر ساعت)
  → Notion (queryDatabase)
    Database: "تقویم محتوا"
    Filter: Status = "آماده انتشار"
  → Loop
    → Notion (getBlockChildren) - محتوای کامل
    → Code (تبدیل Blockها به HTML/Markdown)
    → WordPress/API (انتشار پست)
    → Notion (updateDatabaseItem)
      Status: "منتشر شده"
      Published Date: {{$now}}

۴. همگام‌سازی تسک‌ها (Task Sync)

سینک بین Notion و ابزارهای مدیریت پروژه:

code
Notion Trigger (تسک جدید/تغییر)
  → IF (Status تغییر کرده)
    → Jira/Trello/Asana (به‌روزرسانی تسک)
  → IF (تسک جدید)
    → Jira (ایجاد Issue)
    → Notion (updatePage: Jira Link اضافه)

۵. پایگاه دانش خودکار (Knowledge Base)

ساخت ویکی خودکار از منابع مختلف:

code
Slack Trigger (پیام‌های مهم با ایموجی 📌)
  → Notion (createPage)
    Parent: "پایگاه دانش تیم"
    Title: "از Slack: {{$json.text.substring(0, 50)}}"
    Children:
      - callout: "منبع: Slack - {{$json.channel}}"
      - paragraph: {{$json.text}}
      - bookmark: {{$json.links[0]}}

۶. پورتال مشتری (Client Portal)

مدیریت پروژه‌های مشتری:

code
Webhook (پروژه جدید)
  → Notion (createPage)
    Parent: "پروژه‌های مشتریان"
    Icon: "📁"
    Children:
      - heading_1: "اطلاعات پروژه"
      - table: مشخصات پروژه
      - heading_1: "مایلستون‌ها"
      - to_do: مراحل پروژه
      - heading_1: "فایل‌ها"
  → Email (ارسال لینک به مشتری)

۷. برد Sprint Planning

مدیریت اسپرینت با Kanban Board:

code
Schedule (شروع اسپرینت جدید)
  → Notion (queryDatabase)
    Database: "Backlog"
    Filter: Priority = "High" AND Sprint = null
  → Loop
    → Notion (updateDatabaseItem)
      Sprint: "اسپرینت {{$json.sprintNumber}}"
      Status: "To Do"
  → Telegram (اعلان شروع اسپرینت)

۸. ردیاب عادت‌ها (Habit Tracker)

ثبت خودکار عادت‌های روزانه:

code
Schedule (هر شب ساعت ۲۳)
  → HTTP Request (دریافت آمار روز از اپ‌ها)
  → Notion (createDatabaseItem)
    Database: "عادت‌های روزانه"
    Properties:
      Date: {{$today}}
      Exercise: {{$json.steps > 8000}}
      Reading: {{$json.readingMinutes}}
      Water: {{$json.waterGlasses}}
      Sleep: {{$json.sleepHours}}

۹. پیگیری فاکتورها (Invoice Tracking)

مدیریت مالی در دیتابیس Notion:

code
Webhook (فاکتور جدید از سیستم مالی)
  → Notion (createDatabaseItem)
    Database: "فاکتورها"
    Properties:
      Invoice Number: {{$json.number}}
      Client: {{$json.clientName}}
      Amount: {{$json.total}}
      Status: "صادر شده"
      Due Date: {{$json.dueDate}}
      Items: {{$json.items.map(i => i.name).join(', ')}}

۱۰. ویکی تیمی با به‌روزرسانی خودکار

به‌روزرسانی مستندات تیم به صورت خودکار:

code
GitHub Trigger (Release جدید)
  → Notion (search)
    Query: "مستندات {{$json.repo}}"
  → Notion (appendBlockChildren)
    Block: صفحه مستندات
    Children:
      - heading_3: "نسخه {{$json.tag}} - {{$today}}"
      - paragraph: {{$json.releaseNotes}}
      - divider

نکات حرفه‌ای

نکات حرفه‌ای

۱. صفحات را با Integration به اشتراک بگذارید!

این مهم‌ترین نکته است. بدون Share کردن، API هیچ دسترسی‌ای ندارد:

code
صفحه/دیتابیس → ⋯ → Connections → انتخاب Integration

۲. فرمت rich_text

همه متن‌ها در Notion باید در قالب rich_text باشند:

json
[{
  "type": "text",
  "text": {"content": "متن شما اینجا"}
}]

برای متن با استایل:

json
[{
  "type": "text",
  "text": {"content": "متن Bold"},
  "annotations": {"bold": true}
}]

۳. نگاشت انواع Property

هر نوع Property فرمت ورودی خاصی دارد:

code
Title:        {title: [{text: {content: "عنوان"}}]}
Rich Text:    {rich_text: [{text: {content: "متن"}}]}
Number:       {number: 1500}
Select:       {select: {name: "انتخاب"}}
Multi-select: {multi_select: [{name: "تگ۱"}, {name: "تگ۲"}]}
Date:         {date: {start: "2024-01-15", end: "2024-01-20"}}
Checkbox:     {checkbox: true}
URL:          {url: "https://example.com"}
Email:        {email: "info@example.com"}
Phone:        {phone_number: "+989123456789"}
People:       {people: [{id: "user-id"}]}

۴. تفاوت Database و Page

  • Database: ساختار جدولی با Propertyها، قابل فیلتر و مرتب‌سازی
  • Page: صفحه محتوا با Blockها
  • هر رکورد دیتابیس یک Page است (با دو parent type متفاوت)

۵. فیلتر دیتابیس (Filter Syntax)

json
{
  "and": [
    {"property": "Status", "select": {"equals": "فعال"}},
    {"property": "Priority", "select": {"equals": "بالا"}},
    {"property": "Due Date", "date": {"before": "2024-12-31"}}
  ]
}

عملگرهای فیلتر: equals, does_not_equal, contains, does_not_contain, starts_with, ends_with, is_empty, is_not_empty, before, after, on_or_before, on_or_after

۶. مرتب‌سازی (Sort Syntax)

json
[
  {"property": "Priority", "direction": "descending"},
  {"property": "Created Time", "direction": "ascending"}
]

۷. Pagination با start_cursor

برای دریافت همه نتایج:

code
Notion (queryDatabase, page_size: 100)
  → IF (has_more == true)
    → Set (cursor = next_cursor)
    → Loop back → Notion (start_cursor: cursor)
  → Merge همه نتایج

۸. آرشیو به جای حذف

Notion API حذف دائم ندارد. از Archive استفاده کنید:

code
Notion (updatePage)
  pageId: "..."
  archived: true

آرشیو قابل بازگشت است (archived: false).

۹. محتوای صفحه با Block Children

برای اضافه کردن محتوا به صفحه، از appendBlockChildren استفاده کنید:

json
{
  "children": [
    {"type": "heading_2", "heading_2": {"rich_text": [{"text": {"content": "عنوان"}}]}},
    {"type": "paragraph", "paragraph": {"rich_text": [{"text": {"content": "متن"}}]}},
    {"type": "to_do", "to_do": {"rich_text": [{"text": {"content": "تسک"}}], "checked": false}}
  ]
}

۱۰. Propertyهای فقط خواندنی

این Propertyها توسط API قابل تغییر نیستند:

  • Formula: محاسبه خودکار
  • Rollup: جمع‌آوری از Relation
  • Created Time: زمان ایجاد (خودکار)
  • Last Edited Time: آخرین ویرایش (خودکار)
  • Created By: ایجادکننده (خودکار)
  • Last Edited By: آخرین ویرایشگر (خودکار)

۱۱. تنظیم کاور و آیکون

json
{
  "icon": {"type": "emoji", "emoji": "📋"},
  "cover": {"type": "external", "external": {"url": "https://example.com/image.jpg"}}
}

۱۲. Notion Formulas

Formulas در Notion مثل فرمول‌های Excel هستند. از API فقط خواندنی:

code
prop("Price") * prop("Quantity")
if(prop("Status") == "Done", "✅", "⏳")

۱۳. فیلدهای خودکار

created_time و last_edited_time به صورت خودکار توسط Notion مدیریت می‌شوند و نیاز به ست کردن دستی ندارند.

۱۴. Template Databases

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

۱۵. Multi-select به صورت آرایه

Multi-select را به صورت آرایه‌ای از نام‌ها ارسال کنید:

json
{
  "multi_select": [
    {"name": "برنامه‌نویسی"},
    {"name": "دیزاین"},
    {"name": "مدیریت"}
  ]
}

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

رفع مشکلات

خطاهای رایج و راه‌حل‌ها

۱. خطای 401 Unauthorized

علت: Integration Secret اشتباه یا منقضی شده

راه‌حل

  • Secret را از [notion.so/my-integrations](https://www.notion.so/my-integrations) بررسی کنید
  • مطمئن شوید Secret کامل کپی شده (با پیشوند secret_)
  • Integration حذف نشده باشد
  • Credential در n8n را بروز کنید

۲. خطای 404 - صفحه یا دیتابیس پیدا نشد

علت: صفحه/دیتابیس با Integration به اشتراک گذاشته نشده

راه‌حل

  • این رایج‌ترین مشکل است! حتماً صفحه/دیتابیس را با Integration به اشتراک بگذارید
  • در Notion روی صفحه: ⋯ → Connections → Integration خود را اضافه کنید
  • صفحات والد را هم باید Share کنید
  • Page ID را بررسی کنید (32 کاراکتر بدون خط‌تیره از URL)

۳. خطای 400 - Validation Error (فرمت Property اشتباه)

علت: ساختار Property مطابق نوع فیلد نیست

راه‌حل

  • هر نوع Property فرمت خاصی دارد:
code
Title: {title: [{text: {content: "متن"}}]}
  Rich Text: {rich_text: [{text: {content: "متن"}}]}
  Number: {number: 42}
  Select: {select: {name: "گزینه"}}
  Multi-select: {multi_select: [{name: "تگ۱"}, {name: "تگ۲"}]}
  Date: {date: {start: "2024-01-15"}}
  Checkbox: {checkbox: true}
  URL: {url: "https://example.com"}
  Email: {email: "test@example.com"}
  • نام Property باید دقیقاً مطابق دیتابیس باشد (حساس به حروف بزرگ/کوچک)

۴. خطای 409 Conflict

علت: تداخل در ویرایش همزمان

راه‌حل

  • بین درخواست‌های متوالی فاصله بگذارید
  • از Retry on Fail استفاده کنید
  • از ویرایش همزمان یک صفحه خودداری کنید

۵. خطای 429 Rate Limit

علت: بیش از 3 درخواست در ثانیه (میانگین)

راه‌حل

  • از Wait Node استفاده کنید (حداقل 350ms بین درخواست‌ها):
code
Loop → Notion → Wait (400ms) → Next
  • درخواست‌ها را Batch کنید
  • از Retry-After header استفاده کنید
  • عملیات سنگین را در ساعات کم‌ترافیک انجام دهید

۶. Block Type پشتیبانی نمی‌شود

علت: برخی انواع Block فقط خواندنی هستند

راه‌حل

  • انواع قابل ایجاد: paragraph, heading_1/2/3, bulleted_list_item, numbered_list_item, to_do, toggle, code, callout, quote, divider, bookmark, image, embed
  • انواع فقط خواندنی: table_of_contents, breadcrumb, column_list, synced_block
  • از نوع Block مناسب استفاده کنید

۷. خطای فرمت rich_text

علت: ساختار rich_text معتبر نیست

راه‌حل

  • فرمت صحیح:
json
[{
    "type": "text",
    "text": {"content": "متن شما"},
    "annotations": {"bold": false, "italic": false, "color": "default"}
  }]
  • حداکثر 2000 کاراکتر در هر بلوک rich_text
  • برای متن طولانی، چندین بلوک ایجاد کنید

۸. مشکل دسترسی به صفحات والد

علت: Integration به صفحه والد دسترسی ندارد

راه‌حل

  • هم صفحه والد و هم زیرصفحات باید با Integration به اشتراک گذاشته شوند
  • برای دیتابیس‌های درون صفحه، صفحه والد را Share کنید
  • دسترسی به صورت آبشاری (Cascade) به زیرصفحات منتقل می‌شود
اشتراک‌گذاری:

آیا این مستندات مفید بود؟