Diseño Sistema Memoria Telegram Persistente

Arquitectura completa para guardar historial de Telegram en PostgreSQL y recuperarlo en cada sesión

project Modificado: 15/4/2026 design_telegram_memory.md

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.