لوگوی تلگرامتلگرام
ربات تلگرام

چگونه می‌توان یک ربات تلگرام با قابلیت پاسخ‌دهی خودکار پیام‌ها ایجاد کرد؟

نویسنده: Telegram تیم فنی

ساخت ربات تلگرام، پاسخ خودکار در تلگرام، چگونه ربات تلگرام بسازیم، تنظیم پاسخ‌دهی خودکار تلگرام، ربات تلگرام با پایتون، مشکلات ربات تلگرام، عیب‌یابی ربات تلگرام، راهنمای گام‌به‌گام ربات تلگرام، اتوماسیون پیام در تلگرام، نکات بهینه‌سازی ربات تلگرام

مقدمه: چرا به ربات پاسخ‌دهی خودکار نیاز داریم؟

مدیریت پیام‌های تلگرام در کانال‌ها، گروه‌ها و کسب‌وکارها به یک چالش روزافزون تبدیل شده است. یک ربات تلگرام با قابلیت پاسخ‌دهی خودکار می‌تواند زمان پاسخگویی را کاهش دهد، سوالات تکراری را مدیریت کند و تجربه کاربری را بهبود بخشد. این مقاله شما را از صفر تا صد ساخت چنین رباتی راهنمایی می‌کند: از روش‌های بدون نیاز به کدنویسی گرفته تا پیاده‌سازی پیشرفته با برنامه‌نویسی. فرقی نمی‌کند مبتدی هستید یا توسعه‌دهنده، مسیرهای مختلفی برای رسیدن به هدف وجود دارد. در اینجا مرزهای هر روش را نیز مشخص خواهیم کرد تا بتوانید بهترین انتخاب را داشته باشید.

روش اول: ساخت ربات بدون کدنویسی با استفاده از ربات‌های سازنده

اگر تجربه برنامه‌نویسی ندارید یا نیاز به یک راه‌حل سریع دارید، می‌توانید از ربات‌های مخصوص ساخت ربات (مانند Manybot یا BotFather به‌عنوان واسط) استفاده کنید. این ربات‌ها به شما امکان می‌دهند بدون نوشتن یک خط کد، یک ربات پاسخ‌دهی خودکار ایجاد کنید. مراحل کلی به شرح زیر است:

مراحل ایجاد ربات با BotFather و Manybot

  1. دریافت توکن از BotFather: در تلگرام، حساب @BotFather را جستجو کنید. دستور /newbot را ارسال کنید. نام و نام کاربری ربات خود را وارد کنید (مثلاً name: MyAutoBot, username: MyAutoBot_bot). پس از تأیید، یک توکن API دریافت می‌کنید که شبیه 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 است. این توکن را ذخیره کنید.
  2. اتصال به Manybot: حساب @Manybot را پیدا کنید. دستور /start را بزنید و سپس گزینه Create a bot را انتخاب کنید. توکن دریافتی از BotFather را وارد کنید.
  3. پیکربندی پاسخ‌های خودکار: در Manybot می‌توانید پیام‌های خوشامدگویی، پاسخ به دستورات خاص (مثلاً /start، /help) و پاسخ‌های کلیدواژه‌ای تنظیم کنید. برای مثال، اگر کاربر کلمه «سلام» را بفرستد، ربات می‌تواند با «سلام! به ربات خوش آمدید» پاسخ دهد. همچنین می‌توانید دکمه‌های شیشه‌ای (Inline Keyboard) اضافه کنید.
  4. انتشار: پس از تنظیم، ربات شما فعال است. می‌توانید لینک عمومی آن (مثلاً t.me/MyAutoBot_bot) را به اشتراک بگذارید.

محدودیت‌های روش بدون کد

روش بدون کدنویسی برای سناریوهای ساده مناسب است، اما محدودیت‌هایی دارد: نمی‌توانید منطق پیچیده (مانند پاسخ‌دهی بر اساس داده‌های خارجی یا محاسبات) پیاده کنید. وابستگی به سرویس شخص ثالث (Manybot) ممکن است با تغییرات سرویس دچار اختلال شود. همچنین تعداد پیام‌های روزانه ممکن است محدود باشد. اگر نیاز به مقیاس‌پذیری یا کنترل کامل دارید، روش برنامه‌نویسی را انتخاب کنید.

روش دوم: برنامه‌نویسی ربات تلگرام با Python

برای داشتن رباتی کاملاً سفارشی، باید از API رسمی تلگرام استفاده کنید. زبان Python به دلیل کتابخانه‌های قدرتمند مانند python-telegram-bot محبوب‌ترین گزینه است. در این بخش، یک ربات ساده با قابلیت پاسخ‌دهی خودکار (echo) می‌سازیم و سپس آن را به پاسخ‌های شرطی ارتقا می‌دهیم.

پیش‌نیازها

  • Python 3.7+ نصب شده بر روی سیستم (دستور python --version را در ترمینال اجرا کنید).
  • یک ویرایشگر کد (مانند VS Code یا PyCharm).
  • توکن ربات از BotFather (همان‌طور که در بخش قبل توضیح داده شد).

نصب کتابخانه و ایجاد پروژه

یک پوشه جدید برای پروژه خود ایجاد کنید. در ترمینال، دستور زیر را اجرا کنید تا کتابخانه python-telegram-bot نصب شود:

pip install python-telegram-bot

سپس یک فایل با نام bot.py ایجاد کنید و کد زیر را در آن قرار دهید:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

# توکن ربات خود را اینجا قرار دهید
TOKEN = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("سلام! من یک ربات پاسخ‌دهی خودکار هستم.")

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_text = update.message.text
    # پاسخ خودکار: همان پیام کاربر را تکرار می‌کند
    await update.message.reply_text(f"شما گفتید: {user_text}")

def main():
    # ساخت اپلیکیشن
    app = Application.builder().token(TOKEN).build()

    # اضافه کردن هندلرها
    app.add_handler(CommandHandler("start", start))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # شروع ربات (polling)
    print("ربات در حال اجراست...")
    app.run_polling()

if __name__ == "__main__":
    main()

توضیح کد

این کد یک ربات ساده ایجاد می‌کند که: به دستور /start با پیام خوشامدگویی پاسخ می‌دهد و هر پیام متنی دیگر (غیر از دستور) را عیناً تکرار می‌کند. تابع echo یک تابع غیرهمزمان (async) است که متن پیام را دریافت کرده و با همان متن پاسخ می‌دهد. Application.builder().token(TOKEN).build() یک نمونه از ربات ایجاد می‌کند و app.run_polling() به‌طور مداوم پیام‌های جدید را از سرور تلگرام دریافت می‌کند (روش long polling).

اجرای ربات

فایل bot.py را اجرا کنید:

python bot.py

اگر همه چیز درست باشد، پیام «ربات در حال اجراست...» را می‌بینید. حالا به ربات خود در تلگرام پیام بدهید؛ باید پاسخ خودکار را دریافت کنید.

استقرار ربات روی سرور (برای اجرای ۲۴/۷)

ربات شما تا زمانی که ترمینال محلی باز است کار می‌کند. برای اجرای دائمی، باید آن را روی یک سرور (مانند VPS یا سرویس‌های ابری رایگان مانند PythonAnywhere، Heroku) مستقر کنید. در اینجا دو روش رایج را توضیح می‌دهیم.

استقرار روی PythonAnywhere (رایگان)

  1. ثبت‌نام در pythonanywhere.com (حساب رایگان کافی است).
  2. از داشبورد، بخش Files را باز کنید و فایل bot.py را آپلود کنید.
  3. به بخش Consoles بروید و یک Bash console باز کنید. کتابخانه را نصب کنید: pip install python-telegram-bot --user
  4. سپس دستور python bot.py & را اجرا کنید (علامت & برای اجرای پس‌زمینه).
  5. ربات شما اکنون به صورت ۲۴/۷ فعال است. توجه داشته باشید که حساب رایگان ممکن است محدودیت منابع داشته باشد.

استقرار روی سرور مجازی (VPS) با systemd

اگر کنترل بیشتری می‌خواهید، یک VPS (مثلاً از DigitalOcean یا Linode) تهیه کنید. پس از اتصال SSH، مراحل زیر را انجام دهید:

# نصب Python و pip
sudo apt update
sudo apt install python3 python3-pip git -y

# کلون کردن پروژه (یا انتقال فایل)
git clone https://github.com/your-repo/bot.git  # مثال
cd bot

# نصب وابستگی‌ها
pip3 install -r requirements.txt

# ایجاد یک سرویس systemd برای اجرای خودکار
sudo nano /etc/systemd/system/telegram-bot.service

محتویات فایل سرویس:

[Unit]
Description=Telegram Bot Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/youruser/bot/bot.py
WorkingDirectory=/home/youruser/bot
Restart=always
User=youruser

[Install]
WantedBy=multi-user.target

سپس سرویس را فعال کنید:

sudo systemctl enable telegram-bot
sudo systemctl start telegram-bot
sudo systemctl status telegram-bot

ارتقا به پاسخ‌دهی هوشمند با استفاده از APIهای خارجی

یکی از کاربردهای جذاب ربات‌های تلگرام، پاسخ‌دهی خودکار با استفاده از هوش مصنوعی است. به عنوان مثال، می‌توانید ربات خود را به API یک مدل زبانی (مانند API OpenAI یا Google Gemini) متصل کنید تا به سوالات کاربران پاسخ دهد. در اینجا یک نمونه ساده با استفاده از API OpenAI (ChatGPT) ارائه می‌دهیم. توجه داشته باشید که برای استفاده از این API نیاز به کلید API و هزینه احتمالی دارید.

import openai
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, ContextTypes

TOKEN = "YOUR_BOT_TOKEN"
openai.api_key = "YOUR_OPENAI_API_KEY"

async def chatgpt_response(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_message = update.message.text
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "شما یک دستیار مفید هستید."},
                {"role": "user", "content": user_message}
            ]
        )
        reply = response.choices[0].message.content
        await update.message.reply_text(reply)
    except Exception as e:
        await update.message.reply_text("متاسفم، خطایی رخ داد.")

def main():
    app = Application.builder().token(TOKEN).build()
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chatgpt_response))
    app.run_polling()

if __name__ == "__main__":
    main()

این کد هر پیام متنی را به API OpenAI ارسال می‌کند و پاسخ را به کاربر برمی‌گرداند. دقت کنید که این روش ممکن است پرهزینه باشد و برای حجم بالای پیام‌ها مناسب نیست. بهتر است محدودیت نرخ (rate limit) اعمال کنید.

مدیریت دستورات و فیلترهای پیشرفته

برای یک ربات حرفه‌ای، باید بتوانید دستورات سفارشی (مانند /weather، /news) و فیلترهای پیچیده (مانند پاسخ به تصاویر، فایل‌ها یا اعضای خاص) پیاده کنید. کتابخانه python-telegram-bot این امکان را با کلاس‌های CommandHandler، MessageHandler و filters فراهم می‌کند. به عنوان مثال:

from telegram.ext import CommandHandler, MessageHandler, filters

# دستور /start
async def start(update, context):
    await update.message.reply_text("خوش آمدید!")

# پاسخ به عکس
async def handle_photo(update, context):
    await update.message.reply_text("یک عکس دریافت شد!")

app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.PHOTO, handle_photo))

می‌توانید فیلترها را ترکیب کنید: filters.PHOTO & filters.ChatType.GROUP برای پاسخ فقط به عکس‌های گروه. این انعطاف‌پذیری به شما امکان می‌دهد رفتار ربات را دقیقاً مطابق نیاز خود تنظیم کنید.

بهترین روش‌ها و نکات امنیتی

هنگام ساخت ربات پاسخ‌دهی خودکار، رعایت نکات زیر ضروری است. این نکات نه‌تنها از ربات شما محافظت می‌کنند، بلکه تجربه کاربری بهتری نیز فراهم می‌آورند:

  • محدودیت نرخ (Rate Limiting): تلگرام محدودیتی برای ارسال پیام در ثانیه دارد (حدود ۳۰ پیام در ثانیه برای هر ربات). اگر حجم بالایی دارید، از صف پیام (queue) استفاده کنید تا از مسدود شدن ربات جلوگیری کنید.
  • احراز هویت: اگر ربات قرار است اطلاعات حساس را مدیریت کند، حتماً از Webhook با HTTPS و تأیید امضا استفاده کنید. این کار از حملات man-in-the-middle جلوگیری می‌کند.
  • مدیریت خطا: همیشه بلوک‌های try-except بگذارید و لاگ بنویسید تا در صورت خطا، ربات از کار نیفتد. برای مثال، در بخش API خارجی، خطاهای شبکه را مدیریت کنید.
  • ذخیره‌سازی توکن: توکن را در کد نگذارید؛ از متغیرهای محیطی (environment variables) استفاده کنید. این کار از لو رفتن توکن در صورت اشتراک‌گذاری کد جلوگیری می‌کند.
  • به‌روزرسانی کتابخانه: کتابخانه python-telegram-bot را به‌روز نگه دارید تا از باگ‌ها و آسیب‌پذیری‌ها جلوگیری کنید. هر نسخه جدید معمولاً بهبودهای امنیتی و عملکردی به همراه دارد.

رفع اشکال رایج

مشکلعلت احتمالیراه‌حل
ربات پاسخ نمی‌دهدتوکن اشتباه است یا ربات استارت نشدهتوکن را دوباره از BotFather بررسی کنید. ربات را با دستور /start در تلگرام فعال کنید.
خطای «Conflict: terminated by other getUpdates request»دو نمونه از ربات در حال اجراستفقط یک فرآیند را اجرا کنید. اگر از Webhook استفاده می‌کنید، ابتدا آن را حذف کنید: https://api.telegram.org/bot<TOKEN>/deleteWebhook
پیام‌های طولانی ارسال نمی‌شوندمحدودیت 4096 کاراکتر برای هر پیامپیام را به چند بخش تقسیم کنید.

اگر با مشکل دیگری مواجه شدید، مستندات رسمی کتابخانه و انجمن‌های برنامه‌نویسی منابع خوبی برای یافتن راه‌حل هستند.

سناریوهای قابل استفاده و غیرقابل استفاده

سناریوهای مناسب

  • پشتیبانی مشتریان: پاسخ به سوالات متداول (FAQ) به صورت خودکار، که زمان انتظار کاربران را کاهش می‌دهد.
  • کانال‌های اطلاع‌رسانی: ارسال پیام خوشامدگویی به اعضای جدید یا اعلان‌های خودکار.
  • ربات‌های سرگرمی: ساخت ربات‌های بازی یا گفتگو که می‌توانند کاربران را سرگرم کنند.
  • ربات‌های مدیریت گروه: پاسخ به دستورات ادمین (مثلاً /ban، /mute) و خودکارسازی وظایف تکراری.

سناریوهای غیرقابل استفاده

  • نیاز به پردازش بلادرنگ با تأخیر کمتر از ۱۰۰ میلی‌ثانیه: روش Long polling ممکن است تأخیر داشته باشد؛ برای چنین مواردی از Webhook استفاده کنید.
  • حجم بسیار بالای پیام (بیش از چند میلیون در روز): نیاز به معماری مقیاس‌پذیر با Webhook و load balancer دارید که از حوصله این مقاله خارج است.
  • اطلاعات حساس (مثلاً احراز هویت بانکی): ربات‌های تلگرام امنیت کامل را تضمین نمی‌کنند و برای چنین کاربردهایی گزینه‌های مناسب‌تری وجود دارد.

پرسش‌های متداول

آیا می‌توانم ربات را بدون سرور اجرا کنم؟

بله، می‌توانید از سرویس‌های ابری رایگان مانند PythonAnywhere (با محدودیت) یا Replit استفاده کنید. همچنین می‌توانید ربات را روی کامپیوتر شخصی خود اجرا کنید، اما برای اجرای ۲۴/۷ نیاز به روشن بودن سیستم دارید. سرویس‌های ابری گزینه بهتری هستند.

چگونه ربات را به گروه اضافه کنم؟

ربات را به گروه اضافه کنید (مثلاً با جستجوی نام کاربری آن). سپس باید ربات را ادمین گروه کنید (در تنظیمات گروه > ادمین‌ها > افزودن ادمین). بسته به نیاز، ممکن است نیاز به غیرفعال کردن حریم خصوصی ربات داشته باشید (با ارسال دستور /setprivacy به BotFather و انتخاب Disable).

آیا می‌توانم ربات را به زبان فارسی بنویسم؟

بله، API تلگرام از Unicode پشتیبانی می‌کند. کافی است پیام‌های پاسخ را به فارسی بنویسید. همچنین می‌توانید از کتابخانه‌های پردازش متن فارسی مانند hazm برای تحلیل بهتر ورودی استفاده کنید.

چه تفاوتی بین Long Polling و Webhook وجود دارد؟

Long Polling: ربات به‌طور مداوم از سرور تلگرام درخواست می‌کند تا پیام‌های جدید را دریافت کند. مناسب برای سرورهای با IP ثابت یا بدون دامنه. Webhook: تلگرام به‌طور خودکار پیام‌های جدید را به یک آدرس URL مشخص (HTTPS) ارسال می‌کند. سریع‌تر و مقیاس‌پذیرتر است، اما نیاز به SSL و دامنه دارد.

نتیجه‌گیری و گام‌های بعدی

در این مقاله، دو روش اصلی برای ساخت ربات تلگرام با قابلیت پاسخ‌دهی خودکار را بررسی کردیم: روش بدون کد (مناسب برای مبتدیان) و روش برنامه‌نویسی با Python (مناسب برای سفارشی‌سازی کامل). هر روش مزایا و محدودیت‌های خاص خود را دارد. برای شروع، توصیه می‌کنم ابتدا با روش ساده کار کنید و سپس به تدریج به سراغ برنامه‌نویسی بروید. گام بعدی می‌تواند افزودن دیتابیس (مانند SQLite) برای ذخیره‌سازی اطلاعات کاربران، یا اتصال به APIهای دیگر برای افزایش هوشمندی ربات باشد. فراموش نکنید که مستندات رسمی API تلگرام و کتابخانه python-telegram-bot منابع بسیار خوبی برای یادگیری بیشتر هستند. با پیشرفت تکنولوژی، ربات‌های هوشمندتر و کارآمدتری خواهیم دید که می‌توانند نیازهای پیچیده‌تری را برآورده کنند.