Asosiy kontentga o‘tish
Innovialabs

Lokal Telegram Bot API server: nima uchun va qanday ishga tushirish

Chuqur4 daq

Qisqacha

Lokal Bot API server botga 2 GB gacha fayl yuklash, yuklab olingan fayllarni to‘g‘ridan-to‘g‘ri diskdan o‘qish va ancha ko‘p webhook ulanishlarini qabul qilish imkonini beradi; evaziga yig‘ish, yangilash, himoya va monitoringni o‘zingiz bajarasiz.

Lokal server nima beradi

Odatda bot Telegram bilan api.telegram.org’dagi bulutli Bot API orqali ishlaydi. Bu server ochiq kodli — TDLib jamoasining telegram-bot-api loyihasi — va uni o‘zingizda ishga tushirish mumkin. Bot xuddi shu HTTP so‘rovlarni sizning nusxangizga yuboradi, u esa Telegram bilan MTProto orqali bog‘lanadi.

--local bayrog‘i bilan server bir qator bulutli cheklovlarni olib tashlaydi:

  • 2000 MB gacha fayl yuklash va bulutdagi hajm limitisiz fayllarni yuklab olish.
  • Lokal yo‘llar: faylni absolyut yo‘l yoki file:// URI orqali yuborish mumkin, getFile esa yuklab olish havolasi o‘rniga server diskidagi absolyut yo‘lni qaytaradi.
  • Moslashuvchan webhook: oddiy HTTP, istalgan port, istalgan lokal IP va 100000 gacha max_webhook_connections.

Bot kodi deyarli o‘zgarmaydi — bu o‘sha Bot API, faqat boshqa bazaviy URL bilan. Farqlarning to‘liq ro‘yxati rasmiy Bot API hujjatlarida.

Qachon bunga arziydi

  • Bot video, arxivlar, zaxira nusxalar yoki katta hujjatlar bilan ishlaydi.
  • Yuqori yuklamada bulutli API’ning parallel webhook ulanishlari limitiga urilasiz.
  • Bot va API server bitta yopiq tarmoqda, webhook uchun ommaviy HTTPS endpoint kerak emas.

Matn, tugmalar va kichik rasmlar bilan ishlaydigan oddiy botlar uchun bulutli API soddaroq va qo‘llab-quvvatlash arzonroq.

Docker’da yig‘ish va ishga tushirish

my.telegram.org’dan api_id va api_hash kerak bo‘ladi. Ular botni emas, ilovangizni identifikatsiya qiladi, shuning uchun ularni maxfiy ma’lumot sifatida saqlang.

Multi-stage Dockerfile yakuniy imijni ixcham qiladi. E’tibor bering: TDLib kompilyatsiyasi ko‘p operativ xotira talab qiladi — zaxirasi bor mashinada yoki CI’da yig‘ing.

FROM debian:bookworm-slim AS build
RUN apt-get update && apt-get install -y --no-install-recommends \
    git ca-certificates cmake g++ make gperf zlib1g-dev libssl-dev
RUN git clone --recursive https://github.com/tdlib/telegram-bot-api.git /src
WORKDIR /src/build
RUN cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/opt/tba .. \
 && cmake --build . --target install

FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends zlib1g libssl3 ca-certificates \
 && rm -rf /var/lib/apt/lists/*
COPY --from=build /opt/tba/bin/telegram-bot-api /usr/local/bin/
EXPOSE 8081
ENTRYPOINT ["telegram-bot-api", "--local", "--dir=/var/lib/telegram-bot-api"]

Server TELEGRAM_API_ID va TELEGRAM_API_HASH qiymatlarini muhit o‘zgaruvchilaridan oladi va standart holatda 8081-portni tinglaydi:

docker build -t telegram-bot-api .
docker run -d --name tba --restart unless-stopped \
  --env-file tba.env \
  -v tba-data:/var/lib/telegram-bot-api \
  -p 127.0.0.1:8081:8081 \
  telegram-bot-api

Ikki muhim jihat:

  • getFile server fayl tizimidagi yo‘lni qaytaradi, shuning uchun fayllarni o‘qish uchun bot konteyneri o‘sha volume’ni o‘sha yo‘lga ulashi kerak.
  • Kutubxonaga yangi bazaviy URL’ni ko‘rsating, masalan grammY’da: new Bot(token, { client: { apiRoot: "http://tba:8081" } }). aiogram, python-telegram-bot va boshqalarda ham shunday sozlama bor.

Botni ko‘chirish: logOut va close

Lokal serverda ishga tushirishdan oldin botni bulutli serverdan chiqarish kerak — aks holda yangilanishlar yetkazilishi kafolatlanmaydi.

  1. Bot jarayonini to‘xtating.
  2. Bulutli serverda logOut ni chaqiring:
curl "https://api.telegram.org/bot$BOT_TOKEN/logOut"
  1. Botni lokal serverda ishga tushiring va webhook ishlatsangiz, setWebhook ni qayta chaqiring — endi lokal nusxa orqali.

logOut dan keyin lokal serverga darhol kirish mumkin, lekin bulutli serverga 10 daqiqa davomida qaytib bo‘lmaydi. O‘tishni shunday rejalashtiringki, bunday orqaga qaytish oynasi maqbul bo‘lsin.

Botni ikki lokal server o‘rtasida ko‘chirish uchun avval deleteWebhook, so‘ng eski nusxada close ni chaqiring. Bot ishga tushganidan keyingi dastlabki 10 daqiqada close 429 xatosini qaytaradi.

Ekspluatatsiyadagi murosalar

SohaBulutli APIO‘z serveringiz
YangilanishlarBot API’ning yangi versiyalari o‘zi paydo bo‘ladiYangi metodlar uchun qayta yig‘ish va deploy
DiskSizning tashvishingiz emasFayllar ishchi katalogda to‘planadi, tozalash kerak
XavfsizlikHTTPS va izolyatsiya borHTTP portda TLS va avtorizatsiya yo‘q — yopiq tarmoqda saqlang
MavjudlikTelegram mas’uliyatiQayta ishga tushirish, health check, monitoring va alertlar — sizda
Maxfiy ma’lumotlarFaqat bot tokeniYana api_id va api_hash

Server istalgan bot tokeni bilan so‘rovlarni qabul qiladi, shuning uchun tashqariga ochiq port har kimga infratuzilmangizdan foydalanish imkonini beradi. Uni localhost yoki ichki tarmoqqa bog‘lang va ishchi katalogni doimiy volume’da saqlang.

Ko‘p beriladigan savollar

Yo‘q. Bitta nusxa ko‘plab botlarga xizmat qiladi: har bir so‘rov o‘z tokenini olib keladi. Alohida nusxalar faqat izolyatsiya yoki turli yuklama profillari uchun mantiqli.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.