Telegram botuna komut ekleme özelliği nasıl kullanılır?
Telegram botuna komut ekleme özelliği nasıl kullanılır? BotFather ile komut kaydı, kodda işleme ve izin yönetimi adımlarını ayrıntılı bir şekilde keşfedin.

Telegram Botuna Komut Ekleme Özelliğine Giriş
Telegram botları, kullanıcılarla etkileşim kurmanın en etkili yollarından biri olan komut ekleme mekanizmasını sunar. Bu özellik sayesinde bot geliştiricileri, /start veya /help gibi standart komutların yanı sıra tamamen projeye özgü, özel komutlar tanımlayarak belirli işlevleri tetikleyebilir. Bu makale, ekip yöneticileri ve geliştiriciler için Telegram botuna komut ekleme sürecini uçtan uca ele alıyor: BotFather aracılığıyla kayıttan kod içi işlemeye, izin yönetiminden yaygın sorun gidermeye kadar kapsamlı bir rehber sunuyor.
BotFather ile Komut Kaydı
Komut ekleme sürecinin ilk adımı, botunuzun sahibi olan BotFather (@BotFather) üzerinden komut listesini tanımlamaktır. Bu kayıt, kullanıcıların sohbet kutusuna / yazdığında görecekleri otomatik tamamlama menüsünü oluşturur. İşlem adımları şunlardır:
- BotFather sohbetini açın ve
/mybotskomutunu göndererek botunuzu seçin. - “Edit Bot” → “Edit Commands” yolunu izleyin.
- Komutlarınızı
komut - Açıklamaformatında, her satıra bir komut olacak şekilde girin. Örneğin:start - Botu başlatırhelp - Yardım menüsünü gösterir - Kaydettikten sonra değişikliklerin etkinleşmesi birkaç dakika sürebilir. BotFather, başarılı kaydı onaylayan bir mesaj gönderir.
Neden Önemli: BotFather’da komut kaydı, kullanıcı deneyimini iyileştirir ve botunuzun Telegram arayüzünde keşfedilmesini kolaylaştırır. Komutların açıklamalarla birlikte görünmesi, kullanıcıların ne yapacaklarını hemen anlamalarına yardımcı olur.
Ne Zaman Kullanılmamalı: Botunuz çok sayıda komut içeriyorsa (Telegram’ın sınırı 100 komuttur), tüm komutları listelemek menüyü karmaşık hale getirebilir. Bu durumda komutları kategorilere ayırmak veya yalnızca en sık kullanılanları kaydetmek daha iyi bir yaklaşımdır.
Kod İçinde Komut İşleme
BotFather’a kaydettiğiniz komutların çalışması için bot kodunuzda ilgili handler (işleyici) fonksiyonlarını tanımlamanız gerekir. Örnek olarak Python’daki python-telegram-bot kütüphanesini ele alalım:
from telegram.ext import Application, CommandHandler
async def start(update, context):
await update.message.reply_text("Merhaba! Ben bir botum.")
async def help(update, context):
await update.message.reply_text("Yardım için /start komutunu kullanın.")
def main():
app = Application.builder().token("BOT_TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("help", help))
app.run_polling()
if __name__ == "__main__":
main()
Neden Önemli: Bu yapı, komutları ayrı ayrı işleyerek kodun modüler kalmasını ve bakımını kolaylaştırır. Her komut kendi handler’ında tanımlanır; böylece hata ayıklama ve yeni özellik ekleme daha basit hale gelir.
Ne Zaman Kullanılmamalı: Botunuz yalnızca birkaç komut içeriyorsa, tüm komutları tek bir handler’da toplamak da mümkündür. Ancak bu, kod tekrarına ve karmaşıklığa yol açabilir. Genel kural olarak, her komut için ayrı handler oluşturmak en iyi uygulamadır.
Webhook ve Polling Arasındaki Fark
Komutların alınması için iki ana yöntem vardır: Polling (botun sürekli sunucuya sorgu göndermesi) ve Webhook (Telegram’ın botunuzun sunucusuna istek göndermesi). Polling, küçük botlar ve test aşamasında daha pratiktir. Webhook ise üretim ortamları için önerilir çünkü daha düşük gecikme ve kaynak kullanımı sağlar.
Webhook kurulumu için bot kodunuza bir web sunucusu entegre etmeniz gerekir. Örneğin, Flask ile şu şekilde yapılabilir:
from flask import Flask, request
from telegram import Update
from telegram.ext import Application
app = Flask(__name__)
application = Application.builder().token("BOT_TOKEN").build()
@app.route("/webhook", methods=["POST"])
def webhook():
update = Update.de_json(request.get_json(), application.bot)
application.process_update(update)
return "OK"
if __name__ == "__main__":
app.run(port=8443)
Ne Zaman Kullanılmamalı: Webhook kullanmak, botunuzun herkese açık bir HTTPS URL’sine ihtiyaç duyar. Geliştirme aşamasında bu mümkün değilse, ngrok gibi araçlarla geçici bir URL oluşturabilirsiniz. Ancak üretimde webhook daha güvenilirdir.
İzin Yönetimi: Komutları Kısıtlama
Bazı komutlar yalnızca belirli kullanıcılar veya gruplar için tasarlanmış olabilir. Örneğin, bir yönetici botunda /sil komutu yalnızca yöneticilere açık olmalıdır. Bu durumda handler içinde kullanıcı yetkisini kontrol edebilirsiniz.
async def delete_message(update, context):
user_id = update.effective_user.id
if user_id not in ADMIN_IDS:
await update.message.reply_text("Bu komutu kullanma yetkiniz yok.")
return
# silme işlemi
Neden Önemli: İzin kontrolü, botun güvenliğini ve işlevselliğini korur. Özellikle hassas işlemler (veri silme, ayar değiştirme) için mutlaka yetkilendirme yapılmalıdır.
Ne Zaman Kullanılmamalı: Her komut için izin kontrolü eklemek, kod tekrarına yol açar. Bunun yerine, bir dekoratör veya middleware kullanarak yetkilendirme mantığını merkezileştirebilirsiniz.
Parametreli Komutlar (Argümanlar)
Telegram komutları, kullanıcının ek argümanlar göndermesine olanak tanır. Örneğin, /weather Istanbul şeklinde bir komut, şehir adını argüman olarak alabilir. Komut metnini ayrıştırarak argümanları almak mümkündür:
async def weather(update, context):
if not context.args:
await update.message.reply_text("Lütfen bir şehir adı girin. Örn: /weather İstanbul")
return
city = " ".join(context.args)
# hava durumu API’sini çağır ve yanıt ver
Neden Önemli: Parametreli komutlar, botun işlevselliğini genişletir ve kullanıcıya daha esnek bir deneyim sunar. Kullanıcı, komutla birlikte ihtiyaç duyduğu bilgiyi doğrudan gönderebilir.
Ne Zaman Kullanılmamalı: Argüman sayısı çok fazlaysa veya argüman yapısı karmaşıksa, kullanıcı hata yapabilir. Bu durumda, komutları ayrı ayrı tanımlamak veya inline sorgular kullanmak daha iyi olabilir.
Komutları Gruplama ve Önceliklendirme
Birden çok komut benzer işlevi paylaşıyorsa (örneğin, /ayarlar, /profil, /hesap), bunları tek bir handler içinde toplamak ve komut adına göre yönlendirme yapmak kod düzenini iyileştirir. Ayrıca, aynı komut farklı önceliklerde işlenebilir.
Ne Zaman Kullanılmamalı: Çok fazla komutu tek bir handler’da toplamak, kodun okunabilirliğini azaltabilir. Öncelik belirleme ihtiyacı genellikle büyük botlarda ortaya çıkar; küçük botlar için basit yapı yeterlidir.
Hata Ayıklama ve Sorun Giderme
Komut ekleme sürecinde karşılaşılan en yaygın sorunlar ve çözümleri aşağıdaki tabloda özetlenmiştir:
| Belirti | Olası Neden | Çözüm |
|---|---|---|
| Komut otomatik tamamlama menüsünde görünmüyor | BotFather’a kaydedilmemiş veya kayıt henüz etkinleşmemiş | BotFather’da /mybots ile komutları kontrol edin; birkaç dakika bekleyin |
| Kullanıcı komut gönderdiğinde bot yanıt vermiyor | Handler tanımlanmamış veya yanlış komut adı kullanılmış | Kodda CommandHandler adını doğrulayın; botFather’daki isimle birebir aynı olmalı |
| Komut çalışıyor ancak yanlış sonuç dönüyor | Argüman ayrıştırma hatası veya API anahtarı sorunu | context.args değerini loglayın; API çağrılarını test edin |
Loglama, hata ayıklamanın en güçlü aracıdır. Bot kodunuza logging modülü ekleyerek her komutun ne zaman ve kim tarafından kullanıldığını izleyebilir, olası hataları yakalayabilirsiniz.
En İyi Uygulamalar Kontrol Listesi
- Komut adlarını kısa, anlaşılır ve küçük harflerle belirleyin. Tire veya alt çizgi kullanmaktan kaçının.
- Her komut için BotFather’da anlamlı bir açıklama ekleyin. Bu, kullanıcıların komutu doğru kullanmasına yardımcı olur.
- Her komut handler’ını ayrı bir dosyada veya sınıfta tanımlayarak kod modülerliğini koruyun.
- Hassas komutlar için yetkilendirme mekanizması ekleyin. Kullanıcı kimliğini, grup yöneticisi durumunu kontrol edin.
- Rate limiting (hız sınırlaması) uygulayarak botunuzun spam’e karşı korunmasını sağlayın. Örneğin, her kullanıcı için saniyede en fazla 3 komut.
- Komutları düzenli olarak gözden geçirin; kullanılmayan komutları kaldırın veya birleştirin.
- Webhook kullanıyorsanız, SSL sertifikasının geçerli olduğundan ve webhook URL’sinin değişmediğinden emin olun.
Sıkça Sorulan Sorular
Botuma komut ekledikten sonra neden özel komut menüsü görünmüyor?
BotFather’a komutları kaydettikten sonra değişikliklerin Telegram tarafından alınması birkaç dakika sürebilir. Ayrıca, kullanıcının botla yeni bir sohbet başlatması gerekebilir. Eğer hala görünmüyorsa, komut listesini BotFather üzerinden kontrol edin ve doğru formatta (komut - açıklama) yazıldığından emin olun.
Aynı komutu hem bireysel sohbetlerde hem de gruplarda kullanabilir miyim?
Evet, varsayılan olarak tüm komutlar hem özel sohbetlerde hem de gruplarda çalışır. Ancak bir komutun yalnızca belirli bir sohbet türünde çalışmasını istiyorsanız, handler içinde update.effective_chat.type kontrolü yapabilirsiniz. Örneğin, /grupkomutu yalnızca ChatType.GROUP veya SUPERGROUP olduğunda işlenebilir.
Komutlara parametre eklemek zorunlu mu?
Hayır, parametreler tamamen isteğe bağlıdır. Komutunuzun işlevine bağlı olarak parametre alabilir veya almayabilir. Örneğin, /start genellikle parametresiz çalışır. Parametre eklemek, komutun esnekliğini artırır ancak kullanıcıdan doğru formatta girdi beklemek zorunda olduğunuzu unutmayın.
Komut listesini güncelledikten sonra botumu yeniden başlatmam gerekir mi?
Hayır, BotFather üzerinden komut listesini güncellemek botun çalışmasını etkilemez. Değişiklikler Telegram sunucuları tarafından otomatik olarak alınır. Ancak, kod içinde yeni bir komut handler’ı eklediyseniz, botunuzu yeniden başlatmanız gerekir (polling yapıyorsanız) veya webhook sunucusunu yeniden yükleyin.
Sonuç ve Sonraki Adımlar
Telegram botuna komut ekleme özelliği, botunuzu kullanıcılar için daha erişilebilir ve işlevsel hale getirir. Bu makalede, BotFather ile komut kaydından kod içi işlemeye, izin yönetiminden hata ayıklamaya kadar temel adımları ele aldık. Artık kendi botunuz için komutlar tanımlayabilir, parametreli komutlar ekleyebilir ve botunuzu üretime hazırlayabilirsiniz.
Sonraki adım olarak, botunuzu gerçek kullanıcılarla test etmek, kullanıcı geri bildirimlerine göre komutları iyileştirmek ve potansiyel olarak inline sorgular veya callback düğmeleri gibi daha gelişmiş özellikleri entegre etmek iyi bir fikir olacaktır.