Dalam build beta Telegram untuk macOS 13.0.283318 tanggal 15 Oktober, muncul klien untuk tab baru: feed postingan dari kanal yang dikurasi Telegram berdasarkan minat pengguna, bernama "For you", dan feed kedua — dari kanal-kanal yang sudah diikuti pengguna. Dalam build yang sama, disertakan juga layar di mana stiker dari hadiah koleksi dapat ditempelkan ke kartu dompet Telegram. Namun, kedua fitur ini belum dapat digunakan: keduanya diaktifkan oleh server, dan metode yang diperlukan belum ada dalam skema API publik.
Apa yang Muncul di Build Tanggal 15 Oktober
Beta macOS didistribusikan melalui feed pembaruan mac-updates.telegram.org, setiap build adalah file zip biasa yang berisi aplikasi. Dalam build 13.0.283309 tanggal 11 Oktober, tidak ada feed maupun stiker pada kartu. Dalam build 13.0.283318 tanggal 15 Oktober, kedua set ini langsung muncul: modul antarmuka NewsUI, tiga file inti di folder TelegramEngine/Feed, dan deskripsi tipe API baru.
Inti klien — TelegramCore — untuk Telegram macOS sama dengan iOS: inti ini dihubungkan dari kode sumber aplikasi iPhone. Di repositori publik Telegram-iOS folder TelegramEngine/Feed belum ada, dan di klien untuk macOS yang publik, modul NewsUI tidak ada. Kode feed hanya ada dalam beta yang sudah dikompilasi.
Cara Kerja Feed "For you"
Modul ini menampung dua feed sekaligus. Yang pertama, forYouFeed, adalah kurasi yang disusun oleh server. Yang kedua, dalam kode addedFeed, adalah postingan dari kanal-kanal yang diikuti pengguna, dengan status kosong "Posts from your channels appear here". Masing-masing memiliki daftar dan gulirannya sendiri, dan dapat diubah melalui kontrol segmen di bagian atas layar.
Kurasi dimulai dengan pertanyaan "What are you interested in?" dan serangkaian chip minat, masing-masing dengan emoji. Klien tidak menyimpan daftar minat: ia memintanya dari server dengan tipe interestCategories dan menyimpannya dalam cache — tipe ini memiliki varian interestCategoriesNotModified, yang digunakan server untuk menjawab "daftar tidak berubah". Minat yang dipilih dikirim kembali oleh klien, dan klien menampilkan konfirmasi "Got it! More of this in For you".
Sisanya sudah dikenal dari feed mana pun. Postingan dimuat ke bawah secara bertahap dan diperbarui dengan gerakan pull-to-refresh; sebuah bilah postingan baru muncul di atas daftar; pada kurasi kosong tertulis "No posts for you yet", dan pada kesalahan tertulis "Couldn't load posts". Ada tombol "Mark All as Read": feed menandai postingan yang sudah dibaca di server, dan server mengirimkan pembaruan updateReadFeed ke klien — sehingga tanda baca tersebar ke semua perangkat akun, seperti halnya status baca obrolan saat ini.
Tab ini memiliki ikon animasi sendiri tab_news. Dalam sumber daya build, ikon ini terletak di samping ikon empat tab yang ada saat ini — tab_contacts, tab_calls, tab_chats, dan tab_settings — yang berarti feed ini dirancang sebagai tab terpisah di menu utama, bukan sebagai bagian di dalam daftar obrolan.
Mengapa Tab Tidak Dapat Diaktifkan Sendiri
Dalam biner, tidak ada kunci konfigurasi server yang dapat mengaktifkan feed — sebagian besar fungsi memiliki kunci tersebut sebagai string, dan dari situ terlihat bahwa fungsi tersebut diluncurkan dengan flag. Visibilitas tab dipegang oleh indikator internal showNewsTab, yang dinonaktifkan saat startup. Berdasarkan struktur kode, ini hanya akan diaktifkan ketika server mengembalikan feed yang tidak kosong.
Konten kedua feed datang melalui metode dari namespace feed — getForYou dan metode terkait. Server memutuskan apakah akan memberikannya kepada akun, dan bagi mereka yang feed-nya tidak diaktifkan, server akan merespons dengan kosong. Oleh karena itu, modifikasi aplikasi itu sendiri paling-paling hanya akan menampilkan tab dengan tulisan "No posts for you yet": layar sudah digambar, tetapi tidak ada konten untuk mengisinya.
Skema API Telegram Desktop yang publik, layer 230, tidak berisi forYouFeed, feedMessages, maupun interestCategories. Biasanya, metode baru muncul dalam skema publik bersamaan dengan rilis fitur, jadi dari skema inilah akan terlihat kapan feed akan keluar dari beta.
Informasi Lain tentang Tipe Feed
Namespace feed dalam build membawa tipe forYouFeed (kurasi), feedMessages dan feedMessagesNotModified (halaman postingan dan respons "tidak ada yang baru"), feedItemMessage dan feedPosition (elemen feed dan posisi untuk melanjutkan pemuatan), interestCategory dan interestCategories (minat). Pembaruan updateReadFeed datang dalam aliran pembaruan akun umum. Kode kurasi terletak di file ForYouFeedContext, feed langganan di AddedFeedContext, dan minat di FeedInterests.
Stiker dari Hadiah di Kartu Dompet
Penemuan kedua berkaitan dengan dompet yang terintegrasi di Telegram. Dompet ini memiliki kartu — bilah dengan saldo dan alamat di bagian atas layar. Dalam build 13.0.283318, tipe card dan cardSticker ditambahkan ke namespace wallet serta tipe input inputWalletCardSticker: stiker dapat ditempatkan pada kartu, dan klien menyimpan tata letaknya di server. Pada stiker terdapat item menu "Remove from Card".
Stiker diambil dari hadiah koleksi — yang di Telegram diformat sebagai NFT. Layar koleksi dompet di beta menampilkan ubin hadiah dengan pita dan nomor instans, dan ubin tersebut memiliki status "terkelupas": hadiah dilepas dari ubin seperti stiker dan dipindahkan ke kartu. Kartu itu sendiri menerima lapisan kilau di atas stiker dan gaya yang sesuai dengan hadiah, CardGiftStyle.
Apa yang diizinkan diperiksa oleh server — ini terlihat dari kesalahan yang dapat ditampilkan klien. Tidak ada penjelasan untuk kesalahan ini di klien, maknanya dapat dibaca dari namanya:
| Kesalahan | Makna berdasarkan nama |
|---|---|
WALLET_NFT_NOT_OWNED | hadiah tidak dimiliki oleh pemilik dompet |
WALLET_NFT_INVALID | hadiah tidak ditemukan atau tidak sesuai |
WALLET_STICKER_DUPLICATE | hadiah ini sudah ditempelkan |
WALLET_STICKER_LIMIT_EXCEEDED | tidak ada lagi ruang di kartu |
WALLET_STICKER_INVALID | stiker tidak lolos verifikasi |
WALLET_STICKER_SAVED_PROFILE | terkait dengan hadiah yang disimpan di profil; apa yang dilarang tidak dapat dipahami dari namanya |
Berapa banyak stiker yang dapat ditempatkan di kartu tidak tercatat di klien: batasnya dipegang oleh server dan hanya diberitahukan melalui kesalahan. Seperti halnya feed, stiker pada kartu tidak dapat diaktifkan dengan memodifikasi aplikasi — penyimpanan tata letak diperiksa oleh server, dan dalam skema publik layer 230, namespace wallet sudah ada, tetapi tipe card dan cardSticker tidak ada di dalamnya.




