Sıfırdan ilk mesaja: Telegram'da kendi botunuzu oluşturma
Telegram'da bir bot oluşturmak için, resmi bot @BotFather aracılığıyla kaydını yapmanız, benzersiz bir erişim token'ı almanız ve sunucu tarafını herhangi bir uygun programlama dilinde (Python, Node.js, Go vb.) yazmanız gerekir. Tüm kayıt süreci 2-3 dakika sürer ve ilk çalışan prototip 15 dakikada hayata geçirilebilir.
Aşağıda, token almaktan güvenli webhook kurulumuna ve etkileşimli butonlar eklemeye kadar tüm aşamaların detaylı incelemesi yer almaktadır.
BotFather'a Kayıt: Token Alma
Her şey "tüm botların babası" ile yapılan bir konuşmayla başlar. API ile çalışmak için gerekli belgeleri veren kişidir.
- Telegram arama kısmında @BotFather kullanıcısını bulun (mavi doğrulama tikine sahip olduğundan emin olun).
/newbotkomutunu gönderin.- Bir bot adı uydurun (kullanıcıların göreceği isim, örneğin:
Mağaza Botum). - Bir kullanıcı adı uydurun (benzersiz adres,
botile bitmelidir, örneğin:my_shop_support_bot). - İsim müsaitse, BotFather size API Token içeren bir mesaj gönderecektir.
Token, botunuzun şifresidir. Asla GitHub'daki kodlarda yayınlamayın, üçüncü şahıslara göndermeyin ve açık halde saklamayın. Ortam değişkenlerini kullanın.
Örnek token: 123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
Araç ve Mimari Seçimi
Bot mantığını yazmak için HTTP/HTTPS ile çalışmayı destekleyen herhangi bir dil uygundur. En popüler çözümler şunlardır:
- Python:
aiogram(asenkron, modern) veyapython-telegram-botkütüphaneleri. Hızlı başlangıç ve karmaşık mantık için idealdir. - Node.js:
Telegrafveyanode-telegram-bot-apiçerçeveleri. Web geliştiricileri ve mikroservisler için mükemmeldir. - Diğerleri: Go, Java, PHP, C# — hepsinin Bot API üzerinde resmi veya kaliteli üçüncü taraf sarmalayıcıları vardır.
Long Polling mi Webhook mu?
Telegram'dan güncellemeleri almanın iki yolu vardır:
| Yöntem | Nasıl Çalışır | Ne Zaman Kullanılır |
|---|---|---|
| Long Polling | Bot sürekli olarak Telegram sunucusunu sorgular: "Yeni mesaj var mı?". | Testler, yerel geliştirme veya ev bilgisayarındaki basit betikler için. |
| Webhook | Telegram, bir olay发生时 sunucunuza doğrudan mesaj gönderir. | Üretim ortamı, yüksek yükler ve sunucu kaynaklarından tasarruf etmek için. |
Gerçek bir proje için her zaman Webhook seçin. Bu, yanıt gecikmesini ve sunucunuz üzerindeki yükü azaltır, çünkü bağlantılar yalnızca yeni veri olduğunda kurulur.
Kod Yazma: Başlatma Örnekleri
/start komutuna yanıt veren ve mesaj metnini tekrarlayan minimal bir yankı botu örneğini ele alalım.
Python Seçeneği (aiogram 3.x kütüphanesi)
Bağımlılığı yükleyin: pip install aiogram
import asyncio
import os
from aiogram import Bot, Dispatcher, types
from aiogram.filters import CommandStart
# Token'ı ortam değişkeninde saklamak daha iyidir
TOKEN = os.getenv("BOT_TOKEN")
bot = Bot(token=TOKEN)
dp = Dispatcher()
@dp.message(CommandStart())
async def cmd_start(message: types.Message):
await message.answer("Merhaba! Ben bir botum. Bana bir şey yaz, tekrarlayayım.")
@dp.message()
async def echo_handler(message: types.Message):
# Basit yankı mantığı
await message.copy_to(chat_id=message.chat.id)
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Node.js Seçeneği (Telegraf kütüphanesi)
Bağımlılığı yükleyin: npm install telegraf
const { Telegraf } = require('telegraf');
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.start((ctx) => ctx.reply('Merhaba! Ben Node.js tabanlı bir botum. Komutlarını bekliyorum.'));
bot.on('text', (ctx) => ctx.reply(`Şunu yazdınız: ${ctx.message.text}`));
bot.launch();
// Düzgün kapatma için sinyal işleme
process.once('SIGINT', () => bot.stop('SIGINT'));
process.once('SIGTERM', () => bot.stop('SIGTERM'));
Webhook Kurulumu ve Dağıtım
Botu webhook'a geçirmek için beyaz IP'ye ve SSL sertifikasına (HTTPS) sahip bir sunucuya ihtiyacınız olacaktır. Telegram, normal HTTP üzerinden istekleri kabul etmez.
-
Sunucuyu hazırlayın: Kodu bir barındırma hizmetine yerleştirin (VPS, Heroku, Railway, AWS Lambda vb.). Domain'in geçerli bir sertifikaya sahip olduğundan emin olun (ücretsiz Let's Encrypt kullanılabilir).
-
URL'yi kaydedin:
setWebhookmetoduna bir istek gönderin.İstek formatı:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://alanadiniz.com/webhook -
Sunucudaki işleyici: Kodunuz, belirtilen yoldaki (
/webhook) POST isteklerini dinlemeli, Telegram'dan gelen JSON'u ayrıştırmalı ve bir yanıt oluşturmalıdır.
Bulut fonksiyonları (Serverless) kullanıyorsanız, Webhook tek mümkün çalışma seçeneğidir, çünkü orada sürekli bir polling işlemi çalıştırılamaz.
İşlevselliği Genişletme: Butonlar ve Menüler
Standart metin komutları mobil kullanıcılar için uygun değildir. Klavyeler kullanarak bir arayüz ekleyin.
- Reply Keyboard: Metin giriş satırının altındaki butonlar. Ana menü eylemleri için uygundur.
- Inline Keyboard: Doğrudan mesaja gömülü butonlar. Gezinti, yanıt seçeneklerini seçme veya sayfalama için idealdir.
Python'da Inline buton oluşturma örneği:
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[InlineKeyboardButton(text="🌐 Web Sitemiz", url="https://example.com")],
[InlineKeyboardButton(text="ℹ️ Hakkımızda", callback_data="about_us")]
])
await message.answer("Bir eylem seçin:", reply_markup=keyboard)
Böyle bir butona basılmasının işlenmesi geri çağrılar (callback_query) aracılığıyla gerçekleşir; bu, sohbeti yeni metinlerle doldurmadan mesaj içeriğini değiştirmeyi sağlar.
Yeni Başlayanların Sık Yaptığı Hatalar
Bot geliştirirken aşağıdaki sorunlarla sıkça karşılaşılır:
- 401 Yetkisiz Erişim Hatası: Geçersiz token. Fazladan boşluk kopyalayıp kopyalamadığınızı kontrol edin ve token'ın süresinin dolup dolmadığını kontrol edin (BotFather'da
/revokekomutuyla yeniden oluşturulabilir). - 409 Çakışma Hatası: Aynı anda birden fazla bot örneği çalıştırılıyor (örneğin, hem polling hem webhook veya iki polling işlemi). Yalnızca bir aktif güncelleme kaynağı bırakın.
- Limitlerin Göz Ardı Edilmesi: Telegram, mesaj sayısını sınırlar (bir bot için saniyede yaklaşık 30). Toplu gönderim yaparken mutlaka gecikmeler ekleyin.
- Hata İşlemenin Olmaması: Sunucunuz kullanıcıdan gelen tek bir hatalı istekte çökerse, bot yanıt vermeyi durdurur. Mantığı her zaman
try-catchbloklarına sarın.
SSS
Programlama olmadan bot oluşturulabilir mi? Evet, mantığı bloklardan oluşturmanıza olanak tanıyan bot oluşturucular (Manybot, PuzzleBot vb.) mevcuttur. Ancak bunların işlevsellik açısından sınırlamaları vardır ve genellikle aylık ödeme gerektirir. Kendi kodunuz tam özgürlük sağlar.
Bot tutmanın maliyeti nedir? Telegram hizmeti ücretsizdir. Yalnızca kodun çalıştığı barındırma hizmeti için ödeme yaparsınız. Başlangıç için ucuz bir VPS (ayda 3-5$) veya bulut platformlarının ücretsiz planları yeterlidir.
Bot gruba nasıl eklenir? Grup aramasında botu kullanıcı adına göre bulun ve üye olarak ekleyin. Botun sohbeti moderatör etmesi veya mesajları silmesi gerekiyorsa yönetici haklarını ayarlamayı unutmayın.
Yayınlamadan önce kod kontrol edilmeli mi? Kesinlikle. Botu kişisel sohbette ve test grubunda test edin. Standart olmayan girişlere, özel karakterlere ve uzun mesajlara tepkisini kontrol edin.