Kişisel bildirimleriniz için Telegram botu oluşturun
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.
/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.
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ı
// 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.
Sonuç
Proje kodlarını github adresinde görebilirsiniz.