İstediğimiz çıktıları veren bir betik yazdık. Şimdi bunun çıktılarını görmek için her seferinde betiği elle tetikleyip çıktılarını terminalden mi okuyacağız?
Hayır! Betiği çıktılarını bir telegram bot’u aracılığıyla telegrama mesaj atacak duruma getirebiliriz. Sonrasında betiği cron olarak da çalıştırırsak, istediğimiz aralıklarla bize betiğin çıktılarını mesaj atan bir botumuz olur.
Telegram Bot’u Oluşturmak
Yeni bir telegram bot’u oluşturmak için @BotFather hesabına mesaj atıyoruz. Sırasıyla; /newbot
, bot'un adı
ve bot'un kullanıcı adı
değerlerini vererek bot’u oluşturuyoruz.

Bu işlem sonrasında botumuzu oluşturmuş ve HTTP API token'
ini elde etmiş oluyoruz. Bot’u kullanabilmemiz için bot’un mesaj göndereceği alanlara erişmesi gerekiyor. Bot’u özel mesajlaşmada kullanmak istiyorsak bir mesaj atmamız, bir kanalda kullanmak istiyorsak kanalda tag’lememiz gerekiyor.
Oluşturduğumuz bot’a (@gelincik_bot) ilk mesajı atıyoruz. Mesaj /start
olarak iletiliyor.
API’dan Mesaj Göndermek
Artık oluşturduğumuz bot’u kullanarak eklediğimiz mesajlaşma alanına API üzerinden mesaj gönderebiliriz. Mesaj gönderme işlemini curl
komutunu kullanarak gerçekleştireceğiz.
BotFather’da bot’umuzu oluşturduğumuz zaman bize XXXXX:YYYYYYYYYYYYYYY
formatında bir token veriliyor. Bu şekilde verilen token’de :
karakteri ayraç olarak kullanılmış durumda. Karakterden önceki alan bot’un ID’si, sonraki alan access token’ı şeklinde bölünüyor. API’a istek atarken bot’un adı olarak botXXXXX
, access token olarak YYYYYYYYYYYYYYY
değerlerini kullanıyoruz.
Bot ile bir chat’e mesaj atabilmemiz için öncelikle o chat’e ait ID değerini öğrenmemiz gerekiyor. Bu değeri öğrenmek için de API’ı kullanarak getUpdates
endpoint’ine istek atıyoruz.
curl -q -X POST https://api.telegram.org/botXXXXX:YYYYYYYYYYYYYYYYYYYYYY/getUpdates
{"ok":true,"result":[{"update_id":495336715,
"message":{"message_id":1,"from":{"id":ZZZZZZZZZZZ,"is_bot":false,"first_name":"\u061cBerkay","last_name":"G\u00fc\u00e7l\u00fc","username":"berkayguclu","language_code":"en"},"chat":{"id":ZZZZZZZZZZZ,"first_name":"\u061cBerkay","last_name":"G\u00fc\u00e7l\u00fc","username":"berkayguclu","type":"private"},"date":1718742224,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}
Bu isteğin sonucunda iletilen JSON verideki id
alanı chat ID’sini ifade ediyor. Şimdi bu ID değerini kullanarak sendMessage
endpoint’i ile mesaj atabiliriz.
curl -q -X POST https://api.telegram.org/botXXXXX:YYYYYYYYYYYYYYYYYYYYYY/sendMessage -d chat_id=1065130096 -d text="Gelincik deneme mesajıdır."
{"ok":true,"result":{"message_id":2,"from":{"id":XXXXX,"is_bot":true,"first_name":"Gelincik","username":"gelincik_bot"},"chat":{"id":ZZZZZ,"first_name":"\u061cBerkay","last_name":"G\u00fc\u00e7l\u00fc","username":"berkayguclu","type":"private"},"date":1718802382,"text":"Gelincik deneme mesaj\u0131d\u0131r."}}

Telegram Channel’ında Thread ID Nasıl Bulunur?
Bir gruba veya DM’e mesaj atarken chat ID değerini bulmak yeterli oluyor. Fakat içerisinde farklı topic’ler bulunan bir channel’da hangi topik’e mesaj atılacağını belirtmek için Thread ID
denilen bir değer gerekiyor.
Bu değeri elde edebilmek için de bot’u önce channel’a eklememiz gerekiyor. Channel’a ekledikten sonra bot’u istenilen topik altına tag’lediğinizde artık getUpdates
altından hem chat ID hem de thread ID değerini alabiliyorsunuz. Thread ID kullanımı da aşağıdaki şekilde yapılabilir:
curl -sS -X POST https://api.telegram.org/botXXXXX:YYYYYYYYYYYYYYYYYYYYYY/sendMessage -d chat_id=${CHAT_ID} -d message_thread_id=${THREAD_ID} -d parse_mode="MarkdownV2" -d text="${MESSAGE}"
parse_mode Nedir?
Telegram’a API aracılığıyla gönderilen mesajlar belli kurallar aracılığıyla parse edilir. Bu kurallar sonucunda gönderilen mesaj belli bir formata uyuyorsa kalın, ince, eğik veya altı çizili yazılmalı gibi yazım stilleri uygulanır.
API aracılığıyla mesaj atarken kullanılan parse_mode parametresi, gönderilen mesajların hangi kural setiyle parse edilmesi gerektiğini belirtir. Örneğin markdown
stilini kullanıyorsanız kalın yazmak için *metin*
, html
stilini kullanıyorsanız kalın yazmak için <b>metin</b>
şeklinde kullanmanız gerekir.
Parametrenin alabileceği diğer farklı değerler için URL’i inceleyebilirsiniz.
Bonus: Bir önceki yazıda hazırlanan biletinial betiğinin telegram’a mesaj atmasının sağlanması
#!/bin/bash
curl -sS https://biletinial.com/tr-tr/tiyatro/ankara | grep tr-tr/tiyatro | cut -d\" -f2 > /tmp/ankara
LINE=$(cat /tmp/ankara | grep -n search | cut -d: -f1 | tail -n1)
cat /tmp/ankara | tail -n+$(( ${LINE}+1 )) | sort | uniq > /tmp/tiyatro
while read oyun
do
curl -sS https://biletinial.com${oyun} > /tmp/oyun
AD=$(cat /tmp/oyun | pup 'h1 text{}' | sed "s/'/\'/g")
BEDEVE=$(cat /tmp/oyun | pup 'div div div[data-sehir="Ankara"] div[class="ed-biletler__sehir__gun"] div[class="ed-biletler__sehir__gun__detay"] :first-child text{}' | grep -B2 "2 Biletin" | sed 's/2 Biletin.*//g')
if [ ! -z "$BEDEVE" ];
then
MESSAGE="""
${AD}
${BEDEVE}
"""
curl -sS -X POST https://api.telegram.org/botXXXXX:YYYYYYYYYYYY/sendMessage -d chat_id=ZZZZZZZ -d message_thread_id=AAAAAAA -d parse_mode="MarkdownV2" -d text="${MESSAGE}" -o /dev/null
fi
done</tmp/tiyatro
