{"id":37797,"date":"2026-01-15T17:00:46","date_gmt":"2026-01-15T14:00:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/"},"modified":"2026-01-15T17:00:46","modified_gmt":"2026-01-15T14:00:46","slug":"ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/","title":{"rendered":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m"},"content":{"rendered":"<h2>Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m<\/h2>\n<p>Telegram botlar\u0131, kullan\u0131c\u0131larla etkile\u015fim kuran, otomatik g\u00f6revler ger\u00e7ekle\u015ftiren ve \u00e7e\u015fitli servisleri Telegram platformuna entegre eden g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. Ruby, esnek yap\u0131s\u0131, okunabilir s\u00f6zdizimi ve zengin gem ekosistemi sayesinde bot geli\u015ftirme i\u00e7in harika bir se\u00e7enektir. Bu makale, Ruby kullanarak s\u0131f\u0131rdan bir Telegram botu olu\u015fturma s\u00fcrecini ad\u0131m ad\u0131m ele alacak, temelden ileri seviyeye kadar t\u00fcm konular\u0131 kapsayarak kendi botunuzu geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Telegram Bot API ve Temel Kavramlar<\/h3>\n<p>Telegram botlar\u0131, Telegram Bot API arac\u0131l\u0131\u011f\u0131yla Telegram sunucular\u0131yla ileti\u015fim kurar. Bu API, botunuzun mesaj g\u00f6ndermesini, almas\u0131n\u0131, klavyeler olu\u015fturmas\u0131n\u0131 ve daha bir\u00e7ok i\u015flemi ger\u00e7ekle\u015ftirmesini sa\u011flayan bir dizi HTTP tabanl\u0131 y\u00f6ntem sunar.<\/p>\n<h4>Telegram Botlar\u0131 Nedir?<\/h4>\n<p>Telegram botlar\u0131, Telegram kullan\u0131c\u0131lar\u0131yla sohbet eden, komutlar\u0131 i\u015fleyen ve \u00e7e\u015fitli otomasyon g\u00f6revlerini yerine getiren \u00f6zel hesaplard\u0131r. Hava durumu bilgisi sa\u011flamaktan, not tutmaya, oyun oynamaktan, e-ticaret i\u015flemlerine kadar geni\u015f bir yelpazede kullan\u0131labilirler.<\/p>\n<h4>BotFather ile Yeni Bir Bot Olu\u015fturma<\/h4>\n<p>Her Telegram botunun bir kimli\u011fe ve bir API token&#8217;\u0131na ihtiyac\u0131 vard\u0131r. Bu token, botunuzun Telegram API&#8217;sine eri\u015fimini sa\u011flar ve BotFather adl\u0131 \u00f6zel bir Telegram botu arac\u0131l\u0131\u011f\u0131yla olu\u015fturulur. BotFather ile bot olu\u015fturmak i\u00e7in \u015fu ad\u0131mlar\u0131 izleyin:<\/p>\n<ol>\n<li>Telegram&#8217;da BotFather&#8217;\u0131 aray\u0131n ve sohbeti ba\u015flat\u0131n.<\/li>\n<li><code>\/newbot<\/code> komutunu g\u00f6nderin.<\/li>\n<li>Botunuz i\u00e7in bir isim se\u00e7in (\u00f6rne\u011fin, &#8220;Deneme Ruby Botu&#8221;).<\/li>\n<li>Botunuz i\u00e7in benzersiz bir kullan\u0131c\u0131 ad\u0131 se\u00e7in (<code>_bot<\/code> ile bitmeli, \u00f6rne\u011fin, &#8220;deneme_ruby_bot&#8221;).<\/li>\n<li>BotFather size bir API token&#8217;\u0131 (\u00f6rne\u011fin, <code>123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11<\/code>) verecektir. Bu token&#8217;\u0131 g\u00fcvende tutun.<\/li>\n<\/ol>\n<h4>API Token&#8217;\u0131n\u0131n \u00d6nemi ve G\u00fcvenli\u011fi<\/h4>\n<p>API token&#8217;\u0131, botunuzun anahtar\u0131d\u0131r. Bu token&#8217;\u0131 ele ge\u00e7iren herkes botunuzu kontrol edebilir. Bu nedenle, token&#8217;\u0131n\u0131z\u0131 asla genel bir depoda (GitHub gibi) payla\u015fmamal\u0131, ortam de\u011fi\u015fkenleri veya g\u00fcvenli bir yap\u0131land\u0131rma dosyas\u0131 kullanarak saklamal\u0131s\u0131n\u0131z.<\/p>\n<h4>Bot API&#8217;nin \u00c7al\u0131\u015fma Prensibi (Webhook vs. Long Polling)<\/h4>\n<p>Botunuzun Telegram&#8217;dan g\u00fcncellemeleri almas\u0131n\u0131n iki ana yolu vard\u0131r:<\/p>\n<ul>\n<li><strong>Long Polling:<\/strong> Botunuz, yeni mesajlar i\u00e7in d\u00fczenli aral\u0131klarla Telegram sunucular\u0131n\u0131 sorgular. Basit botlar ve geli\u015ftirme ortamlar\u0131 i\u00e7in uygundur.<\/li>\n<li><strong>Webhook:<\/strong> Telegram, botunuza yeni bir g\u00fcncelleme oldu\u011funda HTTP POST iste\u011fi g\u00f6nderir. Daha b\u00fcy\u00fck \u00f6l\u00e7ekli ve ger\u00e7ek zamanl\u0131 uygulamalar i\u00e7in tercih edilir, ancak botunuzun herkese a\u00e7\u0131k bir URL&#8217;e sahip olmas\u0131n\u0131 gerektirir.<\/li>\n<\/ul>\n<p>Bu makalede, ba\u015flang\u0131\u00e7 i\u00e7in daha kolay olan Long Polling y\u00f6ntemini kullanaca\u011f\u0131z.<\/p>\n<h3>Geli\u015ftirme Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h3>\n<p>Ruby ile Telegram botu geli\u015ftirmeye ba\u015flamadan \u00f6nce, gerekli ara\u00e7lara sahip oldu\u011funuzdan emin olmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Ruby Kurulumu ve Versiyon Y\u00f6netimi<\/h4>\n<p>Sisteminizde Ruby kurulu de\u011filse, \u00f6ncelikle Ruby&#8217;yi kurman\u0131z gerekir. Ruby&#8217;yi kurman\u0131n en iyi yolu, <code>rbenv<\/code> veya <code>RVM<\/code> gibi bir versiyon y\u00f6neticisi kullanmakt\u0131r. Bu ara\u00e7lar, farkl\u0131 projeler i\u00e7in farkl\u0131 Ruby versiyonlar\u0131n\u0131 y\u00f6netmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-bash\">\n# rbenv ile Ruby kurulumu (\u00f6rnek)\ngit clone https:\/\/github.com\/rbenv\/rbenv.git ~\/.rbenv\necho 'eval \"$(~\/.rbenv\/bin\/rbenv init -)\"' >> ~\/.bashrc\nsource ~\/.bashrc\n\ngit clone https:\/\/github.com\/rbenv\/ruby-build.git ~\/.rbenv\/plugins\/ruby-build\n\nrbenv install 3.2.2 # \u0130stedi\u011finiz Ruby versiyonunu kurun\nrbenv global 3.2.2 # Varsay\u0131lan olarak ayarlay\u0131n\nruby -v # Kurulumu do\u011frulay\u0131n\n<\/pre>\n<p><\/code><\/p>\n<h4>Proje Dizini Olu\u015fturma ve Gemfile Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>Botunuz i\u00e7in yeni bir proje dizini olu\u015fturun ve <code>Gemfile<\/code> ad\u0131nda bir dosya olu\u015fturarak kullanaca\u011f\u0131m\u0131z gem'leri tan\u0131mlay\u0131n.<\/p>\n<pre><code class=\"language-bash\">\nmkdir my_telegram_bot\ncd my_telegram_bot\ntouch Gemfile\n<\/pre>\n<p><\/code><\/p>\n<p><code>Gemfile<\/code> i\u00e7eri\u011fi:<\/p>\n<pre><code class=\"language-ruby\">\nsource 'https:\/\/rubygems.org'\n\ngem 'telegram-bot-ruby'\ngem 'dotenv' # Ortam de\u011fi\u015fkenlerini y\u00f6netmek i\u00e7in\n<\/pre>\n<p><\/code><\/p>\n<h4><code>telegram-bot-ruby<\/code> Gem'ini Kurma<\/h4>\n<p><code>Gemfile<\/code>'\u0131 olu\u015fturduktan sonra, gerekli gem'leri kurmak i\u00e7in <code>bundle install<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n.<\/p>\n<pre><code class=\"language-bash\">\nbundle install\n<\/pre>\n<p><\/code><\/p>\n<p>Ayr\u0131ca, API token'\u0131n\u0131z\u0131 g\u00fcvenli bir \u015fekilde saklamak i\u00e7in <code>.env<\/code> dosyas\u0131n\u0131 kullanaca\u011f\u0131z. Proje dizininizde <code>.env<\/code> ad\u0131nda bir dosya olu\u015fturun ve API token'\u0131n\u0131z\u0131 i\u00e7ine ekleyin:<\/p>\n<pre><code class=\"language-plaintext\">\n# .env dosyas\u0131\nTELEGRAM_BOT_TOKEN=YOUR_API_TOKEN_HERE\n<\/pre>\n<p><\/code><\/p>\n<p><code>YOUR_API_TOKEN_HERE<\/code> k\u0131sm\u0131n\u0131 BotFather'dan ald\u0131\u011f\u0131n\u0131z token ile de\u011fi\u015ftirin. <strong>Bu dosyay\u0131 asla versiyon kontrol sisteminize (Git gibi) eklemeyin!<\/strong> Bunun i\u00e7in <code>.gitignore<\/code> dosyas\u0131na <code>.env<\/code> eklemeyi unutmay\u0131n.<\/p>\n<h3>Basit Bir Telegram Botu Olu\u015fturma<\/h3>\n<p>Art\u0131k ortam\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, ilk basit botumuzu yazmaya ba\u015flayabiliriz.<\/p>\n<h4>Bot Nesnesini Ba\u015flatma<\/h4>\n<p><code>bot.rb<\/code> ad\u0131nda bir dosya olu\u015fturun ve bot nesnesini ba\u015flat\u0131n.<\/p>\n<pre><code class=\"language-ruby\">\nrequire 'telegram\/bot'\nrequire 'dotenv\/load' # .env dosyas\u0131n\u0131 y\u00fckler\n\ntoken = ENV['TELEGRAM_BOT_TOKEN']\n\nTelegram::Bot::Client.run(token) do |bot|\n  bot.listen do |message|\n    # Mesaj i\u015fleme kodu buraya gelecek\n    case message.text\n    when '\/start'\n      bot.api.send_message(chat_id: message.chat.id, text: \"Merhaba, #{message.from.first_name}! Ben bir Ruby Telegram botuyum.\")\n    when '\/help'\n      bot.api.send_message(chat_id: message.chat.id, text: \"Kullanabilece\u011finiz komutlar: \/start, \/help\")\n    else\n      bot.api.send_message(chat_id: message.chat.id, text: \"Anlamad\u0131m: #{message.text}\")\n    end\n  end\nend\n<\/pre>\n<p><\/code><\/p>\n<h4>\u0130lk Mesaj\u0131 Yakalama ve Yan\u0131tlama (<code>\/start<\/code> komutu)<\/h4>\n<p>Yukar\u0131daki \u00f6rnekte, <code>bot.listen<\/code> blo\u011fu Telegram'dan gelen her yeni mesaj\u0131 dinler. <code>message<\/code> nesnesi, mesaj\u0131n i\u00e7eri\u011fi, g\u00f6nderen bilgisi gibi detaylar\u0131 i\u00e7erir. <code>message.text<\/code> ile mesaj\u0131n metin i\u00e7eri\u011fine eri\u015firiz.<\/p>\n<p>Kullan\u0131c\u0131 <code>\/start<\/code> komutunu g\u00f6nderdi\u011finde, bot kullan\u0131c\u0131ya ho\u015f geldin mesaj\u0131 g\u00f6nderir. <code>bot.api.send_message<\/code> metodu, Telegram API'sinin <code>sendMessage<\/code> metodunu \u00e7a\u011f\u0131r\u0131r. <code>chat_id<\/code> mesaj\u0131n g\u00f6nderilece\u011fi sohbetin kimli\u011fini, <code>text<\/code> ise mesaj\u0131n i\u00e7eri\u011fini belirtir.<\/p>\n<h4>Basit Komut \u0130\u015fleyicileri Yazma<\/h4>\n<p><code>case message.text<\/code> yap\u0131s\u0131, farkl\u0131 komutlar\u0131 (<code>\/start<\/code>, <code>\/help<\/code>) ve di\u011fer metin mesajlar\u0131n\u0131 kolayca i\u015flemenizi sa\u011flar. Bu yap\u0131, botunuzun farkl\u0131 komutlara farkl\u0131 yan\u0131tlar vermesini sa\u011flar.<\/p>\n<p>Botunuzu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in terminalde:<\/p>\n<pre><code class=\"language-bash\">\nruby bot.rb\n<\/pre>\n<p><\/code><\/p>\n<p>komutunu \u00e7al\u0131\u015ft\u0131r\u0131n ve Telegram'da botunuza mesaj g\u00f6ndererek test edin.<\/p>\n<h3>Geli\u015fmi\u015f Bot \u00d6zellikleri<\/h3>\n<p>Basit bir bot olu\u015fturduktan sonra, daha zengin \u00f6zellikler ekleyerek botunuzu daha etkile\u015fimli hale getirebiliriz.<\/p>\n<h4>Metin D\u0131\u015f\u0131 Mesajlar G\u00f6nderme (Foto\u011fraf, Belge, Ses)<\/h4>\n<p>Telegram API, sadece metin de\u011fil, foto\u011fraf, video, belge gibi farkl\u0131 medya t\u00fcrlerini de g\u00f6ndermenize olanak tan\u0131r. Her medya t\u00fcr\u00fc i\u00e7in ayr\u0131 bir API metodu bulunur.<\/p>\n<pre><code class=\"language-ruby\">\n# ... bot.listen do |message|\n  case message.text\n  when '\/photo'\n    # Yerel bir dosyadan foto\u011fraf g\u00f6nderme\n    bot.api.send_photo(chat_id: message.chat.id, photo: Faraday::UploadIO.new('path\/to\/your\/image.jpg', 'image\/jpeg'))\n    # URL'den foto\u011fraf g\u00f6nderme\n    # bot.api.send_photo(chat_id: message.chat.id, photo: 'https:\/\/example.com\/image.jpg')\n  when '\/document'\n    bot.api.send_document(chat_id: message.chat.id, document: Faraday::UploadIO.new('path\/to\/your\/document.pdf', 'application\/pdf'))\n  end\n# ...\n<\/pre>\n<p><\/code><\/p>\n<p><code>Faraday::UploadIO.new<\/code>, yerel dosyalar\u0131 API'ye y\u00fcklemek i\u00e7in kullan\u0131l\u0131r. E\u011fer bir URL'den g\u00f6nderecekseniz, do\u011frudan URL'yi <code>photo:<\/code> veya <code>document:<\/code> parametresine verebilirsiniz.<\/p>\n<h4>Inline Klavye ve \u00d6zel Klavye Olu\u015fturma<\/h4>\n<p>Klavye se\u00e7enekleri, kullan\u0131c\u0131 etkile\u015fimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131r\u0131r. \u0130ki t\u00fcr klavye vard\u0131r:<\/p>\n<ul>\n<li><strong>\u00d6zel Klavyeler (Reply Keyboards):<\/strong> Kullan\u0131c\u0131n\u0131n metin giri\u015f alan\u0131n\u0131n alt\u0131nda g\u00f6r\u00fcnen ve \u00f6nceden tan\u0131mlanm\u0131\u015f yan\u0131tlar sunan klavyelerdir.<\/li>\n<li><strong>Inline Klavyeler:<\/strong> Mesaj\u0131n alt\u0131na g\u00f6m\u00fcl\u00fc olan ve bir URL'e y\u00f6nlendirebilen veya bir \"callback\" sorgusu tetikleyebilen d\u00fc\u011fmelerdir.<\/li>\n<\/ul>\n<pre><code class=\"language-ruby\">\n# ... bot.listen do |message|\n  case message.text\n  when '\/keyboard'\n    # \u00d6zel Klavye (Reply Keyboard)\n    kb = [\n      Telegram::Bot::Types::KeyboardButton.new(text: 'Se\u00e7enek 1'),\n      Telegram::Bot::Types::KeyboardButton.new(text: 'Se\u00e7enek 2')\n    ]\n    markup = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: kb, one_time_keyboard: true)\n    bot.api.send_message(chat_id: message.chat.id, text: 'Bir se\u00e7enek se\u00e7in:', reply_markup: markup)\n  when '\/inline_keyboard'\n    # Inline Klavye\n    kb = [\n      Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Google', url: 'https:\/\/www.google.com'),\n      Telegram::Bot::Types::InlineKeyboardButton.new(text: 'Veri G\u00f6nder', callback_data: 'data_sent')\n    ]\n    markup = Telegram::Bot::Types::InlineKeyboardMarkup.new(inline_keyboard: [kb])\n    bot.api.send_message(chat_id: message.chat.id, text: 'Inline klavye:', reply_markup: markup)\n  end\n# ...\n<\/pre>\n<p><\/code><\/p>\n<h4>Geri \u00c7a\u011fr\u0131 Sorgular\u0131n\u0131 (Callback Queries) \u0130\u015fleme<\/h4>\n<p>Inline klavyelerdeki <code>callback_data<\/code> ile g\u00f6nderilen verileri yakalamak i\u00e7in <code>bot.listen<\/code> blo\u011funda <code>callback_query<\/code> tipindeki mesajlar\u0131 dinlemeniz gerekir.<\/p>\n<pre><code class=\"language-ruby\">\n# ...\nbot.listen do |message|\n  case message\n  when Telegram::Bot::Types::CallbackQuery\n    if message.data == 'data_sent'\n      bot.api.answer_callback_query(callback_query_id: message.id, text: 'Veri ba\u015far\u0131yla al\u0131nd\u0131!')\n      bot.api.send_message(chat_id: message.from.id, text: 'Inline klavye verisi i\u015flendi.')\n    end\n  when Telegram::Bot::Types::Message\n    # ... (\u00f6nceki mesaj i\u015fleme kodlar\u0131)\n  end\nend\n# ...\n<\/pre>\n<p><\/code><\/p>\n<p><code>answer_callback_query<\/code>, kullan\u0131c\u0131n\u0131n d\u00fc\u011fmeye t\u0131klad\u0131ktan sonra g\u00f6rd\u00fc\u011f\u00fc k\u00fc\u00e7\u00fck bildirim (toast) mesaj\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>Bot Komutlar\u0131 ve Durum Y\u00f6netimi<\/h3>\n<p>Daha karma\u015f\u0131k botlar, kullan\u0131c\u0131lar\u0131n durumunu y\u00f6netmeli ve birden fazla komutu daha d\u00fczenli bir \u015fekilde i\u015flemelidir.<\/p>\n<h4>Birden Fazla Komutu Etkin Bir \u015eekilde Y\u00f6netme<\/h4>\n<p>\u00c7ok say\u0131da komutunuz oldu\u011funda, <code>case<\/code> yap\u0131s\u0131 karma\u015f\u0131k hale gelebilir. Daha mod\u00fcler bir yakla\u015f\u0131m, her komut i\u00e7in ayr\u0131 bir metod veya s\u0131n\u0131f kullanmakt\u0131r.<\/p>\n<pre><code class=\"language-ruby\">\n# lib\/commands\/start_command.rb\nmodule Commands\n  class StartCommand\n    def self.call(bot, message)\n      bot.api.send_message(chat_id: message.chat.id, text: \"Merhaba, #{message.from.first_name}! Ben bir Ruby botuyum.\")\n    end\n  end\nend\n\n# bot.rb (ana dosya)\n# ...\nrequire_relative 'lib\/commands\/start_command'\n\nbot.listen do |message|\n  case message.text\n  when '\/start'\n    Commands::StartCommand.call(bot, message)\n  when '\/help'\n    # ...\n  end\nend\n<\/pre>\n<p><\/code><\/p>\n<h4>Kullan\u0131c\u0131 Durumunu Kaydetme ve Y\u00f6netme (\u00d6rn: Bir Form Doldurma)<\/h4>\n<p>Bir kullan\u0131c\u0131n\u0131n bir dizi ad\u0131m\u0131 takip etmesini gerektiren (\u00f6rne\u011fin, bir form doldurma) durumlarda, kullan\u0131c\u0131n\u0131n mevcut durumunu takip etmeniz gerekir. Bunu basit\u00e7e bir Ruby hash'i veya daha kal\u0131c\u0131 bir \u00e7\u00f6z\u00fcm i\u00e7in bir veritaban\u0131 ile yapabilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">\n# Basit bir durum y\u00f6netimi \u00f6rne\u011fi (bellekte)\nuser_states = {} # { chat_id: :waiting_for_name, ... }\n\n# ... bot.listen do |message|\n  chat_id = message.chat.id\n  case message.text\n  when '\/register'\n    user_states[chat_id] = :waiting_for_name\n    bot.api.send_message(chat_id: chat_id, text: 'L\u00fctfen ad\u0131n\u0131z\u0131 girin:')\n  else\n    case user_states[chat_id]\n    when :waiting_for_name\n      user_name = message.text\n      # Ad\u0131 kaydet, sonraki ad\u0131ma ge\u00e7\n      user_states[chat_id] = :waiting_for_email\n      bot.api.send_message(chat_id: chat_id, text: \"Ad\u0131n\u0131z #{user_name} olarak kaydedildi. \u015eimdi e-posta adresinizi girin:\")\n    when :waiting_for_email\n      user_email = message.text\n      # E-postay\u0131 kaydet, i\u015flemi tamamla\n      user_states.delete(chat_id) # Durumu temizle\n      bot.api.send_message(chat_id: chat_id, text: \"E-posta adresiniz #{user_email} olarak kaydedildi. Kay\u0131t tamamland\u0131!\")\n    else\n      # ... (di\u011fer komutlar)\n    end\n  end\nend\n<\/pre>\n<p><\/code><\/p>\n<h4>Veritaban\u0131 Entegrasyonu (Basit bir \u00f6rnek)<\/h4>\n<p>Daha kal\u0131c\u0131 ve \u00f6l\u00e7eklenebilir durum y\u00f6netimi i\u00e7in bir veritaban\u0131 kullanmak idealdir. Ruby'de SQLite i\u00e7in <code>sqlite3<\/code> gem'ini veya PostgreSQL i\u00e7in <code>pg<\/code> gem'ini ActiveRecord ile kullanabilirsiniz.<\/p>\n<pre><code class=\"language-ruby\">\n# Gemfile'a ekleyin:\n# gem 'activerecord', '~> 7.0'\n# gem 'sqlite3', '~> 1.4'\n\n# config\/database.yml\n# development:\n#   adapter: sqlite3\n#   database: db\/development.sqlite3\n\n# db\/migrate\/20231027120000_create_users.rb\n# class CreateUsers < ActiveRecord::Migration[7.0]\n#   def change\n#     create_table :users do |t|\n#       t.bigint :telegram_chat_id, null: false, index: { unique: true }\n#       t.string :name\n#       t.string :email\n#       t.string :state # \u00d6rne\u011fin: 'waiting_for_name', 'waiting_for_email'\n#       t.timestamps\n#     end\n#   end\n# end\n\n# app\/models\/user.rb\n# class User < ActiveRecord::Base\n#   # ...\n# end\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, botunuzda kullan\u0131c\u0131 durumunu veritaban\u0131ndan okuyup g\u00fcncelleyebilirsiniz.<\/p>\n<h3>Botu Da\u011f\u0131tma ve Canl\u0131ya Alma<\/h3>\n<p>Botunuzu geli\u015ftirdikten sonra, onu s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda tutmak i\u00e7in bir sunucuya da\u011f\u0131tman\u0131z gerekir.<\/p>\n<h4>Long Polling ile Yerel \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Geli\u015ftirme a\u015famas\u0131nda botunuzu yerel makinenizde <code>ruby bot.rb<\/code> komutuyla \u00e7al\u0131\u015ft\u0131rabilirsiniz. Ancak bu, makineniz a\u00e7\u0131k oldu\u011fu s\u00fcrece \u00e7al\u0131\u015f\u0131r ve internet ba\u011flant\u0131n\u0131z kesildi\u011finde durur.<\/p>\n<h4>Webhook ile Da\u011f\u0131t\u0131m\u0131n Avantajlar\u0131<\/h4>\n<p>Canl\u0131 bir ortamda, Webhook kullanmak genellikle daha verimlidir. Telegram, yeni bir mesaj geldi\u011finde botunuzun belirli bir URL'sine HTTP POST iste\u011fi g\u00f6nderir. Bu, botunuzun s\u00fcrekli Telegram sunucular\u0131n\u0131 sorgulamas\u0131na gerek kalmadan sadece bir olay tetiklendi\u011finde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Webhook kullanmak i\u00e7in, botunuzun bir HTTP sunucusu (\u00f6rne\u011fin Sinatra veya Rails ile) \u00e7al\u0131\u015ft\u0131rmas\u0131 ve Telegram'a bu sunucunun URL'sini bildirmesi gerekir.<\/p>\n<pre><code class=\"language-ruby\">\n# Sinatra ile basit bir Webhook sunucusu \u00f6rne\u011fi\n# Gemfile'a ekleyin: gem 'sinatra'\n\n# app.rb\nrequire 'sinatra'\nrequire 'telegram\/bot'\nrequire 'dotenv\/load'\n\ntoken = ENV['TELEGRAM_BOT_TOKEN']\n\npost \"\/#{token}\" do\n  # Telegram'dan gelen JSON verisini ayr\u0131\u015ft\u0131r\n  update = Telegram::Bot::Types::Update.new(JSON.parse(request.body.read))\n  message = update.message\n\n  Telegram::Bot::Client.run(token) do |bot|\n    if message && message.text == '\/start'\n      bot.api.send_message(chat_id: message.chat.id, text: \"Merhaba Webhook!\")\n    end\n  end\n  'OK' # Telegram'a ba\u015far\u0131l\u0131 yan\u0131t g\u00f6nder\nend\n\n# Telegram'a webhook URL'ini bildirme (bir kez \u00e7al\u0131\u015ft\u0131r\u0131lmal\u0131)\n# require 'net\/http'\n# uri = URI(\"https:\/\/api.telegram.org\/bot#{token}\/setWebhook?url=https:\/\/YOUR_DOMAIN\/YOUR_BOT_TOKEN\")\n# Net::HTTP.get(uri)\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte <code>YOUR_DOMAIN<\/code> yerine botunuzun canl\u0131da \u00e7al\u0131\u015ft\u0131\u011f\u0131 alan ad\u0131n\u0131, <code>YOUR_BOT_TOKEN<\/code> yerine de botunuzun token'\u0131n\u0131 yazmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Hosting Se\u00e7enekleri (Heroku, Render, VPS)<\/h4>\n<ul>\n<li><strong>Heroku\/Render:<\/strong> PaaS (Platform as a Service) sa\u011flay\u0131c\u0131lar\u0131, Ruby uygulamalar\u0131n\u0131 da\u011f\u0131tmak i\u00e7in pop\u00fcler ve kullan\u0131m\u0131 kolay se\u00e7eneklerdir. \u00dccretsiz katmanlar\u0131 ba\u015flang\u0131\u00e7 i\u00e7in yeterli olabilir. Webhook kullanmak i\u00e7in idealdir.<\/li>\n<li><strong>VPS (Virtual Private Server):<\/strong> Daha fazla kontrol ve esneklik sa\u011flar. Kendi sunucunuzu kurar ve botunuzu bir arka plan s\u00fcreci olarak (\u00f6rne\u011fin, <code>systemd<\/code> veya <code>pm2<\/code> ile) \u00e7al\u0131\u015ft\u0131r\u0131rs\u0131n\u0131z. Long Polling veya Webhook i\u00e7in kullan\u0131labilir.<\/li>\n<\/ul>\n<h3>Hata Y\u00f6netimi ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Her yaz\u0131l\u0131m projesinde oldu\u011fu gibi, botunuzda da hata y\u00f6netimi ve g\u00fcvenlik \u00f6nemlidir.<\/p>\n<h4>Hata Yakalama ve Loglama<\/h4>\n<p>Botunuzun beklenmedik durumlarda \u00e7\u00f6kmesini \u00f6nlemek ve sorunlar\u0131 tespit etmek i\u00e7in hata yakalama (<code>begin...rescue<\/code>) ve loglama kullan\u0131n.<\/p>\n<pre><code class=\"language-ruby\">\n# ...\nbot.listen do |message|\n  begin\n    # ... mesaj i\u015fleme kodu ...\n  rescue => e\n    puts \"Bir hata olu\u015ftu: #{e.message}\"\n    # Hata detaylar\u0131n\u0131 bir log dosyas\u0131na yazabilir veya size Telegram \u00fczerinden bildirebilirsiniz.\n    bot.api.send_message(chat_id: YOUR_ADMIN_CHAT_ID, text: \"Botta bir hata olu\u015ftu: #{e.message}\")\n  end\nend\n# ...\n<\/pre>\n<p><\/code><\/p>\n<h4>API Token'\u0131n\u0131 G\u00fcvende Tutma<\/h4>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, API token'\u0131n\u0131z\u0131 asla do\u011frudan kodunuzda sabit bir de\u011fer olarak tutmay\u0131n. Daima ortam de\u011fi\u015fkenleri (<code>ENV['TELEGRAM_BOT_TOKEN']<\/code>) veya g\u00fcvenli bir yap\u0131land\u0131rma servisi kullan\u0131n. <code>.env<\/code> dosyas\u0131n\u0131 <code>.gitignore<\/code>'a eklemeyi unutmay\u0131n.<\/p>\n<h4>Kullan\u0131c\u0131 Verilerini \u0130\u015fleme ve Gizlilik<\/h4>\n<p>Botunuz kullan\u0131c\u0131 verilerini (mesajlar, kullan\u0131c\u0131 ID'leri, isimler vb.) topluyorsa, bu verileri nas\u0131l saklad\u0131\u011f\u0131n\u0131z ve i\u015fledi\u011finiz konusunda dikkatli olun. GDPR ve di\u011fer gizlilik d\u00fczenlemelerine uyun. Yaln\u0131zca ihtiyac\u0131n\u0131z olan verileri toplay\u0131n ve g\u00fcvenli bir \u015fekilde saklay\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Ruby ile bir Telegram botu olu\u015fturman\u0131n temel ad\u0131mlar\u0131n\u0131, geli\u015fmi\u015f \u00f6zelliklerini, durum y\u00f6netimini ve da\u011f\u0131t\u0131m stratejilerini \u00f6\u011frendiniz. Ruby'nin esnekli\u011fi ve <code>telegram-bot-ruby<\/code> gem'inin sundu\u011fu kolayl\u0131klar sayesinde, hayal g\u00fcc\u00fcn\u00fczle s\u0131n\u0131rl\u0131 \u00e7e\u015fitli botlar geli\u015ftirebilirsiniz. Unutmay\u0131n, pratik yapmak ve farkl\u0131 API metodlar\u0131n\u0131 denemek, bot geli\u015ftirme becerilerinizi ilerletmenin en iyi yoludur. Kendi botunuzu olu\u015ftururken iyi e\u011flenceler!<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<dl>\n<dt>Telegram botu nedir?<\/dt>\n<dd>Telegram botlar\u0131, Telegram platformunda kullan\u0131c\u0131larla etkile\u015fim kuran, otomatik g\u00f6revler ger\u00e7ekle\u015ftiren ve \u00e7e\u015fitli servisleri entegre eden \u00f6zel hesaplard\u0131r. Bir\u00e7ok farkl\u0131 ama\u00e7 i\u00e7in kullan\u0131labilirler.<\/dd>\n<dt>Ruby ile bot yapmak neden iyi bir fikir?<\/dt>\n<dd>Ruby, okunabilir s\u00f6zdizimi, geli\u015ftirici dostu yap\u0131s\u0131 ve zengin gem (k\u00fct\u00fcphane) ekosistemi sayesinde h\u0131zl\u0131 ve etkili bot geli\u015ftirme i\u00e7in harika bir dildir. <code>telegram-bot-ruby<\/code> gem'i, API ile etkile\u015fimi olduk\u00e7a basitle\u015ftirir.<\/dd>\n<dt>BotFather nedir ve neden gereklidir?<\/dt>\n<dd>BotFather, Telegram'da yeni botlar olu\u015fturman\u0131za ve mevcut botlar\u0131n\u0131z\u0131 y\u00f6netmenize olanak tan\u0131yan resmi bir Telegram botudur. Her yeni bot i\u00e7in benzersiz bir API token'\u0131 sa\u011flar ve bu token, botunuzun Telegram API'sine eri\u015fimi i\u00e7in hayati \u00f6neme sahiptir.<\/dd>\n<dt>Botum neden \u00e7al\u0131\u015fm\u0131yor?<\/dt>\n<dd>Botunuzun \u00e7al\u0131\u015fmamas\u0131n\u0131n birka\u00e7 nedeni olabilir:<\/p>\n<ul>\n<li>API token'\u0131n\u0131z yanl\u0131\u015f veya eksik.<\/li>\n<li>\u0130nternet ba\u011flant\u0131n\u0131z yok veya karars\u0131z.<\/li>\n<li>Kodunuzda bir hata var (konsol \u00e7\u0131kt\u0131lar\u0131n\u0131 kontrol edin).<\/li>\n<li>Gerekli gem'ler (<code>telegram-bot-ruby<\/code>, <code>dotenv<\/code>) kurulu de\u011fil.<\/li>\n<li>Long Polling veya Webhook yap\u0131land\u0131rman\u0131zda bir sorun var.<\/li>\n<\/ul>\n<p>        Hata mesajlar\u0131n\u0131 dikkatlice okuyarak ve kodunuzu ad\u0131m ad\u0131m kontrol ederek sorunu bulmaya \u00e7al\u0131\u015f\u0131n.<\/dd>\n<dt>Botumu nas\u0131l canl\u0131ya alabilirim?<\/dt>\n<dd>Botunuzu canl\u0131ya almak i\u00e7in onu s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda tutacak bir sunucuya ihtiyac\u0131n\u0131z vard\u0131r. Heroku veya Render gibi PaaS (Platform as a Service) sa\u011flay\u0131c\u0131lar\u0131 veya kendi sanal sunucunuz (VPS) kullanabilirsiniz. Webhook y\u00f6ntemini kullanmak, genellikle canl\u0131 ortamlar i\u00e7in daha verimli bir yakla\u015f\u0131md\u0131r.<\/dd>\n<\/dl>\n","protected":false},"excerpt":{"rendered":"Telegram botlar\u0131, kullan\u0131c\u0131larla etkile\u015fim kuran, otomatik g\u00f6revler ger\u00e7ekle\u015ftiren ve \u00e7e\u015fitli servisleri Telegram platformuna entegre eden g\u00fc\u00e7l\u00fc &#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-37797","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m\" \/>\n<meta property=\"og:description\" content=\"Telegram botlar\u0131, kullan\u0131c\u0131larla etkile\u015fim kuran, otomatik g\u00f6revler ger\u00e7ekle\u015ftiren ve \u00e7e\u015fitli servisleri Telegram platformuna entegre eden g\u00fc\u00e7l\u00fc ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-15T14:00:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m\",\"datePublished\":\"2026-01-15T14:00:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\"},\"wordCount\":1961,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\",\"name\":\"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-15T14:00:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/","og_locale":"tr_TR","og_type":"article","og_title":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m","og_description":"Telegram botlar\u0131, kullan\u0131c\u0131larla etkile\u015fim kuran, otomatik g\u00f6revler ger\u00e7ekle\u015ftiren ve \u00e7e\u015fitli servisleri Telegram platformuna entegre eden g\u00fc\u00e7l\u00fc ...","og_url":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-15T14:00:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m","datePublished":"2026-01-15T14:00:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/"},"wordCount":1961,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/","url":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/","name":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-15T14:00:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ruby-ile-telegram-botlari-olusturma-rehberi-adim-adim-kapsamli-bir-yaklasim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ruby ile Telegram Botlar\u0131 Olu\u015fturma Rehberi: Ad\u0131m Ad\u0131m Kapsaml\u0131 Bir Yakla\u015f\u0131m"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37797"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37797\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}