İlk Telegram Botunuz: Fikirden Çalışan Koda
Telegram için basit bir bot yazmak için derinlemesine programlama bilgisine ihtiyacınız yok. Python'u yüklemeniz, resmi @BotFather botundan bir token almanız ve 10-15 satırlık bir kod betiğini çalıştırmanız yeterli. Kayıt işlemi ve temel bir "yankı botu" oluşturma sürecinin tamamı 15 dakikadan fazla sürmez. Aşağıda, erişim anahtarlarını almaktan bilgisayarınızda programı çalıştırmaya kadar tüm aşamaları size rehberlik edecek detaylı bir talimat bulunmaktadır.
Araçların Hazırlanması ve Kayıt
İlk adım, kodunuzun mesajlaşma uygulamasının sunucularıyla etkileşime girmesini sağlayacak benzersiz bir tanımlayıcı (token) elde etmektir. Bu işlem doğrudan Telegram içinde yapılır.
- Mesajlaşma uygulamasının arama kısmında @BotFather kullanıcısını bulun (mavi onay işareti vardır).
- Başlat düğmesine basın (veya
/startkomutunu gönderin). /newbotkomutunu gönderin.- BotFather sizden bir bot adı bulmanızı isteyecektir (bu, kullanıcıların sohbet listesinde göreceği isimdir, örneğin:
Benim Test Botum). - Ardından bir kullanıcı adı (bot bağlantısı) bulmanız gerekir. Latince karakterlerden oluşmalı ve mutlaka
botkelimesiyle bitmelidir (örneğin:my_super_test_bot). - Ad müsaitse, tebrik mesajı ve uzun bir karakter dizisi içeren bir mesaj alırsınız — bu sizin API Token'ınızdır. Şuna benzer görünür:
123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ.
Bu token'ı asla başkalarıyla paylaşmayın ve herkese açık alanlarda (örneğin GitHub'da) yayınlamayın. Token sahibinin bot üzerinde tam kontrolü vardır.
Ortam Kurulumu ve Kütüphanelerin Yüklenmesi
Python dilinde bot yazmak için fiili standart aiogram kütüphanesidir. Asenkron, hızlıdır ve tüm modern Telegram API özelliklerini destekler.
Python sürümünüzün 3.8 veya üzeri olduğundan emin olun. Terminali (komut istemini) açın ve aşağıdaki adımları uygulayın:
- Proje için bir klasör oluşturun ve içine girin.
- Sanal bir ortam oluşturun (bağımlılıkları izole etmek için önerilir):
python -m venv venv
```
3. Ortamı etkinleştirin:
* Windows: `venv\Scripts\activate`
* macOS/Linux: `source venv/bin/activate`
4. aiogram kütüphanesini yükleyin:
```bash
pip install aiogram
```
## Kod Yazımı: Basit Bir Yankı Botunun Yapısı
Proje klasöründe `main.py` adında bir dosya oluşturun. Kullanıcıyı `/start` komutuyla karşılayan ve diğer tüm mesajları tekrarlayan (yankı modu) bir betik yazacağız.
Aşağıdaki kodu yapıştırın ve `'VAŞ_BOTFATHER_TOKENINIZ'` kısmını daha önce aldığınız token ile değiştirin:
```python
import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
# BotFather'dan aldığınız token'ı buraya yapıştırın
API_TOKEN = 'VAŞ_BOTFATHER_TOKENINIZ'
# Konsolda işlemleri görmek için günlük kaydı tutmayı etkinleştirin
logging.basicConfig(level=logging.INFO)
# Bot ve dağıtıcıyı başlatma
bot = Bot(token=API_TOKEN)
dp = Dispatcher()
# /start komutu işleyicisi
@dp.message(CommandStart())
async def cmd_start(message: types.Message):
await message.answer("Merhaba! Ben basit bir botum. Bana herhangi bir mesaj yaz, ben de onu tekrarlayayım.")
# Diğer tüm metin mesajları için işleyici (Yankı)
@dp.message()
async def echo_handler(message: types.Message):
if message.text:
await message.answer(f"Şunu yazdınız: {message.text}")
elif message.sticker:
await message.answer_sticker(sticker=message.sticker.file_id)
# Ana başlatma fonksiyonu
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
try:
asyncio.run(main())
except KeyboardInterrupt:
print("Bot durduruldu")
Nasıl Çalışır:
- Dispatcher: Güncelleme akışını yönetir ve bunları ilgili fonksiyonlara dağıtır.
- @dp.message(CommandStart()): Bu dekoratör, bota yalnızca kullanıcı
/starttuşuna bastığında tepki vermesini söyler. - @dp.message(): Diğer tüm mesajları (metin, çıkartmalar vb.) yakalar.
- await message.answer(): Kullanıcıya yanıt gönderme yöntemidir.
Botun çalıştığını test etmek için sunucuya dağıtım yapılmasını beklemenize gerek yok. Bilgisayarınızda python main.py komutuyla dosyayı çalıştırmanız yeterlidir. Betik terminalde çalıştığı sürece bot çevrimiçi olur ve mesajlaşma uygulamasında yanıt verir.
İşlevselliği Genişletme: Düğmeler ve Menüler
Statik metin sıkıcıdır. Klavye kullanarak etkileşim katelim. Telegram'da iki tür düğme vardır: normal (mesaj olarak metin gönderir) ve satır içi düğmeler (mesajın altında bulunur ve sohbete metin göndermeden çalışır).
/start komutuna yanıt olarak basit bir satır içi düğme ekleyelim:
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
# Klavye düzenini oluşturuyoruz
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="Bana Tıkla", callback_data="btn_pressed")]
])
@dp.message(CommandStart())
async def cmd_start(message: types.Message):
await message.answer(
"Merhaba! Aşağıdaki düğmeye tıklamayı dene:",
reply_markup=keyboard
)
# Düğmeye tıklama işleyicisi
@dp.callback_query(lambda c: c.data == "btn_pressed")
async def process_callback(callback: types.CallbackQuery):
await callback.answer("Düğmeye tıklandı!", show_alert=True)
await callback.message.edit_text("Düğmeye başarıyla tıkladınız!")
Burada callback_data, düğmeye basıldığında botun aldığı gizli bir tanımlayıcıdır. show_alert=True yöntemi, telefon ekranının üst kısmında açılır bir bildirim gösterir.
Yeni Başlayanların Sık Karşılaştığı Hatalar
İlk botları geliştirirken tipik sorunlar sıkça ortaya çıkar. İşte bunların çözümleri:
| Hata | Neden | Çözüm |
|---|---|---|
| Bot was blocked by the user | Kullanıcı botu engelledi veya hiç "Başlat"a basmadı | Bot ilk mesajı atamaz. Kullanıcıdan bir eylem gelmesini beklemek gerekir. |
| Unauthorized | Yanlış token veya token sıfırlandı | Koddaki token'ı kontrol edin. BotFather'da ayarları değiştirdiyseniz, betikteki token'ı güncelleyin. |
| Mesajlara yanıt yok | Betik çalışıyor ancak olayları yakalamıyor | main() fonksiyonunun asyncio.run() üzerinden başlatıldığından ve içe aktarma hataları olmadığından emin olun. |
| Yanıt tekrarı | Aynı anda birden fazla betik kopyası çalışıyor | Fazla terminalleri kapatın. Bir token = bir aktif polling işlemi. |
SSS
Programlama olmadan bot oluşturulabilir mi? Evet, mantığın bloklar halinde kurulduğu bot oluşturucular mevcuttur (birçoğu ücretlidir veya sınırlı işlevselliğe sahiptir). Ancak esnek ayarlar ve ücretsiz kullanım için kendi kodunuzu yazmak daha iyidir.
Botun 7/24 çalışması için nereye yerleştirilmeli?
Yerel bilgisayar sadece testler için uygundur. Sürekli çalışma için kod bulut sunucusuna (VPS) yüklenir veya serverless platformlar (örneğin Google Cloud Run, AWS Lambda, Render) kullanılır. Üretim ortamında polling yerine genellikle webhook yapılandırılır.
Basit bir bot için sunucu gerekli mi?
Başlangıç için hayır. aiogram kütüphanesi, botun betik açıkken doğrudan PC'nizden çalışmasına olanak tanıyan getUpdates (long polling) yöntemini kullanır.
Bot oluşturmanın maliyeti nedir? Oluşturma, kayıt ve temel Telegram API kullanımı tamamen ücretsizdir. Only hosting (sunucu), botu internete yayınlamaya karar verirseniz ve webhook'lar için gerekirse alan adı ücreti ödemek gerekir.