Kişisel bildirimleriniz için Telegram botu oluşturun

Muhammet Çakır
4 min readAug 18, 2017

--

Bu yazıda Telegram, Firebase, Heroku (Node.js) ve Heroku Scheduler kullanarak kişisel bildirim mekanizmamızı hazırlayacağız.

Telegram, Whatsapp veya Facebook Messenger kadar ülkemizde ilgi görmese de mottosu ve sahip olduğu teknik özellikler açısından çok iyi bir uygulama. Ayrıca diğerlerine göre oldukça esnek bir API sunuyor. API detayına aşağıdaki linkten ulaşabilirsiniz.

İhtiyaç

Packtpub her gün ücretsiz pdf paylaşıyor. Her gün takip etmek zorlaşıyor :(
Bu yüzden ebook paylaşımlarını kaçırmamak için otomatize bir sistem işimizi görebilir.

Çözüm

Belirli aralıklarla (günde bir) packtpub sayfasını crawl edip mesaj iletimi yapabilecek bir Telegram Botu.

Mimari

Telegram Bot API; bot ile etkileşimde olan kullanıcılara mesaj atabilmek için.
Web Uygulaması; Telegram webhook bildirimleri için daima erişilebilir bir uygulamaya ihtiyacımız var. Node.js ile basit bir web uygulaması işimizi görür.
Heroku; hazırladığımız web uygulamamızı barındıracağımız platform.
Heroku Scheduler; belirlikli aralıklarla task çalıştırabilmemiz için Heroku add-on’u.
Firebase; bot ile etkileşimde olan kullanıcıların chat-id lerini kaydedebilmek için (uygulamamız Heroku üzerinde barındırılacağı ve ücretsiz kullanımda geçici file sistemi özelliği olduğu için chat-id leri bir yerde tutmamız gerekiyor).

Telegram Bot oluşturma

Bunun için başka bir bot ile iletişime geçmemiz gerekecek. BotFather isimli bot, kendi botumuzu oluşturmamıza yardımcı olacak.

Telegram botu oluşturma

/newbot komutuyla “PacktPub Free Ebook Messenger” isimli botumuzu oluşturduk ve username olarak da “TestPacktPubMessengerBot” ayarladık. İşlem başarılı bir şekilde gerçekleştikten sonra HTTP API erişimi için token bilgimizi de aldık (resimde görülüyor).
/mybots komutuyla botlarımızı görüntüleyip değişiklik yapacağımız botu seçiyoruz. Burada bot ile alakalı birçok ayarlamayı (isim, avatar, açıklama, komut ekleme vs.) yapabiliriz.

Not; /token komutuyla istediğimiz bota ait yeni token oluşturabiliriz.

Komut ekleme

Botumuza “packtpub” komutunu ekledik.
Not; “Edit Commands” ile yaptığımız komut ekleme işlemi bir öncekileri geçersiz kılar, en son hangi komutları girdiyseniz aktif komutlarınız onlar olacaktır.

Web uygulaması ~ Telegram Haberleşmesi

“TestPacktPubMessengerBot” ile etkileşimde olan kullanıcıların komut veya mesajlarına cevap verebilmemiz ya da belirli aralıklarla mesaj gönderebilmemiz için kullanıcının chat id bilgisini bilmemiz gerekiyor. Telegram Bot APi ile chat id bilgisini almanın iki yöntemi var.

  • Webhook url ayarlama
    Kullanıcı “TestPacktPubMessengerBot” a mesaj yazdığı zaman Telegram bu iletiyi bizim webhook adresimize de iletir.
  • Long polling ile getUpdates methodunu çağırmak

Web uygulamamızı ücretsiz bir platformda barındıracağımız ve uygulamamız her zaman live olmayacağı için birinci yöntemi seçtik.

Not 1; API üzerinde webhook ayarlandığında getUpdates methodu artık kullanılamaz. Detaylı bilgi için tıklayınız.
Not 2; Webhook ayarlamasının ne olarak yapıldığını görmek için api adresine istek yapılabilir.

Web uygulaması

proje dosya yapısı
// package.json
{
"name": "medium-packtpub-bot",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/web"
},
"dependencies": {
"body-parser": "~1.16.0",
"express": "~4.14.1",
"node-telegram-bot-api": "^0.21.1",
"got": "^6.3.0",
"cheerio": "^0.22.0",
"firebase": "^3.8.0",
"firebase-admin": "4.2.1"
},
"token" : "TELEGRAM_BOT_API_TOKEN"
}

Kullanılan kütüphaneler;

Heroku

“medium-packtpub-bot” isimli yeni bir uygulama oluşturduk ve proje dosyalarını “deploy” sekmesindeki yönlendirmeyle deploy işlemimizi tamamladık.

Heroku Scheduler

“resources” sekmesi altında “add-ons” aratıp “Heroku Scheduler” ı seçtik. Add-on’umuzu ekledikten sonra add-on detayına gidip her gün saat 12de ve “packtpubCron” isimli dosyayı çalıştıracak şekilde ayarlamamızı yaptık.

Not; task dosyaları proje kök dizininde bulunan /bin dosyası içerisinde tanımlanması gerekir. Ayrıca oluşturulan task dosyalarının uzantıları olmamalıdır. Detaylı bilgi için tıklayınız.

heroku scheduler

Sonuç

Proje kodlarını github adresinde görebilirsiniz.

--

--