Telegram para iOS 13.1.1, según su código abierto, ha dejado de enviar la confirmación de lectura a un desconocido que escribió primero. Mientras el panel con los botones «Denunciar» y «Bloquear» esté visible sobre el chat, el cliente no lee sus mensajes, no muestra sus botones, abre sus enlaces como texto normal y oculta su estado de emoji. El modo se desactiva cuando retira el panel, y al responder, se desactiva localmente; los autores del cambio especifican que el servidor podría revertirlo. El cambio se encuentra en el repositorio Telegram-iOS en el commit 007fb3f1 del 22 de octubre, se incluyó en la etiqueta release-13.1.1, y la versión se lanzó en la App Store esa misma noche. Esto afecta a todos los que reciben mensajes de desconocidos y a quienes escriben primero: si usted le escribió a alguien con un iPhone, las dos marcas de verificación aparecerán solo después de que decida qué hacer con usted.
Qué considera el cliente un interlocutor sospechoso
Cuando una persona que no está en sus contactos escribe primero, el servidor envía al cliente la configuración de ese chat, peerSettings en el esquema de la API. Entre los indicadores se encuentran report_spam y block_contact: si se deben mostrar los botones «Denunciar» y «Bloquear». No existe un indicador de "sospechoso" separado en el esquema. En el código de Telegram para iOS, un chat se considera sospechoso mientras al menos uno de estos dos indicadores esté activado; este es el predicado isSuspiciousPeer. La misma configuración incluye el país del número, el mes de registro y las fechas de cambio de nombre y foto, que a partir de marzo de 2025 se muestran en la tarjeta del desconocido sobre el primer mensaje.
Antes de la versión 13.1.1, la sospecha cambiaba poco: en el texto de dicho interlocutor, los enlaces, menciones, hashtags, direcciones de correo electrónico, números de tarjeta y direcciones TON se mostraban como texto normal, no se podían pulsar, y pulsar la tarjeta de vista previa no hacía nada. Los botones debajo de los mensajes, el botón y los enlaces en el texto de la vista previa, los enlaces en los mensajes HTML y su estado de emoji funcionaban como los de cualquier otro, y los mensajes se marcaban como leídos inmediatamente al abrir el chat.
Qué cambió en la versión 13.1.1
El commit 007fb3f1 modifica 16 archivos, se añaden 491 líneas y se eliminan 29. Mientras el panel de denuncia esté presente:
| Qué | Antes | Ahora |
|---|---|---|
| Confirmación de lectura | se envía al abrir el chat | no se envía |
| Botones bajo el mensaje | se muestran y funcionan | no se muestran |
| Enlaces en el texto | texto normal | texto normal, como antes |
| Vista previa de enlace | la tarjeta no se abre, pero el botón debajo y los enlaces en su texto funcionan | no hay botón, los enlaces en el texto de la vista previa se eliminan, el contenido multimedia no se abre |
| Mensajes HTML | los enlaces y botones funcionan | los enlaces se convierten en texto, los botones se eliminan |
| Estado de emoji del interlocutor | visible en el encabezado del chat y en el perfil | oculto, para suscriptores Premium se muestra una estrella en su lugar |
Lectura. La confirmación de lectura en Telegram y el restablecimiento del contador de mensajes no leídos en un chat son la misma acción: el cliente informa al servidor el número del último mensaje leído, y el servidor muestra al remitente la segunda marca de verificación. Ahora el cliente retiene esta acción mientras el interlocutor sea sospechoso, y en otro caso: cuando un chat con un no-contacto se abre por primera vez y la configuración aún no ha llegado del servidor. No se puede deshacer una lectura enviada, por lo que el cliente espera una decisión en lugar de leer "por si acaso". En el comentario de la revisión del cambio, se indica que en el simulador las decisiones de lectura se posponían y se aplicaban después de cerrar el panel y después de enviar un mensaje.
Botones. Las filas de botones debajo de los mensajes se eliminan para las burbujas normales, los stickers y los mensajes de video redondos. Para los mensajes HTML se ha añadido una transformación separada: los enlaces, direcciones de correo electrónico, menciones, hashtags, números de tarjeta y direcciones TON se convierten en texto, los botones incrustados desaparecen, de un botón formateado como enlace solo queda el texto, y la imagen pierde el enlace. Los números de teléfono, comandos de bots, fechas, anclas y emojis personalizados permanecen. Cada bloque conserva su número para que las citas de dichos mensajes sigan refiriéndose a los mismos lugares.
Vistas previas de enlaces. La tarjeta de vista previa de dicho mensaje ya no tiene botón, el contenido multimedia no se abre desde ella, y del texto de la vista previa se eliminan los mismos enlaces que del texto del mensaje.
Estado de emoji. El estado no se muestra en el encabezado del chat, en la nota del panel sobre Premium y en la cabecera del perfil, incluyendo la portada y los colores del estado coleccionable.
La regla solo se aplica en chats privados. Las líneas en la lista de chats, la búsqueda, así como los grupos y canales con el panel de denuncia no cambian.
Cómo salir de este modo
Cuatro acciones eliminan el panel, pero no todas desactivan el modo en el código del cliente:
- Cerrar el panel con la "x". El cliente llama a
messages.hidePeerSettingsBary restablece los indicadores del chat por sí mismo, sin esperar al servidor. La denuncia de spam también elimina los indicadores localmente. - Bloquear al interlocutor o añadirlo a los contactos. El cliente solo cambia el bloqueo o el estado del contacto, no toca los indicadores
report_spamyblock_contact: el modo finalizará cuando el servidor envíe la nueva configuración del chat. - Responder. Al enviar cualquier mensaje, excepto uno programado, el cliente elimina por sí mismo estos dos indicadores del chat; la opción «Añadir a contactos» permanece. Un mensaje programado no llega a nadie hasta la hora designada y no desactiva el modo.
La tercera vía se describe en el repositorio con una advertencia: los indicadores al responder se eliminan solo localmente, y users.getFullUser sobrescribe la configuración del chat con lo que envió el servidor en cada actualización. Si el servidor no elimina los indicadores después de su respuesta, el modo volverá en la próxima actualización. Al 21 de octubre, los autores del cambio no lo habían verificado, ya que no tenían una segunda cuenta para la prueba. Una opción alternativa que mencionan es llamar a hidePeerSettingsBar al enviar, pero entonces también desaparecería «Añadir a contactos».
Qué se sabe sobre la compilación
El commit se incorporó a la rama principal el 22 de octubre a las 11:20 UTC. 51 minutos después, a las 12:11 UTC, el número de versión en versions.json cambió a 13.1.1, la etiqueta release-13.1.1 está en este commit con el número, y 007fb3f1 se incluye en él tres commits antes. En la App Store, la versión 13.1.1 se lanzó el mismo día a las 18:45 UTC con la descripción «Bug fixes, minor improvements, and more». La compilación de la App Store no se comparó con el código abierto. La misma versión adapta la interfaz para el iPhone Duo plegable.
La verificación del cambio se realizó en un simulador con un interruptor temporal que activaba el modo forzosamente, pero no se incluyó en el commit. Los teclados normales y los botones de enlace se verificaron en el simulador, mientras que la transformación de mensajes HTML solo se cubrió con pruebas; no hubo un mensaje HTML real de un desconocido en la verificación. La firma del commit es compartida entre una persona y Claude Opus 5.5.
País del número y nueva línea CanadaVoIP
La tarjeta del desconocido no toma el país del número del número en sí, sino del campo phone_country de la misma configuración del chat: el servidor envía un código de dos letras, el cliente lo busca en la lista de países help.getCountriesList, sustituye el nombre y dibuja la bandera según el código. Para el código FT, iOS escribe «Anónimo» (estos son los números +888), para TS — «Test».
El 24 de octubre apareció una nueva entrada en esta lista: código CP, nombre CanadaVoIP, código telefónico +1, sin prefijos ni patrones de número. Primero la recibió el servidor de prueba, antes de las 09:33 UTC, luego el principal, antes de las 12:18 UTC. La entrada está marcada como oculta. Antes de esta, había tres entradas ocultas en la lista: XG «Global Mobile Satellite System» (+881), XV «International Networks» (+882, +883) e YL «Y-land» (+42). En total, la lista contiene 236 entradas.
Las entradas ocultas no se muestran en iOS en la selección de país al iniciar sesión, pero se almacenan y se encuentran por código. Tampoco se encontrarán al marcar un número: al coincidir, Estados Unidos las superpone, ya que aparece más tarde en la lista con el mismo código +1. Queda un lugar donde el cliente la leerá: el código phone_country recibido del servidor. El servidor, según esta lógica, tiene la intención de distinguir los números de operadores virtuales canadienses de otros números con el código +1, y en la tarjeta del desconocido en el iPhone, en lugar de «Canadá», aparecerá la palabra CanadaVoIP. Esta es una conclusión de la lista y el código del cliente; no se ha observado un chat real con dicho código.
Telegram Desktop descarta las entradas ocultas por completo al cargar la lista, por lo que para el código CP dibujará una bandera sin nombre. La bandera para ambos clientes es la misma, por las dos letras: en ISO 3166-1, el código CP está reservado para la Isla Clipperton, un territorio francés deshabitado en el Océano Pacífico.




