
آموزش اتصال ربات تلگرام به ChatGPT
اگر میخواهید یک ربات تلگرام هوشمند بسازید که بتواند به پیامهای کاربران پاسخ دهد، به پرسشها جواب بدهد و مانند یک دستیار هوشمند با کاربران گفتگو کند، میتوانید ربات تلگرام خود را به ChatGPT متصل کنید.
در این آموزش، مراحل اتصال ربات تلگرام به ChatGPT را بررسی میکنیم و یک معماری ساده برای دریافت پیام از کاربر، ارسال آن به API و برگرداندن پاسخ به تلگرام میسازیم.
در این مقاله فرض میکنیم با مفاهیم اولیه برنامهنویسی و ساخت ربات تلگرام آشنا هستید.
اتصال ربات تلگرام به ChatGPT چگونه کار میکند؟
برای اتصال این دو سرویس، ربات شما بین تلگرام و API مدل هوش مصنوعی قرار میگیرد.
فرآیند کلی به این شکل است:
کاربر → ربات تلگرام → سرور شما → API هوش مصنوعی → سرور شما → ربات تلگرام → کاربر
برای مثال، کاربر در تلگرام مینویسد:
«برای سفر به تهران چه جاهایی را پیشنهاد میکنی؟»
ربات پیام را دریافت میکند، متن را برای API ارسال میکند، پاسخ تولیدشده را دریافت میکند و در نهایت پاسخ را در همان گفتگوی تلگرام برای کاربر ارسال میکند.
چه چیزهایی برای شروع نیاز داریم؟
برای ساخت این پروژه به چند مورد نیاز دارید:
- یک ربات تلگرام
- توکن ربات تلگرام
- یک حساب و کلید API برای سرویس هوش مصنوعی
- یک برنامه کوچک روی سرور
- یک زبان برنامهنویسی مانند Python یا Node.js
- در صورت استفاده از Webhook، یک آدرس HTTPS
اگر از پایتون استفاده کنید، پیادهسازی اولیه پروژه نسبتاً ساده است.
مرحله اول: ساخت ربات تلگرام
ابتدا باید یک ربات در تلگرام ایجاد کنید.
برای این کار در تلگرام وارد BotFather شوید و دستور /newbot را اجرا کنید.
BotFather از شما یک نام و سپس یک username برای ربات میخواهد. پس از ساخت ربات، یک Bot Token دریافت میکنید.
این توکن را مانند یک رمز عبور در نظر بگیرید و آن را در کد عمومی، GitHub یا اختیار دیگران قرار ندهید.
بهتر است توکن را بهصورت متغیر محیطی در سرور نگهداری کنید.
مثلاً:
TELEGRAM_BOT_TOKEN=توکن_ربات
AI_API_KEY=کلید_API
مرحله دوم: دریافت کلید API
برای ارسال پیام کاربران به مدل هوش مصنوعی، برنامه شما باید از API استفاده کند.
کلید API نیز باید مانند رمز عبور محافظت شود. بنابراین بهتر است آن را مستقیماً داخل سورسکد قرار ندهید.
به جای:
api_key = "YOUR_API_KEY"
از متغیر محیطی استفاده کنید:
import os
api_key = os.getenv("AI_API_KEY")
این روش مخصوصاً زمانی اهمیت دارد که پروژه را در Git یا یک مخزن عمومی قرار میدهید.
مرحله سوم: نصب کتابخانههای مورد نیاز
اگر Python را انتخاب کردهاید، میتوانید کتابخانههای مورد نیاز پروژه را نصب کنید.
برای مثال:
pip install python-telegram-bot openai
پس از نصب، میتوانیم یک برنامه ساده ایجاد کنیم که پیامهای دریافتی را پردازش کند.
مرحله چهارم: دریافت پیام از تلگرام
ربات باید بتواند پیامهای کاربران را دریافت کند.
ساختار ساده برنامه به این شکل است:
from telegram import Update
from telegram.ext import Application, MessageHandler, ContextTypes, filters
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
message = update.message
if not message or not message.text:
return
user_message = message.text
# ارسال پیام به سرویس هوش مصنوعی
# دریافت پاسخ
# ارسال پاسخ به کاربر
app = Application.builder().token("TELEGRAM_BOT_TOKEN").build()
app.add_handler(
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)
)
app.run_polling()
در این مرحله، ربات پیام کاربر را دریافت میکند، اما هنوز پاسخی از ChatGPT دریافت نمیکند.
مرحله پنجم: ارسال پیام به API
حالا باید متن دریافتشده از تلگرام را به API ارسال کنیم.
یک ساختار ساده میتواند شبیه این باشد:
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("AI_API_KEY")
)
response = client.responses.create(
model="MODEL_NAME",
input=user_message
)
answer = response.output_text
در اینجا user_message متن ارسالشده توسط کاربر است و answer پاسخ تولیدشده توسط مدل خواهد بود.
نام مدل را باید بر اساس مدل و API فعلی که در پروژه خود انتخاب کردهاید تنظیم کنید.
مرحله ششم: ارسال پاسخ به تلگرام
پس از دریافت پاسخ، کافی است آن را برای کاربر ارسال کنیم:
await update.message.reply_text(answer)
بنابراین جریان اصلی برنامه تقریباً به این شکل خواهد بود:
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_message = update.message.text
response = client.responses.create(
model="MODEL_NAME",
input=user_message
)
answer = response.output_text
await update.message.reply_text(answer)
اکنون ربات میتواند پیام کاربر را دریافت کند، آن را برای مدل ارسال کند و پاسخ را در تلگرام نمایش دهد.
آیا این همان ChatGPT است؟
از نظر تجربه کاربری، شما یک ربات تلگرام دارید که میتواند از مدلهای هوش مصنوعی برای تولید پاسخ استفاده کند.
اما از نظر فنی، ربات شما مستقیماً به وبسایت ChatGPT متصل نشده است. برنامه شما از API استفاده میکند.
این تفاوت مهم است.
در معماری درست، شما نباید تلاش کنید صفحه ChatGPT را با روشهایی مانند شبیهسازی مرورگر یا scraping کنترل کنید. برای یک محصول واقعی، استفاده از API روش مناسبتری است.
Polling یا Webhook؟
برای دریافت پیامهای تلگرام دو روش رایج وجود دارد:
Polling
در روش Polling، برنامه شما بهصورت مداوم از Telegram API میپرسد که آیا پیام جدیدی وجود دارد یا خیر.
این روش برای شروع و تست پروژه بسیار ساده است.
مزایا:
- راهاندازی ساده
- مناسب برای توسعه محلی
- نیاز نداشتن به تنظیم Webhook
- مناسب برای نمونه اولیه
معایب:
- برای سیستمهای بزرگ معمولاً انتخاب ایدهآل نیست
- مدیریت تعداد زیادی ربات میتواند پیچیدهتر شود
Webhook
در روش Webhook، تلگرام پیام جدید را به یک URL مشخص روی سرور شما ارسال میکند.
برای مثال:
https://example.com/telegram/webhook
در این حالت، بهجای اینکه برنامه دائماً پیام جدید را بررسی کند، تلگرام هنگام دریافت پیام، درخواست HTTP به سرور شما ارسال میکند.
برای یک پلتفرم حرفهای میزبانی ربات، Webhook میتواند معماری مناسبتری باشد.
معماری پیشنهادی برای یک پلتفرم میزبانی ربات
اگر قرار است فقط یک ربات شخصی بسازید، یک برنامه ساده Python کافی است.
اما اگر یک پلتفرم دارید که کاربران میتوانند رباتهای خود را روی آن میزبانی کنند، بهتر است معماری را از ابتدا کمی حرفهایتر طراحی کنید.
برای مثال:
Telegram
↓
Webhook
↓
Bot Server
↓
Message Queue
↓
AI Service
↓
Response
↓
Telegram
استفاده از صف پیام در پروژههای بزرگ مزایای مهمی دارد.
برای مثال، اگر تعداد زیادی کاربر همزمان پیام ارسال کنند، درخواستها میتوانند وارد صف شوند و Workerها آنها را پردازش کنند.
این معماری همچنین امکان مدیریت بهتر خطا، محدودیت نرخ درخواست و مقیاسپذیری را فراهم میکند.
مدیریت تاریخچه گفتگو
اگر میخواهید ربات فقط به پیام فعلی پاسخ ندهد و بتواند مفهوم گفتگو را حفظ کند، باید برای هر کاربر یا هر گفتگو، وضعیت مکالمه را مدیریت کنید.
مثلاً کاربر میگوید:
اسم من علی است.
و بعد میپرسد:
اسم من چیست؟
اگر هر پیام را کاملاً مستقل ارسال کنید، مدل لزوماً اطلاعات پیام قبلی را در اختیار ندارد.
بنابراین برنامه شما باید متناسب با معماری API انتخابشده، سابقه یا وضعیت مکالمه را مدیریت کند.
یک ساختار ساده میتواند به این صورت باشد:
user_id
↓
conversation
↓
message history
↓
AI API
↓
answer
در پروژه واقعی بهتر است تاریخچه گفتگو را در حافظه موقت برنامه نگه ندارید، زیرا با Restart شدن برنامه از بین میرود.
برای این کار میتوانید از یک پایگاه داده یا یک سیستم ذخیرهسازی مناسب استفاده کنید.
محدود کردن حجم تاریخچه
یکی از اشتباهات رایج این است که تمام پیامهای قبلی کاربر را در هر درخواست به مدل ارسال کنیم.
با طولانی شدن گفتگو، حجم ورودی افزایش پیدا میکند و هزینه و زمان پردازش نیز میتواند بیشتر شود.
راهکارهای متداول عبارتاند از:
- محدود کردن تعداد پیامهای قبلی
- خلاصهسازی مکالمات قدیمی
- ذخیره اطلاعات مهم بهصورت جداگانه
- استفاده از سیستم حافظه مناسب برای کاربرد مورد نظر
برای یک ربات عمومی، این بخش اهمیت زیادی دارد.
مدیریت خطا
در یک ربات واقعی نباید فرض کنید API همیشه موفق خواهد بود.
ممکن است:
- سرویس موقتاً در دسترس نباشد
- درخواست بیش از حد طول بکشد
- محدودیت نرخ درخواست فعال شود
- کلید API نامعتبر باشد
- موجودی یا اعتبار حساب کافی نباشد
- پیام کاربر بیش از محدودیت مجاز باشد
بنابراین بهتر است درخواست API را با مدیریت خطا اجرا کنید.
برای مثال:
try:
response = client.responses.create(
model="MODEL_NAME",
input=user_message
)
answer = response.output_text
except Exception:
answer = "متأسفانه در پردازش درخواست شما مشکلی ایجاد شد."
await update.message.reply_text(answer)
در محیط Production بهتر است خطاها را نیز بهصورت مناسب Log کنید و جزئیات حساس را برای کاربر نمایش ندهید.
کنترل هزینه API
اگر ربات شما عمومی باشد، هر کاربر میتواند برای شما هزینه ایجاد کند.
به همین دلیل باید از ابتدا برای مصرف API محدودیت تعریف کنید.
برای مثال:
- محدودیت تعداد درخواست در دقیقه
- محدودیت روزانه برای هر کاربر
- محدودیت طول پیام
- محدودیت تعداد کاربران
- محدودیت طول تاریخچه گفتگو
- ثبت میزان مصرف
- تعیین سقف هزینه
بهتر است هزینه API را بخشی از طراحی محصول بدانید، نه موضوعی که بعداً به آن فکر کنید.
امنیت ربات
توکن ربات تلگرام و کلید API را هرگز در کد عمومی قرار ندهید.
همچنین بهتر است:
- Secretها را در Environment Variables نگه دارید.
- دسترسی سرور را محدود کنید.
- لاگها را بررسی کنید.
- اطلاعات حساس کاربران را بیدلیل ذخیره نکنید.
- دسترسی API را فقط در بخش مورد نیاز برنامه قرار دهید.
- برای درخواستهای ورودی Rate Limit داشته باشید.
اگر پلتفرم شما امکان اجرای کد کاربران را نیز فراهم میکند، موضوع امنیت اهمیت بسیار بیشتری پیدا میکند و باید فرآیند اجرای کد کاربران را از سرویسهای اصلی پلتفرم جدا کنید.
ساخت ربات تلگرام هوشمند
با ترکیب Telegram Bot API و API مدل هوش مصنوعی میتوانید رباتهایی با کاربردهای مختلف بسازید، از جمله:
- ربات پشتیبانی مشتری
- ربات پاسخگوی خودکار
- ربات آموزشی
- ربات تولید محتوا
- ربات ترجمه
- ربات خلاصهسازی متن
- ربات دستیار شخصی
- ربات فروشگاهی
- ربات پاسخگویی به سوالات متداول
- ربات متصل به پایگاه داده
در واقع اتصال به ChatGPT تنها یکی از کاربردهای ممکن است. معماری مشابه را میتوان برای ساخت یک دستیار هوشمند اختصاصی نیز توسعه داد.
جمعبندی
برای اتصال ربات تلگرام به ChatGPT کافی نیست که فقط یک توکن تلگرام و یک API Key داشته باشید. یک پیادهسازی مناسب باید دریافت پیام، ارسال درخواست به API، مدیریت پاسخ، مدیریت خطا، امنیت، محدودیت مصرف و در پروژههای بزرگتر مدیریت همزمانی و مقیاسپذیری را نیز در نظر بگیرد.
سادهترین معماری برای شروع چنین است:
کاربر
↓
ربات تلگرام
↓
Python Bot
↓
AI API
↓
پاسخ
↓
ربات تلگرام
↓
کاربر
اگر پروژه شما قرار است تعداد زیادی کاربر داشته باشد، بهتر است از همان ابتدا معماری Webhook، صف پیام، ذخیرهسازی تاریخچه گفتگو، Rate Limiting و سیستم ثبت مصرف را در نظر بگیرید.
سوالات متداول
آیا برای اتصال ربات تلگرام به ChatGPT به برنامهنویسی نیاز داریم؟
برای یک پیادهسازی اختصاصی و قابل توسعه، بله، معمولاً به برنامهنویسی نیاز دارید. زبانهایی مانند Python و Node.js گزینههای مناسبی برای این کار هستند.
آیا میتوان ربات تلگرام را با Python به ChatGPT متصل کرد؟
بله. Python یکی از گزینههای مناسب برای ساخت چنین رباتهایی است و کتابخانههای مختلفی برای کار با Telegram Bot API و سرویسهای هوش مصنوعی وجود دارد.
آیا میتوان چند ربات تلگرام را به یک API متصل کرد؟
بله. یک سرویس مرکزی میتواند درخواستهای چندین ربات را پردازش کند. البته باید احراز هویت، محدودیت مصرف، مدیریت خطا و تفکیک اطلاعات هر ربات بهدرستی طراحی شود.
آیا میتوان این ربات را روی هاست اجرا کرد؟
بسته به نوع هاست و محدودیتهای آن، بله. برای رباتهای دائماً فعال، محیطی که امکان اجرای مداوم برنامه و دریافت درخواستهای Webhook را فراهم کند معمولاً گزینه مناسبتری است.
آیا میتوان ربات تلگرام را به یک مدل هوش مصنوعی بهجای ChatGPT متصل کرد؟
بله. معماری کلی مشابه است و میتوان لایه AI را با سرویس یا مدل دیگری جایگزین کرد. این موضوع به API و قابلیتهای سرویس مورد استفاده بستگی دارد.