Herramienta gratuita
Formato de texto en Telegram, con el escapado ya resuelto
Tu mensaje lleva un precio, un guion y un punto final, y la Bot API responde con "can't parse entities". MarkdownV2 reserva 18 caracteres, y una frase normal suele contener cuatro o cinco. Escribe el mensaje aquí, elige negrita, spoiler o bloque de código, y copia la salida con cada uno de esos caracteres ya escapado.
Escribe tu mensaje
Selecciona texto y aplica un estilo, o escribe las etiquetas tú mismo. La caja funciona con la sintaxis HTML de Telegram, así que lo que editas ya es válido para una de las dos salidas. La vista previa es una imagen del mensaje, no un botón de envío: aquí no sale nada de tu navegador.
Caracteres 198 de 4096
Has pasado de 4096 caracteres. Telegram rechazará esto como un solo mensaje, así que divídelo o lleva la parte larga a un archivo.
Telegram cuenta los caracteres visibles, así que el marcado sale gratis. Las entidades y las etiquetas de formato no restan del límite.
Fixed: the CSV import dropped rows ending in a comma.
Reported by three of you on the same day.
Run
npm i -g entergram@2.4 to upgrade.The migration note is boring but mandatory.
MarkdownV2
*Release 2\.4 is out\.* Fixed: the CSV import dropped rows ending in a comma\. >Reported by three of you on the same day\. Run `npm i -g entergram@2.4` to upgrade\. The migration note is ||boring but mandatory||\.
Envíalo con parse_mode=MarkdownV2. Cada carácter reservado del texto normal va escapado; dentro de un fragmento de código solo lo están la barra invertida y el acento grave.
HTML
<b>Release 2.4 is out.</b> Fixed: the CSV import dropped rows ending in a comma. <blockquote>Reported by three of you on the same day.</blockquote> Run <code>npm i -g entergram@2.4</code> to upgrade. The migration note is <tg-spoiler>boring but mandatory</tg-spoiler>.
Envíalo con parse_mode=HTML. Hay menos que escapar, y por eso la mayoría de librerías lo usan por defecto.
La sintaxis, en los dos modos
Telegram acepta tres parse modes. Markdown es el heredado y admite cuatro estilos; MarkdownV2 y HTML admiten los diez. Esta tabla pone MarkdownV2 y HTML uno al lado del otro.
| Estilo | MarkdownV2 | HTML |
|---|---|---|
| Negrita | *bold* | <b>bold</b> |
| Cursiva | _italic_ | <i>italic</i> |
| Subrayado | __underline__ | <u>underline</u> |
| Tachado | ~strike~ | <s>strike</s> |
| Spoiler | ||hidden|| | <tg-spoiler>hidden</tg-spoiler> |
| Código en línea | `code` | <code>code</code> |
| Bloque de código | ```python code ``` | <pre><code class="language-python">code</code></pre> |
| Cita en bloque | >quoted line | <blockquote>quoted</blockquote> |
| Enlace en línea | [text](https://example.com) | <a href="https://example.com">text</a> |
| Emoji personalizado |  | <tg-emoji emoji-id="5368324170671202286">👍</tg-emoji> |
El subrayado y la cursiva no se pueden anidar sin más en MarkdownV2, porque __ y _ chocan en el límite. Usa HTML cuando necesites los dos sobre el mismo texto.
Por qué MarkdownV2 sigue rechazando tu mensaje
MarkdownV2 reserva dieciocho caracteres y, fuera de una entidad de código, todos y cada uno deben ir precedidos de una barra invertida, incluso donde sería imposible leerlos como marcado. La lista es _ * [ ] ( ) ~ ` > # + - = | { } . ! y, por ser el propio carácter de escape, la barra invertida.
Dos de ellos son la razón de que esto le falle a casi todo el mundo. El punto cierra casi cualquier frase. El guion aparece en fechas, rangos, flags y palabras compuestas. Una nota de versión que diga "Fixed: the 2.4-rc build" tiene tres caracteres reservados en nueve palabras, y la API rechaza el mensaje entero en vez de dejar pasar el texto.
Las reglas cambian dentro de una entidad, que es lo segundo que se suele fallar. En un fragmento o un bloque de código solo son especiales la barra invertida y el acento grave, así que escapar el resto ahí mete barras invertidas visibles en tu código. Dentro de los paréntesis de un enlace o de un emoji personalizado solo lo son el paréntesis de cierre y la barra invertida. La herramienta de arriba aplica la regla que toca en cada contexto, que es justo lo que un buscar y reemplazar no puede hacer.
Si nada de esto te convence, usa HTML. Escapa tres caracteres, &, < y >, y anida sin ambigüedades. La única razón para preferir MarkdownV2 es que se lee mejor en el control de versiones.
El límite de 4096 caracteres cuenta texto, no marcado
Un mensaje de texto de Telegram admite 4096 caracteres. El formato viaja como entidades junto al texto y no dentro de él, así que las etiquetas, los asteriscos y las barras invertidas que ves en la salida no cuentan. El contador de arriba muestra la longitud visible, que es la cifra que comprueba Telegram.
Hay dos límites cercanos que conviene conocer antes de montar un emisor. Un pie de foto admite 1024 caracteres, así que un mensaje con formato que cabe de sobra será rechazado en cuanto adjuntes una imagen. Un mensaje que pasa del límite no se recorta: la API devuelve un error y no envía nada.
Preguntas
¿Sirve para publicaciones de canal y chats normales, o solo para bots?
La tabla de sintaxis vale para todo lo que envíe a través de la Bot API o de una librería cliente. Si escribes tú mismo dentro de Telegram, la app tiene su propio menú de formato y nunca llegas a ver MarkdownV2. Esta herramienta es para cuando el envío lo hace otra cosa y el texto le tiene que llegar ya formateado.
¿Qué parse mode conviene usar?
HTML, salvo que tengas un motivo. Escapa tres caracteres en vez de dieciocho, anida de forma predecible y, cuando te equivocas, lo normal es ver una etiqueta suelta en lugar de perder el mensaje. MarkdownV2 se lee mejor en un archivo fuente, que es el argumento honesto a su favor.
¿Por qué mi mensaje se envió pero perdió el formato?
Casi siempre falta el parse_mode. Sin él, Telegram trata el texto como literal y los asteriscos y las etiquetas aparecen como caracteres. Pon parse_mode en MarkdownV2 o en HTML al enviar, según la salida que hayas copiado.
¿Puedo anidar negrita dentro de un enlace, o cursiva dentro de negrita?
Sí, en los dos parse modes, con una excepción: subrayado y cursiva juntos en MarkdownV2 necesitan un apaño porque los delimitadores chocan. Los fragmentos y los bloques de código no admiten ningún otro estilo dentro, en ninguno de los dos modos.
¿Qué es el ID de emoji personalizado y de dónde se saca?
Es el ID numérico de un emoji personalizado de Premium, y se lee de un mensaje que ya lo contenga, no de un catálogo público. Quien envía necesita Telegram Premium, o ser un bot propietario del set de stickers. El resto ve el carácter alternativo que hayas envuelto.
¿Se sube a algún sitio lo que escribo aquí?
No. La conversión ocurre en tu navegador y la página no tiene paso de envío, ni cuenta, ni almacenamiento. Cierras la pestaña y el mensaje desaparece.
Sigue por aquí
También gratis: Telegram Group Finder , Telegram Lead Finder , Free QR Code Generator .
Si el formato es para un mensaje que vas a enviar a 200 personas
El texto ya escapado es la mitad pequeña de una difusión. La mitad grande es enviarlo desde una cuenta a la que la gente de verdad responda, espaciarlo para que Telegram no se moleste y recoger las respuestas en algún sitio que no sea un móvil. De eso se encarga Entergram: cuentas personales reales de Telegram en vez de un bot, cada una con su propio proxy, y las respuestas llegando a una sola interfaz junto a la ficha del contacto.
Ver cómo funcionan las difusiones