یکی از قابلیتهای کاربردی n8n، دریافت فایل از سرویسهای مختلف و ذخیرهسازی خودکار آنهاست. برای مثال، میتوانید رباتی در تلگرام بسازید که کاربران فایل PDF، تصویر، فاکتور یا سند خود را برای آن ارسال کنند و n8n فایلها را بهصورت خودکار روی سرور ذخیره کند.
این قابلیت در ساخت رباتهای پشتیبانی، سامانههای دریافت مدارک، سیستمهای ثبت سفارش و اتوماسیونهای سازمانی کاربرد زیادی دارد.
در مقاله قبلی یاد گرفتیم چگونه فایلهای ارسالی کاربران را از تلگرام دریافت کنیم. در این آموزش، مرحله بعدی را پیادهسازی میکنیم؛ یعنی ذخیره فایل دریافتشده در یک مسیر مشخص روی سرور.
ذخیره فایل تلگرام در n8n چه کاربردی دارد؟
فرض کنید یک شرکت از طریق تلگرام مدارک مشتریان خود را دریافت میکند. اگر این کار بهصورت دستی انجام شود، کارمند باید فایلها را دانلود کند، نام مناسبی برای آنها انتخاب کند و در پوشه مربوط به هر مشتری قرار دهد.
با استفاده از n8n میتوان بخش زیادی از این فرایند را خودکار کرد.
چند نمونه کاربرد عملی:
- ذخیره خودکار رزومههای ارسالشده به ربات استخدام
- نگهداری فاکتورهای PDF مشتریان
- ذخیره تصاویر محصولات در یک پوشه مشخص
- آرشیو فایلهای ارسالی کاربران به ربات پشتیبانی
- ذخیره فایلهای صوتی برای پردازشهای بعدی
- انتقال فایلهای دریافتشده به فضای ذخیرهسازی ابری
در این آموزش، یک Workflow میسازیم که فایل دریافتی از تلگرام را دانلود میکند و سپس آن را در یک مسیر مشخص روی سرور ذخیره میکند.
پیشنیازهای آموزش
برای اجرای این مثال به موارد زیر نیاز دارید:
- یک نمونه فعال از n8n
- یک ربات تلگرام متصل به n8n
- یک Workflow که بتواند پیامها و فایلهای دریافتی را دریافت کند
- دسترسی نوشتن در مسیر مقصد، در صورتی که از ذخیرهسازی روی دیسک استفاده میکنید
اگر هنوز روش دریافت فایل را پیادهسازی نکردهاید، ابتدا مقاله «آموزش دریافت فایل از تلگرام در n8n؛ دانلود عکس و سند با ربات تلگرام» را مطالعه کنید.
مرحله اول: دریافت فایل از تلگرام
ابتدا وارد n8n شوید و Workflow موردنظر خود را باز کنید.
اگر از قبل Telegram Trigger را برای دریافت پیامها تنظیم کردهاید، میتوانید از همان Workflow استفاده کنید. در غیر این صورت، یک Node از نوع Telegram Trigger اضافه کنید و رویداد دریافت پیام را تنظیم کنید.
سپس از طریق تلگرام، یک فایل PDF یا تصویر برای ربات ارسال کنید.
پس از اجرای Workflow، خروجی Telegram Trigger را بررسی کنید. بسته به نوع فایل، اطلاعات آن در مسیر متفاوتی از JSON قرار میگیرد.
برای مثال، اطلاعات یک سند معمولاً در این مسیر قرار دارد:
$json.message.document
شناسه فایل نیز معمولاً در مسیر زیر قرار دارد:
$json.message.document.file_id
این شناسه برای دریافت فایل از تلگرام استفاده میشود؛ اما هنوز محتوای واقعی فایل را در اختیار نداریم.
مرحله دوم: دانلود فایل و دریافت داده باینری
برای ذخیره فایل روی سرور، ابتدا باید محتوای واقعی آن را دریافت کنیم.
میتوانید از عملیات دانلود فایل در Node تلگرام استفاده کنید، اگر نسخه و تنظیمات Node شما این قابلیت را ارائه میدهد. در غیر این صورت، میتوانید از Telegram Bot API و Node نوع HTTP Request استفاده کنید.
فرایند دریافت فایل از طریق API بهصورت کلی شامل دو مرحله است:
- ارسال درخواست
getFileهمراه با شناسه فایل برای دریافت اطلاعات مسیر آن - ارسال درخواست دانلود به مسیر فایل و دریافت پاسخ بهصورت فایل باینری
در n8n، پاسخ دانلود باید بهصورت داده باینری در اختیار Workflow قرار بگیرد. دریافت صرف اطلاعاتی مانند file_id یا file_path برای ذخیره محتوای فایل کافی نیست.
پس از اجرای مرحله دانلود، خروجی Node را باز کنید و بخش Binary را بررسی کنید.
در صورت موفقیت، اطلاعات باینری فایل در اختیار مراحل بعدی Workflow قرار میگیرد. نام فیلد باینری به تنظیمات Node و روش دریافت فایل بستگی دارد؛ بنابراین باید نام واقعی آن را در خروجی مشاهده کنید.
نکته امنیتی: توکن ربات تلگرام را داخل پیامها، خروجیهایی که برای کاربران ارسال میشوند یا لاگهای عمومی قرار ندهید. برای اطلاعات محرمانه از Credentials و سازوکار امن مدیریت اطلاعات در n8n استفاده کنید.
مرحله سوم: انتخاب مسیر ذخیره فایل
اکنون باید مشخص کنیم فایل در کدام مسیر روی سرور ذخیره شود.
برای مثال، فرض کنید میخواهیم فایلها در مسیر زیر قرار بگیرند:
/files/telegram/
این مسیر صرفاً نمونه است و باید آن را با مسیر مناسب در محیط خود جایگزین کنید.
در انتخاب مسیر، چند نکته مهم وجود دارد:
- مسیر مقصد باید در محیط اجرای n8n وجود داشته باشد یا امکان ایجاد آن فراهم باشد.
- کاربر سیستمعامل یا فرایند n8n باید مجوز نوشتن در آن مسیر را داشته باشد.
- اگر n8n داخل Docker اجرا میشود، مسیر داخل کانتینر لزوماً همان مسیر روی میزبان نیست.
- اگر فایلها باید پس از بازسازی یا جایگزینی کانتینر باقی بمانند، باید از فضای ذخیرهسازی پایدار مانند Volume استفاده کنید.
اگر n8n را روی سرور شخصی یا VPS اجرا میکنید، بهتر است مسیر ذخیرهسازی را از ابتدا بهصورت مشخص و قابل مدیریت طراحی کنید.
مرحله چهارم: استفاده از Node ذخیره فایل در n8n
در نسخههایی از n8n که Node مربوط به فایلهای محلی را ارائه میدهند، میتوانید از Read/Write Files from Disk برای نوشتن داده باینری روی دیسک استفاده کنید.
یک Node از این نوع را بعد از مرحله دانلود فایل قرار دهید.
سپس تنظیمات را مطابق نسخه نصبشده خود انجام دهید:
- عملیات نوشتن فایل را انتخاب کنید.
- مسیر مقصد و نام فایل را مشخص کنید.
- فیلد باینری حاوی محتوای فایل را تعیین کنید.
- Workflow را اجرا کنید و نتیجه را بررسی کنید.
برای مثال، اگر فایل دریافتی PDF باشد، میتوانید نامی مانند document.pdf برای آن در نظر بگیرید. در یک Workflow واقعی بهتر است نام فایل از اطلاعات دریافتی استخراج شود یا بهصورت کنترلشده تولید شود.
نام گزینهها و جزئیات تنظیمات ممکن است در نسخههای مختلف n8n تفاوت داشته باشد؛ بنابراین هنگام تنظیم Node، به گزینههای موجود در نسخه خود توجه کنید.
چرا باید فیلد باینری را مشخص کنیم؟
در n8n، دادههای JSON و باینری دو نوع داده متفاوت هستند.
برای مثال، ممکن است JSON شامل اطلاعات زیر باشد:
{
"file_name": "document.pdf",
"mime_type": "application/pdf"
}
این اطلاعات فقط مشخصات فایل را نگه میدارند و شامل محتوای واقعی PDF نیستند.
برای ذخیره فایل باید داده باینری آن را به Node ذخیرهسازی بدهید. اگر فقط JSON را در اختیار Node قرار دهید، ممکن است فایلی ایجاد نشود یا نتیجه، فایل مورد انتظار شما نباشد.
مرحله پنجم: ذخیره فایل با نام مناسب
یکی از نکات مهم در این Workflow، انتخاب نام فایل است.
اگر همه فایلها با یک نام ثابت ذخیره شوند، ممکن است فایل جدید روی فایل قبلی نوشته شود یا فرایند ذخیرهسازی با خطا مواجه شود.
برای جلوگیری از این مشکل، میتوانید نام فایل را از ترکیب چند مقدار تولید کنید؛ برای مثال:
- شناسه پیام تلگرام
- شناسه کاربر
- زمان دریافت فایل
- نام فایل اصلی
یک الگوی ساده برای نامگذاری میتواند چنین باشد:
telegram_<message_id>_<file_name>
این عبارت فقط یک الگوی پیشنهادی برای نامگذاری است و باید مقادیر آن را با Expressionهای مناسب در n8n جایگزین کنید.
همچنین بهتر است نام فایل ورودی را مستقیماً و بدون اعتبارسنجی به مسیر ذخیرهسازی اضافه نکنید. کاراکترهای نامعتبر را حذف یا جایگزین کنید و اجازه ندهید نام فایل باعث خروج از پوشه مقصد شود.
برای مثال، فایل باید در پوشه تعیینشده ذخیره شود، نه در مسیری که از طریق نام فایل ارسالی کاربر ساخته شده است.
مرحله ششم: بررسی نتیجه ذخیرهسازی
پس از اجرای Workflow، باید بررسی کنید که فایل واقعاً در مسیر مقصد ایجاد شده باشد.
برای این کار:
- اجرای Workflow را در n8n باز کنید.
- خروجی Node دانلود را بررسی کنید و از وجود داده باینری مطمئن شوید.
- خروجی Node ذخیره فایل را بررسی کنید.
- در صورت دسترسی به سرور، پوشه مقصد را مشاهده کنید.
- فایل ذخیرهشده را باز کنید و مطمئن شوید محتوای آن سالم است.
اگر از Docker استفاده میکنید، توجه داشته باشید که مشاهده فایل در داخل کانتینر به معنی ذخیرهشدن آن در یک مسیر پایدار روی میزبان نیست.
برای نگهداری فایلها پس از جایگزینی کانتینر، مسیر ذخیرهسازی باید به فضای پایدار متصل شده باشد. در غیر این صورت، ممکن است با حذف یا بازسازی کانتینر، فایلهای ذخیرهشده از دست بروند.
مرحله هفتم: ذخیره فایلها در پوشههای جداگانه
در پروژههای واقعی معمولاً بهتر است همه فایلها را در یک پوشه قرار ندهید.
برای مثال، میتوانید فایلها را بر اساس نوع یا کاربرد دستهبندی کنید:
telegram-files/
├── documents/
├── images/
├── videos/
└── audio/
برای اجرای این ایده، از IF یا Switch استفاده کنید تا نوع پیام را تشخیص دهید و فایل را به مسیر مناسب هدایت کنید.
برای نمونه:
- اسناد در پوشه
documents - تصاویر در پوشه
images - ویدئوها در پوشه
videos - فایلهای صوتی در پوشه
audio
این ساختار فقط یک نمونه است. در یک سامانه واقعی میتوانید پوشهها را بر اساس شناسه مشتری، تاریخ یا نوع درخواست نیز سازماندهی کنید.
اگر مسیر مقصد بر اساس اطلاعات کاربر ساخته میشود، حتماً مقادیر ورودی را اعتبارسنجی کنید تا امکان نوشتن در مسیرهای ناخواسته ایجاد نشود.
مرحله هشتم: مدیریت خطاهای ذخیرهسازی
در زمان ذخیره فایل ممکن است با خطاهایی روبهرو شوید. بهتر است این شرایط را در طراحی Workflow در نظر بگیرید.
خطای مجوز نوشتن
اگر n8n اجازه نوشتن در پوشه مقصد را نداشته باشد، عملیات ذخیرهسازی شکست میخورد.
مجوزهای فایل و پوشه را بررسی کنید و مطمئن شوید فرایند n8n به مسیر مقصد دسترسی دارد. از دادن دسترسی گسترده و غیرضروری به کل فایلسیستم خودداری کنید.
مسیر مقصد وجود ندارد
بررسی کنید پوشه مقصد وجود داشته باشد یا روش مناسبی برای ایجاد آن در نظر گرفته باشید.
فایل باینری وجود ندارد
اگر فایل دانلود نشده باشد یا نام فیلد باینری اشتباه انتخاب شده باشد، Node ذخیرهسازی نمیتواند محتوای مورد انتظار را بنویسد.
خروجی Node دانلود و نام فیلد باینری را بررسی کنید.
فایل جدید روی فایل قبلی نوشته میشود
از نامهای یکتا استفاده کنید و سیاست مشخصی برای برخورد با نامهای تکراری داشته باشید.
فایل بزرگ است
ذخیره فایلهای بزرگ میتواند به فضای دیسک، حافظه و زمان اجرای بیشتری نیاز داشته باشد. حجم فایلها را بررسی کنید و برای جلوگیری از پرشدن دیسک، سیاستی برای محدودیت حجم و پاکسازی فایلهای قدیمی در نظر بگیرید.
مرحله نهم: آیا بهتر است فایلها را روی سرور ذخیره کنیم یا فضای ابری؟
ذخیرهسازی روی دیسک سرور تنها یکی از روشهای ممکن است. انتخاب مقصد به نیاز پروژه بستگی دارد.
ذخیرهسازی روی سرور
این روش زمانی مناسب است که فایلها باید در همان سرور یا در یک برنامه داخلی در دسترس باشند. با این حال، باید فضای دیسک، مجوزها، پایداری Volume و روش پشتیبانگیری را مدیریت کنید.
ذخیرهسازی در فضای ابری
اگر تعداد فایلها زیاد است یا فایلها باید از چند سیستم قابل دسترسی باشند، سرویسهای ذخیرهسازی ابری میتوانند گزینه مناسبی باشند. در این حالت، پس از دریافت فایل باینری، آن را با Node یا API سازگار با سرویس مقصد ارسال میکنید.
ذخیرهسازی در سامانه مدیریت فایل
در پروژههای سازمانی میتوانید فایل را به سامانه مدیریت اسناد یا یک سرویس داخلی منتقل کنید و شناسه یا آدرس فایل را در پایگاه داده ثبت کنید.
هیچکدام از این روشها برای همه پروژهها بهترین گزینه نیست. باید حجم فایلها، تعداد کاربران، هزینه، امنیت و نیاز به دسترسی بلندمدت را در نظر بگیرید.
مثال عملی: ذخیره خودکار PDF ارسالی به ربات تلگرام
فرض کنید میخواهیم کاربران فایل PDF خود را برای یک ربات ارسال کنند و فایل در مسیر مشخصی روی سرور ذخیره شود.
ساختار کلی Workflow به این صورت است:
Telegram Trigger
|
v
تشخیص پیام حاوی سند
|
v
استخراج file_id
|
v
دانلود فایل از تلگرام
|
v
بررسی داده Binary
|
v
ذخیره فایل روی دیسک
|
v
ثبت نتیجه یا ارسال پاسخ
برای پیادهسازی:
- Telegram Trigger را برای دریافت پیام فعال کنید.
- بررسی کنید پیام حاوی سند باشد.
- شناسه فایل را استخراج کنید.
- فایل را از تلگرام دریافت کنید.
- وجود داده باینری را در خروجی بررسی کنید.
- با Node ذخیرهسازی، فایل را در مسیر تعیینشده بنویسید.
- پس از موفقیت، میتوانید با Node تلگرام پیام تأیید برای کاربر ارسال کنید.
برای ارسال پیام تأیید، بهتر است فقط زمانی اقدام کنید که مرحله ذخیرهسازی با موفقیت انجام شده باشد. اگر عملیات ذخیره شکست خورد، میتوانید خطا را ثبت کنید یا مسیر مدیریت خطا را اجرا کنید.
نکته: این Workflow فایل را روی دیسک ذخیره میکند. برای اطمینان از ماندگاری فایلها، بهخصوص در محیط Docker یا Coolify، باید مسیر مقصد و Volume پایدار را بهدرستی تنظیم کنید.
نکات امنیتی مهم هنگام ذخیره فایلهای کاربران
فایلهای دریافتی از تلگرام ممکن است از کاربران ناشناس یا منابع غیرقابل اعتماد ارسال شده باشند. بنابراین، صرف ذخیرهکردن فایل به معنی امنبودن آن نیست.
برای کاهش خطرات:
- حجم فایلهای ورودی را محدود کنید.
- نوع و پسوند فایل را بررسی کنید، اما تنها به پسوند ارسالی اعتماد نکنید.
- نام فایل را اعتبارسنجی کنید و مسیر ذخیره را تحت کنترل نگه دارید.
- فایلهای حساس را در مسیرهای عمومی وب قرار ندهید.
- در صورت نیاز، فایلها را پیش از استفاده در سامانههای دیگر اسکن کنید.
- برای فایلهای خصوصی، دسترسیها را محدود کنید.
- فضای دیسک و رشد پوشههای ذخیرهسازی را پایش کنید.
- برای فایلهای مهم، پشتیبانگیری و سیاست نگهداری مشخص داشته باشید.
اگر قرار است فایلها در اختیار کاربران دیگر قرار بگیرند، بهتر است پیش از ارائه دسترسی، مجوزهای لازم را بررسی کنید.
جمعبندی
در این مقاله یاد گرفتیم چگونه یک Workflow در n8n بسازیم که فایلهای ارسالی کاربران به ربات تلگرام را دریافت کند و پس از دانلود محتوای واقعی فایل، آن را روی سرور ذخیره کند.
مراحل اصلی شامل دریافت پیام، تشخیص نوع فایل، استخراج شناسه، دانلود فایل بهصورت باینری و نوشتن آن در مسیر مقصد است.
برای پروژههای کوچک، ذخیرهسازی روی دیسک سرور میتواند کافی باشد. اما اگر حجم فایلها زیاد است یا به دسترسی بلندمدت و مدیریت متمرکز نیاز دارید، بهتر است فضای ذخیرهسازی پایدار یا سرویس ابری را نیز بررسی کنید.
در مقاله بعدی این مجموعه به سراغ ارسال گزارش اجرای Workflow به تلگرام میرویم تا بتوانید از طریق ربات خود، از وضعیت اجرای اتوماسیونها مطلع شوید.
سوالات متداول
آیا میتوان فایل تلگرام را مستقیماً روی سرور ذخیره کرد؟
بله. ابتدا باید محتوای واقعی فایل را از تلگرام دریافت کنید و سپس با Node مناسب ذخیرهسازی فایل در n8n آن را روی مسیر مجاز سرور بنویسید.
آیا ذخیره file_id کافی است؟
خیر. file_id فقط شناسه فایل در تلگرام است. برای ذخیره فایل واقعی، باید محتوای باینری آن را دریافت کنید.
اگر n8n داخل Docker باشد، فایل کجا ذخیره میشود؟
فایل در مسیری ذخیره میشود که از دید محیط اجرای n8n مشخص کردهاید. این مسیر ممکن است داخل کانتینر باشد. برای ماندگاری فایل پس از بازسازی کانتینر، باید از Volume یا فضای ذخیرهسازی پایدار استفاده کنید.
آیا میتوان عکس و PDF را در پوشههای جداگانه ذخیره کرد؟
بله. با استفاده از IF یا Switch میتوانید نوع پیام را تشخیص دهید و فایل را به مسیر مناسب هدایت کنید.
آیا فایلهای ذخیرهشده پس از Restart شدن n8n باقی میمانند؟
این موضوع به نوع استقرار و مسیر ذخیرهسازی بستگی دارد. اگر فایلها روی Volume پایدار یا دیسک میزبان ذخیره شده باشند، امکان حفظ آنها وجود دارد؛ اما ذخیره فایل در فضای موقت یا لایه قابلحذف کانتینر ممکن است باعث از دست رفتن دادهها شود.
برای ذخیره فایلهای زیاد چه روشی بهتر است؟
اگر تعداد یا حجم فایلها زیاد است، باید فضای دیسک، سیاست پاکسازی، پشتیبانگیری و نیاز به دسترسی از چند سرویس را بررسی کنید. بسته به شرایط پروژه، فضای ذخیرهسازی ابری یا یک سامانه مدیریت فایل میتواند مناسبتر باشد.





