Lokal Telegram Bot API server: nima uchun va qanday ishga tushirish
Chuqur4 daqInnovialabs tahririyati
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,getFileesa 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:
getFileserver 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.
- Bot jarayonini to‘xtating.
- Bulutli serverda
logOutni chaqiring:
curl "https://api.telegram.org/bot$BOT_TOKEN/logOut"
- Botni lokal serverda ishga tushiring va webhook ishlatsangiz,
setWebhookni 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
| Soha | Bulutli API | O‘z serveringiz |
|---|---|---|
| Yangilanishlar | Bot API’ning yangi versiyalari o‘zi paydo bo‘ladi | Yangi metodlar uchun qayta yig‘ish va deploy |
| Disk | Sizning tashvishingiz emas | Fayllar ishchi katalogda to‘planadi, tozalash kerak |
| Xavfsizlik | HTTPS va izolyatsiya bor | HTTP portda TLS va avtorizatsiya yo‘q — yopiq tarmoqda saqlang |
| Mavjudlik | Telegram mas’uliyati | Qayta ishga tushirish, health check, monitoring va alertlar — sizda |
| Maxfiy ma’lumotlar | Faqat bot tokeni | Yana 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.