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.

The post on Telegram — @gramnews
Xabar-vidjetlar qanday boʻladi

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:

NimaNima qiladi
request(data)botga 1 dan 64 baytgacha satr yuboradi va uning javobini qaytaradi
viewerkoʻrayotgan shaxsning id, ismi, familiyasi, foydalanuvchi nomi va Premium belgisi
chatTypechat turi: shaxsiy, guruh, superguruh yoki kanal
chatDataushbu chatdagi xabarga bogʻlangan maʼlumotlar, 1 024 baytgacha
publicDataxabarning oʻz maʼlumotlari, 1 024 baytgacha
watchPublicData()publicData oʻzgarishlariga obuna boʻlish
isForward va isPreviewbu qayta yoʻnaltirilgan nusxa yoki hali yuborilmagan inline-natijaning oldindan koʻrish versiyasi ekanligi
copyText(text)buferga 256 belgiga qadar matnni joylashtiradi
setResizeAnchorvidjet 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_query bayrogʻ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_ANSWER xatosini 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, WebSocket va workerlar sandboxda xato qaytaradigan stublar bilan almashtirilgan. Maʼlumotlar bot orqali yoki vidjet ochadigan havola orqali tashqariga chiqadi (openLink faqat 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, inputBotInlineMessageWidget va inputBotInlineMessageWidgetId – bot, aftidan, vidjetni inline-natija sifatida, toʻliq yoki id boʻyicha qaytaradi;
  • inputMediaWidgetId – vidjet xabar ilovasi sifatida id boʻyicha;
  • updateBotWidgetQuery, updateInlineBotWidgetQuery va updateBotWidgetCopyQuery – oddiy xabardagi, inline-rejim orqali yuborilgan va, nomidan kelib chiqib, qayta yoʻnaltirilgan nusxadagi vidjetdan botga soʻrovlar; javob – botWidgetQueryAnswer;
  • updateMessageWidgetData va widgetPublicData – server allaqachon yuborilgan vidjetning yangi maʼlumotlarini yuboradi, sandboxda esa bunga publicDataChanged voqeasi mavjud;
  • WIDGET_QUERY_NOT_ALLOWED va WIDGET_RESPONSE_TIMEOUT server xatolari NOT_ALLOWED va TIMEOUT skript 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.