15 अक्टूबर को जारी macOS के लिए Telegram के बीटा बिल्ड 13.0.283318 में एक नए टैब का क्लाइंट सामने आया है: चैनलों से पोस्ट का एक फ़ीड, जिसे Telegram उपयोगकर्ता की रुचियों के अनुसार "For you" नाम से चुनता है, और दूसरा फ़ीड — उन चैनलों से जिन पर व्यक्ति पहले से ही सब्सक्राइब है। उसी बिल्ड में एक ऐसी स्क्रीन भी शामिल है जहाँ Telegram वॉलेट कार्ड पर कलेक्टिबल उपहारों से स्टिकर चिपकाए जा सकते हैं। अभी तक इनमें से किसी का भी उपयोग नहीं किया जा सकता है: दोनों फ़ंक्शन सर्वर द्वारा सक्षम किए जाते हैं, और ओपन API स्कीम में आवश्यक तरीके उपलब्ध नहीं हैं।
15 अक्टूबर के बिल्ड में क्या नया है
macOS बीटा अपडेट फ़ीड mac-updates.telegram.org के माध्यम से वितरित किया जाता है, प्रत्येक बिल्ड ऐप के साथ एक सामान्य zip फ़ाइल होती है। 11 अक्टूबर के 13.0.283309 में न तो फ़ीड है और न ही कार्ड पर स्टिकर। 15 अक्टूबर के 13.0.283318 में तुरंत दोनों सेट दिखाई देते हैं: NewsUI इंटरफ़ेस मॉड्यूल, TelegramEngine/Feed फ़ोल्डर में तीन कोर फ़ाइलें और नए API प्रकारों के विवरण।
macOS के लिए Telegram का क्लाइंट कोर — TelegramCore — iOS के साथ साझा किया जाता है: इसे iPhone ऐप के स्रोत कोड से जोड़ा जाता है। ओपन Telegram-iOS रिपॉजिटरी में TelegramEngine/Feed फ़ोल्डर अभी तक नहीं है, ओपन macOS क्लाइंट में NewsUI मॉड्यूल नहीं है। फ़ीड का कोड केवल संकलित बीटा में मौजूद है।
'For you' फ़ीड कैसे काम करता है
मॉड्यूल एक साथ दो फ़ीड रखता है। पहला, forYouFeed, एक चयन है जिसे सर्वर बनाता है। दूसरा, कोड में addedFeed, उन चैनलों से पोस्ट हैं जिन पर व्यक्ति सब्सक्राइब है, जिसमें "Posts from your channels appear here" की खाली स्थिति है। प्रत्येक की अपनी सूची और अपना स्क्रॉल होता है, उन्हें स्क्रीन के शीर्ष पर सेगमेंट द्वारा स्विच किया जाता है।
चयन "What are you interested in?" प्रश्न और कई रुचि चिप्स से शुरू होता है, प्रत्येक में एक इमोजी होता है। क्लाइंट रुचियों की सूची संग्रहीत नहीं करता है: यह interestCategories प्रकार का उपयोग करके सर्वर से इसका अनुरोध करता है और इसे कैश करता है — प्रकार में interestCategoriesNotModified का एक प्रकार है, जिसके द्वारा सर्वर "सूची नहीं बदली" का जवाब देता है। क्लाइंट चयनित रुचि वापस भेजता है और "Got it! More of this in For you" की पुष्टि दिखाता है।
बाकी किसी भी फ़ीड से परिचित है। पोस्ट पृष्ठों द्वारा नीचे लोड होते हैं और पुल-टू-रिफ्रेश जेस्चर द्वारा अपडेट होते हैं; सूची के ऊपर नए पोस्ट की एक गोली पॉप अप होती है; एक खाली चयन पर "No posts for you yet" लिखा होता है, एक त्रुटि पर — "Couldn't load posts"। "Mark All as Read" बटन है: फ़ीड पढ़े गए को सर्वर पर चिह्नित करता है, और सर्वर क्लाइंट को updateReadFeed अपडेट भेजता है — इस प्रकार यह चिह्न खाते के सभी उपकरणों में फैलता है, जैसे चैट की पठनीयता अब फैलती है।
टैब का अपना एनिमेटेड आइकन tab_news है। बिल्ड के संसाधनों में यह चार वर्तमान टैब के आइकन — tab_contacts, tab_calls, tab_chats और tab_settings — के बगल में स्थित है, जिसका अर्थ है कि फ़ीड को मुख्य मेनू में एक अलग टैब के रूप में डिज़ाइन किया गया है, न कि चैट सूची के भीतर एक अनुभाग के रूप में।
आप टैब को स्वयं क्यों सक्षम नहीं कर सकते
बाइनरी में सर्वर कॉन्फ़िगरेशन की कोई कुंजी नहीं है जिसके द्वारा फ़ीड सक्षम किया जाएगा — अधिकांश फ़ंक्शन के लिए ऐसी कुंजी एक स्ट्रिंग के रूप में होती है, और इससे यह देखा जा सकता है कि फ़ंक्शन को एक फ़्लैग द्वारा रोल आउट किया जा रहा है। टैब की दृश्यता एक आंतरिक विशेषता showNewsTab द्वारा नियंत्रित होती है, जो स्टार्टअप पर बंद होती है। कोड की संरचना के अनुसार, यह तभी सक्षम होती है जब सर्वर ने एक गैर-खाली फ़ीड लौटाया हो।
दोनों फ़ीड की सामग्री feed नामस्थान से getForYou और संबंधित तरीकों से आती है। सर्वर यह तय करता है कि उन्हें खाते को देना है या नहीं, और जिसे फ़ीड सक्षम नहीं है, उसे खाली जवाब देता है। इसलिए, एप्लिकेशन को स्वयं संपादित करने से सबसे अच्छा "No posts for you yet" लेबल वाला टैब दिखाई देता है: स्क्रीन खींची गई है, लेकिन इसे भरने के लिए कुछ भी नहीं है।
Telegram Desktop की ओपन API स्कीम, लेयर 230, में न तो forYouFeed, न feedMessages, न interestCategories शामिल है। आमतौर पर नए तरीके फ़ंक्शन के जारी होने के साथ ओपन स्कीम में दिखाई देते हैं, इसलिए स्कीम से ही यह पता चलेगा कि फ़ीड बीटा से कब बाहर आएगा।
फ़ीड प्रकारों के बारे में और क्या ज्ञात है
बिल्ड में feed नामस्थान में forYouFeed (चयन), feedMessages और feedMessagesNotModified (पोस्ट का पृष्ठ और "कुछ भी नया नहीं" का जवाब), feedItemMessage और feedPosition (फ़ीड आइटम और वह स्थिति जहाँ से लोडिंग जारी रखनी है), interestCategory और interestCategories (रुचियाँ) प्रकार शामिल हैं। updateReadFeed अपडेट खाते के अपडेट के सामान्य प्रवाह में आता है। चयन का कोड ForYouFeedContext फ़ाइल में है, सदस्यता फ़ीड का — AddedFeedContext में, रुचियों का — FeedInterests में।
वॉलेट कार्ड पर उपहारों से स्टिकर
दूसरी खोज Telegram में निर्मित वॉलेट से संबंधित है। वॉलेट में एक कार्ड होता है — स्क्रीन के शीर्ष पर शेष राशि और पते वाली एक गोली। बिल्ड 13.0.283318 में इसमें wallet नामस्थान में card और cardSticker प्रकार और इनपुट प्रकार inputWalletCardSticker जोड़े गए हैं: कार्ड पर स्टिकर रखे जा सकते हैं, और क्लाइंट सर्वर पर उनकी व्यवस्था को सहेजता है। स्टिकर पर "Remove from Card" मेनू आइटम होता है।
स्टिकर कलेक्टिबल उपहारों से लिए जाते हैं — वे जो Telegram में NFT के रूप में डिज़ाइन किए गए हैं। बीटा में वॉलेट की कलेक्शन स्क्रीन एक रिबन और इंस्टेंस नंबर के साथ उपहार की एक टाइल खींचती है, और टाइल में एक "छीली हुई" स्थिति होती है: उपहार को एक स्टिकर की तरह टाइल से हटाया जाता है और कार्ड पर ले जाया जाता है। कार्ड को स्वयं स्टिकर के ऊपर चमक की एक परत और उपहार के लिए एक शैली, CardGiftStyle मिली।
क्या अनुमति है, यह सर्वर जांचता है — यह उन त्रुटियों से स्पष्ट है जिन्हें क्लाइंट दिखा सकता है। क्लाइंट में उनके लिए कोई स्पष्टीकरण नहीं है, अर्थ नामों से पढ़ा जाता है:
| त्रुटि | नाम से अर्थ |
|---|---|
WALLET_NFT_NOT_OWNED | उपहार वॉलेट के मालिक का नहीं है |
WALLET_NFT_INVALID | उपहार नहीं मिला या उपयुक्त नहीं है |
WALLET_STICKER_DUPLICATE | यह उपहार पहले ही चिपका दिया गया है |
WALLET_STICKER_LIMIT_EXCEEDED | कार्ड पर अब जगह नहीं है |
WALLET_STICKER_INVALID | स्टिकर सत्यापन में विफल रहा |
WALLET_STICKER_SAVED_PROFILE | प्रोफ़ाइल में सहेजे गए उपहारों से संबंधित; नाम से यह समझना मुश्किल है कि यह वास्तव में क्या प्रतिबंधित करता है |
कार्ड पर कितने स्टिकर फिट होते हैं, यह क्लाइंट में दर्ज नहीं है: सीमा सर्वर द्वारा रखी जाती है और केवल त्रुटि द्वारा इसकी सूचना दी जाती है। फ़ीड की तरह, कार्ड पर स्टिकर एप्लिकेशन को संपादित करके सक्षम नहीं होते हैं — व्यवस्था का सत्यापन सर्वर द्वारा किया जाता है, और लेयर 230 की ओपन स्कीम में wallet नामस्थान पहले से मौजूद है, लेकिन इसमें card और cardSticker प्रकार नहीं हैं।




