¿Cómo darle formato a los textos enviados desde nuestro bot de Telegram?

¿Cómo darle formato a los textos enviados desde nuestro bot de Telegram?

En este artículo vamos a hablar sobre las distintas formas de aplicarle formato a los textos que mandamos mediante la API de Bots de Telegram independientemente del lenguaje de programación que estéis empleando.

Os enseñaremos a usar la Negrita, Subrayado, Tachado, Enlaces, ... y el uso de los 3 tipos de formateo que soporta actualmente Telegram en los mensajes que mandamos desde nuestros bots. El soporte de formateo de textos se lanzó el 20 de enero del 2016 con soporte para negrita, cursiva y "code", años más tarde el 23 de enero del 2020 añadieron el soporte para tachado y subrayado.

Empezaremos hablando del Parse_mode, es una propidad de un objecto Json al que le indicas el modo de parseado que quieres aplicar al texto que le pasas, los 3 valores validos que puede tomar son "HTML", "Markdown" y "MarkdownV2" (No distingue entre mayúsculas y minúsculas).

Parse_Mode HTML

- Negrita: <b>texto en negrita</b>, <strong>negrita</strong>
- Cursiva: <i>texto en cursiva</i>, <em>cursiva</em>

- Subrayado: <u>texto subrayado</u>, <ins>subrayado</ins>

- Tachado: <s>texto tachado</s>, <strike>tachado</strike>, <del>tachado</del>

Enlaces: <a href="https://www.Tecnonucleous.com/">Tecnonucleous</a>

<a href="tg://user?id=123456789">inline mention of a user</a>
- Código: <code>texto con el código</code>

- Indica a la API que debe respetar los saltos de línea y los espacios en blanco: <pre>Texto con saltos de línea y espacios</pre>

Parse_Mode Markdown

*texto en negrita*
_texto en cursiva_
[URL inline](https://tecnonucleous.com/)
[Mención inline a un usuario](tg://user?id=123456789)
`código en línea de ancho fijo`
```json
bloque de código preformateado de ancho fijo ```

Parse_Mode MarkdownV2

Este modo es igual al "Markdown", tiene todas las opciones que nos proporciona la versión anterior pero añadiendo dos nuevas opciones de formateo que son las siguientes:

__subrayado__
~tachado~

Ejempo de uso

La sintaxis del parse_mode es primero escribir un objecto Json dentro de unos corchetes {} escribimos el parametro parse_mode y su valor (HTML, Markdown o MarkdownV2), dando como resultado un objecto Json similar al siguiente: {parse_mode : "Markdown"}. Este objecto Json en la API de Bots en NodeJS se manda generalmente como tercer parámetro en el método "sendMessage".

  • Ejemplo de envio de un mensaje usando Markdown:
bot.onText(/^\!texto/, function(msg) {
bot.sendMessage(msg.chat.id, "Texto con *negrita*, _cursiva_ y `code`",{parse_mode : "Markdown"});
});
  • Ejemplo de envio de un mensaje usando HTML:
bot.onText(/^\!texto/, function(msg) {
bot.sendMessage(msg.chat.id, "Texto con <b>negrita</b>, <i>cursiva</i> y <s>tachado</s>",{parse_mode : "HTML"});
});

⚠️ Atención: Cuidado con los caracteres especiales

Generalmente en el Parse_mode Markdown es donde debemos tener más cuidado con el tipo de textos que le mandamos, si por ejemplo mandamos un alias de un usuario o grupo usando el Markdown tenemos que tener cuidado con las barra bajas (_) de los alias. En este caso debemos escapar los caracteres usando la barra inclinada hacia la izquierda (\).

En caso de no escapar ese tipo de caracteres recibiréis un mensaje similar al siguiente en vuestra terminal:

Unhandled rejection Error: ETELEGRAM: 400 Bad Request: can't parse entities: Can't find end of the entity starting at byte offset 121

📕 Listado de caracteres que debemos escapar con \:

_ , * , [ , ] , ( , ) , ~ , ` , > , # , + , - , = , | , { , } , . , !

Si quereís evitaros estos problemas podéis tirar más del parse_mode HTML que al final os dará menos dolores de cabeza al no tener que escapar tantos caracteres como en el caso de que usemos Markdown o MarkdownV2.