فصل ۸: کار با دکمهها و رابط کاربری در ربات تلگرام با پایتون

مقدمه
یکی از امکانات بسیار جالب رباتهای تلگرام، استفاده از دکمهها برای راحتتر و سریعتر کردن تعامل کاربر با ربات است. دکمهها نهتنها ظاهر ربات را حرفهایتر میکنند، بلکه تجربه کاربری را به شدت بهبود میبخشند.
در این فصل یاد میگیرید:
- چطور دکمههای ساده (Reply Keyboard)
- چطور دکمههای شیشهای (Inline Keyboard)
را به ربات خود اضافه کنید و از آنها استفاده کنید.
۱. دکمههای کیبورد پیشفرض (ReplyKeyboardMarkup)
این نوع دکمهها به صورت یک کیبورد جایگزین زیر کادر تایپ تلگرام نمایش داده میشوند.
نمونه ساده:
from telegram import ReplyKeyboardMarkup
def show_menu(update, context):
keyboard = [
['ارسال عکس 📷', 'دریافت راهنما ℹ️'],
['ارتباط با ما ☎️']
]
reply_markup = ReplyKeyboardMarkup(keyboard, resize_keyboard=True)
update.message.reply_text('یکی از گزینهها رو انتخاب کن:', reply_markup=reply_markup)
dp.add_handler(CommandHandler('menu', show_menu))
- با ارسال دستور
/menuاین منو ظاهر میشود. - کاربر با لمس هر دکمه، متن همان دکمه را به ربات ارسال میکند.
۲. دکمههای پیشرفتهتر: InlineKeyboardMarkup
این دکمهها مثل لینک در زیر یک پیام خاص ظاهر میشوند و میتوانند کارهای مختلفی انجام دهند (مثلاً باز کردن لینک، اجرای یک دستور خاص و …).
نمونه ساده:
from telegram import InlineKeyboardMarkup, InlineKeyboardButton
def show_inline_buttons(update, context):
keyboard = [
[InlineKeyboardButton("سایت ما 🌐", url='https://example.com')],
[InlineKeyboardButton("درباره ربات", callback_data='about')],
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('یک گزینه انتخاب کن:', reply_markup=reply_markup)
dp.add_handler(CommandHandler('inline', show_inline_buttons))
مدیریت کلیک روی دکمههای شیشهای (callback_data)
وقتی کاربر روی یک دکمه شیشهای کلیک میکند (یعنی دکمهای که با InlineKeyboard ساختهایم)، پیام خاصی به ربات شما ارسال میشود که باید آن را دریافت و پاسخ دهید.
برای این کار:
۱. یک تابع ویژه تعریف میکنیم تا کلیک روی دکمه را مدیریت کند:
def button_callback(update, context):
# اطلاعات مربوط به دکمه کلیکشده را میگیریم
query = update.callback_query
data = query.data # محتوایی که در callback_data قرار دادیم مثلاً 'about'
# مثلا اگر دکمه درباره ربات کلیک شد:
if data == 'about':
query.answer() # یک پاسخ کوتاه به تلگرام بفرست (اجباری است)
query.edit_message_text('این ربات آموزشی توسط تیم ما ساخته شده است.')
توضیح ساده:
- با
query.dataمیبینیم کدام دکمه کلیک شد. - اگر دادهاش ‘about’ بود، پیام مربوط به توضیحات ربات رو به کاربر میدهیم.
۲. این تابع را به ربات معرفی (ثبت) میکنیم:
from telegram.ext import CallbackQueryHandler
dp.add_handler(CallbackQueryHandler(button_callback))
مثال کامل ساده و خوانا:
فرض کنید یک دکمه شیشهای با callback_data=’about’ ساختیم:
from telegram import InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
def start(update, context):
keyboard = [
[InlineKeyboardButton("درباره ربات", callback_data='about')]
]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text('یک گزینه را انتخاب کن:', reply_markup=reply_markup)
def button_callback(update, context):
query = update.callback_query
if query.data == 'about':
query.answer()
query.edit_message_text('این ربات آموزشی توسط تیم ما ساخته شده است.')
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
dp.add_handler(CallbackQueryHandler(button_callback))
updater.start_polling()
updater.idle()
خلاصه خیلی ساده:
اگر کاربر روی هر دکمه شیشهای زد، این تابع اجرا میشود و بسته به اینکه نام دکمه (callback_data) چی بوده، پیام مناسب را نمایش میدهد.
۳. نکات حرفهای برای دکمهها
- با استفاده از دکمهها، میتوانید ربات خود را به صورت پرسش و پاسخ، منوهای چندلایه یا حتی نظرسنجی و بازی تبدیل کنید.
- ترکیب دکمه Reply و Inline امکان ساخت فرمها و تعامل پیچیده را برای ربات فراهم میکند.
- همیشه گزینه “بازگشت” یا Menu را برای راحتی مخاطب در نظر بگیرید.
نکته هوش مصنوعی (AI Tip)
اگر قصد ساخت منوهای چندسطحی، نظرسنجی یا حتی چتبات گفتگو محور با منوهای پویا دارید، از ابزارهایی مثل ChatGPT بخواهید طرح منو، ساختار کد، یا حتی پاسخهای خودکار را به شما پیشنهاد دهد.
همچنین میتوانید با AI پیامهای دریافتی را تحلیل و گزینههای متناسب با خواسته کاربر نمایش دهید.
جمعبندی
در این فصل با دو نوع اصلی دکمههای تعاملی در ربات تلگرام (کیبورد معمولی و شیشهای) آشنا شدید و یاد گرفتید چطور منو و دکمه به کد ربات خود اضافه کنید. این مهارت، ربات شما را حرفهایتر و کاربرپسندتر میکند.