Telegram xabarlaridagi vidjetlar botga qayta aloqa kanaliga ega boʻldi. macOS uchun Telegram 13.1.0 beta-versiyalarida 26-oktabrdan boshlab vidjet skriptida request() chaqiruvi paydo boʻldi: u bosish orqali botga 64 baytgacha maʼlumot yuboradi va 1 024 baytgacha javob kutadi. Bosishsiz soʻrov faqat bot bilan shaxsiy chatda, agar bot bunday soʻrovlarga ruxsat bergan boʻlsa, vidjet ekranda turganida va besh soniyada bir martadan koʻp boʻlmagan holda yuboriladi. Xuddi shu yerda vidjet endi uni kim ochganini – id, ism, foydalanuvchi nomi va Premium mavjudligini – hamda u qaysi turdagi chatda joylashganini biladi. Vidjetlarning oʻzi iOS, macOS va Android beta-versiyalarida koʻringan, ammo bu mexanizm hozircha faqat macOS uchun yigʻinda koʻrinadi; ommaviy API sxemasida va Bot APIda vidjetlar yoʻq.
25 va 26-oktabr oraligʻida nima oʻzgardi
macOS beta-versiyasi yangilanishlar tasmasi orqali tarqatiladi, har bir yigʻin – ilova bilan birga zip-fayl. Taqqoslash uchun 25-oktabrdagi 13.1.0.283381 va 26-oktabrdagi 13.1.0.283391 versiyalari olindi.
Vidjet skripti mijoz bilan global TelegramWidget obyekti orqali aloqa qiladi. Uning kodi ilova ichidagi WidgetSandbox paketida, sandbox-bundle.js faylida joylashgan. 283381 versiyasida obyekt kam narsani bilardi: dizayn mavzusini qaytarish, voqealarga obuna boʻlish, havolani ochish va vibratsiyani yoqish. 283391 versiyasida bunga quyidagilar qoʻshildi:
| Nima | Nima qiladi |
|---|---|
request(data) | botga 1 dan 64 baytgacha satr yuboradi va uning javobini qaytaradi |
viewer | koʻrayotgan shaxsning id, ismi, familiyasi, foydalanuvchi nomi va Premium belgisi |
chatType | chat turi: shaxsiy, guruh, superguruh yoki kanal |
chatData | ushbu chatdagi xabarga bogʻlangan maʼlumotlar, 1 024 baytgacha |
publicData | xabarning oʻz maʼlumotlari, 1 024 baytgacha |
watchPublicData() | publicData oʻzgarishlariga obuna boʻlish |
isForward va isPreview | bu qayta yoʻnaltirilgan nusxa yoki hali yuborilmagan inline-natijaning oldindan koʻrish versiyasi ekanligi |
copyText(text) | buferga 256 belgiga qadar matnni joylashtiradi |
setResizeAnchor | vidjet balandligi oʻzgarganda oʻsadigan chekka – yuqori yoki pastki |
Uchta avvalgi voqeaga – mavzu oʻzgarishi, faollashuv va faolsizlanish – chatDataChanged va publicDataChanged qoʻshildi.
Shu bilan birga, HTMLBubbles paketidan barcha demo materiallar olib tashlandi: 13-oktabrdagi maqolada tilga olingan oʻn uchta demo-yozishmalar, koʻchirilgan kartochkalar joylashgan ported papkasi, voxel-clash koʻp oʻyinchi oʻyini va namunalar joylashgan widget-sandbox papkasi. Paketda faqat bitta three.js kutubxonasi qoldi.
Vidjet botga qachon yozishi mumkin
Qoidalar xuddi shu sandboxda, skript oladigan xatolar matnida va ilova satrlarida yozilgan:
- soʻrov vidjetni bosish ishlovchisidan yuboriladi, har bir bosishga bitta chaqiruv;
- bosishsiz – faqat bot bilan shaxsiy chatda, faqat agar xabarga fon soʻrovlariga ruxsat berilgan boʻlsa (
background_querybayrogʻi), faqat vidjet ekranda turganida va besh soniyada bir martadan koʻp boʻlmagan holda; - avvalgi soʻrovning javobi kutilayotgan boʻlsa, yangisi yuborilmaydi;
- chatga hali yuborilmagan inline-natijaning oldindan koʻrish versiyasi botdan soʻramaydi;
- agar bot ushbu xabarga ruxsat bermagan boʻlsa, soʻrovlar oʻchiriladi – qayta yoʻnaltirilgan nusxada alohida ruxsat mavjud;
- botning javobi – faqat matn va 1 024 baytdan uzun boʻlmasligi kerak, aks holda skript
INVALID_ANSWERxatosini oladi; oʻz vaqtida javob bermasa –TIMEOUT.
Qayta yoʻnaltirilgan nusxada chatData boʻsh, publicData esa saqlanib qoladi.
Ilova satrlarida HTML-pufak kodi yonida «A tap may send data to the bot» – «bosish botga maʼlumot yuborishi mumkin» iborasi paydo boʻldi. Mijoz uni aynan qayerda koʻrsatishi yigʻinda koʻrinmaydi.
Nima qilish kerak
- Vidjetlar hozircha faqat beta-versiyalarda mavjud va ularni botlardan yuborib boʻlmaydi: Bot APIda vidjet yuboradigan metod yoʻq.
- Vidjetni bosayotganda, har bir bosish botga soʻrov boʻlishi mumkinligini hisobga oling. Skript sizning id, ism, foydalanuvchi nomi va Premium mavjudligingizni koʻradi, id esa 16 raqamgacha boʻlishi mumkin – 64 baytlik soʻrovga sigʻadi.
- Oʻz-oʻzidan, bosishsiz, vidjet botga faqat shu bot bilan shaxsiy chatda yozadi. Guruhlar va kanallar uchun sandbox fon soʻrovlarini nazarda tutmaydi.
- Vidjetda tarmoq yoʻq:
fetch,XMLHttpRequest,WebSocketva workerlar sandboxda xato qaytaradigan stublar bilan almashtirilgan. Maʼlumotlar bot orqali yoki vidjet ochadigan havola orqali tashqariga chiqadi (openLinkfaqat https qabul qiladi va 256 belgidan uzun boʻlmasligi kerak) – bu 25-oktabrdagi yigʻinda ham shunday edi.
Server vidjetni qanday yetkazadi
283391 binar faylida 283381 da boʻlmagan sxema turlari nomlari paydo boʻldi. 232-qatlamning ommaviy sxemasida – na Telegram Desktopda, na Telegram Web Ada – ular yoʻq, vidjetlar Bot API hujjatlarida ham yoʻq. Qurilma nomlaridan oʻqiladi, shuning uchun quyida – tavsif emas, balki talqin:
botInlineMessageWidget,inputBotInlineMessageWidgetvainputBotInlineMessageWidgetId– bot, aftidan, vidjetni inline-natija sifatida, toʻliq yoki id boʻyicha qaytaradi;inputMediaWidgetId– vidjet xabar ilovasi sifatida id boʻyicha;updateBotWidgetQuery,updateInlineBotWidgetQueryvaupdateBotWidgetCopyQuery– oddiy xabardagi, inline-rejim orqali yuborilgan va, nomidan kelib chiqib, qayta yoʻnaltirilgan nusxadagi vidjetdan botga soʻrovlar; javob –botWidgetQueryAnswer;updateMessageWidgetDatavawidgetPublicData– server allaqachon yuborilgan vidjetning yangi maʼlumotlarini yuboradi, sandboxda esa bungapublicDataChangedvoqeasi mavjud;WIDGET_QUERY_NOT_ALLOWEDvaWIDGET_RESPONSE_TIMEOUTserver xatolariNOT_ALLOWEDvaTIMEOUTskript xatolariga mos keladi.
Mijoz satrlari ruxsat bayroqlarini ham nomlaydi: xabarda allow_queries, uning qayta yoʻnaltirilgan nusxalarida fwd_allow_queries va bosishsiz soʻrovlar uchun background_query. Bot soʻrov bilan birga aynan nimani oladi – bosgan shaxsning idʼsini, xabar ostidagi tugmalar singari, yoki yoʻqmi – yigʻinda koʻrinmaydi.
Ochiq koddagi stendlar nimani tekshiradi
Mijozning ochiq repozitoriysida vidjetlar dvigateli twidget submoduli sifatida ulangan; submodule havolasiga GitHub 404 javobini qaytaradi – repozitoriy yopiq yoki oʻchirilgan. Yonida oʻlchov stendlari joylashgan, tools/perflab/TwidgetLab/widgets/attack papkasida esa haqiqiy bosishsiz harakat qilishga urinadigan 28 ta vidjet mavjud. Ulardan oʻn oltitasi botga maʼlumot yuboradi: taymer boʻyicha har 50 ms da, sintetik klik bilan, klikdan keyin kechiktirilgan chaqiruv orqali, forma maydonining yorligʻi (label) orqali, sudrab tashlash orqali. Oʻn ikkitasi bosishsiz havolani ochishga yoki sahifadan chiqib ketishga urinadi – tugma ustidagi havola, formani yuborish, sahifani avtomatik yangilash orqali. Papka repozitoriyda 23-oktabrdagi kommit bilan, request() mavjud boʻlgan yigʻindan uch kun oldin paydo boʻlgan.
Ushbu stendlarda yuborish hali ham TelegramWidget.sendMessage deb nomlanadi. 283391 yigʻinida bunday chaqiruv yoʻq – request() mavjud, bosishdan tashqari chaqiruvni esa skript no-activation sababli xato sifatida oladi.
Olib tashlangan misollarda yana nimalar bor edi
283381 yigʻinining widget-sandbox papkasida 20 tadan iborat ikkita vidjet toʻplami – with-profile va without-profile joylashgan edi. Fayl nomlari iltimoslar edi: «show me a mortgage calculator», «make a bar chart of the top 6 programming…», «create a pomodoro timer», «create a flashcard widget for 8 Spanish…». TelegramWidget obyekti birinchi toʻplamning 12 ta faylida tilga olingan, ikkinchisida esa birortasida ham yoʻq. Bu, aftidan, sandbox imkoniyatlari tavsifi bilan va usiz bir xil iltimoslar boʻyicha model tomonidan yigʻilgan vidjetlarga oʻxshaydi – bu tarkibdan kelib chiqqan xulosa, yigʻinning oʻzi buni aytmaydi. profile soʻzi TelegramWidget obyektida ham mavjud: profile xususiyati 1 ga teng, isProfileAtLeast() esa darajani tekshiradi.
Papkadagi qolgan narsalar – moslik tekshiruvlari (Chart.js, D3, three.js, WebGL, formalar, sudrab tashlash, localStorage), «xaridlar», «ish», «hayot», «sayohat» mavzularidagi vitrina uchun kartochkalar va stress-testlar.
Vidjetlar yana qayerda
Xabarlardagi vidjetlar 13.2 keyingi yangilanishining formati sifatida 25-oktabrda tasvirlangan edi. Vidjet botga qanday murojaat qilishi, u tomoshabin haqida nimani koʻrishi va soʻrovlar chegaralari qayerdan oʻtishi bu tavsifda yoʻq edi.




