Generar un enlace automático para compartir posts en un canal de Telegram
Publicado el Lunes, 29 de diciembre de 2025
Los posts de Picando Código se comparten automáticamente en un canal de Telegram ni bien se publican. Esto se hace mediante una función PHP en el archivo functions.php de mi tema de WordPress. Escribí al respecto en Actualiza un canal en Telegram automáticamente desde WordPress.
El canal es relativamente popular, al momento de escribir esto cuenta con 89 miembros (91 contándome a mí y al bot que publica los posts). El código viene funcionando lo más bien desde 2018. La función genera una dirección web con los datos necesarios y hace un request a esa URL.
La semana pasada, la publicación automática no funcionó al publicarse un post. Así que fui a fijarme en el log de errores de mi servidor, y me encontré con el siguiente mensaje:
Hubo un timeout en la conexión, esto puede pasar por muchas razones: problemas en la red, el servidor está sobrecargado, o estuvo caído por un tiempo determinado.
Debería capturar este error en mi código y agendar un reintento, pero no sé si vale la pena tanta complejidad. El pedido HTTP que se hace a la API de Telegram para compartir los posts en el canal es relativamente simple. Usa el método GET, así que se puede hacer desde cualquier navegador web (o curl, o cualquier herramienta que pueda hacer un pedido HTTP). Así que me escribí un código Ruby que genera la URL que necesito para compartir el enlace en el canal de Telegram.
El código:
require 'uri'
def uso
puts <<~MSG
Uso:
#{__FILE__} link
E.g.
#{__FILE__} https://picandocodigo.net
MSG
end
if ARGV.empty?
uso
abort 'Es necesario pasar un link como parámetro'
end
link = ARGV[0]
unless link =~ URI::DEFAULT_PARSER.make_regexp
uso
abort 'El URL no es válido'
end
api_token = File.read(File.expand_path('./.telegram_api_token'))
chat_id = '@picandocodigo'
url = "https://api.telegram.org/bot#{api_token}/sendMessage?chat_id=#{chat_id}&text=#{CGI.escape(link)}"
puts url
La función uso explica cómo usar el script. Tenemos que ejecutarlo con un argumento que es la URL que queremos compartir. Se muestra cuando no pasamos ningún argumento o el argumento no es una URL válida. El id del chat está hardcodeado a @picandocodigo, pero se podría usar cualquier otro. Lee el token para usar la API de Telegram desde un archivo .telegram_api_token en el mismo directorio. Finalmente arma el String final de la url escapando los caracteres del url que pasamos como argumento con CGI.escape.
La ejecuté y obtuve la URL, hice clic directamente en la consola y el post se compartió en el canal de Telegram de Picando Código:
> https://api.telegram.org/bot[API_KEY]/sendMessage?chat_id=@picandocodigo&text=https%3A%2F%2Fpicandocodigo.net%2F2025%2Frecomendaciones-de-podcasts-2%2F
Es la primera vez que tengo que hacer esto a mano desde que dejé andando la automatización. Pero si por alguna razón vuelve a pasar, tengo este script para solucionarlo rápido.



![[Plugin WordPress] List Category Posts 0.4 [Plugin WordPress] List Category Posts 0.4](https://picandocodigo.net/wp-content/uploads/2008/08/gnu-wordpress.png)

Drk0027 29 diciembre. 2025 - 11:19
No usas el plugin wp_telegram? Funciona bien, creo que trabaja mediante cron. Telegram suelta muchos timeout, en bots de node si no se controla los mata frecuentemente XD
Por cierto, acabo de notar esto, pero tu código se ve como texto simple en RSS
Fernando 29 diciembre. 2025 - 11:55
Me gustó para implementarlo yo mismo y no instalar un plugin más. Así tengo más control y menos plugins con código de terceros (que después se desactualizan o desactivan si no lo mantienen más) 😬
Noté lo del código en lectores RSS, debería reimplementarlo con la etiqueta html code o algo así, para que se vea al menos más “código”. Pero no sé si hay forma de que el RSS respete los colores.
Drk0027 29 diciembre. 2025 - 12:42
Es cierto, es divertido implementarlo uno mismo. Aunque el lio de que deje de ser mantenido puede pasar en uno mismo también XD
lo del código html en rss funciona. aunque imagino que depende del lector. En mi caso, con hilite.me el código se ve diferente, pero aun con resaltado y estilos. falla si intento usar numero de lineas, por eso trato de no usarlo mucho. Mi lector es FreshRSS