اسلک
Slack
اتوماسیون Slack: ارسال پیام، مدیریت کانال، اعلان تیمی و هشدارهای DevOps
نمای کلی
نود 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به [api.slack.com/apps](https://api.slack.com/apps) بروید
- 2روی "Create New App" کلیک کنید
- 3"From scratch" را انتخاب کنید
- 4نام App (مثل: "n8n Automation") و Workspace را انتخاب کنید
- 5به بخش OAuth & Permissions بروید
#### تنظیم Scopes (دسترسیها): در بخش Bot Token Scopes این دسترسیها را اضافه کنید:
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روی "Install to Workspace" کلیک کنید
- 2دسترسیها را تایید کنید
- 3Bot User OAuth Token را کپی کنید:
xoxb-1234567890-1234567890123-abcdefghijklmnopqrstuv#### تنظیم در n8n:
- 1Credentials > Slack OAuth2 API
- 2Client ID و Client Secret را از App Settings وارد کنید
- 3یا مستقیماً Bot Token (با پیشوند
xoxb-) را وارد کنید - 4Test Connection بزنید
روش ۲: Bot Token (سادهتر)
- 1در App Settings > OAuth & Permissions
- 2پس از Install، Bot User OAuth Token را کپی کنید
- 3در n8n: Credentials > Slack API > Access Token وارد کنید
روش ۳: User Token (برای عملیات کاربر)
- برای عملیاتی که نیاز به دسترسی سطح کاربر دارد (مثل جستجو)
- User Token Scopes را تنظیم کنید
- Token با پیشوند
xoxp-شروع میشود
Event Subscriptions (برای Trigger):
- 1در App Settings > Event Subscriptions
- 2Enable Events را فعال کنید
- 3Request URL را وارد کنید (آدرس Webhook n8n)
- 4Eventهای مورد نظر را Subscribe کنید:
message.channels → پیام جدید در کانال عمومی
message.groups → پیام جدید در کانال خصوصی
message.im → پیام مستقیم جدید
app_mention → منشن شدن ربات
reaction_added → اضافه شدن Reaction
member_joined_channel → عضویت جدید در کانالSlash Commands:
- 1در App Settings > Slash Commands
- 2"Create New Command" کلیک کنید
- 3Command (مثل
/deploy)، Request URL و Description را تنظیم کنید
نکات امنیتی:
- Token ربات را در جایی امن نگهداری کنید
- از حداقل Scopes مورد نیاز استفاده کنید
- Signing Secret را برای اعتبارسنجی Webhook تنظیم کنید
- Tokenها را به صورت دورهای rotate کنید
عملیاتهای موجود
send_message
ارسال پیام متنی یا Block Kit به کانال، گروه یا کاربر. پشتیبانی از فرمتبندی mrkdwn، پیامهای Thread و Ephemeral. میتوانید نام و آواتار فرستنده را سفارشی کنید.
update_message
ویرایش محتوای یک پیام ارسال شده قبلی توسط ربات. فقط پیامهایی که توسط خود ربات ارسال شده قابل ویرایش هستند. از timestamp پیام اصلی برای شناسایی استفاده کنید.
delete_message
حذف یک پیام از کانال. ربات فقط پیامهای خودش را میتواند حذف کند مگر اینکه دسترسی chat:write.public داشته باشد. حذف برگشتناپذیر است.
get_channel
دریافت اطلاعات کامل یک کانال شامل نام، توضیحات، Topic، Purpose، تعداد اعضا، تاریخ ایجاد و تنظیمات آرشیو. برای کانالهای عمومی و خصوصی کار میکند.
create_channel
ایجاد کانال جدید در Workspace. نام کانال باید حروف کوچک، اعداد و خطتیره باشد. حداکثر ۸۰ کاراکتر. میتوانید کانال عمومی یا خصوصی بسازید.
archive_channel
آرشیو کردن یک کانال. کانال آرشیو شده فقط خواندنی میشود و اعضا نمیتوانند پیام ارسال کنند. کانالهای #general قابل آرشیو نیستند. قابل بازیابی است.
invite_to_channel
دعوت یک یا چند کاربر به کانال. میتوانید چندین کاربر را همزمان دعوت کنید. کاربران دعوتشده بلافاصله عضو کانال میشوند.
upload_file
آپلود فایل به یک یا چند کانال. از Binary Data یا محتوای متنی پشتیبانی میکند. فرمتهای مختلف: تصویر، PDF، CSV، کد و غیره. حداکثر حجم بستگی به پلن Slack دارد.
set_topic
تنظیم یا تغییر Topic (موضوع) کانال. Topic در بالای کانال نمایش داده میشود و برای نمایش اطلاعات مهم و فوری مناسب است. حداکثر 250 کاراکتر.
set_purpose
تنظیم یا تغییر Purpose (هدف) کانال. Purpose توضیح میدهد کانال برای چه منظوری ایجاد شده و در توضیحات کانال نمایش داده میشود. حداکثر 250 کاراکتر.
get_user
دریافت اطلاعات کامل یک کاربر شامل نام، ایمیل، آواتار، عنوان شغلی، تلفن، وضعیت آنلاین و اطلاعات پروفایل. برای شناسایی کاربران در Workflowها استفاده میشود.
get_user_profile
دریافت پروفایل کامل کاربر شامل فیلدهای سفارشی، وضعیت (status)، آواتار، عنوان شغلی و اطلاعات تماس. مفید برای سیستمهای HR و دایرکتوری کارمندان.
add_reaction
افزودن ایموجی Reaction به یک پیام. Reactionها برای تایید، رایگیری، اعلام وضعیت و Workflow Trigger بسیار مفید هستند. نام ایموجی بدون : وارد شود.
get_permalink
دریافت لینک مستقیم (Permalink) یک پیام خاص. این لینک قابل اشتراکگذاری است و کاربران را مستقیماً به پیام هدایت میکند. برای ارجاع و گزارشدهی مفید است.
schedule_message
ارسال پیام در زمان مشخص در آینده. پیام تا ۱۲۰ روز آینده قابل زمانبندی است. برای یادآوریها، گزارشهای زمانبندی شده و اعلانهای برنامهریزی شده بسیار مناسب است.
list_users
دریافت لیست تمام کاربران Workspace شامل اعضای فعال، غیرفعال و رباتها. از Pagination (cursor) برای Workspaceهای بزرگ استفاده کنید. برای مدیریت کاربران و گزارشها مفید است.
join_channel
عضویت ربات در یک کانال عمومی. ربات باید قبل از ارسال پیام در کانال عضو شود (یا با scope مناسب پیام بفرستد). برای کانالهای خصوصی باید دعوت شود.
search_messages
جستجو در تمام پیامهای Workspace با کوئری متنی. پشتیبانی از فیلترهای from:، in:، has:، before:، after: و غیره. نیاز به User Token (نه Bot Token) دارد.
کاربردهای متداول
کاربردهای رایج
۱. اعلان CI/CD Pipeline
ارسال وضعیت Build و Deploy به کانال تیم توسعه:
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 شدن سرویس:
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:
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}} قبول شد"۴. اعلان سفارش فروشگاه
اطلاعرسانی سفارش جدید به تیم فروش:
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: "مشاهده در پنل"۵. گزارش روزانه خودکار
ارسال آمار روزانه به مدیران:
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ها با ایجاد کانال اختصاصی:
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:
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 هفتگی:
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:
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
فرآیند تایید درخواستها:
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 به کانال:
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) استفاده میکند:
*bold* → متن Bold
_italic_ → متن Italic
~strikethrough~ → خط خورده
`code` → کد تک خطیcode block
> quote → نقل قول
• لیست → bullet point
<https://url|text> → لینک با متن
<@U012345> → منشن کاربر
<#C012345> → منشن کانال
<!channel> → اعلان به همه اعضای کانال
<!here> → اعلان به اعضای آنلاین۲. Block Kit ساختار
Block Kit سیستم پیامهای تعاملی Slack است:
[
{
"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 برای جلوگیری از شلوغی کانال استفاده کنید:
// ارسال پیام اصلی
Slack (send_message) → خروجی: ts = "1234567890.123456"
// پاسخ در Thread
Slack (send_message)
thread_ts: {{$json.ts}}
reply_broadcast: false۴. Ephemeral Messages (پیامهای موقت)
پیامهایی که فقط یک کاربر میبیند:
POST chat.postEphemeral
channel: C0123456789
user: U0123456789
text: "این پیام فقط برای شما قابل مشاهده است"مناسب برای: تایید عملیات، هشدارهای خصوصی، راهنمایی
۵. Channel ID پیدا کردن
چند روش برای یافتن Channel ID:
1. در Slack روی نام کانال کلیک → About → Channel ID (پایین)
2. از URL: slack.com/messages/C0123456789
3. از API: conversations.list
4. از n8n: Get Channel عملیات۶. نام و آواتار سفارشی
ارسال پیام با نام و آیکون متفاوت (نیاز به scope chat:write.customize):
Slack (send_message)
username: "Deploy Bot"
icon_emoji: ":rocket:"
// یا
icon_url: "https://example.com/bot-avatar.png"۷. Reaction به عنوان Trigger
از Reaction برای trigger کردن Workflow استفاده کنید:
Slack Trigger (reaction_added: "white_check_mark")
→ IF (ایموجی = ✅)
→ Database (بهروزرسانی وضعیت)
→ Slack (send_message: "تایید شد!")
// مثال: ✅ = تایید، ❌ = رد، 👀 = در حال بررسی۸. منشنها و اعلانها
<@U012345> → منشن کاربر خاص
<#C012345> → لینک به کانال
<!channel> → اعلان به همه (حتی آفلاین)
<!here> → اعلان فقط به آنلاینها
<!subteam^ID> → منشن User Groupنکته: <!channel> و <!here> نیاز به مجوز دارند.
۹. محدودیتهای مهم Slack API
پیام متنی: 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 را در محیط بصری طراحی کنید:
https://app.slack.com/block-kit-builderJSON خروجی را مستقیماً در n8n استفاده کنید.
۱۱. Error Handling برای پیامهای ارسال نشده
Slack (send_message)
→ On Error: Continue
→ IF (خطا)
→ Log Error
→ Slack (send_message to #errors)
→ Wait (5s) → Retry۱۲. تفاوت Bot Token و User Token
Bot Token (xoxb-):
- عملیات ربات (ارسال پیام، مدیریت کانال)
- دسترسی محدودتر و امنتر
- Rate limit جداگانه
User Token (xoxp-):
- عملیات سطح کاربر (جستجو، دسترسی به تنظیمات)
- نیاز برای search.messages
- دسترسی گستردهتر۱۳. Unfurl کنترل
کنترل پیشنمایش لینکها در پیام:
unfurl_links: false → غیرفعال کردن پیشنمایش لینک
unfurl_media: false → غیرفعال کردن پیشنمایش رسانهبرای پیامهای اتوماتیک با لینک زیاد، unfurl را غیرفعال کنید.
۱۴. Schedule Message لغو کردن
پیامهای زمانبندی شده قابل لغو هستند:
// زمانبندی پیام → ذخیره 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
برای دریافت تعاملات (کلیک دکمه):
1. App Settings > Interactivity & Shortcuts > Enable
2. Request URL: آدرس Webhook n8n
3. در n8n:
Webhook Trigger → IF (action) → عملیات مربوطه
4. Response: HTTP 200 + پیام تایید۱۶. Markdown فارسی در Slack
برای متنهای فارسی RTL:
// Slack خودکار RTL را تشخیص میدهد
Text: "🔔 *اعلان جدید*\nسفارش شماره #1234 ثبت شد."
// ترکیب فارسی و انگلیسی
Text: "*Status:* Active\n*وضعیت:* فعال"۱۷. Workspace Cross-posting
ارسال همزمان به چند کانال:
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 استفاده کنید:
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 باشد:
[
{"type": "section", "text": {"type": "mrkdwn", "text": "متن"}},
{"type": "divider"},
{"type": "actions", "elements": [...]}
]- حداکثر ۵۰ Block در هر پیام
- هر Section حداکثر ۱۰ Field
- متن هر Field حداکثر ۲,۰۰۰ کاراکتر
۹. خطای "name_taken" هنگام ایجاد کانال
علت: نام کانال قبلاً استفاده شده (حتی اگر آرشیو شده باشد)
راهحل
- نام کانال باید unique باشد در کل Workspace
- کانالهای آرشیو شده هم نام را اشغال میکنند
- از پیشوند زمانی استفاده کنید:
inc-20240115-server-down - یا کانال آرشیو شده با همان نام را unarchive کنید
