NodeRed – UYGULAMA 5: Telegram Uygulamasına Bildirim Göndermek

Telegram hesabınız varsa ve telefon uygulamasını kullanıyorsanız, Node-RED’in Telegram uygulamanıza mesaj göndermesini sağlayabilirsiniz. Örneğin bir hareket sensörünün tespit ettiği hareketi veya sıcaklık sensörünün değerini Telegram uygulamanıza otomatik olarak gönderilmesini sağlayabilirsiniz. Node-RED ile kurmuş olduğunuz otomasyon sisteminde bir bilgilendirme kanalı olarak anlık mesajlaşma uygulamalarını kullanmak oldukça yaygındır. Aynı yöntemi Node-RED akışlarınıza mesajlaşma uygulaması üzerinden komut göndermek için de kullanabilirsiniz.

Bu başlıkta Node-RED akışlarımızın Telegram uygulamasına nasıl mesaj gönderebileceği anlatılmıştır. Mesaj gönderebilmek için Telegram’ın sağlamış olduğu uygulama programlama arayüzüne (API) erişim için yetki edinmemiz gerekir. Bu işlem genel olarak 3 aşamada gerçekleştirilir.

  1. Önce ihtiyacımız olan Telegram node’larını çevrim içi kütüphaneden Node-RED’e yükleyeceğiz.
  2. Ardından da Telegram üzerinde bir chat bot (sohbet botu) oluşturarak bu bota erişim için gerekli token’ımızı alacağız.
  3. Açmış olduğumuz bot ile bir mesajlaşma oturumu başlatarak, oturumun chatId numarasını alacağız. Bu id numarasını Telegram uygulamasındaki mevcut sohbete mesaj göndermek için kullanacağız.

Bu adımları uyguladıktan sonra aşağıdaki gibi bir akış ile Telegram bot’umuza istediğimiz mesajı gönderebileceğiz. Akışın oluşturulması ve yapılandırılması dördüncü adımda anlatılmıştır.

Adım 1: RedBot’un yüklenmesi

Node-RED ile mesajlaşma uygulamasını gerçekleştirmek için birçok eklenti modülü vardır. RedBot bunlardan en çok tercih edileni ve en yeteneklisidir. RedBot’u yüklemek için ana menüden Manage Palette seçeneğine tıklatarak Palette sekmesini seçin ve arama kutusuna aşağıdaki gibi chatbot yazarak modülü yükleyin. Yükleme biraz vakit alabilir.

Yükleme tamamlandıktan sonra Node paletimizde 3 kategori altında çeşitli mesajlaşma node’ları yerini alacaktır. Node’lar palet üzerinde RedBot ismiyle görünecektir. RedBot kullanılarak Telegram, Slack, Facebook, Microsoft Teams, Viber ve Alexa uygulamaları ile otomasyonlar gerçekleştirilebilir. Biz bu bölümde sadece Telegram’ın kullanımına örnek vereceğiz.

Adım 2: Yeni bir chat robotunun oluşturulması

Node-RED ortamından Telegram uygulamasına mesaj gönderebilmek için Telegram üzerinde bir chat bot yani sohbet robotu oluşturmamız gerekiyor. Chat bot oluşturmak ücretsizdir ve birkaç kolay adım ile gerçekleştirilebilir. Adımları tamamladıktan sonra chat robotumuz için bir token değerine ve kullanıcı adına sahip olacağız. Sohbet robotunuzu oluşturmak için aşağıdaki adımları takip edin:

  1. Telegram uygulamasını açarak (dilerseniz Telegram web arayüzünü de kullanabilirsiniz) @BotFather kullanıcısını aratın ve bir mesajlaşma oturumu başlatın. Bu kullanıcı aslında Telegram için çalışan bir robot yazılımdır ve Telegram bot’umuzu oluşturmak için bize yardımcı olacak.
  2. Mesaj kutusuna /newbot yazıp gönderin. Bu komut bizim yeni bir chatbot oluşturmak istediğimiz anlamına gelir. Bundan sonra BotFather bizden chat robotumuz için bir isim belirlememizi ister.
  3. Chat robotunuz için bir isim girin. Herhangi bir karakter kısıtlaması yoktur. Örneğin Node RED girebilirsiniz.
  4. Ardından BotFather sizden chat robotu için bir kullanıcı adı girmenizi isteyecek. Bu kullanıcı adında boşluk, özel karakter ve Türkçe karakter yer almamalı, ayrıca kullanıcı adı bot kelimesi ile bitmeli ve daha önce başkası tarafından alınmamış bir isim olmalıdır. Örneğin NodeREDKitapbot gibi bir ad girelim.
  5. Eğer seçtiğimiz kullanıcı adı daha önce alınmamışsa BotFather bu kullanıcı adı için bir token üretecektir. Bu token şuna benzer: “1239336:AAFY5mqcBf…”. Bu token oluşturduğumuz chat robotunu Telegram sunucusuna gönderilen HTTP istekleri ile yönetebilmemizi sağlayacak bir nevi kimlik doğrulama anahtardır. HTTP isteklerini önceki adımda yüklediğimiz RedBot node’ları gönderecek. Dolayısıyla zamanı geldiğinde RedBot’un ilgili node’unu yapılandırmak için kullanacağız. Token, chat robotumuza her türlü erişimi sağlayabilen bir anahtar olduğu için adeta bir parola gibi korunması ve paylaşılmaması gerektiğini unutmayın.

Yukarıda gerçekleştirilen adımların ekran görüntüsü aşağıda yer almaktadır.

Token değerini ve kullanıcı adını bir kenara not alın ve sonraki adıma geçin.

Adım 3: chatId değerinin elde edilmesi

Node-RED’i kullanarak, önceki adımda oluşturmuş olduğumuz NodeREDKitapbot adlı bot’a mesaj göndermek için bot ile bir mesajlaşma oturumunun oluşturulmuş olması gerekir. Telegram uygulaması içinde oluşturduğunuz bot’a bir mesaj yazın. Örneğin “merhaba robot” yazın. Bu adımda oluşturmuş olduğumuz mesajlaşma oturumunun chatId değerini elde edeceğiz. Çünkü RedBot node’ları sohbete mesaj gönderebilmek için bu değere ihtiyaç duyar.

Ayrıca, Bot’umuz kullanıcı kimlik numarası bilinen bir Telegram kullanıcısına da mesaj gönderebilir. Biz bu aşamada mesajlarımızı bot ile oluşturduğumuz mesajlaşma oturumuna göndererek işlem yapacağız.

Artık bir mesajlaşma oturumumuz oluştuğuna göre bu oturumun id değeri olan chatId’yi elde edelim. Bunun için önceki adımda oluşturduğumuz token’dan ve komut satırından yararlanacağız. Komut satırından curl aracı ile Telegram API’a istekte bulunarak dönen cevaptan chatId kimlik numaramızı ayıklayacağız. curl komut satırı ortamında HTTP istekleri yapabilen kullanışlı bir araçtır. Dilerseniz önce curl’a argüman olarak vereceğimiz URL adresini oluşturalım. URL adresinin şablonu aşağıdaki gibidir.

Yukarıdaki şablonda <token> ile gösterilen yere token’ımızı yerleştireceğiz. token değeri, yapmak istediğimiz işlem hakkında bir kimlik denetimi/yetki kontrolü sağlarken <komut> ile gösterilen kısım da yapılacak olan işlemi tanımlar. Öncelikle bot’umuz ile başka herhangi bir oturumun (telefon veya web) açık olmadığından emin olduktan sonra URL adresimizi aşağıdaki gibi oluşturalım. İlk komutumuz setwebhook olacak. Bu komut ya da API, Telegram’a web üzerinden güncellemeleri almak istediğimizi belirtir. Komut satırını açarak tırnak işaretleri içinde aşağıdaki gibi ilk komutumuzu girelim:

Ardından, “merhaba bot” diyerek mesajlaşma oturumu içinde göndermiş olduğumuz mesajların bildirimlerini çekmek için getUpdates komutunu verelim.

curl, getUpdates isteği ile mevcut mesajlaşma oturumu içinde gerçekleşen son güncellemeleri sorgulayacak ve sonucu yukarıdaki gibi JSON biçiminde getirecektir. Bu çıktıda ihtiyacımız olan değer bu mesajlaşma oturumunun kimlik numarası olan chatId değeridir. Yukarıdaki çıktıdan da görebileceğiniz gibi bu değer 567694549’dur. Bu numarayı bir kenara not edin. Artık Node-RED üzerinden Telegram bot’umuza mesaj göndermek için gereken her şeye sahibiz. Bunları özetlemek gerekirse:

  1. token: Telegram API’larını kullanmak için yetki kodumuz.
  2. userId: Oluşturduğumuz chat robot’unun (chat bot) kullanıcı adı.
  3. chatId: Chat robotumuz açmış olduğumuz sohbet oturumu.

Adım 4: Chat robotuna mesaj göndermek

Aşağıda şeması gözüken akış NodeREDKitapbot adlı kullanıcı ile (bu chat bot’umuzdur) açmış olduğumuz mesajlaşma oturumuna yeni bir mesaj gönderir. Bu mesaj inject node’un varsayılan payload değeri olan timestamp bilgisidir.

Yukarıdaki akışta yer alan Conversation node’u chatbot’umuz ile açmış olduğumuz sohbet oturumuna erişmemizi sağlar. Ardından gelen Text node’u ise msg.payload değerinin bu sohbet oturumuna yazılmasını ve Telegram Sender node’u ise tüm bu isteklerin Telegram sunucusuna ulaştırılması görevlerini yerine getirir.

Bu uygulamayı ilerleyen başlıklarda biraz daha geliştireceğiz. Fakat hem basit olması hem de kolay anlaşılması açısından şimdilik timestamp (zaman bilgisi) değerini göndermeyi tercih ettik. Inject node’a tıklatıldıktan sonra Telegram uygulamasına gelen mesaj aşağıdaki gibi olmuştur.

Dilerseniz şimdi çalışma alanına gerekli node’ları ekleyelim ve yapılandıralım. Daha sonra Telegram uygulamasını daha işlevsel Node-RED uygulamalarında kullanacağız. Aşağıdaki adımları uygulayarak akışı oluşturun ve deploy edin.

  1. Paletten akışta gözüken Inject, Conversation, Text ve Telegram Out (Sender) node’larını alarak çalışma alanına sürükleyin ve kablo bağlantılarını yapın. Inject node’u common grubunda, Conversation ve Text node’ları RedBot grubunda, Telegram Out (Sender) ise RedBot Platforms grubunda yer almaktadır.
  2. Telegram Out (Sender) adlı node’a çift tıklatarak özellikler panelini görüntüleyin. Bot Configuration (development) listesinden Add new chatbot-telegram-node seçeneğini seçin ve yanındaki düzenle düğmesine tıklatın. Edit chatbot-telegram-node özellikler paneli açılacak. Bu paneldeki Bot Name kutusuna bot için herhangi bir isim girin. Token kutusuna ikinci adımda elde ettiğiniz token değerinizi girerek update düğmesine tıklatın ve Telegram out node özellikler paneline geri dönün. Aynı işlemi Bot Configuration (production) için de gerçekleştirin. Done düğmesine tıklatarak Telegram Out (Sender) node’unun yapılandırmasını kaydedin. RedBot, akışımızı geliştirirken kullanacağımız (development) ve akışımızı nihai noktaya ulaştığında kullanıma sunacağımız son ürün olarak (production) iki farklı yapılandırma girmemize izin verir. Bu özellik sayesinde 2 farklı bot oluşturarak asıl bot’un geliştirme aşamasında yapacağınız denemelerden etkilenmesini önleyebilirsiniz.
  3. Text node üzerinde herhangi bir işlem yapmanıza gerek yok. Bu node mesaj gönderimi için gerekli diğer özellikleri msg nesnesine uygun biçimde ekleyecek.
  4. Conversation node’una çift tıklatarak özellikler panelini görüntüleyin. ChatId kutusuna üçüncü adımda edindiğiniz chatId değerini yazın. Transport listesinden Telegram’ı seçin. Bot Configuration (development) ve Bot Configuration (production) liste kutusunda daha önceki adımda oluşturduğunuz konfigürasyonu seçin.
  5. Inject node’da bir değişiklik yapmanıza gerek yok. Inject node varsayılan olarak timestamp değerini payload değeri olarak gönderir. Dolayısıyla Telegram sohbetimize gönderilecek olan değer milisaniye cinsinden o anki zaman bilgisidir.

Yukarıdaki adımlarda gerçekleştirdiğimiz işlemlerin ekran görüntüleri aşağıda yer almaktadır. Dilerseniz bunlardan da yararlanabilirsiniz.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.