Python Aiogram ile Butonlu Telegram Botu Yapmak - 2: Inline Keyboard

03 Ağustos 2026 · 6 dk okuma

Önceki derste temel bir aiogram botu kurmuştuk. Şimdi bu botu, kullanıcının komut yazmak yerine butona tıklayarak işlem yapabildiği bir yapıya dönüştüreceğiz.

Inline Keyboard Oluşturmak

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

keyboard1 = InlineKeyboardMarkup()
keyboard1.add(InlineKeyboardButton("Excel Dersleri", url="https://kushaengineering.com/blog/kategori/excel/"))

InlineKeyboardButton'a url parametresi verirseniz, bu buton doğrudan bir web sayfası açan bir bağlantı butonu olur — herhangi bir kod çalıştırmaz, sadece linke yönlendirir.

Klavyeyi Bir Komuta Bağlamak

@dp.message_handler(commands=["start"])
async def start_command(message: types.Message):
    await message.reply("Ne öğrenmek istersiniz?", reply_markup=keyboard1)

reply_markup=keyboard1 parametresi, mesajın altına bu buton grubunu ekler.

Kod Çalıştıran Butonlar: callback_data

Bir butona tıklandığında bir link açmak yerine botun kendi kodunu tetiklemesini istiyorsanız, url yerine callback_data kullanırsınız:

keyboard2 = InlineKeyboardMarkup()
keyboard2.add(InlineKeyboardButton("Metin Var", callback_data="metin_var"))
keyboard2.add(InlineKeyboardButton("Sayı Var", callback_data="sayi_var"))

callback_data, o butona basıldığında botun arka planına gönderilen bir "etiket" gibi düşünülebilir — bot bu etikete bakarak hangi butona basıldığını anlar.

Callback'i Yakalamak

@dp.callback_query_handler(lambda c: c.data == "metin_var")
async def handle_metin(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, "Metin ile ilgili bir işlem yaptınız.")

@dp.callback_query_handler(lambda c: c.data == "sayi_var")
async def handle_sayi(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, "Sayı ile ilgili bir işlem yaptınız.")

@dp.callback_query_handler(lambda c: c.data == "..."), sadece belirtilen callback_data değeriyle eşleşen buton tıklamalarını yakalar. bot.answer_callback_query(...) çağrısı önemlidir — bu olmadan Telegram istemcisinde buton "yükleniyor" animasyonu takılı kalabilir.

Yaygın Bir Hata: Yanlış Kaynaktan callback_data Okuma

callback_query.data yerine yanlışlıkla farklı bir nesneden veri okumaya çalışmak, handler'ın hiç tetiklenmemesine yol açan sık yapılan bir hatadır — callback_data string'inin, butonu tanımlarken yazdığınız değerle birebir aynı olduğundan emin olun.

Sırada Ne Var?

Sırada, Telegram botlarından biraz uzaklaşıp MongoDB veritabanını Python ile kullanmaya başlayacağız.