Telegram Bot API yoki MTProto: qaysi birini tanlash kerak
Bot API — BotFather tokeni bilan ishlaydigan HTTPS interfeys: sodda va xavfsiz, lekin bot faqat unga kelgan yangi hodisalarni ko'radi. MTProto — Telegram klientlari uchun mo'ljallangan API: foydalanuvchi akkaunti (userbot) tarixni, a'zolar ro'yxatini va 2 GB gacha fayllarni ko'radi, biroq FLOOD_WAIT cheklovlari va ban xavfi bor. Mijozlarga xizmat — bot, o'z akkauntingizni avtomatlashtirish — MTProto.
Yangilangan:
Farq qisqacha
Bot API'da siz bot sifatida ishlaysiz: token bilan, HTTPS orqali, faqat botga ruxsat berilgan doirada. MTProto'da esa odatda oddiy foydalanuvchi sifatida kirasiz: telefon, kod va 2FA orqali, ya'ni Telegram ilovasida qila oladigan deyarli hamma narsani kod orqali qilasiz. Kuch ko'proq — mas'uliyat va xavf ham ko'proq.
Muhim aniqlik: MTProto «userbot» degani emas. Botlar ham MTProto orqali login qila oladi (auth.importBotAuthorization, api_id bilan), lekin shunda ham bot cheklovlari saqlanadi. Amalda «MTProto» deganda ko'pincha foydalanuvchi akkaunti nomidan ishlash nazarda tutiladi — ushbu maqola ham shu ma'noda.
Atamalar
- Bot API
- api.telegram.org dagi HTTP interfeys. Har so'rov: /bot<token>/metodNomi, javob JSON.
- MTProto API
- Telegram klientlari uchun mo'ljallangan protokol va API. Ulanish uchun my.telegram.org'dan api_id va api_hash kerak.
- Userbot
- MTProto orqali avtomatlashtirilgan oddiy foydalanuvchi akkaunti. Rasmiy atama emas, dasturchilar jargoni.
- Telethon
- MTProto uchun ommabop Python kutubxonasi. Socialift'ning
TelegramAccountklienti Telethon ustida qurilgan. - Lokal Bot API server
- Telegram'ning ochiq kodli Bot API serverini o'zingizda ishga tushirish: fayl limitlari va webhook cheklovlari kengayadi.
Katta taqqoslash jadvali
| Mezon | Bot API | MTProto (foydalanuvchi akkaunti) |
|---|---|---|
| Kirish | BotFather tokeni | api_id + api_hash, so'ng telefon → kod → 2FA; natija — sessiya satri |
| Transport | HTTPS + JSON, holatsiz so'rovlar | Doimiy MTProto ulanishi, sessiya holati saqlanadi |
| Birinchi bo'lib yozish | Yo'q: odam botga yozishi yoki uni guruhga qo'shishi kerak | Mumkin, lekin maxfiylik sozlamalari va spam cheklovlari amal qiladi |
| Tarixni o'qish | Tarix metodi yo'q; faqat yangi update'lar, ular 24 soatgacha saqlanadi | To'liq tarix (guruhda yangi a'zolardan tarix yashirilmagan bo'lsa) |
| A'zolar ro'yxati | Faqat adminlar, bitta a'zo holati va a'zolar soni | Ro'yxat bor; kanal obunachilari faqat adminlarga ko'rinadi, adminlar ro'yxatni yashirishi mumkin |
| Guruh xabarlari | Privacy mode: faqat buyruqlar va javoblar (admin yoki rejim o'chiq bo'lsa hammasi) | Akkaunt a'zo bo'lgan chatlardagi hamma narsa |
| Chatga qo'shilish | O'zi qo'shila olmaydi — uni qo'shishadi | Taklif havolasi yoki ommaviy @username orqali |
| Fayl yuborish | 50 MB (rasm 10 MB); lokal serverda 2000 MB | 2 GB, Telegram Premium bilan 4 GB |
| Fayl yuklab olish | 20 MB; lokal serverda cheklovsiz | Akkaunt ko'ra oladigan fayllar, 4 GB gacha |
| Tezlik limitlari | Hujjatlangan: chatga ~1 xabar/s, guruhga 20/daqiqa, ommaviy ~30/s; oshsa 429 + retry_after | Ochiq raqamlar yo'q; oshsa 420 FLOOD_WAIT_X — X soniya kutish |
| Rejalashtirilgan xabar | Yo'q | Bor: Telegram xabarni belgilangan vaqtda o'zi yuboradi |
| Kanal statistikasi | Yo'q | Ma'lum hajmdan katta kanallar adminlari uchun |
| ToS xavfi | Past; asosiy xavf — token sizishi | Norasmiy klient akkauntlari kuzatuvda; spam, flood, «nakrutka» — abadiy ban |
| Hosting | Webhook (443/80/88/8443) yoki long polling, serverless'ga mos | Uzoq yashovchi jarayon; bitta sessiyani parallel ishlatib bo'lmaydi (AUTH_KEY_DUPLICATED) |
| Socialift SDK | Telegram | TelegramAccount (pip install "socialift[telegram]") |
Qaror qabul qilish: vazifa bo'yicha tanlov
| Vazifa | Tanlov | Nega |
|---|---|---|
| Mijozlarga javob, buyurtma holati, bildirishnomalar | Bot API | Odam o'zi /start bosadi, tugmalar va webhook bor, ban xavfi past |
| Minglab obunachiga yangilik | Kanal + bot (admin sifatida post qiladi) | Shaxsiy xabar limitlariga urilmaysiz |
| O'z guruhingizni moderatsiya qilish | Bot API | Ban, cheklash, qo'shilish so'rovlari botda bor |
| O'z chatlaringiz tarixini eksport yoki tahlil qilish | MTProto | Botda tarix metodi yo'q |
| O'z guruhingiz a'zolari ro'yxati | MTProto (admin sifatida) | Bot API to'liq ro'yxat bermaydi |
| Kanal postlarini oldindan rejalashtirish, statistika | MTProto | Bot API'da yo'q |
| 50 MB dan katta fayl | MTProto yoki lokal Bot API server | Rasmiy Bot API serveri limiti 50 MB |
| Notanishlarga ommaviy xabar yoki ommaviy taklif | Hech biri | Telegram qoidalariga zid, akkaunt abadiy bloklanishi mumkin |
Userbot qonuniymi? Telegram qoidalari nima deydi
Telegram dasturchilarni o'z API'si asosida ilova yaratishga taklif qiladi va buning uchun haq olmaydi. Demak, akkauntni MTProto orqali avtomatlashtirishning o'zi taqiqlanmagan. Lekin shartlar bor: ilova o'z api_id'siga ega bo'lishi, foydalanuvchi bilmagan va rozi bo'lmagan holda uning nomidan amal qilmasligi, Telegram'dan olingan ma'lumotni AI modellarini o'qitishga ishlatmasligi kerak.
Rasmiy sahifada ochiq yozilgan: norasmiy klient orqali kirgan barcha akkauntlar avtomatik kuzatuv ostiga olinadi, flood, spam hamda kanal obunachilari yoki ko'rishlarini soxtalashtirish uchun API ishlatilsa — abadiy ban. Bot API'da ham qoidalar bor, lekin bot bilan eng katta xavf odatda token sizishidir va u BotFather'da /token bilan tuzatiladi.
Ikkalasi bitta loyihada
Ko'p hollarda to'g'ri javob — «ikkalasi»: akkaunt botga yopiq ma'lumotni o'qiydi, bot esa mijozga ko'rinadigan qismini bajaradi.
import asyncio
from socialift import Telegram, TelegramAccount
async def main():
async with Telegram.from_env() as bot, TelegramAccount.from_env() as account:
# Akkaunt: bot ololmaydigan narsa — guruh tarixi bo'yicha qidiruv
last = await account.messages("@mening_guruhim", limit=100)
found = await account.search("@mening_guruhim", "narx", limit=100)
# Bot: hisobotni kanalga bot nomidan joylash (bot kanal admini)
await bot.send_message("@mening_kanalim",
f"Oxirgi {len(last)} ta xabar o'qildi, «narx»: {len(found)} ta")
asyncio.run(main())Telegram.from_env() TELEGRAM_BOT_TOKEN ni, TelegramAccount.from_env() esa TELEGRAM_API_ID, TELEGRAM_API_HASH va TELEGRAM_SESSION ni o'qiydi.
Limitlar: ikki xil xato — bitta except
Bot API 429 va retry_after qaytaradi, MTProto esa FLOOD_WAIT_X. SDK ikkalasini RateLimitError ga keltiradi; kutish soniyasi ma'lum bo'lsa retry_after da, bo'lmasa zaxira pauza qo'ying.
import asyncio
from socialift import RateLimitError
async def send_with_backoff(client, chat, text: str):
"""client — Telegram yoki TelegramAccount."""
try:
return await client.send_message(chat, text)
except RateLimitError as exc:
await asyncio.sleep(exc.retry_after or 5)
return await client.send_message(chat, text)Qachon bot yetmaydi
- Bot qo'shilishidan oldingi yoki botga ko'rinmagan xabarlarni o'qish kerak.
- Guruh yoki kanal a'zolarining ro'yxati kerak (faqat son yoki adminlar emas).
- Kanal statistikasi yoki Telegram o'zi yuboradigan rejalashtirilgan postlar kerak.
- 50 MB dan katta fayllar va lokal Bot API server ko'tarish imkoni yo'q.
- Guruh yoki kanal yaratish, havola orqali chatga qo'shilish kabi foydalanuvchi amallari kerak.
Ko'p so'raladigan savollar
Telethon yoki Bot API — qaysi biri yaxshiroq?
Bular turli vazifalar uchun. Bot API ommaviy xizmat, bildirishnoma va moderatsiyaga qulay va xavfsizroq. Telethon (MTProto) akkaunt nomidan ishlash, tarix, a'zolar ro'yxati va katta fayllar uchun kerak, lekin FLOOD_WAIT va ToS talablariga jiddiyroq e'tibor talab qiladi.
Telegram userbot nima va u taqiqlanganmi?
Userbot — MTProto orqali avtomatlashtirilgan oddiy foydalanuvchi akkaunti. O'zi taqiqlanmagan, lekin Telegram API Terms of Service amal qiladi: foydalanuvchi roziligisiz amal, spam, flood va soxta ko'rsatkichlar taqiqlangan. Norasmiy klient akkauntlari avtomatik kuzatuv ostida.
Bot guruh tarixini o'qiy oladimi?
Yo'q. Bot API'da chat tarixini o'qiydigan metod yo'q: bot faqat yangi update'larni oladi, guruhlarda esa privacy mode tufayli ularning bir qismini. Tarix kerak bo'lsa, guruhga a'zo akkaunt orqali MTProto ishlating.
MTProto orqali qancha hajmdagi fayl yuborish mumkin?
Oddiy akkaunt 2 GB gacha, Telegram Premium akkaunt 4 GB gacha fayl yuklaydi. Bot API'ning rasmiy serverida esa yuborish limiti 50 MB, yuklab olish — 20 MB.
Botni MTProto orqali ishlatsa bo'ladimi?
Ha: auth.importBotAuthorization bot tokeni va api_id bilan login qiladi, keyin ko'pgina MTProto metodlari ishlaydi. Lekin bot cheklovlari saqlanadi. Socialift'da bot uchun Telegram (Bot API), foydalanuvchi akkaunti uchun TelegramAccount klienti bor.
Bitta loyihada ikkalasini ishlatsa bo'ladimi?
Ha, bu keng tarqalgan yondashuv: bot mijozlar bilan gaplashadi va moderatsiya qiladi, akkaunt esa tarix, a'zolar ro'yxati yoki statistika kabi botga yopiq ma'lumotni oladi. SDK'da ikkala klient bir xil xato modeliga ega.