Telegram botu, bir sohbet uygulamasının içinde otomatik olarak mesajlara yanıt veren, komut çalıştıran ve size iş akışları kuran küçük bir programdır. Hava durumu bildiren bir asistandan, sunucunuzun düştüğünde sizi uyaran bir alarm botuna kadar her şey olabilir. En güzel yanı ise başlamanın çok kolay olmasıdır: birkaç satır Python ve ücretsiz bir token yeterlidir.
Bu rehber Telegram botunun ne olduğunu, BotFather'dan token'ı nasıl aldığınızı, python-telegram-bot kütüphanesiyle ilk çalışan botu somut kod örnekleriyle nasıl yazdığınızı ve en kritik adımı, yani botu bilgisayarınız kapalıyken bile 7/24 nasıl ayakta tuttuğunuzu anlatır.
Kısa cevap: Telegram botu yapmak için önce BotFather'dan ücretsiz bir token alırsınız, sonra Python'da python-telegram-bot kütüphanesiyle birkaç satır kod yazarsınız. Botun 7/24 çalışması için sürekli açık bir sunucu gerekir; kodu git push ile yönetilen bir platforma gönderir, token'ı ortam değişkeni olarak verir ve botu kesintisiz çalıştırırsınız.
Telegram Botu Nedir?
Telegram botu, Telegram'ın resmi Bot API'si üzerinden çalışan bir hesap türüdür. Normal bir kullanıcı hesabından farkı, arkasında bir insan değil sizin yazdığınız kodun olmasıdır. Kullanıcı bota bir mesaj veya komut gönderir, Telegram bu mesajı sizin programınıza iletir, program da bir yanıt üretip geri gönderir.
Bu iletişim iki yönle çalışabilir. Polling yönteminde botunuz Telegram sunucularına düzenli olarak "yeni mesaj var mı?" diye sorar; kurulumu en basit yoldur ve hiçbir genel erişimli adrese ihtiyaç duymaz. Webhook yönteminde ise Telegram, yeni mesaj geldiğinde doğrudan sizin sunucunuzdaki bir HTTPS adresine istek yollar; daha verimlidir ama internete açık bir alan adı gerektirir. Yeni başlayanlar için polling neredeyse her zaman doğru başlangıçtır.
Botlar bir uygulama sunucusu gibi süreklilik ister. Kodunuz çalışmadığı sürece bot da yanıt vermez; yani gerçek bir botun her zaman açık kalan bir yerde koşması gerekir. Bu rehberin ikinci yarısı tam olarak bu sorunu çözer.
Tipik kullanım senaryoları arasında şunlar vardır:
- Bir web formundan gelen kaydı anında Telegram grubunuza bildirmek
- Sunucu veya uygulama alarmlarını (down, hata, yüksek CPU) kişisel sohbete düşürmek
- Kullanıcıların komutla veri sorguladığı bir self-servis asistan kurmak
- Yapay zeka modellerini API üzerinden çağırıp yanıtları sohbette sunmak
- Zamanlanmış görevlerle her sabah özet veya rapor göndermek
1. BotFather'dan Token Alma
Her Telegram botunun kimliği bir token'dır. Bu token, Telegram'ın botunuzu tanıması için gereken gizli anahtardır ve onu almanın tek resmi yolu BotFather adlı özel bottur. Aşağıdaki adımlar Telegram'ın resmi bot dokümanına dayanır.
- Telegram'da arama kutusuna
@BotFatheryazın ve mavi doğrulama rozetli hesabı açın. /newbotkomutunu gönderin.- Botunuza görünür bir ad verin (örneğin "Benim İlk Botum").
- Sonra bir kullanıcı adı belirleyin. Bu ad benzersiz olmalı ve
botile bitmelidir (örneğinbenim_ilk_botum). - BotFather size şuna benzer bir token verir:
123456789:AAFakeExampleTokenStringHere_xyz.
Bu token'ı bir parola gibi düşünün. Onu ele geçiren herkes botunuzun tam kontrolünü alır: mesaj gönderebilir, mesajları okuyabilir. Bu yüzden token'ı asla kaynak kodunun içine yazıp herkese açık bir depoya göndermeyin. Birazdan token'ı güvenli biçimde ortam değişkeninde tutmayı göstereceğiz. Token'ınızı yanlışlıkla sızdırdıysanız BotFather üzerinden /revoke komutuyla eski token'ı iptal edip yenisini alabilirsiniz.
2. Python ile İlk Botu Yazma
Python tarafında en yaygın ve olgun kütüphane python-telegram-bot'tur. Sürüm 20 ile birlikte kütüphane tamamen asenkron (async/await) bir yapıya geçti; aşağıdaki örnekler bu güncel yapıyı kullanır.
Önce projeniz için bir klasör açın ve kütüphaneyi kuran bir requirements.txt dosyası oluşturun:
python-telegram-bot==21.6Yerel makinenizde denemek için kütüphaneyi kurun:
pip install -r requirements.txtŞimdi botun kalbini yazalım. Aşağıdaki bot.py, /start komutuna karşılık verir ve kendisine yazılan her metni geri yankılar. Dikkat edin: token doğrudan koda gömülü değil, TELEGRAM_BOT_TOKEN adlı bir ortam değişkeninden okunuyor.
import os
from telegram import Update
from telegram.ext import (
Application,
CommandHandler,
MessageHandler,
filters,
ContextTypes,
)
# Token asla kodun içine yazılmaz, ortam değişkeninden okunur
TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
await update.message.reply_text(
"Merhaba! Ben senin ilk Telegram botunum. Bana bir şeyler yaz."
)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
# Gelen metni olduğu gibi geri gönder
await update.message.reply_text(update.message.text)
def main() -> None:
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
# Polling ile Telegram'dan yeni mesajları sürekli dinle
app.run_polling()
if __name__ == "__main__":
main()Bu botu yerelde çalıştırmak için token'ı bir kez ortam değişkeni olarak verin ve dosyayı başlatın:
export TELEGRAM_BOT_TOKEN="123456789:AAFakeExampleTokenStringHere_xyz"
python bot.pyŞimdi Telegram'da botunuzu açıp /start yazın. Botunuz yanıt verdiyse tebrikler, çalışan bir Telegram botunuz var. Kendisine gönderdiğiniz her mesajı da geri yankılayacaktır.
Ancak burada gizli bir sınır var: bot yalnızca python bot.py komutu çalıştığı sürece yanıt verir. Terminali kapattığınız ya da bilgisayarınızı uyku moduna aldığınız an botunuz susar. Gerçek bir bot için bu kabul edilemez ve sıradaki adım tam olarak bunu çözer.
3. Botu 7/24 Çalıştırma
Bir botun sürekli yanıt vermesi için kodunun kesintisiz çalışacağı, hiç kapanmayan bir yere ihtiyacı vardır. Kendi bilgisayarınız bu iş için uygun değildir: kapandığında, uyuduğunda veya internet bağlantısı düştüğünde bot da durur. Bu yüzden botunuzu her zaman açık bir sunucuda çalıştırmanız gerekir.
Bunu yapmanın birkaç yolu vardır. Aşağıdaki tablo başlıca seçenekleri karşılaştırır.
| Yöntem | Kurulum | Bakım sizde mi | 7/24 kalır mı | En uygun durum |
|---|---|---|---|---|
| Kendi bilgisayarı | Yok | Evet | Hayır (kapanınca durur) | Sadece hızlı deneme |
| VPS (kendin yönet) | Orta | Evet (OS, güncelleme, servis) | Evet | Her katmanı elinde tutmak isteyen |
| Yönetilen PaaS | Düşük | Kısmen (kod sizde, altyapı platformda) | Evet | Hızlı yayın + az bakım isteyen |
Bir VPS kiralar ve botu orada çalıştırırsanız, systemd gibi bir servis yöneticisiyle kodun her yeniden başlatmada tekrar ayağa kalkmasını sağlamanız gerekir. Bu tam kontrol sunar ama işletim sistemi güncellemeleri, güvenlik yamaları ve süreç yönetimi sizin sorumluluğunuza kalır. Sunucu türlerini ve kiralama sürecini ayrıntılı görmek isterseniz sunucu kiralama rehberimize göz atabilirsiniz.
İkinci yol ise sunucuyu hiç yönetmeden botu bir platforma dağıtmaktır. Aşağıda bunu Out Plane üzerinde git push ile nasıl yaptığınızı göstereceğiz.
Git push ile dağıtım
Yönetilen bir platformda mantık basittir: kodunuzu bir depoya gönderirsiniz, platform onu alıp çalıştırır ve ayakta tutar. Out Plane, projenizde bir Dockerfile yoksa dili otomatik algılar (Buildpacks); yani düz bir Python projesini ek yapılandırma olmadan derleyip başlatabilir. Node, Python, Go, Java, Ruby, PHP, .NET ve Rust bu şekilde desteklenir.
Botunuz polling kullandığı için internete açık bir port dinlemesine gerek yoktur; arka planda çalışan bir süreç olarak yaşar. Başlangıç komutunu belirtmek için projeye küçük bir Procfile ekleyin:
worker: python bot.pyDepoyu platforma bağlayıp kodu gönderdiğinizde derleme ve başlatma otomatik olur:
git add .
git commit -m "İlk Telegram botu"
git pushPlatform kodu derler, container'ı başlatır ve botunuz çalışmaya başlar. Kod her git push yaptığınızda yeniden dağıtılır ve süreç düştüğünde otomatik olarak yeniden başlatılır. Bilgisayarınız kapalı olsa bile botunuz ayakta kalır.
Dağıtım sonrası botun gerçekten çalıştığını doğrulamak için canlı log'ları izleyebilirsiniz. Bir şey ters giderse (örneğin token yanlış girildiyse veya bir kütüphane eksikse) hata mesajları burada görünür. Container'a bir terminal açıp içeride komut çalıştırabilir, ortam değişkenlerinin doğru geçtiğini kontrol edebilirsiniz. Bu görünürlük, botu kendi sunucunuzda çalıştırırken journalctl gibi araçlarla tek tek uğraşmaya kıyasla hata ayıklamayı belirgin biçimde hızlandırır.
Token'ı ortam değişkeni olarak verme
Kodun içine token yazmadığınız için token'ı platforma ayrı olarak vermeniz gerekir. Out Plane konsolunda uygulamanızın Environment bölümünden bir değişken ekleyin:
- Anahtar:
TELEGRAM_BOT_TOKEN - Değer: BotFather'dan aldığınız token
Kodunuz bu değeri os.environ["TELEGRAM_BOT_TOKEN"] ile okur, dolayısıyla token depoya hiç girmez. Token'ı değiştirmeniz gerektiğinde yalnızca ortam değişkenini güncellersiniz, koda dokunmazsınız. Bu, botun güvenliğinin temelidir.
Webhook yöntemini tercih ederseniz durum biraz değişir: bu durumda uygulamanız gelen istekleri karşılamak için 0.0.0.0 üzerinde platformun verdiği PORT değerini dinlemeli ve botunuza bir alan adı ve HTTPS bağlamalısınız. Polling ile başlamak yeni projeler için hem daha basit hem de yeterlidir.
Botunuzu Büyütmek
İlk yankı botunuz çalıştıktan sonra onu gerçek bir araca dönüştürebilirsiniz. Yeni komutlar için ek CommandHandler tanımları ekler, gelen mesaj türüne göre farklı filters kullanır ve dış API'lerden veri çekersiniz. Botunuz kullanıcı verisi, oturum durumu veya kayıt tutması gerektiğinde bir veritabanına ihtiyaç duyar; Out Plane'in yönetilen PostgreSQL'i (otomatik yedek, PITR, read replica ve bağlantı havuzu ile) bu iş için doğrudan bağlanır ve sizi ayrı bir veritabanı sunucusu kurmaktan kurtarır. Redis gibi başka bir motora ihtiyacınız olursa, onu kalıcı bir volume bağlı bir container'da normal bir uygulama olarak kendiniz çalıştırırsınız.
Botunuz büyüdükçe trafiği de artabilir. Polling ile çalışan bir bot tek bir instance olarak kalmalıdır, çünkü Telegram bir token için yalnızca tek bir getUpdates dinleyicisine izin verir. Bu yüzden yatay ölçekleme yerine bu tek instance'ın kaynaklarını (CPU ve RAM) ihtiyaç arttıkça kendiniz büyütürsünüz. Örneğin bir duyuru anında botunuza binlerce kullanıcı aynı anda yazarsa, instance boyutunu elle yükselterek yükü karşılarsınız.
Botunuzun dosya saklaması gerekiyorsa (kullanıcıların gönderdiği görseller, üretilen raporlar gibi) kalıcı bir volume bağlayabilirsiniz; container yeniden başlasa bile bu veriler kaybolmaz. Bota özel bir alan adı ve HTTPS de birkaç tıklamayla eklenir, bu özellikle webhook moduna geçmek istediğinizde işinize yarar. Kod ile otomasyonu birleştirmek isterseniz, görsel iş akışlarını Telegram'a bağlamak için n8n kurulumu rehberimizdeki yöntemleri botunuzla birlikte kullanabilirsiniz.
Maliyet: Ücretsiz Başlama
Bir botu 7/24 çalıştırmak geleneksel olarak bir sunucunun sürekli açık kalmasını, dolayısıyla sabit bir aylık ödemeyi gerektirir. Out Plane'in maliyet modeli farklıdır. Kalıcı ücretsiz bir Hobby katmanı vardır ve tek bir uygulama çalıştırabilirsiniz; küçük bir bot için bu çoğu zaman yeterlidir. Yeni hesaplar ayrıca 20 dolar kredi alır ve başlamak için kart bilgisi gerekmez.
Daha fazlasına ihtiyaç duyduğunuzda ücretli Pro katmanı kullandıkça öde mantığıyla faturalandırır; güncel oranları fiyatlandırma sayfasında görebilirsiniz. Cold start olmadığı için botunuz ilk mesaja gecikmeden yanıt verir ve boşta bekleyen kapasite için değil yalnızca gerçekten kullandığınız kaynak için ödersiniz. Verilerin nerede tutulacağı önemliyse, uygulamanızı bir AB bölgesinde (Nuremberg veya Helsinki) çalıştırıp AB veri yerleşimini seçebilirsiniz.
Sonuç
Bir Telegram botu yapmak üç net adımdan oluşur: BotFather'dan token alın, python-telegram-bot ile birkaç satır kod yazın ve kodu her zaman açık bir yerde çalıştırın. İlk iki adım dakikalar sürer; asıl fark üçüncü adımda ortaya çıkar. Botunuz ancak kesintisiz çalıştığında gerçek bir araç olur.
Kendi sunucunuzu baştan sona yönetmek istiyorsanız bir VPS ve systemd doğru yoldur; karşılığında güncelleme, güvenlik ve süreç yönetimi sizin sorumluluğunuzda olur. Amacınız botu hızla yayına almak ve sunucu yönetmekle uğraşmamaksa, git push ile dağıttığınız yönetilen bir platform kodu sizin yerinize çalıştırır ve botunuzu 7/24 ayakta tutar.
Başlamaya hazır mısınız? Out Plane'de botunuzu yayına alın, 20 dolar ücretsiz krediyle ve kart bilgisi olmadan.
Sıkça Sorulan Sorular
Telegram botu yapmak ücretsiz mi?
Evet, botun kendisini oluşturmak tamamen ücretsizdir. BotFather'dan token almak ve python-telegram-bot gibi açık kaynak kütüphaneleri kullanmak hiçbir ücret gerektirmez. Tek olası maliyet, botu 7/24 çalıştıracağınız sunucudur. Out Plane gibi platformların kalıcı ücretsiz Hobby katmanıyla küçük botları ödeme yapmadan yayında tutabilirsiniz.
BotFather token'ımı kaybedersem ne olur?
Token'ınızı unuttuysanız BotFather'a /mybots yazıp botunuzu seçerek "API Token" bölümünden yeniden görüntüleyebilirsiniz. Token'ınız sızdıysa /revoke komutuyla eskisini iptal edip yeni bir token alın; bu durumda kodunuzda veya ortam değişkeninizde token'ı güncellemeniz gerekir. Eski token iptal edildiği an artık çalışmaz, bu da botunuzu ele geçiren kişinin erişimini keser.
Python telegram bot için hangi kütüphaneyi kullanmalıyım?
En yaygın ve olgun seçenek python-telegram-bot'tur; geniş bir topluluğa, kapsamlı dokümana ve güncel Bot API desteğine sahiptir. Sürüm 20 ve sonrası tamamen asenkron yapı kullanır, bu yüzden async/await sözdizimine alışmanız gerekir. aiogram ve pyTelegramBotAPI gibi alternatifler de vardır, ancak yeni başlayanlar için python-telegram-bot en güvenli tercihtir.
Telegram botunu bilgisayarımı kapatınca çalışır mı?
Hayır, botunuz yalnızca kodu çalışan bir makinede yanıt verir. python bot.py komutunu kendi bilgisayarınızda çalıştırırsanız, makineyi kapattığınız ya da uyuttuğunuz an bot durur ve mesajlara cevap veremez. Botu 7/24 ayakta tutmak için her zaman açık kalan bir sunucuya veya yönetilen bir platforma dağıtmanız gerekir.
Polling mi webhook mu kullanmalıyım?
Yeni başlıyorsanız polling kullanın. Polling, kodunuzun Telegram'a düzenli olarak yeni mesaj sorması esasına dayanır ve internete açık bir adres gerektirmediği için kurulumu çok basittir. Webhook ise Telegram'ın mesajları doğrudan sizin HTTPS adresinize göndermesidir; daha verimlidir ama bir alan adı, sertifika ve 0.0.0.0 üzerinde bir port dinleyen uygulama gerektirir. Trafiğiniz büyüdüğünde webhook'a geçebilirsiniz.
Botuma token'ı kodun içine yazmak güvenli mi?
Hayır, token'ı asla doğrudan koda gömmeyin. Token botunuzun tam kontrolünü veren bir paroladır; kaynak koduna yazarsanız ve kodu bir depoya gönderirseniz token açığa çıkar. Doğru yöntem token'ı bir ortam değişkeninde (TELEGRAM_BOT_TOKEN gibi) tutmak ve kodda os.environ ile okumaktır. Yönetilen platformlarda bu değişkeni konsoldan güvenli biçimde tanımlarsınız, böylece token depoya hiç girmez.
Telegram botu için sunucuya ne kadar RAM gerekir?
Basit bir Python botu genellikle çok az kaynak kullanır; küçük bir yankı veya bildirim botu için birkaç yüz MB RAM çoğu zaman yeterlidir. Botunuz yoğun veri işliyor, çok sayıda eşzamanlı kullanıcıya hizmet veriyor ya da yapay zeka çağrıları yapıyorsa daha fazla belleğe ihtiyaç duyar. Yönetilen bir platformda instance kaynaklarını ihtiyaç arttıkça büyütür, sabit bir donanım tavanına takılmazsınız.
Botumu Python dışında başka bir dille yazabilir miyim?
Evet, Telegram Bot API dilden bağımsızdır; botunuzu Node.js, Go, Java, Ruby, PHP, .NET veya Rust gibi dillerin herhangi biriyle yazabilirsiniz. Her dil için resmi ya da topluluk destekli kütüphaneler mevcuttur. Out Plane bu dillerin tümünü Buildpacks ile otomatik derler, dolayısıyla dağıtım mantığı hangi dili seçerseniz seçin aynı kalır: kodu git push ile gönderir ve token'ı ortam değişkeninde tutarsınız.