
Node.js ile Telegram Bot Nasıl Yapılır
Herkese merhaba,
Temel bir node.js bilgisi olan ve öğrenmeye hevesli olan bireyler için sıfırdan Telegram botu yapmayı anlatacağım. Çoğu yerlerde bot yapımı altında githubdan example'ları copy paste yaptıklarına şahit oldum. Bu yüzden çoğu konularda hep botun mesaj atmasından sonra konu bitiyordu.
Peki o komutlar ne demekti? Ne yani biz Telegram botundan sadece mesaj mı atabiliyorduk? İşte bu soruların akkıllardan gitmesi ve bir nebze de olsa tr kaynak olması için bu konuyu yazmaya başladım. Takıldığım yerlerde, dilim sürçülisan ettiyse şimdiden affola. Eğer eklemek istediğiniz bir konu varsa mesajlarda belirtebilirsiniz.
1) Bir Telegrm aracılığı ile bot oluşturulam:
- Telegramdan bot oluşturabilmek içinöncelikle Telegram uygulamasından BotFather'a gidiyoruz.
- Başlat butonuna basarak botu başlatıyoruz.
- '/newbot' yazısına tıklayıp yeni bir bot oluşturmak istediğimizi belirtiyoruz
- Bize ilk başta botun isminin ne olacağını soruyor. Ben "Darga Altay" yazdım. Siz kendi bot isminizi belirtebilirsiniz.
- İkinci olarak botun kullanıcı adının ne olacağını soruyor. Ben "darga_bot" kullanıcı adını veriyorum.
- Önemli: kullanıcı adı belirtirken sonun "bot" kelimesi ile bitmesi gerekiyor.
- Bu adımları yaptıktan sonra size en son botun oluştuğu hakkında bilgilendirme mesajı atacak. bu mesajdaki HTTP API kodunu saklayın. Bu bizim bot yaparken iletişim kurmamızı sağlayacak.
2) Telegram bot için Node.js Kütüphanesi Kuralım
- Öncelikle bilgisayarınızda Node.js kurulu olması gerekiyor.
- Kuracağımız kütüphane "node-telegram-bot-api"
- Öncelikle "telegramBot" şeklinde bir klasör oluşturalım masa üstümüze.(İsmi kendiniz belirleyebilirsiniz)
- Klasörün içine girdikten sonra adres çubuğuna "cmd" yazıp komut satırını açın veya cmdyi başlat menüsünden açıp oluşturduğunuz klasörün içine girin.
- Komut satırına "npm i node-telegram-bot-api" kodu yazıp enter tuşuna basın. Bu sayede gerekli kütüphane klasörümüze eklenmiş olacak.
- Klasöre yeni bir metin belgesi ekleyip ismini "bot" uzantısını ".js" yapıyoruz.
3) İşlemimizin %50 bitti. Şimdi geriye kaldı %50'si. Artık kod varkti.
4) Oluşturmuş olduğumuz "bot.js" dosyasını açıyoruz.
- Bizim bot ile haberleşiğ mesaj göndermemiz için 4 satırlık bir kod yeterli ilk başta.(boşlukları ve yorum satırlarını görmezden gelirsek)

- İlk 3 satırı açıkladım, şimdi 4. satırı açıklayayım.
- bot.on diyerek botumuzu başlatıyoruz. Bu fonksiyona iki parametre verdik:
1) Bizimle hangi aşamada irtibat kuracağı: "message" diyerek herhangi bir mesaj yazdığımız zaman bize cevap ver demiş oluyoruz
2) callback fonksiyon: Bota yazılan mesajlar ve yazan kişi hakkındaki bilgileri msg değişkenine depoluyoruz.
- bu fonksiyonun içine "bot.sendMessage" diyerek botun bir mesaj göndereceğini belirtiyoruz. Bu fonksiyona ise iki parametre verdik:
1) callback fonksiyonun döndürdüğü değerden botla irtibata geçen kişinin chat idsi
2) Hangi mesajı göndereceğimiz. Ben burada selam mesajını göndertiyorum.
bot.on("message", msg => { bot.sendMessage(msg.chat.id, "selam"); });Kod
Yığını:
- Botun çalışması için "node bot.js" şeklinde başlatmanız gerekmekte.
Artık bot ile irtibat kurup nasıl mesaj atabileceğimizi öğrendik. Şimdi ise bir üst levele geçip bize butonlu cevap vermesini sağlayalım:
1) "bot.sendMessage" fonksiyona gelişmiş mesaj atabilmek için boş bir obje parantezi açıyoruz. ve içine "reply_markup" objesini ekliyoruz.
2) Bu obje içine "inline_keyboard" parametresini alıyor. Bu parametre liste veri tipi tutuyor. Yani her bir liste bir butonu temsil etmekte.
- Bu listelerin içine bir obje parantezi açıp iki değer giriyoruz: text,callback_data.
- text: Buton üzerinde gözükecek yazı
- callback_data: butona tıkladıktan sonra hangi buton olduğunu yakalamamızı anlamamız için döndüreceği değer.
- Eğer bir satırda tek buton göstermek istiyorsanız her listeye bir opbje, iki buton göstermek istiyorsanız liste içine iki obje açmanız gerekiyor.
// Kütüphaneyi projemize dahil ediyoruz const TelegramBot = require('node-telegram-bot-api'); // BotFather tarafından verilen HTTP API anahtarını buraya yazıyoruz const token = "7718198148:AAFym-0e5BvL2V8AAGhV2woCAwOip4XfF8E"; // TelegramBot sınıfından yeni bir nesne türetiyoruz. const bot = new TelegramBot(token, { polling: true }); // Artık botumuz ile haberleştik. // Şimdi bir mesaj gönderelim. bot.on("message", msg => { bot.sendMessage(msg.chat.id, "selam", { reply_markup: { inline_keyboard: [ // Bir satırımız olacak ve iki butonumuz olacak. [ { text: "Espri Yap", callback_data: "espri" }, { text: "Fıkra Anlat", callback_data: "fıkra" } ] ] } }); });Kod
Yığını:
- Artık butonlarımız hazır. İsterseniz bota bir mesaj atın ve size nasıl cevap verdiğine bakın.
- Şimdi ise callback fonksiyondan yararlanıp hangi butona tıkladığını öğreneceğiz ve ona göre cevap yazmasını isteyeceğiz. Bunun için ben bir tane espri ve bir tane fıkra buldum. İkisi de kısa. Şimdilik sadece bir değer döndürecek. İleride liste yapıp random attırabiliriz veya siz kendiniz deneyebilirsiniz.
- Bir butona basıldıktan sonra cevap vermesini istediğimiz için 'bot.on("message"...' yerine 'bot.on("callback_query"...' kullanacağız.
- Seçtiğimiz butonun değeri bize "cbq.data" ile gelecek. Tabi botumuzun hangi chate mesaj atacağını söylememiz için chat idside lazım olacak. Bunun için "cbq.message.chat.id" bize chat idsini döndürecek.
- Artık her şey tamam geriye sadece koşul eklemek kalıyor.
bot.on("callback_query", cbq => { // Hangi butona tıkladığımızı öğrendik const secim = cbq.data; // Hangi chate mesaj atacağımızı öğrendik const chatId = cbq.message.chat.id; if (secim == "espri") { // Eğer espri butonuna basıldıysa burası çalışacak bot.sendMessage(chatId, "Adamın biri gülmüş, sulamışlar"); } else if (secim == "fıkra") { // Eğer fıkra butonuna basıldıysa burası çalışacak const fikraMetni = "İlk defa helikopter gören Temel, Dursun' a sormuş;\n - Dursun, bu nedur da? Dursun, gayet sakin cevap vermiş\n- Haçan, bu olsa olsa bin yaşında bir sinek dur."; bot.sendMessage(chatId, fikraMetni); } });Kod
Yığını:
Basit bir fıkra anlatan veya espri yapan bir bot kodladık.
Full Kod:
// Kütüphaneyi projemize dahil ediyoruz const TelegramBot = require('node-telegram-bot-api'); // BotFather tarafından verilen HTTP API anahtarını buraya yazıyoruz const token = "7718198148:AAFym-0e5BvL2V8AAGhV2woCAwOip4XfF8E"; // TelegramBot sınıfından yeni bir nesne türetiyoruz. const bot = new TelegramBot(token, { polling: true }); // Artık botumuz ile haberleştik. // Şimdi bir mesaj gönderelim. bot.on("message", msg => { bot.sendMessage(msg.chat.id, "selam", { reply_markup: { inline_keyboard: [ // Bir satırımız olacak ve iki butonumuz olacak. [ { text: "Espri Yap", callback_data: "espri" }, { text: "Fıkra Anlat", callback_data: "fıkra" } ] ] } }); }); bot.on("callback_query", cbq => { // Hangi butona tıkladığımızı öğrendik const secim = cbq.data; // Hangi chate mesaj atacağımızı öğrendik const chatId = cbq.message.chat.id; if (secim == "espri") { // Eğer espri butonuna basıldıysa burası çalışacak bot.sendMessage(chatId, "Adamın biri gülmüş, sulamışlar"); } else if (secim == "fıkra") { // Eğer fıkra butonuna basıldıysa burası çalışacak const fikraMetni = "İlk defa helikopter gören Temel, Dursun' a sormuş;\n - Dursun, bu nedur da? Dursun, gayet sakin cevap vermiş\n- Haçan, bu olsa olsa bin yaşında bir sinek dur."; bot.sendMessage(chatId, fikraMetni); } });Kod
Yığını:
İkinci bölüm için sağlıcakla kalın, kod yazın.
Spoiler,
mesajı görmek için tıklayın.Konya'da Fiat Tamirci Önerisi
Merhabalar,
Geçen haftalarda yeni bir egea sedan aldım ikinci el. Alırken expertize götürdük hiçbir şeyi yoktu. Dün arabaya bindiğimde vitesi bire alıp gittiğim zaman sanki ön tamponun plastiği düşmüşte yere sürtüyormuş gibi bir ses geliyor. Arabanın altına baktım bir sıkıntı yok, kaputu açtım altlara baktım yine bir sıkıntı göremedim. Araba geri giderken bir sıkıntısı yok lakin ileri giderken aynı ses çıkıyor.
İlk defa fiat aldığım için bildiğim bir sanayide usta yok. Konya'da yaşayan ve fiat kullanıpta önerebileceği bir usta var mı?
İlgi Alanları: Yazılım, Bisiklet Sürmek
Backand developer PHP, Node.js React, Javascript |
Son Giriş: geçen ay
Son Mesaj Zamanı: 2 ay
Mesaj Sayısı: 1
Gerçek Toplam Mesaj Sayısı: 3
İkinci El Bölümü Mesajları: 0
Konularının görüntülenme sayısı: 241 (Bu ay: 25)
Toplam aldığı artı oy sayısı: 1 (Bu hafta: 0)
En çok mesaj yazdığı forum bölümü: Web Tasarım - Programlama

