DEV Community

Cover image for Controla tus gastos desde Telegram con n8n y Google Sheets (con recordatorios de pago)
Rogelio Fulco
Rogelio Fulco

Posted on Originally published at fulco.dev

Controla tus gastos desde Telegram con n8n y Google Sheets (con recordatorios de pago)

Las apps de finanzas personales piden demasiado: abrirlas, buscar la categoría, llenar varios campos. Al tercer día ya no anotas nada. Y los pagos fijos, como el internet, el alquiler o las cuotas de un préstamo, se olvidan justo el día que vencen.

Quería algo más simple: escribirle a un bot de Telegram como le escribiría a un amigo, y que lo demás pasara solo. Lo armé con n8n, Telegram y Google Sheets.

Qué hace este flujo

  • Registra gastos e ingresos. El bot te pregunta el monto, el concepto y la categoría, y la categoría la eliges tocando un botón.

  • Calcula tu balance. Con /resumen ves cuánto entró, cuánto salió y cuánto te queda este mes, con el desglose por categoría.

  • Guarda tus pagos fijos y recordatorios. Pagos mensuales, pagos únicos, cuotas de un préstamo o cualquier fecha que no quieras olvidar.

  • Te avisa antes de cada vencimiento. Todos los días a las 8:00 a. m. revisa tus pagos y te escribe por Telegram y por correo si alguno vence en 3 días, vence hoy o ya está vencido.

  • Arma una hoja de cálculo con gráficas. Todo queda en tu propia hoja de Google Sheets, con el balance del mes y una gráfica que compara ingresos y gastos.

  • Protege tus datos con un PIN. Sin iniciar sesión, el bot no muestra ni registra nada.

Qué necesitas

  • n8n, en la nube o instalado en tu propio servidor, con una dirección pública HTTPS.

  • Una cuenta de Google.

  • Un bot de Telegram, que se crea gratis con @botfather.

Paso 1: prepara la hoja de Google Sheets

Crea una hoja de cálculo con cuatro pestañas:

  • Gastos: Fecha, Monto, Categoria, Descripcion y Mes. Aquí escribe el bot cada gasto.

  • Ingresos: las mismas columnas que Gastos. Aquí van tu sueldo, la quincena o cualquier entrada de dinero.

  • Pagos: Nombre, Monto, Tipo (Mensual, Unico o Cuotas), Dia, FechaVence, CuotasTotal, CuotasPagadas, UltimoPago y Activo. Dos columnas más, ProximoVence y DiasRestantes, calculan solas cuándo vence cada pago.

  • Resumen: ingresos, gastos y balance del mes, gastos por categoría, ingresos y gastos de cada mes y próximos pagos, con dos gráficas.

Un consejo: pon las columnas de fecha y mes en formato de texto sin formato. Así Google no las convierte en fechas y n8n las lee sin problemas.

Paso 2: crea el bot de Telegram

  • Abre @botfather en Telegram y escribe /newbot.

  • Elige un nombre para el bot y copia el token que te entrega.

  • En n8n, crea una credencial de Telegram con ese token.

Paso 3: importa el flujo en n8n

  • Descarga el archivo JSON del flujo (el enlace está al final).

  • En n8n, ve a Workflows y elige Import from File.

  • Asigna tus credenciales en todos los nodos de Google Sheets, Telegram y Gmail. Al importar, los nodos llegan sin credenciales; si a alguno le falta la suya, ese paso falla.

  • En los nodos de Google Sheets, pega el ID de tu hoja. Es la parte de la dirección que va entre /d/ y /edit.

  • En el nodo “Interpretar mensaje”, cambia el PIN y agrega tu chat ID a la lista de chats permitidos.

  • Activa el flujo.

Cómo se usa

Registrar un gasto:

Tú: /gasto
Bot: ¿Cuánto gastaste?
Tú: 2.50
Bot: ¿En qué lo gastaste?
Tú: gaseosa
Bot: ¿En qué categoría? (aparecen botones: comida, bebidas, mercado, transporte...)
Tú: (tocas “bebidas”)
Bot: Gasto registrado: 2.50 en bebidas (gaseosa)

Los ingresos funcionan igual con /ingreso, y tienen sus propias categorías: quincena, sueldo, freelance, ventas, entre otras. El bot recuerda las categorías que más usas y las muestra primero.

Todos los comandos:

Comando

Qué hace

/login TU-PIN

Inicia sesión

/gasto

Registra un gasto paso a paso

/gasto 2.50 bebidas gaseosa

Registra un gasto en una sola línea

/ingreso

Registra un ingreso paso a paso

/ingreso 500 quincena noviembre

Registra un ingreso en una sola línea

/nuevopago

Agrega un pago fijo: mensual, único o en cuotas

/recordar

Agrega un recordatorio con fecha

/pagos

Muestra los próximos vencimientos

/pagado Internet

Marca un pago como hecho y lo registra como gasto

/eliminar Internet

Deja de recordar un pago

/resumen

Ingresos, gastos y balance del mes

/cancelar

Sale de un paso a paso sin guardar nada

/salir

Cierra la sesión

Las fechas se escriben como hablas: 15/12, 15 dic, mañana o en 10 dias. El bot siempre te confirma la fecha que entendió.

Seguridad

Cualquiera que encuentre tu bot en Telegram puede escribirle. Por eso el flujo tiene cuatro protecciones:

  • PIN de acceso. Sin sesión, el bot solo responde “escribe /login seguido de tu PIN” y no dice para qué sirve. El mensaje con tu PIN se borra del chat.

  • Cierre automático. La sesión se cierra sola tras 12 horas sin uso.

  • Bloqueo por intentos. Después de 5 intentos fallidos, el chat queda bloqueado 15 minutos.

  • Lista de chats permitidos. El bot ignora por completo cualquier chat que no sea el tuyo.

Problemas comunes

“bad webhook: Failed to resolve host”. Tu n8n no tiene una dirección pública. Usa un túnel, por ejemplo Cloudflare Tunnel, y configura la variable WEBHOOK_URL.

El bot dice “No pude guardar en la hoja de Google”. A algún nodo de Google Sheets le falta la credencial o el ID de la hoja. El mensaje incluye el detalle del error.

El bot vuelve a pedir el PIN o no recuerda tus categorías. Las sesiones y las categorías solo se guardan con el flujo activo. Si lo pruebas con “Test workflow”, no quedan guardadas.

Los gráficos no se actualizan. Revisa que en la pestaña Resumen la celda del mes conserve su fórmula. La pestaña está protegida con un aviso para que no la borres sin querer.

DESCARGAR

Top comments (1)

Collapse
 
alexshev profile image
Alex Shev •

A workflow like this becomes much more reliable once each incoming Telegram update has an idempotency key and the sheet stores a normalized transaction ID. Retries then cannot create duplicate expenses, and a later reminder can be tied back to one durable record instead of to a chat message.