ساخت ربات تلگرام با هوش مصنوعی و API
تلگرام هنوز یکی از پرکاربردترین پیامرسانها میان کاربران فارسیزبان است و ساخت ربات تلگرام هوش مصنوعی یکی از سریعترین راهها برای ارائهٔ خدمات هوشمند به مشتریان است. با ترکیب Bot API تلگرام و API یک مدل زبانی، میتوانید رباتی بسازید که به سؤالات مشتریان پاسخ بدهد، متن ترجمه کند، محتوا بنویسد یا حتی سفارش بگیرد. در این آموزش از صفر تا راهاندازی، یک ربات تلگرام هوشمند با پایتون میسازیم و نکات امنیتی و کنترل هزینه را هم بررسی میکنیم.
ربات تلگرام هوش مصنوعی چطور کار میکند؟
معماری چنین رباتی ساده است و سه جزء اصلی دارد:
- تلگرام: پیام کاربر را دریافت میکند و از طریق Bot API به برنامهٔ شما میرساند.
- سرور شما: برنامهٔ پایتونی که پیام را میگیرد، تاریخچهٔ گفتوگو را مدیریت میکند و درخواست را به مدل هوش مصنوعی میفرستد.
- API هوش مصنوعی: مدل زبانی پاسخ را تولید میکند و سرور شما آن را برای کاربر در تلگرام میفرستد.
نکتهٔ مهم این است که کلید API هوش مصنوعی فقط روی سرور شما قرار دارد و کاربران هیچوقت آن را نمیبینند.
پیشنیازها
- پایتون نسخهٔ ۳.۱۰ یا بالاتر
- یک حساب تلگرام برای ساخت ربات
- یک API Key هوش مصنوعی؛ مثلاً API اوپنایآی، API دیپسیک یا اعتبار OpenRouter
- یک سرور یا هاست که بتواند هم به تلگرام و هم به سرویس هوش مصنوعی دسترسی داشته باشد
- آشنایی مقدماتی با پایتون (اگر تازهکار هستید، راهنمای API هوش مصنوعی در پایتون را ببینید)
قدم اول: ساخت ربات در BotFather
در تلگرام به ربات رسمی @BotFather پیام دهید و مراحل زیر را انجام دهید:
- دستور
/newbotرا بفرستید. - یک نام نمایشی برای ربات انتخاب کنید.
- یک نام کاربری که به
botختم شود وارد کنید. - BotFather یک توکن به شما میدهد. این توکن را مثل رمز عبور نگه دارید.
با دستورهایی مثل /setdescription و /setcommands هم میتوانید توضیحات و منوی دستورهای ربات را تنظیم کنید.
قدم دوم: آمادهسازی پروژه
یک پوشهٔ جدید بسازید و کتابخانههای لازم را نصب کنید. در این آموزش از کتابخانهٔ محبوب python-telegram-bot و کتابخانهٔ رسمی openai استفاده میکنیم:
pip install python-telegram-bot openai python-dotenv
سپس فایل .env را بسازید:
TELEGRAM_TOKEN=YOUR_TELEGRAM_BOT_TOKEN
AI_BASE_URL=BASE_URL
AI_API_KEY=API_KEY
AI_MODEL=MODEL_NAME
چون کتابخانهٔ openai با بسیاری از سرویسها سازگار است، با تغییر همین سه مقدار میتوانید بین OpenAI، DeepSeek، OpenRouter و سرویسهای دیگر جابهجا شوید.
قدم سوم: نوشتن کد ربات
فایل bot.py را بسازید و کد زیر را در آن قرار دهید:
import os
from collections import defaultdict
from dotenv import load_dotenv
from openai import AsyncOpenAI
from telegram import Update
from telegram.ext import (Application, CommandHandler,
MessageHandler, ContextTypes, filters)
load_dotenv()
ai = AsyncOpenAI(base_url=os.getenv("AI_BASE_URL"),
api_key=os.getenv("AI_API_KEY"))
MODEL = os.getenv("AI_MODEL")
SYSTEM_PROMPT = (
"تو دستیار هوشمند فروشگاه هستی. به فارسی روان، کوتاه و مؤدبانه پاسخ بده. "
"اگر جواب سؤالی را نمیدانی، صادقانه بگو و کاربر را به پشتیبانی ارجاع بده."
)
MAX_HISTORY = 10
histories = defaultdict(list)
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
histories[update.effective_chat.id].clear()
await update.message.reply_text("سلام! من دستیار هوشمند هستم. سؤالتان را بپرسید.")
async def reset(update: Update, context: ContextTypes.DEFAULT_TYPE):
histories[update.effective_chat.id].clear()
await update.message.reply_text("گفتوگو از نو شروع شد.")
async def chat(update: Update, context: ContextTypes.DEFAULT_TYPE):
chat_id = update.effective_chat.id
user_text = update.message.text[:2000] # جلوگیری از پیامهای بسیار طولانی
history = histories[chat_id]
history.append({"role": "user", "content": user_text})
del history[:-MAX_HISTORY]
await context.bot.send_chat_action(chat_id, "typing")
try:
resp = await ai.chat.completions.create(
model=MODEL,
messages=[{"role": "system", "content": SYSTEM_PROMPT}] + history,
max_tokens=500,
)
answer = resp.choices[0].message.content
except Exception:
answer = "متأسفانه الان مشکلی پیش آمد. لطفاً چند لحظه بعد دوباره امتحان کنید."
history.pop()
else:
history.append({"role": "assistant", "content": answer})
await update.message.reply_text(answer)
def main():
app = Application.builder().token(os.getenv("TELEGRAM_TOKEN")).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("reset", reset))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, chat))
app.run_polling()
if __name__ == "__main__":
main()
با اجرای python bot.py ربات شروع به کار میکند. حالا در تلگرام به ربات خود پیام دهید و پاسخ هوش مصنوعی را ببینید.
توضیح بخشهای مهم کد
- SYSTEM_PROMPT: شخصیت و قوانین ربات را تعیین میکند. هرچه دقیقتر بنویسید، رفتار ربات قابل پیشبینیتر میشود. برای نوشتن پرامپت بهتر، راهنمای مهندسی پرامپت را بخوانید.
- histories: تاریخچهٔ هر کاربر را جداگانه نگه میدارد تا ربات زمینهٔ گفتوگو را بفهمد.
- MAX_HISTORY: فقط پیامهای اخیر ارسال میشوند تا مصرف توکن کنترل شود.
- max_tokens: سقف طول پاسخ را مشخص میکند.
- try/except: اگر سرویس هوش مصنوعی خطا داد، کاربر پیام مناسب میبیند و ربات از کار نمیافتد.
قدم چهارم: انتخاب مدل مناسب برای ربات
برای ربات تلگرام، سرعت پاسخ و هزینه معمولاً از هر چیز مهمتر است. جدول زیر کمکتان میکند:
| نیاز ربات | گزینهٔ پیشنهادی |
|---|---|
| پاسخگویی عمومی با کیفیت خوب | مدلهای سبک OpenAI مانند GPT-6 Luna |
| حجم پیام بسیار بالا با بودجهٔ محدود | DeepSeek (مدل deepseek-flash) |
| سرعت پاسخ بسیار بالا | Groq با مدلهای Llama |
| پاسخ به سؤالات بر اساس اسناد طولانی | Claude یا Gemini |
| تست چند مدل و انتخاب بهترین | OpenRouter |
برای مقایسهٔ دقیقتر مدلها، مقالهٔ GPT در برابر Claude و Gemini را ببینید.
قدم پنجم: اجرای ربات روی سرور
برای اینکه ربات همیشه روشن بماند، باید آن را روی یک سرور اجرا کنید. چند نکته:
- سرور باید بتواند هم به
api.telegram.orgو هم به آدرس سرویس هوش مصنوعی متصل شود. - با ابزاری مثل
systemd،supervisorیا Docker، ربات را طوری تنظیم کنید که بعد از خطا یا ریاستارت سرور، خودکار دوباره اجرا شود. - روش
run_pollingبرای شروع ساده است؛ در مقیاس بالاتر از Webhook استفاده کنید تا تلگرام پیامها را مستقیم به آدرس HTTPS سرور شما بفرستد. - تاریخچه را برای رباتهای واقعی در Redis یا پایگاه داده نگه دارید، نه در حافظهٔ برنامه، تا با ریاستارت از بین نرود.
نوشتن پرامپت سیستمی خوب برای ربات
رفتار ربات بیش از هر چیز به پرامپت سیستمی بستگی دارد. یک پرامپت سیستمی خوب برای ربات تلگرام این بخشها را دارد:
- نقش: ربات چه کسی است؛ مثلاً «دستیار پشتیبانی فروشگاه لوازم ورزشی».
- لحن: رسمی یا دوستانه، کوتاه یا مفصل.
- محدوده: به چه سؤالاتی جواب بدهد و از پاسخ به چه موضوعاتی خودداری کند.
- اطلاعات پایه: ساعات کاری، روشهای ارسال و راه تماس با پشتیبانی انسانی.
- رفتار در حالت ندانستن: بهجای حدس زدن، صادقانه بگوید نمیداند.
تلگرام برای هر پیام محدودیت طول دارد؛ بنابراین در پرامپت از مدل بخواهید پاسخها کوتاه باشند و اگر پاسخ طولانی شد، در کد آن را به چند پیام تقسیم کنید. همچنین اگر میخواهید از قالببندی تلگرام مثل متن پررنگ استفاده کنید، پارامتر parse_mode را تنظیم کنید و مراقب کاراکترهای خاص در خروجی مدل باشید، چون ممکن است باعث خطای ارسال شوند.
نمایش پاسخ به صورت تدریجی
پاسخهای طولانی ممکن است چند ثانیه طول بکشند. یک ترفند رایج این است که پاسخ را با stream=True دریافت کنید و هر چند لحظه، پیام ارسالشده در تلگرام را با متن جدید ویرایش کنید. این کار حس سرعت بیشتری به کاربر میدهد؛ فقط حواستان باشد ویرایشها را خیلی پشت سر هم انجام ندهید تا به محدودیتهای تلگرام برنخورید.
امنیت و کنترل هزینه در ربات تلگرام
ربات عمومی یعنی هر کسی میتواند به آن پیام بدهد و هر پیام برای شما هزینه دارد. این اقدامات را جدی بگیرید:
- محدودیت نرخ برای هر کاربر: مثلاً حداکثر تعداد مشخصی پیام در دقیقه یا در روز برای هر شناسهٔ کاربری.
- محدودیت طول پیام: مانند کد بالا، پیامهای خیلی بلند را کوتاه کنید.
- فهرست کاربران مجاز: اگر ربات برای تیم داخلی است، فقط به شناسههای مشخص پاسخ دهد.
- محافظت از توکنها: توکن تلگرام و کلید API را در گیتهاب نگذارید.
- مقاومت در برابر تزریق پرامپت: کاربران ممکن است سعی کنند با پیامهایی مثل «دستورهای قبلی را نادیده بگیر» رفتار ربات را تغییر دهند؛ اطلاعات محرمانه را در پرامپت سیستمی قرار ندهید.
برای جزئیات بیشتر، مقالهٔ امنیت API Key هوش مصنوعی و برای تخمین هزینه، توکن و هزینهٔ API را بخوانید.
ایدههایی برای توسعهٔ ربات
- پشتیبانی فروشگاه: با فراخوانی تابع (Function Calling)، وضعیت سفارش را از پایگاه دادهٔ خودتان بخوانید.
- ربات ترجمه: پیام هر زبانی را به فارسی یا برعکس ترجمه کند.
- دستیار تولید محتوا: برای کانال تلگرام کپشن و متن تبلیغاتی بنویسد.
- پاسخگویی بر اساس اسناد: با تکنیک RAG، ربات فقط بر اساس قوانین و اطلاعات کسبوکار شما پاسخ دهد.
- ربات تصویری: با مدلهای بینایی، تصویر ارسالی کاربر را تحلیل کند.
سؤالات متداول دربارهٔ ربات تلگرام هوش مصنوعی
آیا برای ساخت ربات تلگرام هوش مصنوعی باید برنامهنویس حرفهای باشم؟
خیر. با آشنایی مقدماتی با پایتون و دنبال کردن همین آموزش میتوانید یک ربات کاربردی بسازید. برای امکانات پیشرفتهتر مثل اتصال به پایگاه داده، دانش بیشتری لازم است.
کدام API برای ربات تلگرام ارزانتر است؟
معمولاً مدلهای سبک و سریع مانند deepseek-flash یا سطوح کمهزینهٔ OpenAI برای رباتهای پرحجم بهصرفهترند. هزینهٔ نهایی به تعداد پیامها و طول تاریخچه بستگی دارد.
آیا ربات میتواند پیام صوتی را هم بفهمد؟
بله. میتوانید فایل صوتی را از تلگرام دانلود کنید، با یک مدل تبدیل گفتار به متن به نوشته تبدیل کنید و سپس به مدل زبانی بفرستید.
چرا ربات من پاسخ نمیدهد؟
توکن تلگرام، کلید API، آدرس پایه و نام مدل را بررسی کنید و لاگهای برنامه را ببینید. مطمئن شوید سرور به هر دو سرویس دسترسی دارد. خطای 401 یعنی کلید نادرست و 429 یعنی محدودیت نرخ یا اتمام اعتبار.
آیا میتوانم بعداً مدل ربات را عوض کنم؟
بله. چون در این آموزش از قالب سازگار با OpenAI استفاده کردیم، فقط با تغییر مقادیر فایل .env میتوانید مدل یا سرویس را عوض کنید.
ربات هوشمند خود را همین امروز بسازید. API Key مورد نیازتان را با پرداخت ریالی، تحویل فوری و پشتیبانی فارسی از فروشگاه الین لند تهیه کنید.