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.
| Amal | Bot API | MTProto (akkaunt) |
|---|---|---|
| Story joylash | yo'q — metod mavjud emas | stories.sendStory |
| Kelgan story'ni ko'rish | ha — story xabar sifatida keladi | ha |
| Story'ga javob yozish | ha | ha |
| Story'ni tahrirlash | yo'q | stories.editStory |
| Story'ni o'chirish | yo'q | stories.deleteStories |
| Faol story'lar ro'yxati | yo'q | stories.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.
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.
| Holat | Telegram xatosi | Nima qilish kerak |
|---|---|---|
| Foydalanuvchida Premium yo'q | PREMIUM_ACCOUNT_REQUIRED | Shaxsiy story faqat Premium akkauntda; kanal nomidan joylashni ko'rib chiqing |
| Kanalda post_stories huquqi yo'q | CHAT_ADMIN_REQUIRED | Kanal adminligi va aynan shu huquqni bering (SDK'da PermissionError) |
| Kanalga boost yetmaydi | BOOSTS_REQUIRED | Kanalga yetarli boost yig'ilishini kuting |
| Faol story'lar chegarasi | STORIES_TOO_MUCH | Eskilari o'chishini kuting yoki o'zingiz o'chiring |
| Haftalik/oylik chegara | STORY_SEND_FLOOD_WEEKLY_%d yoki _MONTHLY_%d | Kutish 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 (soniya) | Kim uchun |
|---|---|---|
| 6 soat | 21600 | faqat Premium |
| 12 soat | 43200 | faqat Premium |
| 24 soat | 86400 | standart, hamma uchun |
| 48 soat | 172800 | faqat 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'zicontacts.editCloseFriendsbilan boshqariladi. - selected
- Faqat tanlangan foydalanuvchilar —
InputPrivacyValueAllowUsers. Bu qiymatdaallowro'yxati majburiy. - deny
- Istisnolar —
InputPrivacyValueDisallowUsers. Qoidalar berilgan tartibda qo'llanadi, shuning uchundenyoxiriga 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.
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.
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.
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.