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

اسلک

Slack

اتوماسیون Slack: ارسال پیام، مدیریت کانال، اعلان تیمی و هشدارهای DevOps

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

نمای کلی

نود Slack یکی از پرکاربردترین نودهای n8n برای ارتباطات تیمی و اتوماسیون فرآیندهای سازمانی است.

Slack چیست؟

Slack یک پلتفرم ارتباطات تیمی است که پیام‌رسانی، اشتراک فایل، تماس صوتی/تصویری و یکپارچه‌سازی با ابزارهای مختلف را در یک محیط متمرکز ارائه می‌دهد. API قدرتمند Slack امکان ساخت ربات‌ها و اتوماسیون‌های پیشرفته را فراهم می‌کند.

قابلیت‌های کلیدی:

  • ارسال پیام متنی با فرمت‌بندی Markdown (mrkdwn)
  • ارسال پیام‌های تعاملی با Block Kit
  • مدیریت کانال‌ها (ایجاد، آرشیو، دعوت کاربران)
  • آپلود و اشتراک فایل در کانال‌ها
  • مدیریت Topic و Purpose کانال‌ها
  • افزودن Reaction (ایموجی) به پیام‌ها
  • زمان‌بندی ارسال پیام
  • جستجو در پیام‌ها و فایل‌ها
  • دریافت اطلاعات کاربران و پروفایل‌ها
  • Threading (پاسخ در Thread)
  • Ephemeral Messages (پیام‌های موقت)

Slack Trigger:

  • دریافت پیام‌های جدید در کانال
  • رویدادهای Slash Command
  • تعاملات Block Kit (دکمه‌ها و منوها)
  • رویدادهای عضویت و خروج از کانال
  • Event Subscriptions برای رویدادهای مختلف Workspace

کاربردها در تیم‌های ایرانی:

  • اعلان‌های CI/CD و DevOps
  • هشدار مانیتورینگ سرور و سرویس‌ها
  • اعلان سفارش و پرداخت جدید
  • مدیریت تیکت‌های پشتیبانی
  • گزارش‌های روزانه و هفتگی
  • یکپارچه‌سازی با GitHub/GitLab
  • ربات پاسخگویی خودکار
  • مدیریت On-Call و Incident Response

احراز هویت

احراز هویت Slack

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

#### مراحل ساخت Slack App:

  1. 1به [api.slack.com/apps](https://api.slack.com/apps) بروید
  2. 2روی "Create New App" کلیک کنید
  3. 3"From scratch" را انتخاب کنید
  4. 4نام App (مثل: "n8n Automation") و Workspace را انتخاب کنید
  5. 5به بخش OAuth & Permissions بروید

#### تنظیم Scopes (دسترسی‌ها): در بخش Bot Token Scopes این دسترسی‌ها را اضافه کنید:

code
channels:read          → خواندن اطلاعات کانال‌های عمومی
channels:manage        → مدیریت کانال‌ها (ایجاد، آرشیو)
channels:join          → عضویت در کانال‌های عمومی
channels:history       → خواندن تاریخچه پیام‌ها
chat:write             → ارسال پیام
chat:write.customize   → ارسال پیام با نام و آواتار دلخواه
files:write            → آپلود فایل
files:read             → خواندن فایل‌ها
groups:read            → خواندن کانال‌های خصوصی
groups:write           → مدیریت کانال‌های خصوصی
im:read                → خواندن پیام‌های مستقیم
im:write               → ارسال پیام مستقیم
reactions:write        → افزودن Reaction
reactions:read         → خواندن Reactionها
users:read             → خواندن اطلاعات کاربران
users:read.email       → خواندن ایمیل کاربران
search:read            → جستجو در پیام‌ها و فایل‌ها

#### نصب App در Workspace:

  1. 1روی "Install to Workspace" کلیک کنید
  2. 2دسترسی‌ها را تایید کنید
  3. 3Bot User OAuth Token را کپی کنید:
code
xoxb-1234567890-1234567890123-abcdefghijklmnopqrstuv

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

  1. 1Credentials > Slack OAuth2 API
  2. 2Client ID و Client Secret را از App Settings وارد کنید
  3. 3یا مستقیماً Bot Token (با پیشوند xoxb-) را وارد کنید
  4. 4Test Connection بزنید

روش ۲: Bot Token (ساده‌تر)

  1. 1در App Settings > OAuth & Permissions
  2. 2پس از Install، Bot User OAuth Token را کپی کنید
  3. 3در n8n: Credentials > Slack API > Access Token وارد کنید

روش ۳: User Token (برای عملیات کاربر)

  • برای عملیاتی که نیاز به دسترسی سطح کاربر دارد (مثل جستجو)
  • User Token Scopes را تنظیم کنید
  • Token با پیشوند xoxp- شروع می‌شود

Event Subscriptions (برای Trigger):

  1. 1در App Settings > Event Subscriptions
  2. 2Enable Events را فعال کنید
  3. 3Request URL را وارد کنید (آدرس Webhook n8n)
  4. 4Event‌های مورد نظر را Subscribe کنید:
code
message.channels     → پیام جدید در کانال عمومی
   message.groups       → پیام جدید در کانال خصوصی
   message.im           → پیام مستقیم جدید
   app_mention          → منشن شدن ربات
   reaction_added       → اضافه شدن Reaction
   member_joined_channel → عضویت جدید در کانال

Slash Commands:

  1. 1در App Settings > Slash Commands
  2. 2"Create New Command" کلیک کنید
  3. 3Command (مثل /deploy)، Request URL و Description را تنظیم کنید

نکات امنیتی:

  • Token ربات را در جایی امن نگهداری کنید
  • از حداقل Scopes مورد نیاز استفاده کنید
  • Signing Secret را برای اعتبارسنجی Webhook تنظیم کنید
  • Token‌ها را به صورت دوره‌ای rotate کنید

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

1

send_message

ارسال پیام متنی یا Block Kit به کانال، گروه یا کاربر. پشتیبانی از فرمت‌بندی mrkdwn، پیام‌های Thread و Ephemeral. می‌توانید نام و آواتار فرستنده را سفارشی کنید.

2

update_message

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

3

delete_message

حذف یک پیام از کانال. ربات فقط پیام‌های خودش را می‌تواند حذف کند مگر اینکه دسترسی chat:write.public داشته باشد. حذف برگشت‌ناپذیر است.

4

get_channel

دریافت اطلاعات کامل یک کانال شامل نام، توضیحات، Topic، Purpose، تعداد اعضا، تاریخ ایجاد و تنظیمات آرشیو. برای کانال‌های عمومی و خصوصی کار می‌کند.

5

create_channel

ایجاد کانال جدید در Workspace. نام کانال باید حروف کوچک، اعداد و خط‌تیره باشد. حداکثر ۸۰ کاراکتر. می‌توانید کانال عمومی یا خصوصی بسازید.

6

archive_channel

آرشیو کردن یک کانال. کانال آرشیو شده فقط خواندنی می‌شود و اعضا نمی‌توانند پیام ارسال کنند. کانال‌های #general قابل آرشیو نیستند. قابل بازیابی است.

7

invite_to_channel

دعوت یک یا چند کاربر به کانال. می‌توانید چندین کاربر را همزمان دعوت کنید. کاربران دعوت‌شده بلافاصله عضو کانال می‌شوند.

8

upload_file

آپلود فایل به یک یا چند کانال. از Binary Data یا محتوای متنی پشتیبانی می‌کند. فرمت‌های مختلف: تصویر، PDF، CSV، کد و غیره. حداکثر حجم بستگی به پلن Slack دارد.

9

set_topic

تنظیم یا تغییر Topic (موضوع) کانال. Topic در بالای کانال نمایش داده می‌شود و برای نمایش اطلاعات مهم و فوری مناسب است. حداکثر 250 کاراکتر.

10

set_purpose

تنظیم یا تغییر Purpose (هدف) کانال. Purpose توضیح می‌دهد کانال برای چه منظوری ایجاد شده و در توضیحات کانال نمایش داده می‌شود. حداکثر 250 کاراکتر.

11

get_user

دریافت اطلاعات کامل یک کاربر شامل نام، ایمیل، آواتار، عنوان شغلی، تلفن، وضعیت آنلاین و اطلاعات پروفایل. برای شناسایی کاربران در Workflowها استفاده می‌شود.

12

get_user_profile

دریافت پروفایل کامل کاربر شامل فیلدهای سفارشی، وضعیت (status)، آواتار، عنوان شغلی و اطلاعات تماس. مفید برای سیستم‌های HR و دایرکتوری کارمندان.

13

add_reaction

افزودن ایموجی Reaction به یک پیام. Reactionها برای تایید، رای‌گیری، اعلام وضعیت و Workflow Trigger بسیار مفید هستند. نام ایموجی بدون : وارد شود.

14

get_permalink

دریافت لینک مستقیم (Permalink) یک پیام خاص. این لینک قابل اشتراک‌گذاری است و کاربران را مستقیماً به پیام هدایت می‌کند. برای ارجاع و گزارش‌دهی مفید است.

15

schedule_message

ارسال پیام در زمان مشخص در آینده. پیام تا ۱۲۰ روز آینده قابل زمان‌بندی است. برای یادآوری‌ها، گزارش‌های زمان‌بندی شده و اعلان‌های برنامه‌ریزی شده بسیار مناسب است.

16

list_users

دریافت لیست تمام کاربران Workspace شامل اعضای فعال، غیرفعال و ربات‌ها. از Pagination (cursor) برای Workspaceهای بزرگ استفاده کنید. برای مدیریت کاربران و گزارش‌ها مفید است.

17

join_channel

عضویت ربات در یک کانال عمومی. ربات باید قبل از ارسال پیام در کانال عضو شود (یا با scope مناسب پیام بفرستد). برای کانال‌های خصوصی باید دعوت شود.

18

search_messages

جستجو در تمام پیام‌های Workspace با کوئری متنی. پشتیبانی از فیلترهای from:، in:، has:، before:، after: و غیره. نیاز به User Token (نه Bot Token) دارد.

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

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

۱. اعلان CI/CD Pipeline

ارسال وضعیت Build و Deploy به کانال تیم توسعه:

code
GitHub Trigger (push to main)
  → GitHub Actions (build)
  → IF (build موفق/ناموفق)
    → Slack (send_message)
      Channel: #deployments
      Blocks:
        Section: "🚀 *Deploy جدید*"
        Fields:
          - "Branch: `main`"
          - "Commit: {{$json.commit.message}}"
          - "Author: {{$json.pusher.name}}"
          - "Status: ✅ موفق / ❌ ناموفق"
        Actions:
          - Button: "مشاهده لاگ" → URL
          - Button: "Rollback" → callback

۲. هشدار مانیتورینگ سرور

اعلان فوری Down شدن سرویس:

code
Schedule (هر 2 دقیقه)
  → HTTP Request (Health Check)
  → IF (status != 200)
    → Slack (send_message)
      Channel: #alerts
      Text:
        🚨 *هشدار: سرویس از دسترس خارج شد!*

        سرویس: {{$json.serviceName}}
        URL: {{$json.url}}
        Status Code: {{$json.statusCode}}
        زمان: {{$now.toFormat('HH:mm:ss')}}

        @channel لطفاً بررسی کنید.
    → Slack (add_reaction)
      Name: "rotating_light"

۳. سیستم تیکت پشتیبانی

مدیریت تیکت‌ها از طریق Slack:

code
Webhook (تیکت جدید از سایت)
  → Slack (send_message)
    Channel: #support
    Blocks:
      Header: "🎫 تیکت جدید #{{$json.ticketId}}"
      Section: "{{$json.subject}}"
      Fields:
        - "مشتری: {{$json.customerName}}"
        - "اولویت: {{$json.priority}}"
        - "دسته: {{$json.category}}"
      Actions:
        - Button: "قبول تیکت" → callback: accept_ticket
        - Button: "مشاهده جزئیات" → URL

Slack Trigger (callback: accept_ticket)
  → Database (assign ticket)
  → Slack (update_message)
    Text: "✅ تیکت توسط {{$json.agent}} قبول شد"

۴. اعلان سفارش فروشگاه

اطلاع‌رسانی سفارش جدید به تیم فروش:

code
Webhook (سفارش جدید WooCommerce/Shopify)
  → Set (فرمت فارسی)
  → Slack (send_message)
    Channel: #orders
    Blocks:
      Section: "🛒 *سفارش جدید*"
      Fields:
        - "شماره سفارش: #{{$json.orderId}}"
        - "مشتری: {{$json.name}}"
        - "مبلغ: {{$json.total}} تومان"
        - "محصولات: {{$json.items.length}} آیتم"
      Section: "آدرس: {{$json.address}}"
      Actions:
        - Button: "تایید سفارش"
        - Button: "مشاهده در پنل"

۵. گزارش روزانه خودکار

ارسال آمار روزانه به مدیران:

code
Schedule (هر روز ساعت 18:00)
  → MySQL (آمار فروش)
  → MySQL (آمار کاربران)
  → Code (ترکیب داده‌ها)
  → Slack (send_message)
    Channel: #reports
    Blocks:
      Header: "📊 گزارش روزانه - {{$now.toFormat('yyyy/MM/dd')}}"
      Section: "*فروش*"
      Fields:
        - "تعداد سفارش: {{$json.orders}}"
        - "درآمد: {{$json.revenue}} تومان"
        - "میانگین سبد: {{$json.avgOrder}} تومان"
      Divider
      Section: "*کاربران*"
      Fields:
        - "ثبت‌نام جدید: {{$json.newUsers}}"
        - "کاربران فعال: {{$json.activeUsers}}"
      Context: "تولید خودکار توسط n8n"

۶. Incident Response خودکار

مدیریت Incidentها با ایجاد کانال اختصاصی:

code
Webhook/Alert (Incident جدید)
  → Slack (create_channel)
    Name: "inc-{{$json.incidentId}}-{{$now.toFormat('MMdd')}}"
    Is Private: false
  → Slack (set_topic)
    Topic: "🔥 Incident: {{$json.title}} | Severity: {{$json.severity}}"
  → Slack (invite_to_channel)
    Users: {{$json.oncallTeam.join(',')}}
  → Slack (send_message)
    Text: |
      🚨 *Incident شروع شد*

      *عنوان:* {{$json.title}}
      *شدت:* {{$json.severity}}
      *سرویس:* {{$json.service}}
      *توضیح:* {{$json.description}}

      لطفاً وضعیت خود را با ایموجی اعلام کنید:
      👀 = در حال بررسی
      🔧 = در حال رفع
      ✅ = حل شد

۷. Standup Bot (جلسه روزانه)

ربات جمع‌آوری گزارش Standup:

code
Schedule (هر روز ساعت 9:00)
  → Slack (send_message)
    Channel: #standup
    Blocks:
      Header: "🌅 Standup - {{$today}}"
      Section: "لطفاً گزارش خود را در Thread ارسال کنید:"
      Section:
        "1️⃣ دیروز چه کارهایی انجام دادید؟
         2️⃣ امروز چه کارهایی انجام می‌دهید؟
         3️⃣ آیا مانعی وجود دارد؟"

Schedule (ساعت 17:00)
  → Slack (get channel history → thread replies)
  → Code (خلاصه‌سازی)
  → Slack (send_message)
    Channel: #management
    Text: "خلاصه Standup تیم..."

۸. On-Call Rotation

چرخش نوبت On-Call هفتگی:

code
Schedule (هر دوشنبه ساعت 9:00)
  → Database (نفر بعدی On-Call)
  → Slack (set_topic)
    Channel: #oncall
    Topic: "🔔 On-Call این هفته: @{{$json.username}} | تلفن: {{$json.phone}}"
  → Slack (send_message)
    Channel: #oncall
    Text: "👋 @{{$json.username}} On-Call این هفته با شماست!"
  → Slack (send_message)
    Channel: DM to user
    Text: "سلام! On-Call این هفته به عهده شماست. راهنمای On-Call: [لینک]"

۹. یکپارچه‌سازی با GitHub

اعلان PR و Code Review:

code
GitHub Trigger (pull_request.opened)
  → Slack (send_message)
    Channel: #code-review
    Blocks:
      Section: "📝 *PR جدید* - {{$json.title}}"
      Fields:
        - "Author: {{$json.user.login}}"
        - "Branch: {{$json.head.ref}} → {{$json.base.ref}}"
        - "Files: {{$json.changed_files}} فایل"
      Actions:
        - Button: "Review" → URL: {{$json.html_url}}
        - Button: "Approve" → callback: approve_pr

۱۰. مدیریت Approval Workflow

فرآیند تایید درخواست‌ها:

code
Webhook (درخواست مرخصی/هزینه)
  → Slack (send_message)
    Channel: DM to manager
    Blocks:
      Header: "📋 درخواست {{$json.type}} جدید"
      Section: "{{$json.employeeName}} درخواست {{$json.type}} دارد"
      Fields:
        - "تاریخ: {{$json.date}}"
        - "مبلغ/مدت: {{$json.amount}}"
        - "توضیحات: {{$json.description}}"
      Actions:
        - Button (style: primary): "✅ تایید" → callback: approve
        - Button (style: danger): "❌ رد" → callback: reject

Slack Trigger (callback: approve/reject)
  → Database (به‌روزرسانی وضعیت)
  → Slack (send_message to employee)
    Text: "درخواست شما {{$json.status === 'approved' ? 'تایید' : 'رد'}} شد"
  → Email (ارسال تاییدیه رسمی)

۱۱. فایل و گزارش خودکار

ارسال گزارش Excel/PDF به کانال:

code
Schedule (هر ماه اول ماه)
  → Database (داده‌های ماهانه)
  → Code (ساخت CSV/Excel)
  → Slack (upload_file)
    Channel: #finance
    Filename: "report-{{$now.toFormat('yyyy-MM')}}.csv"
    Title: "گزارش مالی {{$now.toFormat('MMMM yyyy')}}"
    Initial Comment: "📎 گزارش مالی ماه گذشته آماده شد."

نکات حرفه‌ای

نکات حرفه‌ای

۱. فرمت‌بندی mrkdwn Slack

Slack از Markdown خاص خودش (mrkdwn) استفاده می‌کند:

code
*bold*              → متن Bold
_italic_            → متن Italic
~strikethrough~     → خط خورده
`code`             → کد تک خطی

code block

→ بلوک کد
> quote             → نقل قول
• لیست             → bullet point
<https://url|text>  → لینک با متن
<@U012345>          → منشن کاربر
<#C012345>          → منشن کانال
<!channel>          → اعلان به همه اعضای کانال
<!here>             → اعلان به اعضای آنلاین

۲. Block Kit ساختار

Block Kit سیستم پیام‌های تعاملی Slack است:

json
[
  {
    "type": "header",
    "text": {"type": "plain_text", "text": "عنوان پیام"}
  },
  {
    "type": "section",
    "text": {"type": "mrkdwn", "text": "متن اصلی"},
    "accessory": {
      "type": "button",
      "text": {"type": "plain_text", "text": "دکمه"},
      "action_id": "button_click",
      "url": "https://example.com"
    }
  },
  {
    "type": "section",
    "fields": [
      {"type": "mrkdwn", "text": "*فیلد ۱:*\nمقدار"},
      {"type": "mrkdwn", "text": "*فیلد ۲:*\nمقدار"}
    ]
  },
  {"type": "divider"},
  {
    "type": "actions",
    "elements": [
      {
        "type": "button",
        "text": {"type": "plain_text", "text": "تایید"},
        "style": "primary",
        "action_id": "approve"
      },
      {
        "type": "button",
        "text": {"type": "plain_text", "text": "رد"},
        "style": "danger",
        "action_id": "reject"
      }
    ]
  },
  {
    "type": "context",
    "elements": [
      {"type": "mrkdwn", "text": "ارسال خودکار توسط n8n"}
    ]
  }
]

۳. Thread برای مکالمات سازمان‌یافته

از Thread برای جلوگیری از شلوغی کانال استفاده کنید:

code
// ارسال پیام اصلی
Slack (send_message) → خروجی: ts = "1234567890.123456"

// پاسخ در Thread
Slack (send_message)
  thread_ts: {{$json.ts}}
  reply_broadcast: false

۴. Ephemeral Messages (پیام‌های موقت)

پیام‌هایی که فقط یک کاربر می‌بیند:

code
POST chat.postEphemeral
  channel: C0123456789
  user: U0123456789
  text: "این پیام فقط برای شما قابل مشاهده است"

مناسب برای: تایید عملیات، هشدارهای خصوصی، راهنمایی

۵. Channel ID پیدا کردن

چند روش برای یافتن Channel ID:

code
1. در Slack روی نام کانال کلیک → About → Channel ID (پایین)
2. از URL: slack.com/messages/C0123456789
3. از API: conversations.list
4. از n8n: Get Channel عملیات

۶. نام و آواتار سفارشی

ارسال پیام با نام و آیکون متفاوت (نیاز به scope chat:write.customize):

code
Slack (send_message)
  username: "Deploy Bot"
  icon_emoji: ":rocket:"
  // یا
  icon_url: "https://example.com/bot-avatar.png"

۷. Reaction به عنوان Trigger

از Reaction برای trigger کردن Workflow استفاده کنید:

code
Slack Trigger (reaction_added: "white_check_mark")
  → IF (ایموجی = ✅)
    → Database (به‌روزرسانی وضعیت)
    → Slack (send_message: "تایید شد!")

// مثال: ✅ = تایید، ❌ = رد، 👀 = در حال بررسی

۸. منشن‌ها و اعلان‌ها

code
<@U012345>     → منشن کاربر خاص
<#C012345>     → لینک به کانال
<!channel>     → اعلان به همه (حتی آفلاین)
<!here>        → اعلان فقط به آنلاین‌ها
<!subteam^ID>  → منشن User Group

نکته: <!channel> و <!here> نیاز به مجوز دارند.

۹. محدودیت‌های مهم Slack API

code
پیام متنی:           40,000 کاراکتر
Block Kit:            50 بلوک در هر پیام
Section Fields:       10 فیلد
Text در هر فیلد:      2,000 کاراکتر
Attachments:          100 در هر پیام
فایل آپلود:           بسته به پلن Slack
نام کانال:            80 کاراکتر (حروف کوچک)
Topic/Purpose:        250 کاراکتر
زمان‌بندی پیام:       حداکثر 120 روز آینده
Rate Limit:           ~1 req/sec (بسته به متد)

۱۰. Block Kit Builder

قبل از کدنویسی، Block Kit را در محیط بصری طراحی کنید:

code
https://app.slack.com/block-kit-builder

JSON خروجی را مستقیماً در n8n استفاده کنید.

۱۱. Error Handling برای پیام‌های ارسال نشده

code
Slack (send_message)
  → On Error: Continue
  → IF (خطا)
    → Log Error
    → Slack (send_message to #errors)
    → Wait (5s) → Retry

۱۲. تفاوت Bot Token و User Token

code
Bot Token (xoxb-):
  - عملیات ربات (ارسال پیام، مدیریت کانال)
  - دسترسی محدودتر و امن‌تر
  - Rate limit جداگانه

User Token (xoxp-):
  - عملیات سطح کاربر (جستجو، دسترسی به تنظیمات)
  - نیاز برای search.messages
  - دسترسی گسترده‌تر

۱۳. Unfurl کنترل

کنترل پیش‌نمایش لینک‌ها در پیام:

code
unfurl_links: false   → غیرفعال کردن پیش‌نمایش لینک
unfurl_media: false   → غیرفعال کردن پیش‌نمایش رسانه

برای پیام‌های اتوماتیک با لینک زیاد، unfurl را غیرفعال کنید.

۱۴. Schedule Message لغو کردن

پیام‌های زمان‌بندی شده قابل لغو هستند:

code
// زمان‌بندی پیام → ذخیره scheduled_message_id
Slack (schedule_message) → خروجی: scheduled_message_id

// لغو پیام
Slack API: chat.deleteScheduledMessage
  channel: C0123456789
  scheduled_message_id: {{$json.scheduled_message_id}}

۱۵. Interactive Messages با Webhook

برای دریافت تعاملات (کلیک دکمه):

code
1. App Settings > Interactivity & Shortcuts > Enable
2. Request URL: آدرس Webhook n8n
3. در n8n:
   Webhook Trigger → IF (action) → عملیات مربوطه
4. Response: HTTP 200 + پیام تایید

۱۶. Markdown فارسی در Slack

برای متن‌های فارسی RTL:

code
// Slack خودکار RTL را تشخیص می‌دهد
Text: "🔔 *اعلان جدید*\nسفارش شماره #1234 ثبت شد."

// ترکیب فارسی و انگلیسی
Text: "*Status:* Active\n*وضعیت:* فعال"

۱۷. Workspace Cross-posting

ارسال همزمان به چند کانال:

code
Set (لیست کانال‌ها: [#dev, #ops, #management])
  → Loop
    → Slack (send_message) → Channel: {{$json.channel}}
    → Wait (1s)  // رعایت Rate Limit

رفع مشکلات

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

۱. خطای "invalid_auth" یا "not_authed"

علت: Token نامعتبر، منقضی شده یا اشتباه وارد شده

راه‌حل

  • مطمئن شوید Token با پیشوند صحیح شروع می‌شود:
  • Bot Token: xoxb-
  • User Token: xoxp-
  • App Token: xapp-
  • Token را از App Settings > OAuth & Permissions مجدداً کپی کنید
  • App را مجدداً در Workspace نصب کنید (Reinstall)
  • Credential در n8n را با Token جدید به‌روز کنید

۲. خطای "channel_not_found"

علت: شناسه کانال اشتباه یا ربات عضو کانال نیست

راه‌حل

  • از Channel ID استفاده کنید نه نام کانال (C0123456789)
  • Channel ID از URL یا اطلاعات کانال قابل دریافت است
  • ربات باید عضو کانال باشد: /invite @bot-name در کانال
  • برای کانال‌های خصوصی حتماً ربات را دعوت کنید
  • از conversations.list برای یافتن ID صحیح استفاده کنید

۳. خطای "missing_scope"

علت: Token دسترسی (Scope) لازم را ندارد

راه‌حل

  • به App Settings > OAuth & Permissions بروید
  • Scope مورد نیاز را اضافه کنید (مثل chat:write, channels:read)
  • مهم: بعد از اضافه کردن Scope جدید، App را Reinstall کنید
  • Token جدید تولید می‌شود و باید در n8n به‌روز شود
  • لیست Scopes مورد نیاز هر عملیات در مستندات Slack API موجود است

۴. خطای "not_in_channel"

علت: ربات عضو کانال نیست

راه‌حل

  • ربات را به کانال دعوت کنید: در Slack تایپ کنید /invite @your-bot
  • یا از API: conversations.join را فراخوانی کنید
  • برای کانال خصوصی: فقط اعضای کانال می‌توانند ربات را دعوت کنند
  • با Scope channels:join ربات می‌تواند خودش به کانال‌های عمومی بپیوندد

۵. خطای "ratelimited" (429)

علت: تعداد درخواست‌ها از محدودیت عبور کرده

راه‌حل

  • محدودیت‌های Slack API:
  • Web API: حدود ۱ درخواست/ثانیه (بسته به متد)
  • chat.postMessage: ۱ پیام/ثانیه به هر کانال
  • files.upload: ۲۰ آپلود/دقیقه
  • از Wait Node استفاده کنید:
code
Loop → Slack → Wait (1500ms) → Next
  • Header Retry-After زمان انتظار (ثانیه) را مشخص می‌کند
  • پیام‌ها را Batch کنید و با فاصله ارسال کنید

۶. خطای "message_not_found" هنگام ویرایش/حذف

علت: Timestamp پیام اشتباه یا پیام حذف شده

راه‌حل

  • مطمئن شوید ts (timestamp) صحیح پیام اصلی را استفاده می‌کنید
  • Timestamp از پاسخ chat.postMessage قابل دریافت است
  • پیام قبلاً حذف نشده باشد
  • ربات فقط پیام‌های خودش را می‌تواند ویرایش/حذف کند

۷. خطای "cant_update_message"

علت: تلاش برای ویرایش پیام کاربر دیگر

راه‌حل

  • ربات فقط پیام‌هایی که خودش ارسال کرده را می‌تواند ویرایش کند
  • برای ویرایش پیام‌های دیگران به User Token با scope chat:write نیاز است
  • Ephemeral Messages قابل ویرایش نیستند

۸. خطای "invalid_blocks" یا "invalid_blocks_format"

علت: ساختار Block Kit نادرست

راه‌حل

  • از [Block Kit Builder](https://app.slack.com/block-kit-builder) برای تست استفاده کنید
  • blocks باید آرایه‌ای از اشیاء Block باشد:
json
[
    {"type": "section", "text": {"type": "mrkdwn", "text": "متن"}},
    {"type": "divider"},
    {"type": "actions", "elements": [...]}
  ]
  • حداکثر ۵۰ Block در هر پیام
  • هر Section حداکثر ۱۰ Field
  • متن هر Field حداکثر ۲,۰۰۰ کاراکتر

۹. خطای "name_taken" هنگام ایجاد کانال

علت: نام کانال قبلاً استفاده شده (حتی اگر آرشیو شده باشد)

راه‌حل

  • نام کانال باید unique باشد در کل Workspace
  • کانال‌های آرشیو شده هم نام را اشغال می‌کنند
  • از پیشوند زمانی استفاده کنید: inc-20240115-server-down
  • یا کانال آرشیو شده با همان نام را unarchive کنید
اشتراک‌گذاری:

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