تلگرام
Telegram
اتوماسیون تلگرام: ارسال پیام، ربات هوشمند، مدیریت کانال و گروه
نمای کلی
نود تلگرام یکی از مهمترین و پرکاربردترین نودهای n8n است، به خصوص برای کسبوکارهای ایرانی.
قابلیتهای کلیدی:
- ارسال پیام متنی با فرمت HTML/Markdown
- ارسال عکس، ویدیو، صدا و فایل
- ارسال لوکیشن و Contact
- Inline Keyboard و Reply Keyboard
- ویرایش و حذف پیامها
- پین کردن پیام در گروه/کانال
- مدیریت اعضای گروه (Kick, Ban, Restrict)
- دریافت اطلاعات چت و کاربر
- ارسال Poll و Quiz
- Forward و کپی پیام
Telegram Trigger:
- دریافت پیامهای جدید
- پاسخ به Callback Query (دکمهها)
- دریافت رویدادهای گروه
- فیلتر بر اساس نوع پیام
کاربردها در ایران:
- اعلان فروش و سفارش جدید
- ربات پشتیبانی مشتری 24/7
- مدیریت خودکار کانال فروشگاه
- هشدار امنیتی و مانیتورینگ سرور
- ربات استعلام قیمت و موجودی
- سیستم نظرسنجی و بازخورد
- ربات رزرو و نوبتدهی
- اعلانهای مالی و تراکنش
- گزارش فروش روزانه به مدیران
- ربات آموزشی و Quiz
احراز هویت
احراز هویت تلگرام
ساخت ربات با BotFather
#### مراحل ایجاد ربات:
- 1در تلگرام به [@BotFather](https://t.me/BotFather) پیام دهید
- 2دستور
/newbotرا ارسال کنید - 3نام ربات را وارد کنید (مثل: "فروشگاه من")
- 4Username ربات (باید به
botختم شود):my_shop_bot - 5توکن دریافتی را کپی کنید:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz#### تنظیم در n8n:
- 1Credentials > Telegram API
- 2Access Token را وارد کنید
- 3Test Connection بزنید
تنظیمات ربات در BotFather:
/setdescription → توضیح ربات
/setabouttext → درباره ربات
/setuserpic → عکس پروفایل ربات
/setcommands → لیست دستورات:
start - شروع
help - راهنما
order - سفارش جدید
status - وضعیت سفارش
support - پشتیبانی
/setjoingroups → اجازه عضویت در گروه
/setprivacy → حالت حریم خصوصی (Disable برای خواندن همه پیامها)
/setinline → فعال کردن Inline Modeدریافت Chat ID:
#### روش 1: از getUpdates
- 1به ربات پیام دهید
- 2در n8n: Telegram > getUpdates
- 3Chat ID در پاسخ:
{"chat": {"id": 123456789}}#### روش 2: از @userinfobot
- 1پیام
/startبه @userinfobot بفرستید - 2ID خود را ببینید
#### روش 3: برای کانال
- ID کانال عمومی:
@channel_username - ID کانال خصوصی: از getUpdates (با
-100شروع میشود)
#### روش 4: برای گروه
- 1ربات را به گروه اضافه کنید
- 2یک پیام در گروه بفرستید
- 3getUpdates → Chat ID گروه (منفی)
نکات امنیتی:
- توکن ربات را به اشتراک نگذارید
- از Environment Variable برای ذخیره توکن استفاده کنید
- دسترسی ربات را محدود کنید
- در کانالها فقط دسترسی Admin بدهید
عملیاتهای موجود
sendMessage
ارسال پیام متنی با فرمت HTML/Markdown به چت، گروه یا کانال
sendPhoto
ارسال تصویر به چت
sendVideo
ارسال فایل ویدیویی
sendDocument
ارسال هر نوع فایلی (PDF, ZIP, ...)
sendAudio
ارسال فایل صوتی (MP3, ...)
sendLocation
ارسال موقعیت مکانی
editMessage
ویرایش پیام ارسال شده قبلی
deleteMessage
حذف پیام از چت
pinMessage
پین کردن پیام در گروه/کانال
answerCallbackQuery
پاسخ به کلیک دکمه Inline Keyboard
sendPoll
ارسال Poll یا Quiz
getUpdates
دریافت پیامها و رویدادهای جدید
کاربردهای متداول
1. اعلان فروش فروشگاه آنلاین
هر بار که سفارش جدید ثبت شد:
Webhook (سفارش جدید)
→ Set (فرمت فارسی)
→ Telegram (sendMessage)
ChatId: @my_shop_channel
ParseMode: HTML
Text:
<b>سفارش جدید</b>
مشتری: {{$json.name}}
موبایل: {{$json.phone}}
مبلغ: {{$json.amount}} تومان
محصولات:
{{$json.items.map(i => '• ' + i.name + ' × ' + i.qty).join('\n')}}
تاریخ: {{$now.toFormat('yyyy/MM/dd HH:mm')}}2. ربات پشتیبانی با Inline Keyboard
پاسخ خودکار با دکمه:
Telegram Trigger (پیام /start)
→ Telegram (sendMessage)
Text: "سلام! از کجا شروع کنیم؟"
ReplyMarkup:
InlineKeyboard: [
[{text: "پیگیری سفارش", callback_data: "order_status"}],
[{text: "لیست محصولات", callback_data: "products"}],
[{text: "ارتباط با پشتیبانی", callback_data: "support"}]
]
Telegram Trigger (Callback: order_status)
→ Telegram (answerCallbackQuery)
→ Telegram (sendMessage)
Text: "لطفاً کد سفارش خود را ارسال کنید:"
Telegram Trigger (پیام عددی)
→ MySQL (جستجوی سفارش)
→ IF (پیدا شد)
→ Telegram (sendMessage)
Text: "وضعیت سفارش: {{$json.status}}"
→ Else: "سفارش یافت نشد"3. مدیریت خودکار کانال فروشگاه
انتشار محصول جدید:
MySQL (محصولات جدید)
→ Loop
→ Telegram (sendPhoto)
ChatId: @my_store
Photo: {{$json.imageUrl}}
Caption:
<b>{{$json.name}}</b>
{{$json.description}}
قیمت: <s>{{$json.oldPrice}}</s> <b>{{$json.price}} تومان</b>
تخفیف: {{$json.discount}}%
<a href="{{$json.link}}">خرید آنلاین</a>
ReplyMarkup:
InlineKeyboard: [
[{text: "خرید", url: "{{$json.link}}"}],
[{text: "اشتراکگذاری", switch_inline_query: "{{$json.name}}"}]
]
→ Wait (2 seconds) // رعایت Rate Limit4. هشدار مانیتورینگ سرور
اعلان Down شدن سرور:
Schedule (هر 5 دقیقه)
→ HTTP Request (بررسی سایت)
→ IF (status != 200)
→ Telegram (sendMessage)
ChatId: ADMIN_CHAT_ID
Text:
<b>هشدار سرور</b>
سرور {{$json.name}} از دسترس خارج شد!
زمان: {{$now.toFormat('HH:mm:ss')}}
Status: {{$json.statusCode}}
URL: {{$json.url}}5. گزارش فروش روزانه
ارسال آمار هر شب:
Schedule (هر شب ساعت 23)
→ MySQL (آمار روز)
→ Telegram (sendMessage)
ChatId: @managers_group
ParseMode: HTML
Text:
<b>گزارش فروش {{$now.toFormat('yyyy/MM/dd')}}</b>
تعداد سفارش: {{$json.totalOrders}}
مبلغ کل: {{$json.totalSales}} تومان
میانگین سفارش: {{$json.avgOrder}} تومان
بیشترین فروش: {{$json.topProduct}}
نسبت به دیروز: {{$json.growth > 0 ? '+' : ''}}{{$json.growth}}%6. ربات استعلام قیمت
بررسی قیمت لحظهای:
Telegram Trigger (پیام با /price)
→ HTTP Request (API قیمت ارز)
→ Telegram (sendMessage)
Text:
<b>قیمت لحظهای ارز</b>
دلار: {{$json.usd}} تومان
یورو: {{$json.eur}} تومان
پوند: {{$json.gbp}} تومان
آخرین بروزرسانی: {{$json.updatedAt}}7. سیستم نظرسنجی
ارسال نظرسنجی به کاربران:
Schedule/Webhook → Telegram (sendPoll)
ChatId: @my_channel
Question: "از خدمات ما راضی هستید؟"
Options: ["عالی", "خوب", "متوسط", "ضعیف"]
IsAnonymous: false8. ارسال فایل و فاکتور
ارسال PDF فاکتور به مشتری:
Webhook (پرداخت موفق)
→ HTTP Request (دریافت PDF فاکتور)
→ Telegram (sendDocument)
ChatId: {{$json.telegramId}}
Document: Binary PDF
Caption: "فاکتور خرید شماره {{$json.invoiceId}}"9. ربات رزرو و نوبتدهی
رزرو وقت آنلاین:
Telegram Trigger (/reserve)
→ MySQL (زمانهای خالی)
→ Telegram (sendMessage)
Text: "زمان مورد نظر را انتخاب کنید:"
ReplyMarkup:
InlineKeyboard: [
[{text: "شنبه 10:00", callback_data: "slot_1"}],
[{text: "شنبه 14:00", callback_data: "slot_2"}],
[{text: "یکشنبه 10:00", callback_data: "slot_3"}]
]
Telegram Trigger (Callback: slot_*)
→ MySQL (ثبت رزرو)
→ Telegram (editMessage)
Text: "رزرو شما با موفقیت ثبت شد!"10. Forward محتوا بین کانالها
بازنشر خودکار:
Telegram Trigger (پست جدید در کانال اصلی)
→ Telegram (copyMessage)
FromChatId: @source_channel
ToChatId: @destination_channel
MessageId: {{$json.message_id}}نکات حرفهای
نکات حرفهای
- 1فرمتدهی HTML (توصیه بر Markdown):
<b>متن Bold</b>
<i>متن Italic</i>
<u>زیرخط</u>
<s>خط خورده</s>
<code>کد تک خطی</code>
<pre>بلوک کد</pre>
<a href="https://example.com">لینک</a>
<tg-spoiler>اسپویلر</tg-spoiler>- 1Inline Keyboard ساختار:
{
"inline_keyboard": [
[
{"text": "تایید", "callback_data": "confirm"},
{"text": "لغو", "callback_data": "cancel"}
],
[
{"text": "سایت ما", "url": "https://example.com"}
],
[
{"text": "اشتراک در کانال", "url": "https://t.me/channel"}
]
]
}- 1Reply Keyboard:
{
"keyboard": [
[{"text": "پیگیری سفارش"}, {"text": "محصولات"}],
[{"text": "پشتیبانی"}, {"text": "درباره ما"}]
],
"resize_keyboard": true,
"one_time_keyboard": false
}- 1حذف Reply Keyboard:
{"remove_keyboard": true}- 1Emoji مفید برای پیامها:
سفارش جدید: اعلان
موفقیت: تایید
خطا: هشدار
پرداخت: مالی
کاربر: کاربر
زمان: ساعت
سرور: سرور- 1ارسال به چند چت همزمان:
MySQL (لیست Chat IDها) → Loop → Telegram → Wait (50ms)- 1Escape کاراکترهای خاص در MarkdownV2:
_ * [ ] ( ) ~ ` > # + - = | { } . !
// همه باید با \ escape شوند
// توصیه: از HTML استفاده کنید- 1دریافت Chat ID گروه/کانال:
1. ربات را به گروه/کانال Admin کنید
2. یک پیام بفرستید
3. getUpdates فراخوانی کنید
4. chat.id را ببینید (منفی برای گروه)- 1Privacy Mode: اگر ربات در گروه همه پیامها را نبیند:
- به BotFather بروید:
/setprivacy→Disable
- 1Silent Message: ارسال بدون صدا:
disableNotification: trueبرای هشدارهای شبانه یا پیامهای غیرفوری.
- 1Forward vs Copy:
- Forward: نام فرستنده اصلی نشان داده میشود
- Copy: بدون نام فرستنده (مثل پیام جدید)
- 1Web App: دکمه با Mini App تلگرام:
{"text": "باز کردن فروشگاه", "web_app": {"url": "https://shop.com"}}- 1محدودیتهای مهم تلگرام:
پیام متنی: 4096 کاراکتر
کپشن: 1024 کاراکتر
Callback Data: 64 بایت
فایل: 50 مگابایت
عکس: 10 مگابایت
Inline Keyboard: 100 دکمه
Poll: 10 گزینه- 1Webhook vs Polling:
- n8n از Polling استفاده میکند (سادهتر)
- برای Real-time: از Telegram Trigger استفاده کنید
- 1Parse Mode برای فارسی:
- HTML قابل اطمینانتر از Markdown است
- حتماً
parseMode: HTMLتنظیم کنید - تگها باید صحیح بسته شوند
رفع مشکلات
خطاهای رایج و راهحلها
1. خطای "Unauthorized" (401)
علت: توکن ربات اشتباه یا غیرفعال شده
راهحل
- توکن را از @BotFather مجدداً بگیرید:
/token - مطمئن شوید توکن کامل کپی شده (شامل عدد و رشته بعد از :)
- ربات حذف نشده باشد
- Credential در n8n را بروز کنید
2. خطای "Chat not found" (400)
علت: Chat ID اشتباه یا ربات دسترسی ندارد
راهحل
- برای کانال عمومی: از
@usernameاستفاده کنید - برای کانال خصوصی: ID عددی با
-100شروع میشود - ربات باید Admin کانال/گروه باشد
- ابتدا یک پیام به ربات بفرستید تا چت ایجاد شود
- از getUpdates برای یافتن Chat ID استفاده کنید
3. خطای "Bot was blocked by the user"
علت: کاربر ربات را Block کرده
راهحل
- این خطا طبیعی است و باید Handle شود
- از Error Handling استفاده کنید:
Telegram → Error → Set (mark as blocked) → MySQL (update user)- کاربر Block کرده را از لیست ارسال حذف کنید
4. خطای "Too Many Requests" (429)
علت: محدودیت Rate Limit تلگرام
راهحل
- محدودیتها:
- 30 پیام/ثانیه به چتهای مختلف
- 20 پیام/دقیقه به یک گروه
- 1 پیام/ثانیه به یک چت خصوصی
- از Wait Node استفاده کنید:
Loop → Telegram → Wait (100ms) → Next- پیامها را Batch کنید
- از
retry_afterدر خطا استفاده کنید
5. خطای "Message is too long"
علت: متن بیش از حد مجاز
راهحل
- sendMessage: حداکثر 4096 کاراکتر
- Caption: حداکثر 1024 کاراکتر
- متن را تکهتکه ارسال کنید:
Code (تقسیم متن به 4000 کاراکتر) → Loop → Telegram6. عکس/فایل ارسال نمیشود
علت: فرمت یا حجم نادرست
راهحل
- عکس: حداکثر 10MB (JPEG, PNG, GIF)
- فایل: حداکثر 50MB
- ویدیو: حداکثر 50MB
- مطمئن شوید URL عمومی و قابل دسترس است
- از Binary Data در n8n استفاده کنید
7. Inline Keyboard کار نمیکند
علت: فرمت JSON اشتباه
راهحل
- ساختار صحیح:
{
"inline_keyboard": [
[{"text": "دکمه 1", "callback_data": "btn1"}],
[{"text": "سایت", "url": "https://example.com"}]
]
}- callback_data حداکثر 64 بایت
- هر ردیف یک آرایه جداگانه
آیا این مستندات مفید بود؟
100٪ این مستندات را مفید دانستهاند
