Asosiy mazmunga o'tish
Socialift
Texnik qo'llanma

Telegram story API orqali story qanday joylanadi

Telegram'da story faqat akkaunt nomidan, MTProto'ning stories.sendStory metodi bilan joylanadi — Bot API'da bunday metod umuman yo'q. Joylashdan oldin stories.canSendStory chaqiriladi: foydalanuvchi nomidan Premium, kanal nomidan esa post_stories huquqi va yetarli boost talab qilinadi. Media vertikal rasm yoki video, ko'pi bilan 30 MB bo'lishi shart.

Yangilangan:

Telegram story API orqali qanday joylanadi?

Uch qadam. Avval stories.canSendStory bilan huquq tekshiriladi — javobda bo'sh story «slot»lari soni keladi. Keyin stories.sendStory ga vertikal rasm yoki video (30 MB gacha), maxfiylik qoidalari va ixtiyoriy period beriladi. Javobda updateStoryID ichida yangi story id si qaytadi — tahrirlash va o'chirish uchun shu kerak.

Bularning hammasi MTProto qatlamida, ya'ni akkaunt (foydalanuvchi) seansi bilan. Socialift'da bu TelegramAccount klienti; u Telethon ustida ishlaydi va pip install "socialift[telegram]" bilan o'rnatiladi.

Story kanal yoki supergruppa nomidan ham joylanadi, lekin u holda siz o'sha kanalning post_stories huquqiga ega admini bo'lishingiz kerak.

Bot API va MTProto: story bo'yicha farq

Bu birinchi va eng ko'p vaqt yeydigan savol. Bot tokeni bilan story joylash imkoni yo'q va bu vaqtinchalik cheklov emas.

Bot API va MTProto: story bo'yicha farq — Platformalar bo'yicha imkoniyatlar jadvali
AmalBot APIMTProto (akkaunt)
Story joylashyo'q — metod mavjud emasstories.sendStory
Kelgan story'ni ko'rishha — story xabar sifatida keladiha
Story'ga javob yozishhaha
Story'ni tahrirlashyo'qstories.editStory
Story'ni o'chirishyo'qstories.deleteStories
Faol story'lar ro'yxatiyo'qstories.getPeerStories

Bot story'ni faqat qabul qiladi va unga javob yoza oladi. Shuning uchun Socialift'da story metodlari Telegram (bot) klientida takrorlanmaydi — ular faqat TelegramAccount da.

Nega bot story joylay olmaydi

Story — bu foydalanuvchi profilining elementi. Telegram uni akkauntlar va kanallar uchun qilgan, botlar uchun emas: Bot API hujjatida story yuboradigan metod yo'q, faqat kelgan story'ni ifodalaydigan obyekt va unga javob berish bor.

Amalda bu shuni bildiradi: agar kontent rejasi story'ni o'z ichiga olsa, loyihaga akkaunt seansi kerak bo'ladi — api_id va api_hash bilan, telefon raqami orqali. Bu botdan ko'ra jiddiyroq qaror: seans faylini shifrlab saqlash va cheklovlarni hurmat qilish kerak.

Bitta loyihada ikkalasini birga ishlatish odatiy holat: post va xabarlar bot orqali, story esa akkaunt orqali.

Avval tekshirish: can_send_story

Telegram hujjati aynan shuni talab qiladi: «Before posting a story, clients should invoke stories.canSendStory». Xatoni fayl yuklangandan keyin emas, oldin ko'rasiz.

can_send.py
import asyncio
from socialift import ApiError, TelegramAccount

async def main():
    async with TelegramAccount.from_env() as tg:
        targets = await tg.story_targets()
        print("kanal nomidan mumkin:", targets.chats)

        try:
            check = await tg.can_send_story("me")
        except ApiError as exc:
            print("hozir story joylab bo'lmaydi:", exc)
            return
        print("bo'sh slot:", check.count)

asyncio.run(main())

can_send_story() muvaffaqiyatda stories.CanSendStoryCount qaytaradi: count — bo'sh story slotlari soni, ya'ni chegaradan hozirgi faol story'lar ayirilgani.

story_targets() (stories.getChatsToSend) qaysi kanal va supergruppa nomidan story joylash mumkinligini beradi. Ro'yxatda bo'lish hali «joylasa bo'ladi» degani emas — boost va limitlar baribir can_send_story() da tekshiriladi.

Bu tekshiruv kafolat emas: can_send_story() va send_story() orasida holat o'zgarsa (masalan boshqa qurilmadan story joylansa), o'sha xato send_story() da qaytadi.

Kim story joylay oladi va qanday xato keladi

Shartlar bajarilmasa Telegram aniq xato kodini qaytaradi — SDK ularni o'z xato turlariga tarjima qiladi.

Kim story joylay oladi va qanday xato keladi — Platformalar bo'yicha imkoniyatlar jadvali
HolatTelegram xatosiNima qilish kerak
Foydalanuvchida Premium yo'qPREMIUM_ACCOUNT_REQUIREDShaxsiy story faqat Premium akkauntda; kanal nomidan joylashni ko'rib chiqing
Kanalda post_stories huquqi yo'qCHAT_ADMIN_REQUIREDKanal adminligi va aynan shu huquqni bering (SDK'da PermissionError)
Kanalga boost yetmaydiBOOSTS_REQUIREDKanalga yetarli boost yig'ilishini kuting
Faol story'lar chegarasiSTORIES_TOO_MUCHEskilari o'chishini kuting yoki o'zingiz o'chiring
Haftalik/oylik chegaraSTORY_SEND_FLOOD_WEEKLY_%d yoki _MONTHLY_%dKutish soniyasi RateLimitError.retry_after da keladi

Davomiylik: period qiymatlari

Telegram period uchun aynan to'rtta qiymatni qabul qiladi, boshqasi serverda rad etiladi. Socialift SDK buni faylni yuklashdan oldin tekshiradi.

Davomiylik: period qiymatlari — Platformalar bo'yicha imkoniyatlar jadvali
Davomiylikperiod (soniya)Kim uchun
6 soat21600faqat Premium
12 soat43200faqat Premium
24 soat86400standart, hamma uchun
48 soat172800faqat Premium

period berilmasa maydon umuman yuborilmaydi va Telegram 24 soat qo'yadi. Muddat tugagach story arxivga tushadi; pinned=True bo'lsa u profilda ham qoladi.

Maxfiylik: kim story'ni ko'radi

MTProto'da bu Vector<InputPrivacyRule>. SDK uni to'rtta qisqartmaga keltiradi, murakkab holatlar uchun esa tayyor qoidalar ro'yxatini ham qabul qiladi.

everyone
Standart qiymat, ilovadagi kabi — InputPrivacyValueAllowAll. Story'ni hamma ko'radi.
contacts
Faqat kontaktlar — InputPrivacyValueAllowContacts.
close_friends
Faqat «yaqin do'stlar» — InputPrivacyValueAllowCloseFriends. Ro'yxatning o'zi contacts.editCloseFriends bilan boshqariladi.
selected
Faqat tanlangan foydalanuvchilar — InputPrivacyValueAllowUsers. Bu qiymatda allow ro'yxati majburiy.
deny
Istisnolar — InputPrivacyValueDisallowUsers. Qoidalar berilgan tartibda qo'llanadi, shuning uchun deny oxiriga qo'shiladi: «kontaktlar, lekin falonchi emas».

Media va matn: vertikal, 30 MB va caption tuzog'i

Telegram hujjati mediani qisqa ta'riflaydi: vertikal rasm yoki vertikal video, ko'pi bilan 30 MB. Nisbat va davomiylik uchun hujjatda raqam yo'q, shuning uchun SDK ham ularni tekshirmaydi — vertikal bo'lmagan media ilovalarda noto'g'ri qirqiladi, xato esa chiqmaydi.

Hajm chegarasini SDK mahalliy tekshiradi: fayl yo'li yoki baytlar berilgan bo'lsa, 30 MB dan katta faylni yuklab bo'lib rad javobini kutish o'rniga darhol ConfigurationError beradi.

caption — story ostidagi matn. Uning uzunlik chegarasi serverdagi konfiguratsiyadan (story_caption_length_limit_*) keladi va hujjatda raqam bilan berilmagan. Formatlash (entities) esa stories_entities konfiguratsiyasiga bog'liq: ya'ni hamma akkaunt story matnida qalin yoki havola qo'ya olmaydi. parse_mode berilmasa matn toza holda ketadi.

noforwards=True story'ni uzatish va saqlashni taqiqlaydi — kontentni tarqalishidan saqlash kerak bo'lgan holatlar uchun.

Socialift SDK bilan story yuborish

send_story faylni yuklaydi, maxfiylik qoidalarini yig'adi va stories.sendStory ni chaqiradi. Javob — Updates, ichida yangi story id si.

send_story.py
import asyncio
from socialift import RateLimitError, TelegramAccount

async def main():
    async with TelegramAccount.from_env() as tg:
        check = await tg.can_send_story("me")
        if not check.count:
            print("faol story chegarasi to'lgan")
            return
        try:
            result = await tg.send_story(
                "me",
                "story.mp4",
                caption="Yangi kolleksiya",
                period=43200,
                privacy="close_friends",
                deny=["@raqobatchi"],
                pinned=True,
                noforwards=True,
            )
        except RateLimitError as exc:
            print("haftalik yoki oylik chegara, kutish:", exc.retry_after)
            return
        print(result)

asyncio.run(main())

TelegramAccount.from_env() TELEGRAM_API_ID, TELEGRAM_API_HASH va TELEGRAM_SESSION ni o'qiydi. Story uchun bot tokeni ish bermaydi.

file — yo'l, baytlar, fayl obyekti yoki tayyor InputFile. Tur kengaytma bo'yicha aniqlanadi (.jpg va .png — rasm, qolgani — video); majburlash uchun photo=True yoki photo=False.

Kanal nomidan joylash uchun birinchi argumentga kanalni bering: send_story("@mening_kanalim", ...). Unda Premium emas, post_stories huquqi va boost tekshiriladi.

period=43200 (12 soat) Premium'siz akkauntda rad etiladi — shubha bo'lsa period ni bermang, Telegram 24 soat qo'yadi.

O'qish, tahrirlash va o'chirish

Tahrirda faqat berilgan maydonlar yuboriladi, qolgani o'zgarmaydi — shuning uchun edit_story da privacy standart None.

edit_story.py
import asyncio
from socialift import TelegramAccount

async def main():
    async with TelegramAccount.from_env() as tg:
        peer = await tg.stories("me")
        for story in peer.stories:
            print(story.id, story.expire_date)

        await tg.edit_story("me", 42, caption="Tuzatilgan matn")
        await tg.edit_story("me", 42, privacy="contacts", deny=["@raqobatchi"])
        await tg.delete_story("me", [42, 43])

asyncio.run(main())

stories(entity) faqat HOZIR faol story'larni beradi (stories.getPeerStories). Ba'zan javobda faqat id lar keladi — o'shalarni stories(entity, ids=[...]) bilan alohida so'rang.

Muddati tugagan story'lar bu ro'yxatda yo'q: ular arxivda (stories.getStoriesArchive) yoki profilda (stories.getPinnedStories) — ular uchun raw() ishlating.

edit_story ga hech narsa berilmasa ConfigurationError chiqadi: bo'sh tahrir Telegram uchun ma'nosiz so'rov. file berilsa media butunlay qayta yuklanadi — hujjat bo'yicha DocumentAttributelar mediaga kavsharlangan.

delete_story qaytarib bo'lmaydi: faol, profilda qolgan va arxivdagi story — hammasi o'chadi.

Ishga tushirishdan oldin tekshiruv ro'yxati

  • Bot tokeni bilan story joylashga urinmayapsizmi — bu metod Bot API'da yo'q.
  • Har safar joylashdan oldin can_send_story() chaqiring va count ni tekshiring.
  • Media vertikal va 30 MB dan kichik bo'lsin; nisbatni o'zingiz nazorat qiling, Telegram uni hujjatda belgilamagan.
  • period sifatida faqat 21600, 43200, 86400 yoki 172800 bering; Premium yo'q bo'lsa faqat 86400.
  • privacy="selected" bo'lsa allow ro'yxati majburiy.
  • STORY_SEND_FLOOD_WEEKLY va MONTHLY xatolarini RateLimitError sifatida tuting va retry_after ni kuting.
  • Kanal nomidan joylashda post_stories huquqi va boost holatini oldindan tekshiring.
  • Seans faylini shifrlab saqlang — u akkauntga to'liq kirish beradi.
  • Story matnidagi formatlash serverdagi stories_entities sozlamasiga bog'liq: hamma akkauntda ishlamaydi.

← Blogga qaytish

Ko'p so'raladigan savollar

Telegram bot story joylay oladimi?

Yo'q. Bot API'da story joylaydigan metod yo'q — bot faqat kelgan story'ni ko'radi va unga javob yoza oladi. Story joylash uchun MTProto va akkaunt seansi kerak: Socialift'da bu TelegramAccount klienti.

Story joylash uchun Telegram Premium shartmi?

Foydalanuvchi nomidan — ha, aks holda PREMIUM_ACCOUNT_REQUIRED xatosi keladi. Kanal yoki supergruppa nomidan Premium emas, post_stories admin huquqi va kanalga yetarli boost talab qilinadi.

Story qancha vaqt turadi va buni o'zgartirsa bo'ladimi?

period parametri to'rtta qiymatni oladi: 21600 (6 soat), 43200 (12), 86400 (24) va 172800 (48). Premium'siz akkauntda faqat 86400 ishlaydi. Berilmasa Telegram 24 soat qo'yadi; muddat tugagach story arxivga tushadi, pinned=True bo'lsa profilda ham qoladi.

Story mediasiga qanday cheklov bor?

Vertikal rasm yoki vertikal video, ko'pi bilan 30 MB. Nisbat va davomiylik uchun Telegram hujjatida aniq raqam yo'q, shuning uchun vertikal bo'lmagan media xatosiz, lekin noto'g'ri qirqilgan holda chiqadi.

Joylangan story'ni tahrirlab bo'ladimi?

Ha, stories.editStory bilan: matn, maxfiylik, media va media_areas. Faqat berilgan maydonlar o'zgaradi. Media almashtirilsa fayl butunlay qayta yuklanadi, chunki hujjat bo'yicha DocumentAttribute'lar mediaga bog'langan.

Story'ni kim ko'rishini qanday cheklayman?

privacy qiymatlari: everyone, contacts, close_friends va selected (bu holda allow ro'yxati majburiy). Alohida odamlarni chiqarib tashlash uchun deny ishlatiladi — u qoidalar oxiriga qo'shiladi.

Manbalar

  1. Telegram: Stories (MTProto)
  2. Telegram: stories.sendStory
  3. Telegram: stories.canSendStory
  4. Telegram Bot API

Bog'liq sahifalar