En la beta de Telegram para macOS 13.0.283318 del 15 de octubre apareció el cliente de una nueva pestaña: un feed de publicaciones de canales que Telegram selecciona según los intereses del usuario, bajo el nombre «For you», y un segundo feed, de los canales a los que el usuario ya está suscrito. En la misma compilación se ha incluido una pantalla donde se pueden pegar stickers de regalos coleccionables en la tarjeta de la billetera de Telegram. Por ahora, ninguna de las dos funciones se puede utilizar: ambas son activadas por el servidor, y los métodos necesarios no están presentes en el esquema API abierto.
Novedades en la compilación del 15 de octubre
La beta de macOS se distribuye a través del feed de actualizaciones mac-updates.telegram.org; cada compilación es un archivo zip normal con la aplicación. En la versión 13.0.283309 del 11 de octubre no hay ni feed ni stickers en la tarjeta. En la 13.0.283318 del 15 de octubre aparecen ambos conjuntos: el módulo de interfaz NewsUI, tres archivos del núcleo en la carpeta TelegramEngine/Feed y las descripciones de los nuevos tipos de API.
El núcleo del cliente —TelegramCore— es compartido por Telegram para macOS e iOS: se conecta desde el código fuente de la aplicación para iPhone. En el repositorio abierto Telegram-iOS la carpeta TelegramEngine/Feed aún no existe, y en el cliente abierto para macOS no hay módulo NewsUI. El código del feed solo existe en la beta compilada.
Cómo funciona el feed «For you»
El módulo gestiona dos feeds simultáneamente. El primero, forYouFeed, es una selección que el servidor prepara. El segundo, en el código addedFeed, son publicaciones de los canales a los que el usuario está suscrito, con un estado vacío que dice «Posts from your channels appear here». Cada uno tiene su propia lista y su propio desplazamiento, y se alternan mediante segmentos en la parte superior de la pantalla.
La selección comienza con la pregunta «What are you interested in?» y una serie de chips de intereses, cada uno con un emoji. El cliente no almacena la lista de intereses: la solicita al servidor con el tipo interestCategories y la almacena en caché; este tipo tiene una variante interestCategoriesNotModified con la que el servidor responde «la lista no ha cambiado». El cliente envía el interés seleccionado de vuelta y muestra la confirmación «Got it! More of this in For you».
El resto es familiar de cualquier feed. Las publicaciones se cargan hacia abajo por páginas y se actualizan con el gesto pull-to-refresh; una pastilla de nuevas publicaciones aparece sobre la lista; en un feed vacío se lee «No posts for you yet», y en caso de error, «Couldn't load posts». Hay un botón «Mark All as Read»: el feed marca lo leído en el servidor, y el servidor envía al cliente una actualización updateReadFeed, de modo que la marca se propaga a todos los dispositivos de la cuenta, al igual que ahora se propaga el estado de lectura de los chats.
La pestaña tiene su propio icono animado tab_news. En los recursos de la compilación, se encuentra junto a los iconos de las cuatro pestañas actuales —tab_contacts, tab_calls, tab_chats y tab_settings—, lo que significa que el feed está diseñado como una pestaña separada en el menú principal, y no como una sección dentro de la lista de chats.
Por qué no se puede activar la pestaña
El binario no contiene una clave de configuración del servidor que active el feed; en la mayoría de las funciones, dicha clave se encuentra como una cadena, y por ella se puede ver que la función se está implementando mediante un flag. La visibilidad de la pestaña se mantiene mediante un indicador interno showNewsTab, que está desactivado al inicio. Según la estructura del código, solo se activa cuando el servidor devuelve un feed no vacío.
El contenido de ambos feeds llega a través de métodos del espacio de nombres feed —getForYou y los adyacentes. El servidor decide si los entrega a la cuenta, y a quien no tiene el feed activado, responde con un vacío. Por lo tanto, modificar la aplicación en el mejor de los casos muestra la pestaña con el mensaje «No posts for you yet»: la pantalla está dibujada, pero no hay contenido para llenarla.
El esquema API abierto de Telegram Desktop, capa 230, no contiene ni forYouFeed, ni feedMessages, ni interestCategories. Normalmente, los nuevos métodos aparecen en los esquemas abiertos junto con el lanzamiento de la función, por lo que el esquema indicará cuándo el feed saldrá de la fase beta.
Más información sobre los tipos de feed
El espacio de nombres feed en la compilación contiene los tipos forYouFeed (selección), feedMessages y feedMessagesNotModified (página de publicaciones y respuesta «nada nuevo»), feedItemMessage y feedPosition (elemento del feed y posición desde la que continuar la carga), interestCategory e interestCategories (intereses). La actualización updateReadFeed llega en el flujo general de actualizaciones de la cuenta. El código de la selección se encuentra en el archivo ForYouFeedContext, el de los feeds de suscripciones en AddedFeedContext, y el de los intereses en FeedInterests.
Stickers de regalos en la tarjeta de la billetera
El segundo hallazgo se refiere a la billetera integrada en Telegram. La billetera tiene una tarjeta —un panel con el saldo y la dirección en la parte superior de la pantalla. En la compilación 13.0.283318 se le han añadido los tipos card y cardSticker en el espacio de nombres wallet y el tipo de entrada inputWalletCardSticker: se pueden colocar stickers en la tarjeta, y el cliente guarda su disposición en el servidor. En el sticker hay una opción de menú «Remove from Card».
Los stickers se obtienen de regalos coleccionables, aquellos que en Telegram se presentan como NFT. La pantalla de la colección de la billetera en la beta dibuja una ficha de regalo con una cinta y un número de instancia, y la ficha tiene un estado "despegado": el regalo se retira de la ficha como una pegatina y se transfiere a la tarjeta. La tarjeta misma recibió una capa de brillos sobre los stickers y un estilo para el regalo, CardGiftStyle.
Lo que está permitido lo verifica el servidor, como se puede ver por los errores que el cliente puede mostrar. No hay descripciones de estos errores en el cliente, el significado se deduce de los nombres:
| Error | Significado por el nombre |
|---|---|
WALLET_NFT_NOT_OWNED | el regalo no pertenece al propietario de la billetera |
WALLET_NFT_INVALID | el regalo no se encontró o no es adecuado |
WALLET_STICKER_DUPLICATE | este regalo ya está pegado |
WALLET_STICKER_LIMIT_EXCEEDED | no hay más espacio en la tarjeta |
WALLET_STICKER_INVALID | el sticker no pasó la verificación |
WALLET_STICKER_SAVED_PROFILE | relacionado con regalos guardados en el perfil; lo que prohíbe exactamente no se puede entender por el nombre |
La cantidad de stickers que caben en la tarjeta no está registrada en el cliente: el límite lo mantiene el servidor y solo lo comunica mediante un error. Al igual que el feed, los stickers en la tarjeta no se activan modificando la aplicación; el servidor verifica el guardado de la disposición, y en el esquema abierto de la capa 230, el espacio de nombres wallet ya existe, pero no contiene los tipos card y cardSticker.




