Diseño Sistema Memoria Telegram Persistente
Arquitectura completa para guardar historial de Telegram en PostgreSQL y recuperarlo en cada sesión
Sistema de Memoria Persistente vía Telegram
Objetivo
Que Claude Code recuerde toda conversación de Telegram aunque se caiga la sesión, se reinicie el PC o pasen semanas.
Estado actual (2026-03-30) — IMPLEMENTADO ✅
Componentes activos
| Componente | Estado | Detalle |
|---|---|---|
PostgreSQL groupgarre-memory-db |
✅ corriendo | srv-principal, red n8n_default |
DB claude_memory tabla telegram_history |
✅ creada | 30+ mensajes guardados |
| n8n workflow "Telegram Logger" | ✅ activo | ID: I7zfWdKT3mkfjk9B |
| n8n workflow "Telegram Get History" | ✅ activo | ID: hpwyAsrb1SL189oO |
| Adminer web UI | ✅ accesible | https://db.lucasgarre.com |
| Hook UserPromptSubmit | ❌ no dispara | Solo para prompts de terminal, no MCP |
| Hook PostToolUse reply | ❌ no dispara | Mismo problema — no funciona para MCP |
Hallazgo clave
Los hooks de Claude Code (UserPromptSubmit y PostToolUse) NO disparan para eventos MCP (mensajes Telegram que llegan vía plugin). Solo funcionan para prompts escritos directamente en el terminal.
Solución en uso: logging manual con curl
Cada vez que proceso un mensaje de Telegram, yo (Claude) llamo manualmente a n8n:
Incoming (mensaje de Lucas):
curl -s -X POST "https://n8n.lucasgarre.com/webhook/I7zfWdKT3mkfjk9B/webhook/telegram-log" \
-H "Content-Type: application/json" \
-d '{"chat_id":"8009772819","role":"user","message":"..."}'
Outgoing (mi respuesta):
curl -s -X POST "https://n8n.lucasgarre.com/webhook/I7zfWdKT3mkfjk9B/webhook/telegram-log" \
-H "Content-Type: application/json" \
-d '{"chat_id":"8009772819","role":"assistant","message":"..."}'
Recuperar historial al inicio de sesión
curl "https://n8n.lucasgarre.com/webhook/hpwyAsrb1SL189oO/webhook/telegram-history?chat_id=8009772819&limit=50"
Devuelve los últimos N mensajes en JSON ordenados por reciente primero.
Acceso a la BD
Web (Adminer)
- URL: https://db.lucasgarre.com
- Sistema: PostgreSQL
- Servidor: groupgarre-memory-db
- Usuario: memory_user
- Contraseña: M3m0ry_Gg4rr3_2025!
- Base de datos: claude_memory
Via SSH
plink -batch -ssh -pw "Nokia5320@@" root@217.154.106.6 "docker exec groupgarre-memory-db psql -U memory_user -d claude_memory -c 'SELECT * FROM telegram_history ORDER BY id DESC LIMIT 20;'"
Stack
- Contenedor:
groupgarre-memory-db(postgres:16-alpine) en srv-principal - Red Docker: n8n_default
- DB: claude_memory / user: memory_user / pass: M3m0ry_Gg4rr3_2025!
- n8n credencial ID: jA4gg753JMY0Jx2s "claude_memory DB"
- NPM proxy: db.lucasgarre.com → 100.126.176.115:8083 (via Tailscale, cert ID 19)
Schema
CREATE TABLE telegram_history (
id SERIAL PRIMARY KEY,
chat_id TEXT NOT NULL,
role TEXT NOT NULL, -- 'user' o 'assistant'
message TEXT NOT NULL,
timestamp TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_chat_timestamp ON telegram_history(chat_id, timestamp DESC);
Pendientes para el jueves (2026-04-03)
- Instalar Claude Code en srv-principal para sesiones 24/7 sin PC
- Conectar Claude Teams/API al mismo PostgreSQL para contexto compartido
- Investigar si hay hook event específico para MCP tool use que funcione
Why: Lucas quiere historial permanente de toda conversación para no perder contexto entre sesiones. How to apply: Al inicio de cada sesión Telegram, consultar el webhook Get History para cargar contexto.