Telegram API integratsiyasi
Socialift Telegram'ga ikki xil ulanishni to'liq qo'llab-quvvatlaydi: MTProto orqali akkaunt (Telethon asosida) va Bot API orqali bot. Akkaunt foydalanuvchining o'zi kabi ishlaydi — to'liq yozishma tarixi, guruh a'zolari, kanal statistikasi; bot esa xabar yuborish, moderatsiya va webhook uchun. Ikkalasi ham boshqa platformalar bilan bir xil SDK va bir xil xato modeli ostida.
Yangilangan:
Telegram bot va akkaunt API'sining farqi nima?
Telegram'da ikki xil API bor. Bot API — BotFather bergan token bilan ishlaydigan HTTP interfeys: bot xabar yuboradi, guruhni moderatsiya qiladi, webhook orqali yangilanishlarni oladi. MTProto API esa haqiqiy foydalanuvchi akkaunti nomidan ishlaydi: to'liq yozishma tarixi, guruh a'zolari ro'yxati, kanal statistikasi va botlarga yopiq boshqa imkoniyatlar shu yerda.
Bot foydalanuvchiga birinchi bo'lib yoza olmaydi (odam avval /start bosadi) va guruhning barcha a'zolari ro'yxatini ololmaydi — shuning uchun Socialift akkaunt ulanishini ham qo'llab-quvvatlaydi. Qaysi birini qachon tanlashning batafsil taqqoslanishi quyidagi havolalardagi «Bot API va MTProto» maqolasida.
Akkaunt va bot imkoniyatlari
| Imkoniyat | Akkaunt (MTProto) | Bot (Bot API) |
|---|---|---|
| Xabar yuborish, tahrirlash, o'chirish, pin | bor | bor |
| Fayllar: rasm, video, hujjat, audio, ovozli xabar | bor | bor |
| Moderatsiya: ban, cheklash, admin tayinlash | bor | bor |
| Taklif havolalari | bor | bor |
| Story (hikoya) joylash | bor— Premium yoki boost bilan | yo'q |
| Suhbatning to'liq tarixi | bor | yo'q |
| Guruh a'zolari ro'yxati | bor | yo'q |
| Kanal statistikasi | bor | yo'q |
| Guruh va kanal yaratish | bor | yo'q |
| SDK'da yo'q metodni chaqirish | raw() | call() |
boryo'q
Izohlar va cheklovlar
Bo'sh kataklar Telegram qoidalaridan kelib chiqadi: Bot API bu imkoniyatlarni botlarga bermaydi. Kanal statistikasini Telegram faqat ma'lum hajmdan katta kanallarning adminlariga beradi — chegara server sozlamasi (can_view_stats belgisi).
Akkauntga kirish: telefon → kod → 2FA
Login uch bosqichdan iborat. Keyin tg.export_session() sessiya satrini qaytaradi — uni o'zingiz shifrlab saqlang va keyingi safar TelegramAccount(session=...) bilan kodsiz ulaning. Kabinetda ulangan akkaunt sessiyasini esa Socialift serverda shifrlab saqlaydi.
import asyncio, os
from socialift import TelegramAccount
async def main(session: str | None):
# session — avval saqlangan sessiya satri yoki None
async with TelegramAccount(api_id=int(os.environ["TELEGRAM_API_ID"]),
api_hash=os.environ["TELEGRAM_API_HASH"], session=session) as tg:
phone = "+998901234567"
sent = await tg.send_code(phone)
result = await tg.sign_in(phone, code="12345", phone_code_hash=sent["phone_code_hash"])
if result["two_factor_required"]:
await tg.sign_in_password("...")
new_session = tg.export_session() # shifrlab saqlang
chats = await tg.dialogs(limit=50)
history = await tg.messages("@durov", limit=50)
members = await tg.participants("@group", limit=500)
await tg.send_poll("@group", "Qaysi vaqt qulay?", ["10:00", "15:00"])
await tg.send_file("me", "photo.jpg", caption="Hisobot")
asyncio.run(main(session=None))api_id va api_hash my.telegram.org'da olinadi. Akkaunt ulanishi uchun SDK qo'shimcha bilan o'rnatiladi: pip install "socialift[telegram]".
Kabinet va Playground ortidagi Socialift serveri MTProto mijozlari pulini ushlab turadi, shuning uchun u yerda har so'rovda ulanish (handshake) takrorlanmaydi. SDK'da bitta TelegramAccount obyektini qayta ishlating.
Sinov oyida (birinchi 30 kun) token SDK'ning barcha imkoniyatlarini ochadi, TelegramAccount (litsenziyadagi messaging imkoniyati) ham. Uzaytirilgandan keyin imkoniyatlar token rejasiga bog'liq — aniq ro'yxatni kabinetdagi «Tekshirish va muhitlar» ko'rsatadi; kabinet Playground'ida akkaunt metodlari rejadan qat'i nazar ishlaydi.
Akkaunt ulanishi nimalarni qamrab oladi
Xabarlar
Yuborish, tahrirlash, o'chirish, forward va pin; reaksiyalar, so'rovnomalar, rejalashtirilgan xabarlar, o'qilgan deb belgilash va «yozmoqda» holati.
Fayllar va qidiruv
Fayl yuborish va media yuklab olish; chat ichida va global qidiruv.
Guruh va kanal ma'lumotlari
Chat ma'lumoti, a'zolar, adminlar va bloklanganlar ro'yxati, a'zo huquqlari hamda kanal statistikasi.
Guruh va kanal boshqaruvi
Guruh va kanal yaratish, qo'shilish, chiqish, o'chirish; nom, tavsif, slow mode, standart huquqlar va chat rasmi.
A'zolar va moderatsiya
Taklif qilish, chiqarish, ban va bandan chiqarish, cheklash, admin qilish va adminlikdan olish; limitli taklif havolalari va qo'shilish so'rovlarini ko'rib chiqish.
Kontaktlar va sessiyalar
Kontakt qo'shish va o'chirish, bloklash, foydalanuvchining to'liq ma'lumoti, umumiy chatlar, faol sessiyalar ro'yxati va ularni tugatish.
Telegram story'si: kim joylay oladi va qanday shartlar bilan?
Story faqat akkaunt (MTProto) tomonida. Telegram hujjati joylashdan oldin stories.canSendStory ni chaqirishni talab qiladi — SDK'da bu tg.can_send_story(entity), u bo'sh story «slot»lari sonini qaytaradi va shart bajarilmasa aniq xato beradi.
import asyncio, os
from socialift import TelegramAccount
async def main(session: str):
async with TelegramAccount(api_id=int(os.environ["TELEGRAM_API_ID"]),
api_hash=os.environ["TELEGRAM_API_HASH"], session=session) as tg:
print(await tg.can_send_story("me"))
print(await tg.story_targets())
await tg.send_story("me", "story.mp4", caption="Yangi mahsulot",
period=86400, privacy="contacts")
active = await tg.stories("me")
print(active)
asyncio.run(main(os.environ["TELEGRAM_SESSION"]))Shartlar Telegram tomonida: foydalanuvchi nomidan story joylash uchun akkauntda **Telegram Premium** bo'lishi kerak (aks holda PREMIUM_ACCOUNT_REQUIRED), kanal yoki supergroup nomidan esa sizda post_stories admin huquqi (CHAT_ADMIN_REQUIRED) va kanalga yetarli **boost** (BOOSTS_REQUIRED) kerak. Qaysi kanallar nomidan joylash mumkinligini tg.story_targets() ko'rsatadi, lekin ro'yxatga tushish hali «joylasa bo'ladi» degani emas — can_send_story baribir chaqiriladi.
period — story arxivga tushguncha qancha turishi: 21600 (6 soat), 43200 (12 soat), 86400 (24 soat) yoki 172800 (48 soat). **Premium'siz akkauntda faqat 86400 ishlaydi**, qolganlarini Telegram rad etadi; parametr berilmasa Telegram o'zi 24 soat qo'yadi.
privacy to'rt qiymatni oladi: everyone (standart), contacts, close_friends va selected — oxirgisida allow majburiy. deny istisnolarni qo'shadi («kontaktlar, lekin falonchi emas»). pinned=True bo'lsa story muddat tugagach profilda qoladi.
Media **vertikal** rasm yoki video bo'lishi va 30 MB dan oshmasligi kerak — SDK hajmni yuborishdan oldin mahalliy tekshiradi. Telegram nisbat va uzunlikni hujjatda raqam bilan bermaydi, shuning uchun vertikal bo'lmagan media ilovalarda noto'g'ri qirqiladi.
**Bot API story joylay olmaydi** — bu Telegram cheklovi, hech qanday SDK uni chetlab o'ta olmaydi. Bot faqat o'ziga kelgan story'ga javob bera oladi. Joylangan story'ni tg.edit_story(entity, story_id, caption=...) bilan tahrirlash va tg.delete_story(entity, story_id) bilan o'chirish mumkin.
Bot: token bilan ulanish va istalgan Bot API metodi
Bot ulanishi xabarlar, fayllar (rasm, video, hujjat, audio, ovozli xabar, animatsiya), chat ma'lumoti va sozlamalari, adminlar, a'zo holati, moderatsiya, taklif havolalari, webhook va getUpdates'ni qamrab oladi.
import asyncio, os
from socialift import Telegram
async def main():
async with Telegram(token=os.environ["TELEGRAM_BOT_TOKEN"]) as bot:
await bot.send_message("@my_channel", "Salom!")
# SDK'da alohida metodi bo'lmagan har qanday Bot API metodi
commands = await bot.call("getMyCommands")
print(commands)
asyncio.run(main())Bot API tanani imzolamaydi: set_webhook da secret_token bering va u X-Telegram-Bot-Api-Secret-Token sarlavhasida qaytganini tekshiring. Webhook o'rnatilgan bo'lsa get_updates ishlamaydi. Kabinetda bot ulanganda token getMe bilan tekshiriladi.
bot.call("metodNomi", ...) Bot API'ning istalgan metodini chaqiradi, klientda o'ralmagan nomlar esa avtomatik uzatiladi (bot.getChatMenuButton(...)). Kabinet Playground'idagi universal chaqiruvda logOut va close ataylab bloklangan. Akkaunt tomonida shu vazifani tg.raw(...) bajaradi: u istalgan Telethon TL so'rovini yuboradi.
Telegram integratsiyasini rejalashtirishda
- Bot foydalanuvchiga birinchi bo'lib yoza olmaydi — suhbat odam /start bosganidan keyin boshlanadi.
- Guruh a'zolari ro'yxati yoki suhbatning to'liq tarixi kerak bo'lsa, bot emas, akkaunt ulanishini tanlang.
- Kanal statistikasi faqat siz admin bo'lgan va Telegram
can_view_statsni yoqqan kanallarda mavjud — chegara Telegram serverida belgilanadi. - Sessiya satri akkauntga to'liq kirish beradi: uni kodda yoki loglarda qoldirmang, shifrlab saqlang. Kabinet orqali ulangan akkauntlar sessiyasini Socialift serverda shifrlangan holda saqlaydi.
- Bot webhook'ida
bot.set_webhook(url, secret_token=...)bilan o'z secret'ingizni bering va har so'rovdaTelegram.verify_webhook(request.headers, secret)bilan tekshiring — Telegram tanani imzolamaydi. - Akkaunt oddiy foydalanuvchi kabi ishlaydi: Telegram norasmiy API mijozlari orqali kirgan akkauntlarni avtomatik kuzatuvga oladi, flood va spam uchun esa butunlay bloklaydi. Ommaviy xabar yuborish uchun akkauntni ishlatmang.
Ko'p so'raladigan savollar
Telegram guruhining barcha a'zolarini API orqali olish mumkinmi?
Bot orqali — yo'q: Bot API faqat adminlar ro'yxati, a'zolar soni va alohida a'zo holatini beradi. Akkaunt ulanishi (MTProto) orqali participants() a'zolar ro'yxatini qaytaradi, lekin guruh adminlari ro'yxatni yashirgan bo'lsa (katta guruhlarda mumkin) u to'liq qaytmaydi.
Bot foydalanuvchiga birinchi bo'lib yoza oladimi?
Yo'q. Telegram qoidasiga ko'ra odam avval botga /start yuborishi kerak. Akkaunt oddiy foydalanuvchi kabi ishlaydi: Telegram norasmiy API mijozlari orqali kirgan akkauntlarni avtomatik kuzatuvga oladi, flood va spam uchun esa butunlay bloklaydi. Ommaviy xabar yuborish uchun akkauntni ishlatmang.
Telegram akkauntini ulash xavfsizmi?
Login Telegram'ning o'zida telefon raqami, kod va (yoqilgan bo'lsa) ikki bosqichli parol orqali o'tadi. Kabinet orqali ulansa, hosil bo'lgan sessiya satri serverda shifrlangan holda saqlanadi va brauzerga chiqmaydi; SDK'da uni o'zingiz shifrlab saqlaysiz. Faol sessiyalar ro'yxatini ko'rish va ularni tugatish ham mumkin.
Nega kanal statistikasi kelmayapti?
Telegram statistikani faqat ma'lum hajmdan katta kanallarning adminlariga beradi; aniq chegara server sozlamasi va channelFull.can_view_stats belgisida ko'rinadi. Bu cheklov Telegram API darajasida, Socialift uni chetlab o'ta olmaydi.
SDK'da kerakli metod bo'lmasa-chi?
Bot uchun bot.call("metodNomi") istalgan Bot API metodini chaqiradi (faqat kabinet Playground'idagi universal chaqiruvda logOut va close bloklangan). Akkaunt uchun tg.raw(...) istalgan Telethon TL so'rovini yuboradi.
Socialift Telegram'ning rasmiy hamkorimi?
Yo'q. Socialift — Telegram'ning ochiq Bot API va MTProto API'lari ustida ishlaydigan mustaqil integratsiya qatlami. U Telegram bilan rasmiy hamkorlik maqomiga ega emas.
Manbalar
Bog'liq sahifalar
Telegram'ni bugun ulang
Token oling, bot yoki akkauntingizni ulang va birinchi xabarni Playground'dan yuboring.
Bepul token olish →