HumaiX
Tüm rehberler
n8nTelegramrehber

n8n ile Telegram botu nasıl kurulur?

Dört node, kod yok, API anahtarı yok. /hava komutuna canlı hava durumuyla cevap veren çalışan bir Telegram botunu adım adım kuruyoruz — atölyede kullanılan gerçek akışın üzerinden.

Son güncelleme:

Bu rehberde /hava yazdığınızda İzmir'in anlık sıcaklık ve rüzgar bilgisini gönderen bir Telegram botu kuruyoruz. Toplam dört node, hiç kod yok, API anahtarı yok. Sonunda telefonunuzda gerçekten çalışan bir bot oluyor.

Anlatılan akış uydurma değil: 8 Temmuz 2026'daki Yeni Başlayanlar İçin n8n Atölyesi canlı yayınında birlikte kurulan bot bu, ve akışın JSON'u atölye reposunda açık duruyor.

Repoyu açtığınızda 16 Mayıs 2026 tarihini göreceksiniz: materyaller ilk olarak o gün İzmir'de, IzQ Alsancak'taki yüz yüze atölye için hazırlandı. 8 Temmuz'daki çevrimiçi yayın aynı akışları kullandı, o yüzden ikisi tek repoda duruyor.

Ne kuracağız

Dört node ve aralarındaki üç ok:

#NodeGörevi
1Telegram TriggerBota gelen mesajları dinler
2SwitchYalnız /hava yazılmışsa devam eder
3HTTP RequestOpen-Meteo'dan İzmir verisini çeker
4Telegram → Send MessageCevabı aynı sohbete yazar

Mantık her n8n akışında aynı: bir olay yakala, gerekirse filtrele, bir yerden veri al, bir yere yaz. Bu dört adımı kurduğunuzda hava durumu botu kurmuş olmuyorsunuz sadece — kalıbı kurmuş oluyorsunuz.

Acele edenler için: akışın kendisi

Aşağıdaki JSON, atölyede kurulan botun tamamı. Kopyalayın, n8n'de boş bir canvas açın ve Ctrl+V (Mac'te Cmd+V) yapın — dört node bağlantılarıyla birlikte kurulur.

Node sürümleri de burada yazılı, çünkü içe aktarma sorunlarının çoğu sürüm uyuşmazlığından çıkar:

NodeTiptypeVersion
Telegram Triggern8n-nodes-base.telegramTrigger1
Switch (Komut)n8n-nodes-base.switch3
Open-Meteo Hava Verisin8n-nodes-base.httpRequest4.1
Send Messagen8n-nodes-base.telegram1
{
  "name": "n8n İzmir Workshop — /hava Bot",
  "nodes": [
    {
      "parameters": {
        "updates": ["message"],
        "additionalFields": {}
      },
      "id": "trigger-hava",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "typeVersion": 1,
      "position": [240, 300],
      "webhookId": "hava-webhook",
      "credentials": {
        "telegramApi": {
          "id": "YOUR_TELEGRAM_CREDENTIAL_ID",
          "name": "Telegram Bot — Workshop"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": false,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.message.text.split(' ')[0] }}",
                    "rightValue": "/hava",
                    "operator": { "type": "string", "operation": "equals" }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "hava"
            }
          ]
        },
        "options": {}
      },
      "id": "switch-komut",
      "name": "Switch (Komut)",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [500, 300]
    },
    {
      "parameters": {
        "url": "https://api.open-meteo.com/v1/forecast?latitude=38.4237&longitude=27.1428&current=temperature_2m,weathercode,windspeed_10m&timezone=Europe%2FIstanbul",
        "options": {}
      },
      "id": "http-open-meteo",
      "name": "Open-Meteo Hava Verisi",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [760, 300]
    },
    {
      "parameters": {
        "resource": "message",
        "operation": "sendMessage",
        "chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
        "text": "=İzmir Hava Durumu\n\nSıcaklık: {{ $json.current.temperature_2m }}°C\nRüzgar: {{ $json.current.windspeed_10m }} km/s\n\nVeri kaynağı: Open-Meteo",
        "additionalFields": {}
      },
      "id": "send-hava",
      "name": "Send Message",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1,
      "position": [1020, 300],
      "credentials": {
        "telegramApi": {
          "id": "YOUR_TELEGRAM_CREDENTIAL_ID",
          "name": "Telegram Bot — Workshop"
        }
      }
    }
  ],
  "connections": {
    "Telegram Trigger": {
      "main": [[{ "node": "Switch (Komut)", "type": "main", "index": 0 }]]
    },
    "Switch (Komut)": {
      "main": [[{ "node": "Open-Meteo Hava Verisi", "type": "main", "index": 0 }]]
    },
    "Open-Meteo Hava Verisi": {
      "main": [[{ "node": "Send Message", "type": "main", "index": 0 }]]
    }
  },
  "settings": { "executionOrder": "v1" }
}

İçe aktardıktan sonra tek iş kaldı. İki Telegram node'unda YOUR_TELEGRAM_CREDENTIAL_ID yazan bir credential referansı göreceksiniz — bu bir yer tutucu, gerçek bir kimlik değil. Node'ları açıp kendi Telegram credential'ınızı seçmeniz gerekiyor; bunu yapana kadar node'ların köşesinde kırmızı uyarı durur. Token'ı nereden alacağınız aşağıdaki ilk adımda.

Akışın nasıl çalıştığını da anlamak istiyorsanız buradan devam edin; her node'u sıfırdan kuruyoruz.

Hazırlık

İki şey gerekiyor, ikisi de ücretsiz:

  • Telegram hesabı. Bot oluşturmak için başka bir şey istemiyor. WhatsApp ile de yapılabilir ama Meta iş hesabı doğrulaması ve bot olmadığınızı kanıtlama gibi bir prosedür işletiyor; Telegram bu konuda esnek, o yüzden başlangıç için doğru yer.
  • n8n hesabı. n8n Cloud'un ücretsiz denemesi kredi kartı sormuyor (Starter ve Pro denemeleri için; bunu n8n kendi fiyat sayfasında yazıyor). Denemek yerine kendi sunucunuzda çalıştırmayı tercih ederseniz o da mümkün — n8n'in lisansı buna izin veriyor, ayrıntısı n8n nedir sayfasında.

Adım 1 — BotFather'dan bot ve token

Telegram'da BotFather'ı aratın (Telegram'ın kendi resmî hesabı) ve sohbeti açın.

  1. /newbot yazın.
  2. Botun görünen adını sorar — istediğinizi yazabilirsiniz, örneğin İzmir Hava Botu.
  3. Sonra kullanıcı adını sorar. Sonu _bot ile bitmek zorunda ve benzersiz olmalı; alınmış bir ad verirseniz tekrar sorar.

İki soruyu geçince BotFather bir onay mesajı gönderir. O mesajın içinde tek satırlık bir HTTP API token'ı var — rakamla başlar, içinde iki nokta bulunur.

Kopyalarken dikkat: yalnız o satırı alın. "use this token" ifadesinden sonra başlayıp "keep your token secure" uyarısından önce biten kısım. Mesajın tamamını yapıştırırsanız n8n credential'ı kaydetmez ve hata da net olmaz.

Aynı mesajda botunuzun t.me/... linki de var; test ederken sohbeti oradan açacaksınız.

Adım 2 — Telegram Trigger ve credential

n8n'de Create workflow deyip boş canvas'a geçin. Sağ üstteki artıya basıp Telegram Trigger ekleyin ve trigger tipi olarak On message seçin.

Node açıldığında üstte credential alanı boş görünecek. Create new credential deyin, tek istediği şey Access Token — az önce kopyaladığınız satırı yapıştırıp kaydedin. Doğruysa bağlantının kurulduğuna dair bir onay çıkar.

Şimdi test edin: alttaki Execute workflow'a basın, node dinlemeye geçer. Telefonunuzdan bota herhangi bir şey yazın. n8n mesajı yakalar ve size gelen JSON'u gösterir — kimin yazdığı, hangi sohbetten geldiği, metnin kendisi.

Bu ekranı bir dakika inceleyin. Sonraki iki adımda buradaki alanlara isimleriyle atıfta bulunacağız.

Adım 3 — Switch ile komutu filtrele

Bot her mesaja hava durumu göndermemeli. Araya bir filtre koyuyoruz.

Switch node'u ekleyin ve tek bir kural tanımlayın:

  • Sol değer: {{ $json.message.text.split(' ')[0] }}
  • Operatör: equals
  • Sağ değer: /hava

Buradaki split(' ')[0] küçük ama işe yarar bir ayrıntı: mesajı boşluktan bölüp yalnız ilk kelimeyi alır. Böylece kullanıcı /hava yazsa da /hava bugün yazsa da komut tanınır. Doğrudan eşitlik koysanız ikincisi filtreden geçmezdi.

Kural büyük-küçük harfe duyarsız çalışacak şekilde bırakılabilir.

Test: Execute workflow deyip bota selam yazın — akış filtreden geçmez, çıktı üretmez. Sonra /hava yazın — bu sefer devam eder. İkisini de denemek, filtrenin gerçekten çalıştığını gösterir.

Adım 4 — Open-Meteo'dan veriyi çek

HTTP Request node'u ekleyin. Metot GET, URL şu:

https://api.open-meteo.com/v1/forecast?latitude=38.4237&longitude=27.1428&current=temperature_2m,weathercode,windspeed_10m&timezone=Europe%2FIstanbul

Başka hiçbir ayar gerekmiyor — kimlik doğrulama yok, anahtar yok. Open-Meteo'yu bu atölyede seçme sebebi tam olarak bu: kayıt olmadan, ücret ödemeden, credential kurmadan gerçek veri döndürüyor.

latitude ve longitude İzmir'i gösteriyor. Başka bir şehir istiyorsanız yalnız bu iki sayıyı değiştirin.

Çalıştırdığınızda dönen JSON şuna benzer:

{
  "current_units": { "temperature_2m": "°C", "windspeed_10m": "km/h" },
  "current": {
    "time": "2026-08-07T23:15",
    "temperature_2m": 27.8,
    "weathercode": 0,
    "windspeed_10m": 1.8
  }
}

JSON, n8n'de sürekli karşılaşacağınız yapı: soldaki tırnaklı isim key, sağdaki value. Node'lar arasında veri bu biçimde taşınıyor, ve bir sonraki adımda bu değerlere isimleriyle ulaşacağız.

Adım 5 — Cevabı geri gönder

Telegram node'u ekleyin, Resource: Message, Operation: Send Message.

İki alan doldurulacak.

Chat ID — cevabın hangi sohbete gideceği. Değeri ilk node'dan geliyor:

{{ $('Telegram Trigger').item.json.message.chat.id }}

Text — mesajın kendisi. Alanı Fixed'dan Expression'a çevirin, yoksa süslü parantezler düz metin olarak gider:

İzmir Hava Durumu

Sıcaklık: {{ $json.current.temperature_2m }}°C
Rüzgar: {{ $json.current.windspeed_10m }} km/s

Veri kaynağı: Open-Meteo

Bu ifadeleri elle yazmak zorunda değilsiniz: sol paneldeki çıktıdan istediğiniz değeri sürükleyip alana bırakırsanız n8n ifadeyi kendisi yazar. Atölyede de böyle yapıldı, ve alışması en hızlı kısım burası.

Execute step deyip sonucu görün. Doğruysa Telegram'a mesaj düşer.

Test etmek ile yayına almak arasındaki fark

Burası yeni başlayanların en çok takıldığı yer, o yüzden ayrı bir başlık hak ediyor.

Execute workflow bir test modudur: akış yalnız o an dinler ve genelde tek bir olayı yakalar. Test bittikten sonra bota yazarsanız cevap alamazsınız — bot bozuk değildir, akış çalışmıyordur.

Sürekli çalışması için sağ üstten Publish demeniz gerekir. n8n bunu sürüm olarak tutuyor; akışta değişiklik yapıp yeniden yayınladığınızda git'e benzer bir geçmiş oluşuyor.

Yayına aldıktan sonra bota /hava yazın. Hiçbir şeye basmadan cevap gelmeli.

Aynı botu Claude'a yaptırmak — fark ne

Atölyenin ikinci yarısında aynı bot bu sefer elle değil, yapay zekaya yaptırılarak kuruldu. Sonuç öğretici, çünkü neyin devredilebildiğini ve neyin devredilemediğini net gösteriyor.

Yöntem şu: Claude'a akışı tarif ediyorsunuz — hangi node'lar (Telegram trigger, filtre, HTTP request, send message), filtre hangi komutu arayacak, veri nereden gelecek, mesaj hangi formatta olacak — ve sonunda "n8n'e import edilebilir bir JSON formatında ver" diyorsunuz. Çıkan JSON'u kopyalayıp n8n canvas'ında Ctrl+V yaptığınızda akış node'larıyla birlikte kuruluyor.

Çalışıyor. Ama yapıştırdığınız anda node'ların köşesinde küçük kırmızı üçgenler görüyorsunuz: credential'lar eksik. Model bir Telegram token'ı üretemez, çünkü o sizin hesabınıza ait bir sır. Grafiği devredebilirsiniz, kimlik bilgisini devredemezsiniz.

Devredilebilen bir şey daha var: hata ayıklama. Bir node kırmızıya döndüğünde n8n sağ altta hata mesajını gösteriyor; o mesajı kopyalayıp modele sorduğunuzda çoğu zaman doğru teşhisi koyuyor. Atölyede çıkan örnek tam da bu oldu — üretilen JSON'daki credential kimliğinin gerçek olmadığı, yenisinin elle bağlanması gerektiği söylendi.

Pratik sonuç: yapay zeka iskeleti kuruyor, sırları ve kararı siz veriyorsunuz. Bu ayrım küçük bir bot için önemsiz görünür; on beş node'luk bir üretim akışında maliyet farkı yaratır.

Takıldığınız yerler

Atölye boyunca en çok karşılaşılan üç şey:

  1. Credential unutulmuş ya da güncellenmemiş. En sık hata bu. Node kırmızı üçgen gösteriyorsa önce buraya bakın.
  2. Akış yayında değil. Yukarıdaki Execute/Publish ayrımı. Bot "çalışmıyor" görünmesinin en yaygın sebebi.
  3. Token yanlış kopyalanmış. Mesajın tamamı yerine yalnız token satırı alınmalı.

Ayrıca Executions sekmesini kullanmayı erken öğrenin: her çalıştırmayı adım adım kaydediyor, hangi node'a hangi verinin girdiğini ve neyin çıktığını gösteriyor. Deneme yanılmayla öğrenmeyi mümkün kılan şey bu ekran.

Aynı repodaki diğer dört akış

Atölye reposunda beş akış var; bu rehberdeki /hava botu ortadaki halka. Hepsi aynı kalıbın üzerine kuruluyor, tek fark eklenen katman:

AkışNodeNe ekliyor
echo-bot2Filtre bile yok: gelen mesajı olduğu gibi geri yazar. Çalışan en küçük n8n akışı — trigger ve action'ın nasıl bağlandığını görmek için doğru başlangıç
hava-bot4Bu rehber. Araya filtre ve dış veri kaynağı girer
baraj-bot5İzmir açık verisinden baraj doluluk oranı; ilk kez bir Code node'u devreye girer, çünkü gelen veri doğrudan mesaja yazılacak biçimde gelmiyor
ozet-bot8/hava ve /özet olmak üzere iki komut, ve ilk AI katmanı: bir AI Agent node'u Google Gemini ile ham veriyi cümleye çevirir
izmir-bot11Üçünün birleşimi: /hava, /özet, /baraj komutları ve tanınmayan mesajlar için echo davranışı. Switch'in çok çıkışlı hâli burada görülüyor

İki uyarı, ikisi de dosyaları açtığınızda karşınıza çıkacak:

  • baraj-bot içindeki İBB açık veri URL'si tamamlanmamış (REPLACE_WITH_BARAJ_RES yazıyor); çalışır hâli için izmir-bot'taki İZSU baraj uç noktasına bakın.
  • Credential referansları hepsinde yer tutucu. Yukarıdaki ile aynı durum: grafik gelir, sır gelmez.

Sıradaki doğal adım ozet-bot: aynı veriyi alıp bir modele cümle kurdurduğunuzda, "veri taşıyan akış" ile "karar veren akış" arasındaki farkı ilk kez somut görüyorsunuz.

Buradan sonra

Kurduğunuz kalıp — dinle, filtrele, veri al, cevapla — değiştirmeden başka işlere taşınır. Aynı akışta /hava yerine başka bir komut, Open-Meteo yerine başka bir API koyduğunuzda elinizde bambaşka bir bot olur.

Bir sonraki doğal adım araya bir karar katmanı koymak: gelen mesajı yorumlayıp hangi işi yapacağına kendisi karar veren bir yapı. O konuya AI iş akışı otomasyonu nedir ve AI agent nedir sayfalarında giriyoruz.

Bu işi kendi süreçlerinizde konuşmak isterseniz n8n otomasyon sayfasında kapsam, süre ve fiyat bandı yazılı. İzmir'deki topluluk ve atölye geçmişi için İzmir n8n otomasyon sayfasına bakabilirsiniz.

Sık sorulanlar

n8n ile Telegram botu kurmak için kod bilmek gerekir mi?
Hayır. Bu rehberdeki botun tamamı dört node'un görsel olarak bağlanmasından ibaret. Yazılan tek şey iki kısa ifade: komutu ayıklayan bir satır ve mesaj metnindeki değer yerleştirmeleri. İkisi de kopyalanabilir.
Ücretli bir şey gerekiyor mu?
Hayır. Telegram botu ücretsiz, Open-Meteo hava durumu servisi API anahtarı bile istemiyor, n8n Cloud kredi kartı sormayan bir ücretsiz deneme veriyor. Denemeyi kullanmak istemezseniz n8n'i kendi sunucunuzda çalıştırmak da mümkün.
Bot mesaja cevap vermiyor, nereye bakmalıyım?
Sırasıyla üç şeye: akış yayında mı (Publish edilmemiş bir akış yalnız Execute workflow dediğiniz anda ve tek seferlik dinler), Telegram credential'ı kayıtlı mı (kaydedince 'connected' onayı çıkmalı), ve gönderdiğiniz metin filtreden geçiyor mu. Executions sekmesi hangi node'da durduğunu adım adım gösterir.
BotFather'dan aldığım token'ın hangi kısmını kopyalayacağım?
Yalnız tek satırlık token'ı: mesajdaki 'use this token' ifadesinden sonra gelen, 'keep your token secure' uyarısından önce biten satır. Rakamla başlayıp harf ve rakam karışımıyla biter, içinde iki nokta bulunur. Mesajın tamamını kopyalarsanız credential kaydedilmez.
Hazır akışı n8n'e nasıl içe aktarırım?
Rehberdeki JSON'u kopyalayın, n8n'de boş bir workflow açın ve canvas'a tıklayıp Ctrl+V (Mac'te Cmd+V) yapın. Dört node bağlantılarıyla birlikte kurulur. Tek eksik kalan credential: iki Telegram node'unda YOUR_TELEGRAM_CREDENTIAL_ID yazan yer tutucuyu kendi Telegram credential'ınızla değiştirmeniz gerekiyor, çünkü token sizin hesabınıza ait bir sır ve dosyaya konmaz.
Bot yalnız İzmir için mi çalışıyor, başka şehre çevirebilir miyim?
Çevirebilirsiniz, tek değişecek şey iki sayı. HTTP Request node'undaki URL'de latitude=38.4237 ve longitude=27.1428 İzmir'i gösteriyor; bunları hedef şehrin koordinatlarıyla değiştirdiğinizde akışın geri kalanına dokunmanız gerekmiyor. Mesaj metnindeki 'İzmir Hava Durumu' başlığını da güncellemeyi unutmayın.
Aynı botu yapay zekaya yaptırabilir miyim?
Grafiği evet, tamamını hayır. Claude'a node'ları ve istediğiniz çıktı formatını anlatıp 'n8n'e import edilebilir JSON ver' derseniz akışı üretir ve canvas'a yapıştırdığınızda kurulur. Ama credential üretemez — Telegram token'ını siz eklemek zorundasınız, çünkü o sizin hesabınıza ait bir sır.

Diğer rehberler

Bunu kendi süreçlerinizde konuşalım

Tanımdan uygulamaya geçmek istiyorsanız, mevcut sürecinize bakıp nereden başlanacağını çıkaralım.

Projeni Anlat