Bir Telegram botu nasıl oluşturulur ve dağıtılır?

Bu makalede, Node.js ve Back4app’in backend-as-a-service ile bir Telegram botu oluşturacaksınız. Ardından, Back4app konteynerlerini kullanarak dağıtacaksınız.

Botlar, bir ağ üzerinde veya bir platformda otomatik tekrarlayan görevleri gerçekleştirebilen yazılımlardır. Telegram botları, Telegram bot API’si kullanılarak oluşturulur ve Telegram üzerinde çalışmak üzere özel olarak tasarlanmıştır.

Telegram’da hava durumu güncellemeleri veya haber başlıkları gibi bilgileri almak ve eğlence için sınavlar düzenlemek gibi çeşitli görevleri gerçekleştirmek için Telegram botları tasarlayabilirsiniz.

Ayrıca hatırlatıcıları zamanlama gibi görevleri otomatikleştirebilir ve diğer şeylerin yanı sıra basit kullanıcı kimlik doğrulaması gerçekleştirebilirler.

Geliştirme Ortamınızı Kurma

Bu makale, kullanıcıların her 6 saatte bir favori şehirleri için otomatik hava durumu güncellemeleri ayarlamalarını veya seçtikleri herhangi bir şehir için anlık hava durumu bilgisi almalarını sağlayan bir Telegram botu içeriyor.

Proje dizininizi ayarlamak için aşağıdaki komutları çalıştırın:

# proje dizininizi oluşturun
mkdir telegram-weather-bot

# cd proje dizininize girin
cd telegram-weather-bot

# npm'yi başlat
npm init -y

Yukarıdaki komutlar bir telegram-weather-bot dizini oluşturur, içine taşınır ve npm’yi başlatır.

Package.json dosyanıza, botunuzu çalıştırmak için aşağıdaki başlangıç betiğini ekleyin:

"start": "node server.js"

Ardından, bu proje için gerekli paketleri yüklemek için aşağıdaki komutu çalıştırın:

npm install axios node-telegram-bot-api dotenv node-schedule parse

Yukarıdaki komut aşağıdaki paketleri yükledi:

  • axios: Bu kütüphaneyi bir hava durumu API’sine HTTP istekleri yapmak için kullanacaksınız.
  • dotenv: Bu paket, bir .env dosyasından ortam değişkenlerini yüklemenize yardımcı olacaktır.
  • node-schedule: Görevleri zamanlamak ve hava durumu güncellemelerinizi otomatikleştirmek için bu pakete ihtiyacınız olacak.
  • parse: Back4app Parse Backend ile etkileşim kurmak için bu pakete ihtiyacınız olacak.

Şimdi, geliştirme ortamınızı kurdunuz. Ardından, Telegram’da bir bot hesabı oluşturmanız gerekir.

Telegram Bot Hesabınızı Oluşturma

Bir Telegram bot hesabı, botunuzun Telegram platformundaki kimliği olarak hizmet edecektir. Kullanıcılar bu hesap üzerinden bot ile etkileşime girebilecekler.

Telegram botunuzu oluşturmak için Telegram uygulamasını başlatın, arama çubuğunuza “BotFather” yazın ve doğrulanmış en iyi sonucu tıklayın.

Botfather Başlangıç Sayfası

BotFather, diğer botları hızlı bir şekilde geliştirmenize olanak tanıyan bir Telegram botudur. Botunuzun oluşturma sürecini başlatmak için /newbot komutunu yazın. Botunuz için bir ad ve benzersiz bir kullanıcı adı sağlayacaksınız.

Telegram BotBabası

Botunuzun adını ve kullanıcı adını verdiğinizde, BotFather bot hesabıyla etkileşime girmenize ve onu yönetmenize olanak tanıyan benzersiz bir belirteç sağlayacaktır.

Kök dizinde bir .env dosyası oluşturarak ve bot token’ını dosyaya yapıştırarak bot token’ınızı projenizde saklayın. Bunun gibi:

TELEGRAM_BOT_TOKEN = <YOUR_BOT_TOKEN>

Artık bot token’ınıza sahip olduğunuza ve projenizde sakladığınıza göre, Telegram botunuzu oluşturabilirsiniz.

Telegram Botunu Oluşturma

Bu bölüm, Telegram hava durumu botunuzu oluşturma ve komutları işleme, kullanıcı durumunu yönetme ve hava durumu API’sinden veri alma gibi işlevleri gerçekleştirmek için yüklediğiniz kitaplıkları entegre etme konusunda size yol gösterecektir.

Derleme işlemine başlamak için botunuzun dizinini aşağıdakine benzer şekilde yapılandırın:

telegram-weather-bot/
├── node_modules/          
├── src/                        
|   ├── bot.js                    # botun kullanıcıyla etkileşimini yönetme dosyası
|   ├── weather.js                # Hava durumu verilerini almak için modül 
|   ├── stateManager.js           # Back4App ile kullanıcı durumunu yönetme modülü
|   └── cityManager.js            # Kullanıcı şehir ayarlarını yönetir ve hava durumu güncellemeleri gönderir
├── .env                        
├── package.json                  
├── server.js                     # Başvurunuz için giriş noktası
└── package-lock.json            

Hava Durumu Bilgisi Alma

Hava durumu bilgilerini almak için OpenWeatherMap API‘sini kullanacaksınız.

Bu API’ye istekte bulunmak için bir API anahtarı gerekir. Bu API anahtarını almak için hesabınıza giriş yapın (veya hesabınız yoksa bir tane oluşturun).

Ardından, profilinizdeki “API Anahtarlarım” bölümüne gidin ve API Anahtarınızı kopyalayın.

OpenWeatherMap API

OpenWeatherMap’inizin API anahtarını .env dosyanızda saklayın:

OPENWEATHERMAP_TOKEN = <YOUR_OPEN_WEATHER_MAP_APIKEY>

Botun işlevselliği hava durumu bilgilerini almak etrafında döndüğünden, axios.get yöntemiyle hava durumu bilgilerini almak için OpenWeatherMap’in API’sine GET isteği yapacak bir işlev tanımlayın.

OpenWeatherMap API’sinden hava durumu bilgileri için bir GET isteği yapmak üzere aşağıdaki kod bloğunu weather.js dosyanıza ekleyin:

const axios = require('axios');
const apiKey = process.env.OPENWEATHERMAP_TOKEN;

async function getWeather(city) {
  try {
    const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`;
    const response = await axios.get(url);
    const temp = response.data.main.temp;  
    const description = response.data.weather[0].description;  
    return `The weather in ${city} is ${temp}°C with ${description}.`;
  } catch (error) {
    console.error('Error fetching weather:', error);
    throw error;
  }
}

module.exports = { getWeather } 

Yukarıdaki kod bloğu, argüman olarak bir şehir adı alan ve API’nin yanıtından sıcaklık ve hava durumu açıklamasını döndüren bir getWeather işlevi tanımlar.

Kullanıcılara her 6 saatte bir düzenli hava durumu güncellemeleri sağlamak için, tercih edilen bir şehir için hava durumu güncellemelerini döndürmek üzere getWeather işlevini çalıştıracak bir zamanlayıcı işlevi uygulamanız gerekecektir.

Hava Durumu Güncellemelerini Planlama

Tercih edilen bir şehir için hava durumu güncellemelerini döndürme işini zamanlamak için cityManager.js dosyanıza aşağıdaki kod bloğunu ekleyin:

const schedule = require('node-schedule');
const weather = require('./weather');

let userCities = {};

function setCity(chatId, city) {
  userCities[chatId] = city;
}

function init(bot) {
  schedule.scheduleJob('0 */6 * * *', function() {
    for (let chatId in userCities) {
      const city = userCities[chatId];
      weather.getWeather(city).then(response => {
        bot.sendMessage(chatId, response);
      }).catch(error => {
        bot.sendMessage(chatId, "Failed to retrieve weather.");
      });
    }
  });
}

module.exports = { setCity, init };

Yukarıdaki kod bloğu iki fonksiyon oluşturur: setCity ve init.

Kod bloğu, setCity işlevini kullanarak Telegram sohbet kimliklerini şehir adlarıyla eşleştirerek bot kullanıcılarının ilgilendiği şehirleri izlemek için bir userCities nesnesi bildirir.

Bu işlev, botunuzun hangi şehir için hava durumu güncellemeleri almak istediklerine dair kullanıcı tercihini sürdürmesini sağlar.

Kod bloğundaki init işlevi, her 6 saatte bir userCities‘de depolanan tüm sohbet kimliklerini yineleyen zamanlanmış bir görev ayarlar. init işlevi, o şehir için geçerli hava durumunu almak için hava durumu modülünü kullanır.

Botunuzun, farklı kullanıcılarını ve tercih ettikleri şehirleri takip etmek için kullanıcının durumunu sürdürmesi gerekir. Bunu Back4app’in bir hizmet olarak arka ucunu kullanarak başarabilirsiniz.

Botunuzun farklı kullanıcıları ve tercih ettikleri şehirleri takip etmesini sağlamak için, Back4app’ın arka ucunu bir hizmet olarak kullanarak bir bot kullanıcısının tercih ettiği şehri saklayın.

Back4app Arka Uç Oluşturma

Back4app’in arka ucunu bir hizmet olarak kullanmak için bir Back4app hesabına ihtiyacınız vardır. Eğer bir hesabınız yoksa, ücretsiz olarak kaydolabilirsiniz.

Hesabınıza giriş yapın ve sağ üst köşedeki “YENİ UYGULAMA” düğmesine tıklayın. Uygulamanıza bir isim verin ve “OLUŞTUR” butonuna tıklayın.

Yeni Back4app Uygulaması Oluşturun

“CREATE” butonuna tıkladıktan sonra Back4app uygulamanızı oluşturacak ve sizi uygulama kontrol paneline yönlendirecektir.

Back4app Gösterge Tablosu

Node.js projenizden Back4App üzerindeki uygulama örneğinize bağlanmak için Back4app uygulama kimlik bilgilerinizle yüklediğiniz parse SDK’yı başlatmanız gerekir: Uygulama Kimliği ve Javascript Anahtarı.

Kenar çubuğundaki ” Uygulama Ayarları “na tıklayarak “Güvenlik ve Anahtarlar” bölümüne giderek Back4app’ten Uygulama Kimliği ve JavaScript Anahtarını alın.

Bunları .env dosyanızda saklayın. Mevcut .env dosyanız aşağıdakine benzer olmalıdır:

TELEGRAM_BOT_TOKEN= "<YOUR_TELEGRAM_BOT_TOKEN_HERE>"
OPENWEATHERMAP_TOKEN= "<YOUR_OPENWEATHERMAP_TOKEN_HERE>"
BACK4APP_APP_ID= "<YOUR_BACK4APP_APP_ID_HERE>"
BACK4APP_JAVASCRIPT_KEY= "<YOUR_BACK4APP_JAVASCRIPT_KEY_HERE>"

Ardından, iki alana sahip yeni bir “UserState” sınıfı oluşturmanız gerekir: userId (string) ve state (object). Bu görevi gerçekleştirmek için Back4app’in AI aracısını kullanacaksınız.

Bu sınıfı ilgili alanlarla birlikte oluşturmak için ekranınızdaki “AI Agent” sekmesine gidin ve aşağıdaki istemi agent’a verin:

Create a new class, "UserState," in my Back4app application with the APP ID “<YOUR_BACK4APP_APP_ID_HERE>”. The "UserState" class will have two fields: userId (string) and state (object).

Aşağıdaki resme benzer bir yanıt almalısınız:

Yapay zeka ajanı yanıtı

Back4app kontrol panelinizi kontrol ederseniz, UserState sınıfının başarıyla oluşturulduğunu görmelisiniz.

Telegram Botunuzda Kullanıcı Durumunu Yönetme

Botun kullanıcısı ile bot arasındaki etkileşim akışını yönetmek için, botun kullanıcıdan hangi komutu beklediğini belirten bir kullanıcı durumu tanımlamanız gerekir.

Bot, /start komutu dışında iki ana komutu anlar. Her kullanıcı etkileşimi (komutlar dahil), UserState sınıfında sohbet kimliği ile birlikte saklanan kullanıcının durumunda bir güncellemeyi tetikler.

Bu durum yönetimi, botun bir görüşmedeki her kullanıcı için, hava durumu güncellemeleri için tercih ettikleri şehir gibi belirli ayrıntıları hatırlamasına olanak tanır.

Back4App veritabanınızda oluşturduğunuz UserState sınıfı ile kullanıcı durumlarını izlemeye başlamak için Parse SDK’yı kimlik bilgilerinizle başlatmanız gerekir.

Parse SDK’yı Back4app Parse Backend’e bağlanmak için gerekli kimlik bilgileriyle başlatmak üzere aşağıdaki kod bloğunu stateManager.js dosyasına ekleyin:

// stateManager.js
const Parse = require('parse/node');

Parse.initialize(
  process.env.BACK4APP_APP_ID,
  process.env.BACK4APP_JAVASCRIPT_KEY
);

Parse.serverURL = '<https://parseapi.back4app.com/>';

Ardından, stateManager.js dosyanızda Back4app Parse arka ucundaki UserState sınıfının şemasını temsil edecek bir Parse nesnesi tanımlayarak botunuzun kullanıcının veritabanında depolanan durumuyla etkileşime girmesini sağlayın.

Bu şekilde:

// stateManager.js
const UserState = Parse.Object.extend('UserState');

Ardından, botunuzun veritabanında depolanan kullanıcı kimliğine göre belirli bir kullanıcının mevcut konuşma durumunu almasını sağlamanız gerekecektir.

Bir kullanıcının durumunu almak için, veritabanında kayıtlı durumu bulmak üzere UserState sınıfında kullanıcının kimliğiyle bir sorgu çalıştırmanız gerekecektir.

Bu şekilde:

// stateManager.js
async function getUserState(userId) {
  const query = new Parse.Query(UserState);
  query.equalTo('userId', userId.toString());
  const userState = await query.first();
  return userState ? userState.get('state') : null;
}

Yukarıdaki kod bloğu, kullanıcı durumu verilerini eşzamansız olarak alan bir getUserState işlevi tanımlar.

İşlev, bağımsız değişkene(userId) dayalı olarak kullanıcının durum nesnesini bulmak için bir sorgu oluşturur ve bulunursa kullanıcı durumunu alır.

Bir kullanıcının durumunu aldıktan sonra, botunuzun bu kullanıcıyla ilişkili konuşma durumunu kullanıcı kimliğine ve sağlanan durum bilgilerine göre güncellemesini sağlamanız gerekecektir.

Örneğin, konuşma durumunun güncellenmesi, botun düzenli hava durumu güncellemelerini almak için tercih edilen şehri güncellemesini sağlayacaktır.

Bu şekilde:

// stateManager.js
async function setUserState(userId, state) {
  const query = new Parse.Query(UserState);
  query.equalTo('userId', userId.toString());
  let userState = await query.first();

  if (!userState) {
    userState = new UserState();
    userState.set('userId', userId.toString());
  }

  userState.set('state', state);
  await userState.save();
}

Yukarıdaki kod bloğundaki işlev, userId‘ye dayalı olarak kullanıcı durumu nesnesini bulmak için bir sorgu oluşturur, yoksa yeni bir UserState nesnesi oluşturur, durum özniteliğini ayarlar ve nesneyi veritabanına kaydeder.

Ardından, stateManager.js dosyanıza aşağıdaki kod bloğunu ekleyerek kullanıcının durumunu sıfırlamak için bir işlev tanımlayın:

// stateManager.js
async function resetUserState(userId) {
  await setUserState(userId, {});
}

resetUserState işlevi, kullanıcının veritabanındaki durumunu sıfırlamak için eşzamansız olarak kullanıcının durumunu boş bir nesneye {} ayarlar.

Eski ve yeni bot kullanıcınızın eylemlerini takip etmek için bir state nesnesinin her zaman mevcut olduğundan emin olun. Aşağıdaki kod bloğunu stateManager.js dosyasına ekleyin:

// stateManager.js
async function ensureUserState(userId) {
  let state = await getUserState(userId);
  if (!state) {
    await setUserState(userId, {});
  }
}

Kod bloğu, kullanıcı kimliğine dayalı olarak durum nesnesini alan ve Back4app Parse arka ucundaki UserState sınıfında sağlanan kullanıcı kimliği için kullanıcı durumu verilerinin var olduğundan emin olan bir ensureUserState işlevi tanımlar.

Kullanıcı durumunu getUserState işleviyle alır ve durum yoksa setUserState işlevini kullanarak durumu boş bir nesneye {} ayarlar.

Diğer Javascript kaynak dosyalarında kullanabilmeniz için tüm fonksiyonları dışa aktarın:

// stateManager.js
module.exports = {
  getUserState,
  setUserState,
  resetUserState,
  ensureUserState,
};

Bot ile Kullanıcı Etkileşimini Yönetme

Botunuzun start, getWeather ve setCity komutlarını dinlemesini sağlamak için, geri arama işlevlerini çalıştırmak üzere metni üç komutla eşleştirecek olay dinleyicileri tanımlayacaksınız.

Bu, botun komutlarla ilgili görevleri yerine getirmesini sağlayacaktır.

Botunuzun davranışını tanımlamanızı sağlamak üzere Telegram Bot API ile etkileşim kurmak için TelegramBot sınıfını node-telegram-bot-api kütüphanesinden içe aktarın ve sınıfın yeni bir örneğini oluşturun:

// bot.js
const TelegramBot = require('node-telegram-bot-api');
const token = process.env.TELEGRAM_BOT_TOKEN;
const bot = new TelegramBot(token, { polling: true });

Yukarıdaki kod bloğu, iki bağımsız değişkenle TelegramBot sınıfının yeni bir örneğini oluşturur: bot belirteci ve bir nesne.

Nesne, botun Telegram sunucularından gelen mesajları ve güncellemeleri sürekli olarak kontrol etmesini sağlamak için yoklama değerini true olarak ayarlar.

Ardından, bu projede oluşturduğunuz modülleri içe aktarın. Bu modülleri, botun hava durumu güncellemelerini alma, tercih edilen bir şehir belirleme ve bir kullanıcının durumunu yönetme gibi işlevlerini uygulamak için kullanacaksınız.

Gerekli modülleri içe aktarmak için aşağıdaki kodu aşağıya ekleyin:

// bot.js
const weather = require('./weather');
const cityManager = require('./cityManager');
const stateManager = require('./stateManager');

Yukarıdaki kod bloğu, tüm kaynak dosyalarda oluşturduğunuz işlevleri içe aktararak bu işlevleri bot.js dosyanızda çağırmanıza olanak tanır.

Bir komut ayarlamak için TelegramBot sınıfında bulunan onText yöntemini kullanırsınız. Bu yöntem, bazı mantıkları gerçekleştirmek üzere bir geri arama işlevi uygulamak için bir dinleyici ayarlar.

Botun onText yöntemiyle aktif olarak dinleyeceği bir /start komut işleyicisi ayarlamak için aşağıdaki kod bloğunu bot.js dosyanıza ekleyin:

// bot.js

bot.onText(/\\/start/, async (msg) => {
    const welcomeMessage = "Welcome to the Weather Bot! Use the commands below to interact:\\n" +
    "/setCity - Set your preferred city for weather updates.\\n" +
    "/getWeather - Get instant weather information for any city.\\n";
    await bot.sendMessage(msg.chat.id, welcomeMessage);
    stateManager.ensureUserState(msg.chat.id);
});

Yukarıdaki kod bloğu, botun bir geri arama işlevi çalıştırmasını ve kullanıcıya botun nasıl çalıştığını anlatan bir hoş geldiniz mesajı göndermesini sağlayacaktır.

Bot, ensureUserState işleviyle kullanıcının ilk durumunu ayarlar ve her kullanıcı etkileşimi için temiz bir sayfa sağlar.

Ardından, botun onText yöntemiyle aktif olarak dinleyeceği bir /setCity komut işleyicisi ayarlamak için aşağıdaki kod bloğunu bot .js dosyanıza ekleyin:

// bot.js

bot.onText(/\\/setCity$/, async (msg) => {
    stateManager.setUserState(msg.chat.id, { expect: 'SET_CITY' });
    bot.sendMessage(msg.chat.id, "Which city do you want to set as your preferred city for weather updates?");
});

Yukarıdaki kod bloğu, kullanıcıların"/setCity” komutuyla hava durumu güncellemeleri için tercih ettikleri şehri belirlemelerine olanak tanır.

Bot bu komutu aldıktan sonra setUserState fonksiyonunu kullanarak kullanıcının durumunu “SET_CITY” olarak günceller ve kullanıcıdan istediği şehri girmesini ister.

Botun onText yöntemiyle aktif olarak dinleyeceği bir /getWeather komut işleyicisi ayarlamak için aşağıdaki kod bloğunu bot.js dosyanıza ekleyin:

// bot.js
bot.onText(/\\/getWeather$/, async (msg) => {
    stateManager.setUserState(msg.chat.id, { expect: 'GET_WEATHER' });
    bot.sendMessage(msg.chat.id, "Which city do you want to get weather information for?");
});

/getWeather” komutu, botun kullanıcının durumunu “GET_WEATHER” olarak güncellemesini tetikler ve kullanıcıdan anında hava durumu bilgisi istediği bir şehir belirtmesini ister.

Gelen Mesajları İşleme

Telegram botunuza gelen mesajları işlemek için, bot yeni bir mesaj aldığında bir geri arama işlevini tetikleyen bir olay dinleyicisi ayarlamanız gerekecektir.

Komutları ve kullanıcı yanıtlarını dinlemek üzere bir mesaj işleyici ayarlamak için aşağıdaki kod bloğunu bot.js dosyanıza ekleyin:

// bot.js

// Handle incoming messages
bot.on('message', async (msg) => {
    if (msg.text.startsWith('/')) {
        // If the message is a command, reset the user state
        stateManager.resetUserState(msg.chat.id);
    } else {
        // If it's not a command, check user state
        const state = await stateManager.getUserState(msg.chat.id);
        if (state && state.expect === 'SET_CITY') {
            // If expecting SET_CITY, set city and reset state
            const city = msg.text;
            cityManager.setCity(msg.chat.id, city);
            bot.sendMessage(msg.chat.id, `City set to ${city}. You will receive weather updates every 2 minutes.`);
            stateManager.resetUserState(msg.chat.id);
        } else if (state && state.expect === 'GET_WEATHER') {
            // If expecting GET_WEATHER, get weather and reset state
            const city = msg.text;
            weather.getWeather(city).then(response => {
                bot.sendMessage(msg.chat.id, response);
            }).catch(error => {
                bot.sendMessage(msg.chat.id, "Failed to retrieve weather.");
            });
            stateManager.resetUserState(msg.chat.id);
        }
    }
});

// Initialize the init function from cityManager.js for regular weather updates
cityManager.init(bot);

Kod bloğu, kendisine gönderilen metin mesajlarını dinleyen ve etkileşim mantığının çekirdeği olarak hareket eden genel bir mesaj işleyici kurar.

Bir mesaj ileri eğik çizgi (“/”) ile başlıyorsa, bu bir komut olarak kabul edilir. Bu durumda, işleyici yeni komut için yeni bir başlangıç sağlamak üzere kullanıcının durumunu sıfırlar.

Aksi takdirde, işleyici kullanıcının niyetini anlamak için kullanıcının mevcut durumunu(stateManager.getUserState) kontrol eder.

Kullanıcı “/setCity” komutunu iletirse, bot işleyicisi seçilen şehri saklamak için cityManager.setCity komutunu kullanır ve güncellemeyi onaylar.

Kullanıcı “/getWeather” komutunu iletirse, işleyici weather.getWeather işlevini kullanarak sağlanan şehir için hava durumu bilgilerini alır ve yanıtı kullanıcıya geri gönderir.

Yukarıdaki kod bloğu daha sonra tercih edilen bir şehir için hava durumu güncellemelerini alma zamanlanmış görevini çalıştırmak için cityManager.init(bot) ‘u çalıştırır.

Artık botunuzun mantığını ele almayı tamamladığınıza göre, bir Back4app konteynerine dağıttığınızda çalışmasına izin verecek bir sunucu kurun.

Giriş Dosyası Oluşturma

Tüm bot uygulamasını başlatacak bir giriş dosyası oluşturacaksınız. Bu dosya iki işleve hizmet edecektir.

  • Giriş dosyası, botunuzun Telegram’ın API’si ile nasıl etkileşime girdiğini ve kullanıcı mesajlarına nasıl yanıt verdiğini işleyen JavaScript dosyasını gerektirerek botun mantığını çalıştıracaktır.
  • Giriş dosyası ayrıca botunuzun bir Back4app konteynerinde çalışmasına izin vermek için bir sunucu kuracaktır. Back4app konteynerleri, uygulamanızın dağıtımının başarılı olması için açık portlara ihtiyaç duyar.

Proje dizininizdeki server.js dosyasına gidin. Bu dosya sunucunun oluşturulmasını idare edecektir. Aşağıdaki kod bloğunu server.js dosyasına ekleyin:

const http = require('http');
require('./src/bot'); // Import bot logic
const port = 3000;

http
  .createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('My Telegram bot is running\\n');
  })
  .listen(port, () => {
    console.log(`Server running on port ${port}`);
  });

Yukarıdaki kod bloğu, basit bir HTTP sunucusu oluşturarak çalışacak bir Telegram botu kurar. Bu sunucu, botun konteyner ortamında çalışmasına izin veren bir giriş noktası görevi görür.

Betik, botunuzun çekirdek mantığını içe aktarır ve botunuzun bir Back4app konteynerinde konuşlandırılmasına izin vermek için bir Back4app bağlantı noktası belirtir.

Giriş dosyasını oluşturduktan sonra, Telegram botunu bir Back4app konteynerine dağıtmadan önce yerel olarak test edebilirsiniz.

Telegram Botunu Test Etme

Aşağıdaki komutu çalıştırarak Telegram botunuzu başlatın:

node server.js

Botunuzla etkileşim kurmak için Telegram uygulamasını açın ve arama çubuğunda botunuzun adını arayın. Botunuzla sohbete girin ve /start komutunu gönderin.

Bot bir karşılama mesajı ve bir komut listesi ile yanıt vermelidir. Bota bir komut gönderin.

Telegram Botu için Hava Durumu Bilgileri

Bot, tercih ettiğiniz şehri ayarlamanıza ve /setCity komutuyla düzenli hava durumu güncellemeleri almanıza olanak tanır.

Yukarıdaki resimde gösterildiği gibi /getWeather komutu, belirli bir şehir için hava durumu bilgilerini anında alabilir.

Bot, yukarıdaki resimde gösterilene benzer şekilde davranmalı, komutlarınıza yanıt vermeli ve amaçlandığı gibi sizinle etkileşime girmelidir.

Telegram Botunu Back4App Konteynerlerine Dağıtma

Botunuzu test ettikten ve düzgün çalıştığından emin olduktan sonra, Back4app konteynerlerine dağıtabilirsiniz. Bunu yapmak için öncelikle projeniz için bir Dockerfile oluşturmanız gerekecektir.

Projenizin kök dizininde bir Dockerfile dosyası oluşturun ve aşağıdaki kod bloğunu bu dosyaya ekleyin:

# Specify base image
FROM node:18-alpine

# Specify the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

# Run the app
CMD ["npm", "start"]

Docker dosyasını oluşturduktan sonra, yerel deponuzu GitHub’a göndererek Back4app konteynerlerine dağıtmak üzere erişilebilir hale getirin.

Ardından, Back4App Containers Git Hub Uygulamasını GitHub hesabınıza yükleyin ve uygulamaya uygulamanızın kod deposuna erişmesi için gerekli izinleri verin.

GitHub yapılandırmanızı tamamladıktan sonra Back4app ana sayfasına gidin ve ekranınızın sağ üst köşesindeki “Yeni Uygulama” düğmesine tıklayın.

Bu sizi, oluşturmak istediğiniz uygulama türünü seçmeniz gereken bir başlatma ekranına götürecektir. Aşağıdaki resimde gösterildiği gibi Back4app aracı seçeneğini seçin.

Back4app'te Yeni bir uygulama oluşturun

Back4app Agent seçeneğini seçtiğinizde, Back4app AI agent sayfasına yönlendirileceksiniz.

Uygulamanızı Back4app konteynerlerine dağıtmak için aşağıdaki komut istemini girin:

Deploy my "YOUR_REPOSITORY_URL" repository on GitHub to Back4App Containers.
Here are the required environmental variables:
TELEGRAM_BOT_TOKEN = "TELEGRAM_BOT_TOKEN"
OPENWEATHERMAP_TOKEN = "WEATHER_API_TOKEN"
BACK4APP_APP_ID = "BACK4APP_APP_ID"
BACK4APP_JAVASCRIPT_KEY = "BACK4APP_JAVASCRIPT_KEY"

Yer tutucuları gerçek değerleriyle değiştirin. Yukarıdaki komut istemi dağıtım sürecinizi başlatacaktır. Tamamlandığında, AI aracısı yanıt vererek başarılı olduğunu veya dağıtımın beklemede olduğunu belirtecektir.

Aşağıdakine benzer bir yanıt almanız gerekir:

Yapay zeka ajanı yanıtı

Bekleyen bir dağıtım alırsanız, uygulamanızın dağıtım durumunu Back4app konteyner kontrol panelinizden izleyebilirsiniz. Alternatif olarak, uygulamanızı Back4app konteynerlerine manuel olarak dağıtabilirsiniz.

Sonuç

Bu makalede, Node.js ile bir Telegram botunun nasıl oluşturulacağını öğrendiniz. Bir Telegram bot hesabının nasıl oluşturulacağını, bot komutlarının nasıl işleneceğini ve kullanıcı etkileşimlerinin nasıl ele alınacağını keşfettiniz.

Ayrıca, Back4app AI aracısının yardımıyla botunuz için bir arka uç oluşturdunuz, bu da kullanıcı durumunu etkili bir şekilde yönetmenizi ve kullanıcının hava durumu güncellemelerini düzenli olarak almak için tercih ettiği şehir gibi bilgileri konuşmalarda saklamanızı sağladı.

Kodun tamamını bu GitHub deposunda bulabilirsiniz.


Leave a reply

Your email address will not be published.