Botxona

Webhook yoki long-polling? Botxona qanday ishlaydi

Telegram botlar yangilanishlarni (xabar, tugma bosish) ikki usulda olishi mumkin: webhook (Telegram o'zi sizning serveringizga yuboradi) yoki long-polling (bot o'zi Telegram'dan doimiy so'rab turadi, getUpdates). Botxona ikkinchisini — long-pollingni tanlagan, va nega shunday ekanini tushuntiramiz.

Botxona nega long-polling ishlatadi

Botxona minglab botni bitta infratuzilmada, arzon serverlarda ishlatishga mo'ljallangan. Buning uchun har bir bot scale-to-zero — ya'ni faolsizlikda butunlay to'xtaydi (batafsil). Webhook rejimida Telegram xabarni serveringizga yuborganda bot allaqachon ishlab turishi kerak; agar bot to'xtagan bo'lsa, Telegram xabarni yo'qotishi yoki qayta urinishlarni sarflashi mumkin.

Long-polling rejimida esa Botxonaning platforma darajasidagi proksisi doimiy ishlab turadi (u uxlamaydi) va Telegram'dan kelgan har bir yangilanishni navbatga qo'yadi; bot uyg'onishi bilanoq proksidan navbatdagi xabarlarni oladi. Bu — hech qanday yangilanish yo'qolmasligini (at-least-once yetkazish) va tartib buzilmasligini kafolatlaydi, hatto bot vaqtincha uxlab yotgan bo'lsa ham.

Bu sizning kodingizga nima uchun ta'sir qiladi

Kodingiz setWebhook chaqirmasligi kerak — Botxona buni ishlatmaydi, va agar kodingiz (masalan boshqa hostingdan ko'chirilgan bo'lsa) avvalroq webhook o'rnatib qo'ygan bo'lsa, Telegram xabarlarni endi ishlamaydigan eski manzilga yuborishga urinaveradi. Yechim — ishga tushishda bir marta deleteWebhook chaqirish (zarar qilmaydi, hatto webhook o'rnatilmagan bo'lsa ham):

await bot.delete_webhook(drop_pending_updates=False)
await bot.telegram.deleteWebhook()

Odatiy holatda, start_polling() / run_polling() / bot.launch() kabi standart usullar (aiogram, python-telegram-bot, grammY, Telegraf) ishlatilsa, hech qanday qo'shimcha sozlash kerak emas — ular allaqachon getUpdatesga asoslangan.

Proksi qanday ishlaydi (qiziquvchilar uchun)

Botingiz getUpdates chaqirganda, so'rov TELEGRAM_API_URL orqali Botxonaning node proksisiga boradi. Proksi javobni Telegram'dan emas, o'zining ichki buferidan beradi — bu bot hech qachon eskirgan yoki takroriy yangilanish olmasligini, va bir vaqtning o'zida faqat bitta joydan ulanish bo'lishini (ikkinchi ulanish 409 xatosi oladi) ta'minlaydi.

"409 Conflict" xatosi chiqsa

Bu — bitta tokenga bir vaqtda ikkita joydan (masalan kompyuteringiz va Botxona) ulanish urinilgani degani. Faqat bitta joyda ishlab tursin — ortiqchasini to'xtating. Batafsil: Xatoliklar va yechimlar.

Keyingi qadam

Botingizni yuklang: Birinchi botni 10 daqiqada joylash.