یکی از کاربردهای مهم اتوماسیون در n8n، دریافت فایل از کاربران و پردازش خودکار آنهاست. برای مثال، ممکن است بخواهید کاربران از طریق یک ربات تلگرام عکس، فایل PDF، ویدئو یا سند ارسال کنند و Workflow شما بتواند فایل دریافتی را شناسایی کرده و برای مراحل بعدی آماده کند.
با استفاده از n8n و Telegram Bot میتوانید چنین فرآیندی را بدون نیاز به نوشتن یک برنامه کامل از ابتدا پیادهسازی کنید.
در این آموزش یاد میگیریم چگونه پیامهای حاوی فایل را دریافت کنیم، نوع فایل را تشخیص دهیم، اطلاعات آن را استخراج کنیم و فایل واقعی را از تلگرام دریافت کنیم.
دریافت فایل از تلگرام با n8n چه کاربردی دارد؟
قبل از شروع پیادهسازی، بهتر است با چند کاربرد عملی این قابلیت آشنا شویم.
- دریافت رزومه کاربران بهصورت PDF و ارسال آن برای بررسی
- دریافت تصاویر محصولات از فروشندگان
- دریافت فاکتور و اسناد مشتریان
- دریافت فایل صوتی و آمادهسازی آن برای تبدیل گفتار به متن
- دریافت ویدئو برای پردازش یا تحلیل
- ساخت رباتی که فایلهای ارسالی را بررسی و بر اساس نوع آنها واکنش مناسب نشان دهد.
برای مثال، فرض کنید ربات تلگرام یک سامانه پشتیبانی را طراحی میکنید. کاربر میتواند تصویر مشکل، فایل PDF یا سند مرتبط را برای ربات ارسال کند. n8n فایل را شناسایی میکند و سپس میتواند اطلاعات آن را به سیستم پشتیبانی انتقال دهد.
پیشنیازهای آموزش
برای اجرای مثالهای این مقاله به موارد زیر نیاز دارید:
- یک نمونه فعال از n8n
- یک ربات تلگرام که با BotFather ساختهاید
- اطلاعات اتصال ربات به n8n یا همان Credentials
- آشنایی مقدماتی با ساخت Workflow و کار با خروجی Nodeها
اگر هنوز ربات خود را به n8n متصل نکردهاید، ابتدا مقاله «آموزش اتصال تلگرام به n8n؛ ساخت اولین اتوماسیون تلگرام» را مطالعه کنید.
مرحله اول: ساخت Workflow برای دریافت پیام تلگرام
ابتدا وارد پنل n8n شوید و یک Workflow جدید بسازید.
یک Node از نوع Telegram Trigger به Workflow اضافه کنید. این Node وظیفه دارد رویدادهای جدید تلگرام را دریافت کند.
در تنظیمات آن:
- در بخش Credentials، اطلاعات اتصال ربات تلگرام را انتخاب کنید.
- در قسمت رویدادها، دریافت پیام یا
Messageرا انتخاب کنید. نام دقیق گزینه ممکن است با توجه به نسخه n8n متفاوت باشد. - Workflow را ذخیره کنید و برای آزمایش، آن را در حالت اجرا قرار دهید.
حالا وارد تلگرام شوید و یک فایل آزمایشی، مثلاً یک تصویر یا فایل PDF، برای ربات ارسال کنید.
پس از دریافت رویداد، اجرای Workflow را در n8n باز کنید و خروجی Telegram Trigger را بررسی کنید.
نکته مهم: ساختار داده خروجی برای عکس، سند، ویدئو و فایل صوتی یکسان نیست. بنابراین، برای پیادهسازی مطمئن باید خروجی واقعی Trigger را بررسی کنید و بر اساس نوع فایل تصمیم بگیرید.
مرحله دوم: شناسایی فایل ارسالی کاربر
تلگرام اطلاعات فایل را در فیلدهای مختلفی از پیام قرار میدهد. برای نمونه، ساختار معمول پیام ممکن است شامل موارد زیر باشد:
message.documentبرای فایلهایی مانند PDF و اسنادmessage.photoبرای تصاویرmessage.videoبرای ویدئوmessage.audioبرای فایلهای صوتیmessage.voiceبرای پیامهای صوتی ضبطشده در تلگرامmessage.animationبرای فایلهای متحرک
این فیلدها همیشه همزمان وجود ندارند؛ معمولاً بسته به نوع محتوای پیام، یکی از آنها در دسترس است.
برای مثال، وقتی کاربر یک فایل PDF ارسال میکند، ممکن است اطلاعات فایل در مسیر زیر قرار داشته باشد:
$json.message.document
در این ساختار، بسته به نوع پیام، اطلاعاتی مانند file_id، file_name، mime_type و file_size وجود دارد. برخی از این فیلدها اختیاری هستند و ممکن است برای همه فایلها برگردانده نشوند.
مهمترین مقدار برای دریافت فایل، معمولاً file_id است؛ زیرا از این شناسه میتوان برای درخواست اطلاعات فایل از تلگرام استفاده کرد.
مرحله سوم: استخراج اطلاعات فایل
برای اینکه اطلاعات فایل را به شکل منظم در اختیار Nodeهای بعدی قرار دهید، میتوانید از Node نوع Edit Fields (Set) استفاده کنید.
یک Edit Fields بعد از Telegram Trigger قرار دهید و فیلدهایی مانند موارد زیر را بسازید:
| نام فیلد | مقدار پیشنهادی |
|---|---|
chat_id | {{ $json.message.chat.id }} |
file_name | {{ $json.message.document.file_name }} |
file_id | {{ $json.message.document.file_id }} |
mime_type | {{ $json.message.document.mime_type }} |
file_size | {{ $json.message.document.file_size }} |
این مثال مخصوص پیامهایی است که فایل آنها در message.document قرار دارد. اگر کاربر عکس، ویدئو یا پیام صوتی ارسال کند، باید مسیر فیلدها را مطابق خروجی همان پیام تغییر دهید.
همچنین ممکن است بعضی فیلدها وجود نداشته باشند. بنابراین بهتر است پیش از دسترسی به آنها، نوع پیام را بررسی کنید.
مرحله چهارم: تشخیص نوع فایل با IF
اکنون میخواهیم Workflow بتواند پیامهای حاوی فایل را از پیامهای متنی تشخیص دهد.
یک Node از نوع IF به Workflow اضافه کنید.
برای مثال، اگر میخواهید فایلهای سند را بررسی کنید، میتوانید شرطی بر اساس وجود message.document تعریف کنید. در صورتی که رابط نسخه شما بررسی مقدار بولی را پشتیبانی میکند، Expression زیر میتواند برای این منظور استفاده شود:
{{ !!$json.message?.document }}
اگر شرط برقرار باشد، پیام در مسیر فایل سند قرار میگیرد. در غیر این صورت، میتوانید آن را به مسیر دیگری هدایت کنید.
برای ساخت Workflow کاملتر، میتوانید از Node نوع Switch استفاده کنید و بر اساس نوع پیام، مسیرهای جداگانهای برای سند، تصویر، ویدئو و فایل صوتی بسازید.
به این ترتیب، هر نوع فایل وارد مسیر مناسب خود میشود.
مرحله پنجم: دریافت فایل واقعی از تلگرام
تا این مرحله، اطلاعات فایل و شناسه آن را داریم؛ اما شناسه فایل با خود فایل متفاوت است. برای پردازش تصویر، ارسال فایل به سرویس دیگر یا استخراج محتوای یک سند، معمولاً باید فایل واقعی را نیز دریافت کنید.
در این مرحله میتوانید از عملیات دریافت یا دانلود فایل در Node تلگرام استفاده کنید؛ البته نام و دسترسبودن عملیات دقیق به نسخه و قابلیتهای Node نصبشده بستگی دارد.
روند کلی به این شکل است:
- Node تلگرام را بعد از مرحله تشخیص فایل قرار دهید.
- عملیات مربوط به دریافت یا دانلود فایل را انتخاب کنید.
- شناسه فایل را از خروجی Trigger یا Edit Fields به آن بدهید.
- Workflow را اجرا کنید و خروجی Node را بررسی کنید.
- مطمئن شوید فایل بهصورت داده باینری (Binary Data) در اختیار مراحل بعدی قرار گرفته است.
اگر Node تلگرام در نسخه شما عملیات دانلود مستقیم فایل را ارائه نمیکند، میتوانید از Telegram Bot API استفاده کنید.
دریافت اطلاعات فایل از Telegram Bot API
API تلگرام متدی به نام getFile دارد که با دریافت file_id، اطلاعات فایل از جمله file_path را برمیگرداند.
آدرس متد بهصورت کلی چنین است:
https://api.telegram.org/bot<TOKEN>/getFile?file_id=<FILE_ID>
در این آدرس باید <TOKEN> را با توکن ربات و <FILE_ID> را با شناسه واقعی فایل جایگزین کنید.
در صورت موفقیت، پاسخ API معمولاً ساختاری شبیه زیر دارد:
{
"ok": true,
"result": {
"file_id": "FILE_ID",
"file_path": "documents/example.pdf"
}
}
این نمونه صرفاً برای نمایش ساختار پاسخ است؛ مقادیر واقعی به فایل دریافتی بستگی دارند.
پس از دریافت file_path، میتوان فایل را از مسیر دانلود تلگرام دریافت کرد:
https://api.telegram.org/file/bot<TOKEN>/<FILE_PATH>
برای پیادهسازی این روش در n8n میتوانید از HTTP Request استفاده کنید. ابتدا درخواست getFile را ارسال کنید، سپس با استفاده از file_path برگشتی، درخواست دانلود فایل را انجام دهید و خروجی را در حالت دریافت فایل باینری تنظیم کنید.
نکته امنیتی: توکن ربات را در متن پیام، لاگهای قابل مشاهده برای کاربران یا خروجی عمومی Workflow قرار ندهید. آن را در Credentials یا سازوکار امن مدیریت اطلاعات محرمانه نگه دارید. همچنین در صورت استفاده از Expressionها، از ساختن URLای که توکن آن در گزارش اجرا باقی میماند خودداری کنید.
مرحله ششم: بررسی خروجی باینری فایل
وقتی فایل با موفقیت دریافت شود، معمولاً باید بتوانید داده باینری آن را در خروجی Node مشاهده کنید.
در n8n، داده باینری با داده JSON معمولی تفاوت دارد. JSON میتواند اطلاعاتی مانند نام فایل یا اندازه آن را نگه دارد، اما برای انتقال محتوای واقعی فایل باید داده باینری نیز در دسترس باشد.
برای بررسی نتیجه:
- Workflow را اجرا کنید.
- آخرین اجرای Node دانلود را باز کنید.
- بخش Binary را در خروجی بررسی کنید.
- در صورت پشتیبانی رابط کاربری، جزئیات فایل را مشاهده کنید.
اگر فقط file_id یا file_path مشاهده میکنید، احتمالاً هنوز محتوای فایل را دریافت نکردهاید؛ این مقادیر بهتنهایی فایل دانلودشده نیستند.
مرحله هفتم: مدیریت خطاهای دریافت فایل
در زمان دریافت فایل ممکن است خطاهایی رخ دهد. بهتر است از ابتدا برای این شرایط برنامه داشته باشید.
۱. فایل دریافت نمیشود
بررسی کنید file_id معتبر باشد و مقدار آن از پیام صحیح استخراج شده باشد. همچنین خروجی Trigger را برای همان اجرای Workflow بررسی کنید.
۲. پیام متنی به مسیر دانلود وارد میشود
قبل از اجرای عملیات دانلود، نوع پیام را با IF یا Switch بررسی کنید. هر پیام تلگرام الزاماً شامل فایل نیست.
۳. دانلود با خطای API مواجه میشود
پاسخ API، کد وضعیت HTTP و تنظیمات درخواست را بررسی کنید. همچنین مطمئن شوید توکن ربات صحیح است و URL بر اساس file_path برگشتی ساخته شده است.
۴. فایل در خروجی Binary دیده نمیشود
تنظیمات درخواست HTTP و گزینه دریافت پاسخ بهصورت فایل را بررسی کنید. دریافت پاسخ JSON از getFile به معنای دانلود محتوای فایل نیست.
۵. فایل بزرگ است یا پردازش آن با شکست مواجه میشود
محدودیتهای فعلی Telegram Bot API، تنظیمات HTTP Request، منابع سرور و محدودیتهای سرویس مقصد را بررسی کنید. محدودیت حجم فایل به روش دسترسی به API و شرایط سرویس بستگی دارد؛ بنابراین قبل از طراحی Workflow نهایی، محدودیتهای جاری را بررسی کنید.
مثال عملی: دریافت فایل PDF از کاربر
فرض کنید میخواهید رباتی بسازید که کاربران فایل PDF ارسال کنند.
ساختار کلی Workflow به این صورت خواهد بود:
Telegram Trigger
|
v
بررسی نوع پیام
|
v
آیا سند است؟
|
v
استخراج file_id
|
v
دریافت فایل از تلگرام
|
v
بررسی خروجی Binary
برای اجرای این مثال:
- یک Telegram Trigger بسازید.
- با ارسال فایل PDF از طریق تلگرام، خروجی Trigger را مشاهده کنید.
- بررسی کنید که
message.documentوجود داشته باشد. - مقدار
message.document.file_idرا استخراج کنید. - فایل را با عملیات دانلود Node تلگرام یا روش HTTP Request دریافت کنید.
- خروجی باینری را بررسی کنید.
در این مرحله، Workflow فایل را دریافت کرده است؛ هنوز آن را در فضای ذخیرهسازی دائمی ذخیره نکردهایم. ذخیرهسازی فایل روی سرور یا سرویسهایی مانند فضای ابری، موضوع مرحله بعدی این مجموعه آموزشی است.
تفاوت دریافت فایل با ذخیره فایل در n8n
این دو کار به یکدیگر مرتبط هستند، اما یکسان نیستند.
دریافت فایل یعنی فایل ارسالی کاربر را از تلگرام دریافت کنید و محتوای آن را در اختیار Workflow قرار دهید.
ذخیره فایل یعنی فایل دریافتی را در مقصدی مانند دیسک سرور، فضای ذخیرهسازی ابری یا سرویس مدیریت فایل نگه دارید تا بعداً نیز قابل دسترسی باشد.
ممکن است فایل را دریافت کنید، اما آن را در هیچ مقصد دائمی ذخیره نکنید. در این حالت، برای استفاده مجدد از فایل باید به نحوه نگهداری دادهها و اجرای Workflow توجه داشته باشید.
اگر هدف شما ساخت یک سامانه دریافت و آرشیو فایل است، پس از دریافت موفق فایل باید مرحله ذخیرهسازی را نیز به Workflow اضافه کنید.
جمعبندی
در این مقاله یاد گرفتیم چگونه با Telegram Trigger در n8n پیامهای حاوی فایل را دریافت کنیم، نوع پیام را تشخیص دهیم، اطلاعاتی مانند file_id و نام فایل را استخراج کنیم و محتوای واقعی فایل را با Node تلگرام یا Telegram Bot API دانلود کنیم.
این قابلیت پایه بسیاری از اتوماسیونهای کاربردی است؛ از دریافت رزومه و اسناد مشتریان گرفته تا پردازش تصاویر و فایلهای صوتی.
در مقاله بعدی به سراغ ذخیره فایلهای دریافتی از تلگرام در n8n میرویم و روش نگهداری فایلها در مقصد مناسب را بررسی میکنیم.
سوالات متداول
آیا n8n میتواند فایلهای PDF ارسالی به ربات تلگرام را دریافت کند؟
بله. میتوانید پیام را با Telegram Trigger دریافت کنید، شناسه فایل را از message.document.file_id استخراج کنید و سپس با قابلیت دانلود Node تلگرام یا Telegram Bot API فایل را دریافت کنید.
آیا دریافت file_id به معنی دانلود فایل است؟
خیر. file_id شناسه فایل است. برای دریافت محتوای واقعی باید عملیات دانلود را اجرا کنید و خروجی فایل را بهصورت Binary دریافت کنید.
آیا میتوان عکسهای ارسالشده در تلگرام را دریافت کرد؟
بله. اطلاعات عکس معمولاً در message.photo قرار دارد. این فیلد آرایهای از اندازههای مختلف تصویر است؛ برای انتخاب تصویر مناسب، خروجی واقعی Trigger را بررسی کنید و شناسه نسخه موردنظر را به مرحله دریافت فایل بدهید.
آیا میتوان فایلهای صوتی و ویدئویی را هم دریافت کرد؟
بله. پیامهای ویدئویی، صوتی و پیامهای Voice میتوانند ساختارهای متفاوتی داشته باشند. باید مسیر مربوط به نوع پیام را شناسایی کنید و سپس فایل آن را دریافت کنید.
آیا فایل دانلودشده بهصورت دائمی در n8n ذخیره میشود؟
صرف دریافت فایل به معنای ذخیرهسازی دائمی آن نیست. اگر لازم است فایل برای استفادههای بعدی باقی بماند، باید یک مرحله ذخیرهسازی جداگانه به Workflow اضافه کنید.
برای دانلود فایل از تلگرام حتماً باید HTTP Request استفاده کنیم؟
خیر. اگر نسخه Node تلگرام شما عملیات مناسب دریافت فایل را دارد، میتوانید از همان استفاده کنید. HTTP Request یک روش جایگزین برای زمانی است که به کنترل مستقیم بر Telegram Bot API نیاز دارید.





