Primo Studios Web Blog

Telegram · 3 min

Botones de Telegram que apuntan las citas del correo en el calendario sin guardar nada: los datos salen del propio mensaje

Las citas me llegan por correo: el dentista, la revisión del coche, una reunión del cole… Y ahí se quedan, enterradas entre publicidad, hasta que se me pasan. Quería algo muy simple: que cada cita me llegue al móvil y que con un solo toque quede apuntada en el calendario que toca.

Así quedó:

  1. Un flujo de n8n lee el correo y, si es una cita, me manda un Telegram con quién la manda, qué es y la fecha.
  2. Debajo van cuatro botones: un botón por cada calendario de casa y uno de Descartar.
  3. Al pulsar uno, la cita se apunta en ese calendario, el correo se archiva y el mensaje cambia a «✅ Apuntado en …».

Lo interesante no es el resultado, que existe en mil sitios, sino cómo hacerlo sin montar nada pesado.

El problema: el botón solo puede llevar 64 bytes

Un botón de Telegram lleva un dato oculto, el callback_data, que es lo que recibe el bot cuando lo pulsas. El límite son 64 bytes. Ahí no cabe el título de la cita, la fecha, la hora y el identificador del correo.

La solución típica es guardar todo eso en una base de datos y poner en el botón solo un número que lo identifique. Funciona, pero es una pieza más que mantener, que hacer copias y que limpiar.

La idea: el mensaje ya tiene los datos

Cuando pulsas un botón, Telegram no solo manda el callback_data: también manda el mensaje entero al que pertenece el botón. Y ese mensaje ya lo escribí yo con un formato fijo:

📌 Revisión del dentista
🗓 15/03/2027 10:30
De: clínica …

Así que el botón solo lleva lo imprescindible:

cita:<CALENDARIO>:<id del correo>

Y el bot, al recibir la pulsación, saca el título y la fecha del propio texto del mensaje: busca la línea que empieza por 📌 y la que empieza por 🗓. No hay que guardar nada en ningún sitio. Si el mensaje existe, los datos existen.

Un efecto secundario muy útil: si una cita llega sin fecha (por ejemplo, un correo escrito a mano), basta con contestar a ese mensaje diciendo la fecha. El bot recibe la respuesta junto con el mensaje original y tiene todo lo que necesita.

Cómo encajan las piezas

  • n8n lee el correo y manda el mensaje con los botones.
  • El bot de Telegram recibe la pulsación, lee el texto y llama a un webhook de n8n con la acción: crear el evento y archivar el correo.
  • Ese webhook está protegido con una cabecera con clave. Sin ella, responde 403.
  • Si algo falla al apuntar, el mensaje no se toca y los botones siguen ahí para reintentar. Solo cuando todo ha ido bien se edita a «✅ Apuntado».

La trampa: un bot solo puede tener un dueño

Lo primero que se te ocurre es poner un disparador de Telegram dentro de n8n para recibir las pulsaciones. No lo hagas si ese bot ya lo usa otro programa.

Un bot de Telegram recibe los mensajes de una sola manera: o un programa le pregunta cada poco si hay novedades, o Telegram se los empuja a una dirección web (un webhook). El disparador de n8n registra un webhook, y en cuanto lo hace, el otro programa empieza a recibir un error 409 y deja de enterarse de nada.

En mi caso, el bot que manda los avisos de n8n es el mismo con el que hablo con mi asistente. Por eso las pulsaciones las atiende ese programa, que ya estaba escuchando, y desde ahí se llama a n8n. Un solo dueño para el bot, y n8n como un servicio más al que se le piden cosas.

Sin IA, y casi no hace falta

Podría haber puesto una IA a leer los correos y sacar las fechas, pero cada llamada cuesta dinero. Probé primero con reglas y resultó que la mayoría de citas que me llegan son automáticas: talleres, centros de salud, administraciones… Siempre traen la fecha con el mismo formato, y unas pocas expresiones regulares las sacan bien.

Las que escribe una persona a veces salen «sin fecha». Para esas está el truco de contestar al mensaje. Y la publicidad que se disfraza de cita («pide cita para tu revisión con descuento») se descarta por palabras clave.

Lo que me llevé de esto

  • El texto del mensaje es tu almacenamiento. Si lo escribes con un formato fijo, no necesitas guardar nada para los botones.
  • En el callback_data pon solo identificadores cortos. Los 64 bytes se acaban enseguida.
  • Un bot, un solo programa escuchando. Si añades un disparador de Telegram en otra herramienta, comprueba antes que no le estás quitando el bot a nadie.
  • Edita el mensaje solo cuando todo ha ido bien. Así, si falla, puedes volver a pulsar.
  • Antes de pagar una IA, prueba con reglas. Con correos automáticos van sobradas.