Polling yoki Webhook: Telegram Bot Uchun Qaysi Biri Afzal?

Muallif: Javohir Abdullayev · · Telegram botlar

Polling yoki Webhook: Telegram Bot Uchun Qaysi Biri Afzal?

Telegram Bot Arxitekturasida Muhim Tanlov

Telegram bot yaratishni boshlagan har bir dasturchi dastlabki bosqichdayoq fundamental savolga duch keladi: bot yangi xabarlarni qanday usulda qabul qilishi kerak? Telegram Bot API dasturchilarga buning uchun ikkita mexanizmni taqdim etadi: Long Polling va Webhook. Bir qarashda ikkala usul ham bitta vazifani bajarsa-da, ularning ishlash mantig'i, serverga tushadigan yuklama va masshtablanish imkoniyatlari tubdan farq qiladi. Ushbu tahlilda biz har ikki yondashuvning ichki mexanizmlarini, kuchli va zaif tomonlarini hamda real loyihalarda qaysi birini tanlash kerakligini batafsil ko'rib chiqamiz.

Long Polling: Ishlash Mexanizmi va Xususiyatlari

Long Polling — bu eng sodda va ko'p tarqalgan yondashuv. Bu usulda sizning botingiz Telegram serveriga getUpdates metodi orqali muntazam ravishda HTTP GET so'rov yuboradi. Telegram serveri yangi xabar kelguncha ma'lum vaqt (timeout) kutadi va xabar tushishi bilan uni botingizga qaytaradi. So'ngra sizning bot kodingiz yangilanishni qayta ishlab, darhol yangi so'rov yuboradi.

Long Polling Afzalliklari

  • Oson ishga tushirish: Sizga ommaviy IP manzil (public IP) yoki domen nomi kerak bo'lmaydi. Botni shaxsiy noutbukingizda yoki ichki lokal tarmoqda hech qanday qo'shimcha sozlamalarsiz yurgizishingiz mumkin.
  • SSL sertifikat talab qilinmaydi: HTTPS sozlash, Let's Encrypt yoki Certbot kabi vositalar bilan bosh og'rig'i bo'lmaydi.
  • Firewall va xavfsizlik: Serveringizda tashqaridan keluvchi (inbound) portlarni ochish talab etilmaydi, chunki aloqani har doim sizning botingiz boshlab beradi.

Long Polling Kamchiliklari

  • Resurs isrofi: Bot tinimsiz HTTP so'rovlar yuborib turadi. Foydalanuvchilar yo'q bo'lgan kechki paytlarda ham tarmoq trafigi va CPU resursi bekorga sarflanadi.
  • Kechikish (Latency): Telegram bilan so'rov-javob sikli tufayli yangi xabarlarni qabul qilishda kichik uzilishlar kuzatilishi mumkin.
  • Gorizontal masshtablashning cheklanganligi: Bitta bot tokeni bilan bir vaqtda faqat bitta faol getUpdates sessiyasini ishlatish mumkin. Aks holda 409 Conflict xatosi yuzaga keladi.

Webhook: Ishlash Mexanizmi va Xususiyatlari

Webhook — bu hodisalarga asoslangan (event-driven) zamonaviy yondashuv. Bunda Telegram serveri xabarlarni kutmaydi, aksincha siz o'z serveringizda veb-server (masalan, aiohttp, FastAPI yoki Nginx) orqali ochiq HTTP endpoint yaratasiz. setWebhook buyrug'i orqali bu manzilni Telegram tizimiga ro'yxatdan o'tkazasiz. Foydalanuvchi botga xabar yozgan zahoti Telegram serveri sizning manzilingizga HTTP POST so'rov yuboradi (push modeli).

Webhook Afzalliklari

  • Yuqori tezlik va real vaqt: Telegram xabarni hosil bo'lgan soniyadanoq sizga yetkazadi. Kutish vaqti deyarli nolga teng.
  • Resurs tejamkorligi: Foydalanuvchi xabar yozmaguncha server hech qanday so'rov bajarmaydi. Trafik va xotira sarfi minimal darajada qoladi.
  • Oson masshtablash: Nginx orqali load balancing o'rnatib, kelayotgan xabarlarni bir nechta backend workerlar (Docker konteynerlar) bo'ylab samarali taqsimlash mumkin.

Webhook Kamchiliklari

  • Infratuzilma talablari: Oq IP manzil, domen nomi va to'g'ri sozlangan SSL sertifikati (HTTPS) shart.
  • Murakkab lokal dasturlash: O'z kompyuteringizda kod yozish va sinash uchun Ngrok yoki Cloudflare Tunnel kabi vositalardan foydalanishga to'g'ri keladi.
  • Kaskadli bloklanish xavfi: Agar sizning botingiz Telegram'ning POST so'roviga belgilangan vaqt ichida 200 OK kodi bilan javob qaytara olmasa, Telegram bu xabarni qayta-qayta yuborishni boshlaydi va serveringiz haddan tashqari yuklama ostida qolib ketishi mumkin.

Aiogram 3 Misolida Qisqa Kod Qiyosi

Python'ning ommabop aiogram 3 kutubxonasida ushbu ikki usul qanday sozlanishini ko'rib chiqamiz.

1. Polling Usuli

import asyncio
from aiogram import Bot, Dispatcher

bot = Bot(token="BOT_TOKEN")
dp = Dispatcher()

async def main():
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

2. Webhook Usuli (aiohttp integratsiyasi)

from aiogram import Bot, Dispatcher
from aiogram.webhook.aiohttp_server import SimpleRequestHandler, setup_application
from aiohttp import web

BOT_TOKEN = "BOT_TOKEN"
WEBHOOK_URL = "https://bot.sizningdomen.uz/webhook"

bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

async def on_startup(bot: Bot) -> None:
    await bot.set_webhook(WEBHOOK_URL)

def main():
    dp.startup.register(on_startup)
    app = web.Application()
    handler = SimpleRequestHandler(dispatcher=dp, bot=bot)
    handler.register(app, path="/webhook")
    setup_application(app, dp, bot=bot)
    web.run_app(app, host="127.0.0.1", port=8080)

if __name__ == "__main__":
    main()

Yondashuvlarni Taqqoslash: Jadval Ko'rinishida

  • Lokal sozlash qulayligi: Polling juda oson, Webhook esa tunnel (ngrok) talab qiladi.
  • SSL sertifikat talabi: Polling uchun umuman kerak emas, Webhook uchun esa HTTPS bo'lishi majburiy.
  • Resurs sarfi: Polling doimiy trafik yeydi, Webhook faqat faoliyat vaqtida ishlaydi.
  • Masshtablash (Scaling): Polling yakka instansiyada ishlaydi, Webhook esa klaster va load balancer bilan oson kengayadi.
  • Xabarlarga javob tezligi: Webhook zudlik bilan ishga tushadi, Polling esa getUpdates intervaliga bog'liq.

Xulosa: Qachon Qaysi Biri Tanlanadi?

Qaysi yondashuvni tanlash loyihaning talablari va bosqichiga bog'liq. Agar siz yangi loyihani boshlayotgan bo'lsangiz, MVP tayyorlayotgan bo'lsangiz yoki bot faqat bir necha yuz foydalanuvchiga xizmat qilsa, Long Polling eng qulay, tez va ishonchli variantdir. U infratuzilma bilan bog'liq ortiqcha xarajatlarni yo'q qiladi.

Ammo agar loyihangiz minglab faol foydalanuvchilarga ega bo'lsa, Telegram Mini App yoki murakkab to'lov tizimlariga ulangan bo'lsa va yuqori yuklamalarda tezkor ishlash talab etilsa, to'g'ridan-to'g'ri Webhook arxitekturasiga o'tishingiz maqsadga muvofiqdir. Bu server resurslarini tejaydi va tizim barqarorligini kafolatlaydi.

Teglar: #Telegram bot #Aiogram #Python #Webhook #Arxitektura