Telegram botu yapmayı öğrenmek
Telegram botu, kendi sunucunuzda çalışan ve bir token ile api.telegram.org a istek gönderen bir programdır; Telegram sizin hiçbir kodunuzu çalıştırmaz. Botu BotFather ile oluşturmak birkaç dakika sürer; asıl iş, mesajları nasıl alacağınıza ve bir grupta neyi göreceğinize karar verdiğiniz yerde başlar.
- Ders 5 / 8
- Başlangıç
- Ücretsiz, kayıt yok
Sıfırdan yanıt veren bir bota
İlk dört adım dakikalar sürer. Projeyi tanımlayan beşincisidir.
-
1
BotFather
newbot komutu, bir görünen ad ve bot ile biten bir kullanıcı adı.
-
2
Token
Token, parolanın yanındaki bir anahtar değil botun kimliğidir. Yeri bir ortam değişkenidir.
-
3
getMe ile deneme
Herhangi bir kod yazmadan önce tek bir istek. Yanıt hata olduğunda bile hep JSON dur.
-
4
İlk komutlar
start ve bir iki komut daha, öneri listesinde çıksınlar diye BotFather da kayıtlı.
-
5
Barındırma ve ayakta kalma
Program yeniden başlatmadan sonra kendi kalkmalı. Güncellemeler bir günden uzun tutulmaz.
Bu adımların hiçbiri Telegram a kodunuzun nerede çalışacağını söylemez. Barındırma baştan sona sizindir.
Son kontrol: Bu dersteki bilgiler ve araç adları bu tarihte kaynaklarıyla yeniden doğrulanır.
Telegram botu tam olarak nedir ve nasıl çalışır?
Telegram botu, arkasında bir insan değil yalnızca sizin programınız olan özel bir hesaptır. O program onu nereye koyarsanız orada çalışır; bir sunucuda ya da kendi dizüstünüzde, ve Telegram ile bir web API üzerinden konuşur. Telegram kodunuzu barındırmaz ve çalıştırmaz; yalnızca mesajları size verir ve sizinkileri alır.
Konuşma biçimi basit bir kalıptır ve Bot API belgeleri bunu tam olarak şöyle yazar: bütün sorgular HTTPS üzerinden sunulmalı ve şu biçimde verilmelidir: https://api.telegram.org/bot<token>/METHOD_NAME. Her yöntem bir adrestir. Yanıt her zaman bir ok alanı taşıyan bir JSON nesnesidir.
Token ise belgelerin kimlik doğrulama tokenı dediği şeydir ve her botun oluşturulurken kendine özel bir tane aldığını söyler; biçimi 123456:ABC-DEF... gibi bir şeydir. Bu cümlenin iki anlamı var ve ikincisi daha önemli: token, yanında bir parola bulunan bir anahtar değildir; token kimliğin kendisidir. O dizgiyi elinde tutan herkes sizin botunuzdur.
Genel yapı şu: kullanıcı Telegram da bir şey yazar, Telegram bunu botunuzun güncellemeler kuyruğuna koyar, programınız alır, karar verir ve bir HTTPS isteğiyle yanıt gönderir. API nedir yazısını okuduysanız burada yöntem adları dışında yeni bir şey yok.

BotFather dan ilk mesaja, adım adım
Botu Telegram in kendisi oluşturmaz; @BotFather adlı bir bot oluşturur. Telegram da ona gidersiniz, /newbot gönderirsiniz, bir görünen ad ve bot ile biten bir kullanıcı adı verirsiniz, o da size tokenı verir. Komut listesini de orada kaydedebilirsiniz; çoğu öğretici bunu atlar ve kullanıcı bir eğik çizgi yazdığında öneri listesini açan şey tam olarak budur. Belgelere göre komutlar her zaman / işaretiyle başlar ve en fazla 32 karakterdir.
Herhangi bir kod yazmadan önce tokenı deneyin. Tek bir istek yeter:
curl -s "https://api.telegram.org/bot<token>/getMe"Token doğruysa bot bilgilerini JSON olarak alırsınız. Yanlışsa dönen şey bir HTTP hata sayfası değil, aynı JSON zarfıdır. Bugün kendi sunucumuzdan uydurma bir tokenla denedik ve yanıt tam olarak şuydu:
{"ok":false,"error_code":401,"description":"Unauthorized"}Bunu bilerek gösteriyoruz, çünkü işin bütün biçimi bu tek satırda: ok başarılı olup olmadığını, olmadıysa description nedenini söyler. Programınız her zaman önce ok a bakmalı, yalnızca HTTP durum koduna değil.
Bundan sonra botun bilmesi gereken ilk şey /start a nasıl yanıt vereceğidir, çünkü kullanıcının onu açtığı düğme odur. Botun ne yaptığını ve sonra neye basılacağını söyleyen tek bir cümle yazın. /start a bulanık yanıt veren bir bot orada kapatılır.
Mesajları getUpdates ile mi webhook ile mi almalıyım?
Belgeler açık: güncellemeleri almanın iki yolu vardır ve bunlar birbirini dışlar; bir yanda getUpdates yöntemi, öbür yanda webhook lar. Yani bir webhook ayarlıysa getUpdates hiç çalışmaz ve bu tek cümle ilk gece hatalarının çoğunu açıklar.
Birinci kipte programınız sürekli yeni bir şey olup olmadığını sorar. Basittir, genel bir adres istemez ve bir dizüstünde çalışır; bu yüzden öğrenmek ve ilk sürüm için doğru seçimdir. Belgelerin hatırlattığı bir nokta: her yanıttan sonra offset i yeniden hesaplayın, yoksa aynı mesajları tekrar alırsınız.
İkinci kipte bir adres verirsiniz ve Telegram bir şey oldukça o adrese HTTPS üzerinden bir POST isteği gönderir. Daha verimlidir ve yoğun bir bot için doğru yanıttır. Belgelerin kendisinden iki şeyi bilin: adresiniz 2XX dışında bir kodla yanıt verirse Telegram isteği yineler ve makul sayıda denemeden sonra vazgeçer. Daha da önemlisi, gelen güncellemeler bot alana kadar Telegram sunucusunda saklanır, ama 24 saatten uzun tutulmaz.
Bu son cümle bir ayrıntı değil, sizin için işletimsel bir karardır. Bot sunucusu tam bir gün kapalı kalırsa o günün mesajları gider ve geri getirmenin bir yolu yoktur. Hobi botu için önemli değildir; müşteri destek botu için önemlidir ve bir uyarı gerektirir.
Mesaj almanın iki yolu ve bunlar birleşmez
Botun genel bir HTTPS adresi var mı?
getUpdates
- Alan adı ve sertifika olmadan bir dizüstünde çalışır
- Her yanıttan sonra offset i yeniden hesaplamalısınız
- Öğrenmek ve ilk sürüm için yeterli
Webhook
- Telegram her güncelleme için bir HTTPS POST gönderir
- 2XX dışında bir yanıt Telegram a isteği yineletir
- Daha verimli ve her zaman erişilebilir bir sunucu ister
Belgeler ikisinin birbirini dışladığını söyler. Bir webhook ayarlıysa getUpdates hiç yanıt vermez.
Bir bot grupta neyi görür?
Bu bölüm hem gizlilik sorusu hem de botunuzun bir grupta "çalışmamasının" nedenidir. Telegram da Privacy Mode adlı bir kip var; bir gruba eklenen her bot için varsayılan olarak açıktır ve o kipte bot yalnızca şunları görür: kendisine açıkça yönelik komutlar, örneğin /command@this_bot; gruba mesaj gönderen son bot ise /start gibi genel komutlar; kendisi üzerinden gönderilen satır içi mesajlar; ve bu bota yönelik mesajlara verilen yanıtlar.
Buna karşılık, kipten bağımsız olarak her bot şunları alır: bütün hizmet mesajları, özel sohbetlerdeki bütün mesajlar ve üyesi olduğu kanallardaki bütün mesajlar. Pek çok kişiyi şaşırtan bir istisna var: bir gruba yönetici olarak eklenen botlar her zaman bütün mesajları alır.
Kip kapatılabilir ve o zaman bot sıradan bir kullanıcı gibi her mesajı görür, ama iki nokta: değişiklik bot gruba yeniden eklenene kadar etkili olmaz ve Telegram aynı sayfada bunu yalnızca botun çalışması için kesinlikle gerekli olduğu yerlerde önerdiğini, çoğu durumda force reply seçeneğinin fazlasıyla yeterli olduğunu yazar.
Bizim konumumuz da aynı: varsayılanı açık bırakın. Yalnızca bir grup üyesi bir botun bütün konuşmasını okumasını beklemediği için değil, botunuz da o mesajları istemediği için; onları işlememek hem daha ucuz hem daha güvenlidir. Gerçekten kapatmak zorunda kalırsanız botun neyi okuduğunu /start mesajının içinde söyleyin. Grup üyeleri herhangi bir botun güncel gizlilik ayarını üye listesinde görebilir, yani gizlemek zaten seçenek değil.
Varsayılan kip açıkken bir bot grupta neyi görür
-
Açıkça kendisine yönelik bir komut
command@this_bot biçimi, yani kullanıcı hangi botla konuştuğunu belirtmiş.
-
Tek koşulla genel bir komut
start gibi, ama yalnızca bu bot gruba mesaj gönderen son botsa.
-
Kendisi üzerinden gönderilen satır içi mesaj
Kullanıcının o sohbette bot adını yazarak ürettiği bir şey.
-
Kendisine yönelik mesajlara yanıtlar
Telegram ın gizlilik kipini kapatmak yerine force reply önermesinin nedeni budur.
-
Grubun geri kalan konuşması, hayır
Ve grup üyeleri herhangi bir botun gizlilik ayarını üye listesinde görebilir.
Bir istisna: yönetici olarak eklenen botlar her zaman bütün mesajları alır.
Sınırlar ve herkesin ilk seferinde yaptığı hatalar
Üç sınır ailesi var ve üçü de resmî SSS te yazılı. Birincisi mesaj hızı: tek bir sohbette saniyede birden fazla mesaj göndermekten kaçının; Telegram bunun üstünde kısa patlamalara izin verebileceğini ama sonunda 429 hataları almaya başlayacağınızı söyler. Bir grupta bir bot dakikada 20 mesajdan fazlasını gönderemez. Toplu bildirimlerde ise bir bot saniyede yaklaşık 30 mesajdan fazlasını yayınlayamaz.
İkincisi ücretli yayın. O tavan azsa Telegram bunu saniyede 1000 mesaja çıkaran bir özelliğe sahip; saniyedeki ücretsiz 30 un üstündeki her mesaj 0.1 Yıldız tutuyor. Koşulunu da yazıyor ve küçük bir koşul değil: botun bakiyesinde en az 100.000 Yıldız ve en az 100.000 aylık etkin kullanıcı bulunmalı. Yani bu yol yeni botunuz için değil ve hız satın almayı değil bir kuyruk ile bir zamanlamayı planlamanız daha iyi olur.
Üçüncüsü dosyalar. Bir bot 50 MB a kadar dosya gönderebilir ve getFile yöntemi yalnızca 20 MB a kadar dosyalarla çalışır. Bu iki sayı aynı değil ve video kabul eden bir botun testte çalışıp gerçek bir kullanıcının elinde bozulduğu yer tam da burası.
Ve tekrarlanan üç hata. Birincisi, tokenı GitHub da yayımlanan bir kodun içine koymak; token botun kimliğinin kendisi olduğu için onu gören herkes sizin adınıza mesaj gönderebilir. Tokenın yeri bir kaynak dosyası değil, bir ortam değişkenidir. İkincisi, mesajları aralık bırakmadan bir döngüde göndermek ki bu doğrudan o 429 a yürür. Üçüncüsü, botun her zaman ayakta olduğunu varsaymak: programınız bir gün düşecek ve 24 saatten uzun kapalı kalırsa o aralığın mesajları geri gelmez.
Botu bir kullanıcının eline vermeden önce
Bunları kontrol edin
- Token bir ortam değişkeninde ve yayımlanan hiçbir dosyada değil
- Kod her şeyden önce yanıtın ok alanını okuyor
- Toplu gönderim aralıklı ve 429 hatasını ele alıyor
- start mesajı botun ne yaptığını ve neyi okuduğunu söylüyor
- Program sunucu yeniden başladıktan sonra kendi kalkıyor
Bunları yapmayın
- Daha kolay diye gizlilik kipini kapatmak
- Yeni bir bot için ücretli yayına bel bağlamak
- getFile in büyük dosyayla da çalıştığını varsaymak
- Webhook ayarlayıp sonra getUpdates neden yanıt vermiyor diye şaşmak
Bu sayfa botu kusursuz yapmaz. Geri almanın önlemekten pahalıya patladığı üç hatayı durdurur.
Yapay zekayla hızlı yol
İşin gerçekten hızlandığı yer burası. İlk botunuzu ne yapması gerektiğinin sade bir anlatımından yazmak, modellerin bugün iyi yaptığı bir şey; çünkü Telegram arayüzü küçük ve bolca belgelenmiş. Ama çıktıyı çalıştırmadan önce gözden geçirmeniz gerekir ve gözden geçirmenin üç maddesi var, üçü de bu derste geçiyor. Üretim için en ucuz modeli değil güçlü bir model koyun; güncel tercihimiz bu sitenin yapay zeka bölümünde.
- Botun ne yapması gerektiğini, bir stajyere anlatır gibi sade bir dille yazın. Hangi komutlar, hangi yanıtlar, neyi nerede sakladığı.
- Aşağıdaki tarifi çalıştırın. Gerçek tokenı isteme koymayın; tarif modelden tokenı bir ortam değişkeninden okumasını açıkça istiyor.
- Kodu çalıştırmadan önce okuyun ve yukarıdaki gözden geçirme sayfasının aynı üç maddesini üzerinden geçirin: token nerede, 429 hatası nasıl ele alınmış ve grupta ne okunuyor.
- İlk çalıştırmayı gerçek botla değil ikinci bir botla yapın. Belgeler tam da bunu öneriyor: yeni bir bot oluşturun, tokenını test kopyasında kullanın ve gerçek botu ellemeyin.
Kopyalamaya hazır şablon
Şunu yapan bir Telegram botu yaz:
{botun ne yapması gerektiğinin sade anlatımı}
Katı kurallar:
1) Tokenı bir ortam değişkeninden oku ve kodda hiçbir token yazma, örnek olarak bile.
2) Her istekten sonra önce yanıtın ok alanını denetle ve false ise description değerini logla. Yalnızca HTTP durum koduna güvenme.
3) Birden çok kişiye gönderim için mesajlar arasına bir gecikme koy ve 429 hatasını ele al; tek bir sohbette saniyede birden fazla mesaj gönderme.
4) Webhook değil getUpdates kullan ve her yanıttan sonra offset i yeniden hesapla.
5) Gruplarda gizlilik kipinin açık olduğunu varsay, bu yüzden yalnızca açıkça bu bota yönelik komutları işle.
6) Arayüzde bir yöntemin bulunduğundan emin olmadığın her yerde tahmin etmek yerine "belgelerde denetlenmeli" yazan bir yorum bırak ve devam et.
Çıktı: yalnızca kod ve sonunda kullandığın her Bot API yönteminin kısa bir listesi. Hiçbir token, hiçbir gerçek adres ve hiçbir sürüm numarası yazma.
Çıktıya güvenmeden önce: Dönen kodu üç şeyi görmeden çalıştırmayın. Bir, metnin hiçbir yerinde token olmaması. İki, yanıtın sonundaki yöntem listesini Bot API belgeleriyle karşılaştırmış olmanız; bir yöntem belgelerde yoksa modeli uydurmuştur ve o kod parçası çalışmaz. Üç, bot bir gruba girecekse yalnızca yukarıdaki gizlilik bölümünde anlatılanı okuması. Ve ilk çalıştırmayı gerçek kullanıcısı olan bir botla değil, bir test botuyla yapın.
Bu işte yapay zeka
Telegram botu, bir modelle kod üretmenin önce öğrenmeye gerçekten üstün geldiği az sayıdaki yerden biri; çünkü arayüz küçük ve resmî belgeleri örnek dolu. Ama bu küçüklük kendi riskini taşıyor: model, var olmayan bir yöntemi kolayca uyduruyor ve kod ilk bakışta sağlıklı görünüyor. Bu yüzden modeli yazmaya, yöntem doğrulamasını belgelere koyun.
Gerçekten işe yarayan araçlar
- Claude Botun ilk sürümünü yazmakta ve yazdığı kodu yeniden okumakta iyi. İran, Anthropic'in desteklenen ülkeler listelerinin hiçbirinde yok; bunu Anthropic'in kendi sayfasında okuduk.
- Claude Code Bot tek dosyayı aştığında bir komut satırı aracı projenin kendisi üzerinde çalışır ve logları da okur. Claude Code aynı Anthropic hesabı üzerinde çalışıyor ve İran desteklenen ülkeler listesinde değil.
- Gemini Bir belge sayfasını özetlemek ve kod üzerinde daha basit geçişler için uygun maliyetli. Google'ın kendi sayfası Gemini web uygulamasının 230'dan fazla ülke ve bölgede çalıştığını söylüyor ve İran o listede yok.
Nerede geri teper
Buradaki ilk risk bu izlekteki her dersten daha somut ve adı token. Bot tokenını bir isteme yapıştırırsanız onu harici bir hizmete göndermiş olursunuz ve token, parolanın yanındaki bir anahtar değil botun kimliği olduğundan, açığa çıkması birinin sizin adınıza bütün kullanıcılarınıza mesaj atabilmesi demektir. Bir hizmetin verinizi eğitim için saklayıp saklamadığı o hizmetin planına ve ayarlarına bağlıdır ve kendi veri kullanımı sayfasında yazılıdır; ama yanıt ne olursa olsun tokenı göndermek gereksizdir. Yukarıdaki tarif modelden tokenı bir ortam değişkeninden okumasını bilerek istiyor.
İkinci risk uydurulmuş yöntemler. Telegram arayüzünün iyi kurulmuş adları var ve model bunlara benzeyen, var olmayan bir ad kolayca üretiyor. Belirtisi geç ortaya çıkar, çünkü kod derlenir ve "bilinmeyen yöntem" hatasını yalnızca çalışma zamanında alırsınız. Tarifin sonda kullanılan yöntemlerin listesini istemesinin nedeni budur: dosyanın tamamını değil o listeyi belgelerle karşılaştırın.
Ve kod olmayan ama bu derse ait bir nokta: botunuz kullanıcı mesajlarını bir yerde saklıyorsa bunu start mesajında söyleyin. Siber güvenlik bu kadar basit cümlelerle başlar. Her aracın İran'dan nasıl ödenebileceği için satın alma rehberine bakın.
Kaynaklar: Telegram Bot API: authorizing your bot and making requests Telegram: bot features, privacy mode and testing your bot Telegram bots FAQ: broadcasting limits and file sizes Anthropic: supported countries Google: where Gemini Apps are available
Bu tavsiyenin sınırı
Bu ders basit bir botu ilk çalıştırmasına götürür ve ötesine değil. Ciddi bir botun ihtiyaç duyduğu, bilerek dışarıda bırakılan üç şey: çok adımlı olduğunda konuşma durumunu saklamak, bot içinde ödeme ve birkaç bin kullanıcı aynı anda mesaj attığında ölçeklenmek. Üçü de Telegram arayüzünün değil arka ucun meselesidir. İkincisi, burada aktarılan sayılar bugün resmî SSS ten okundu ve Telegram bunları değiştiriyor; herhangi bir rakama yaslanmadan önce o sayfaya yeniden bakın. Üçüncüsü, Telegram a İran içinden erişim hakkında bir şey söylemedik, çünkü buna dair atıf yapılabilir bir iddiamız yok; ölçtüğümüz tek şey kendi sunucumuzun api.telegram.org a ulaştığı.
Kendi işimizden
İkinci bölümde gösterilen yanıtı bugün kendi sunucumuzdan aldık, bir yerden aktarmadık. https://api.telegram.org/bot123456:FAKE/getMe adresine tek bir istek gönderdik ve dönen şey şuydu: {"ok":false,"error_code":401,"description":"Unauthorized"}. Bu tek satırdan üç şey çıkıyor ve üçünü de siz yineleyebilirsiniz. Birincisi, arayüz yanlış bir token için bile bir hata sayfası değil bir JSON zarfı döndürüyor; yani kodunuzun ok u okuması gerekiyor. İkincisi, o yanıtı görmek için hiç bot gerekmiyor; yani bağlantıyı bir bot oluşturmadan önce sınayabilirsiniz. Üçüncüsü ve daha rahatsız edici olanı: rastgele bir dizgi bu yanıtı alıyorsa doğru dizgi başka bir yanıt alır ve bu dersin tokenın yeri konusunda ısrar etmesinin nedeni tam da budur.
Kendi tarafımızdan küçük bir not: bu sitede inc/helpers.php dosyasındaki Telegram iletişim düğmesi bir t.me bağlantısıdır; yani bot belgelerinin anlattığı derin bağlantı mekanizmasının aynısı. Her botun da https://t.me/<bot_username> biçiminde bir bağlantısı vardır ve ona parametre eklenebilir. Bu, bir kullanıcıyı bir web sayfasından doğrudan bot konuşmasına götürmenin en basit yoludur ve yeni projelerin çoğu bunu atlar.
Gerçek devam soruları
Telegram botu yapmanın bir maliyeti var mı?
Botu oluşturmak ve token almak ücretsizdir ve resmî SSS botların kullanıcılarına varsayılan olarak ücretsiz mesaj attığını söyler. Para tutan şey başka yerde: programınızın ayakta kaldığı sunucu. Birkaç yüz kullanıcılı bir bot için küçük bir sunucu yeter.
Bir bot yapmak için programlama bilmem şart mı?
Resmî SSS, Telegram botu oluşturmanın çok kolay olduğunu ama en azından bir miktar programlama becerisine ihtiyacınız olacağını söyler. Yapay zeka yardımıyla ilk sürümü ustalık olmadan yazabilirsiniz, ama kodu okumak ve bir hatayı anlamak yine sizin işinizdir; o olmadan bot bir şey ilk bozulduğunda durur.
Bir bot gruptaki mesajları okuyabilir mi?
Varsayılan ayarla hayır; yalnızca kendisine yönelik komutları, mesajlarına verilen yanıtları ve kendisi üzerinden gönderilen satır içi mesajları görür. Kip kapatılabilir ama Telegram yalnızca gerekliyse diyor ve grup üyeleri durumunu üye listesinde görebiliyor. Grup yöneticisi olan botlar istisnadır ve bütün mesajları alır.