From 7c6f3d9c270304c1105413fb88a1963811464dac Mon Sep 17 00:00:00 2001 From: Cristian Felipe Cruz Buitron Date: Wed, 26 Aug 2026 00:21:28 -0500 Subject: [PATCH] =?UTF-8?q?Documentar=20notificaci=C3=B3n=20silenciosa,=20?= =?UTF-8?q?hilos=20y=20adjunto=20de=20log=20en=20Telegram?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Actualiza la sección de Notificaciones: formato con íconos por tipo de evento, log completo adjunto como documento, nivel "info" silencioso (disable_notification), y respuestas en hilo cuando un recurso accionado se recupera solo -- con la limitación conocida de que un desbloqueo manual (borrando la entrada de state.json) pierde el message_id y no queda threadeado. Validado en vivo con el canario. --- .../docs/arquitectura/agente-monitoreo.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/workloads/docs-portal/docs/arquitectura/agente-monitoreo.md b/workloads/docs-portal/docs/arquitectura/agente-monitoreo.md index 45b5fe3..fc59a0d 100644 --- a/workloads/docs-portal/docs/arquitectura/agente-monitoreo.md +++ b/workloads/docs-portal/docs/arquitectura/agente-monitoreo.md @@ -197,6 +197,28 @@ de un usuario es el mismo across bots, pero Telegram igual devuelve persona. Se resolvió confirmando el `chat_id` real vía `getUpdates` del bot correcto. +**Formato:** cada notificación lleva un ícono según su naturaleza +(✅ acción ok, 🛑 acción falló/rechazada, 🚨 alerta de seguridad, +❌ error operativo, 👀 solo diagnóstico) y el log completo de esa +corrida va adjunto como documento (`sendDocument`), no solo como ruta — +útil para revisar desde el celular sin acceso a shell. + +**Notificación silenciosa y respuestas en hilo (2026-08-26):** el nivel +`info` (nada elegible, todo diagnóstico rutinario) se manda con +`disable_notification=true` — no interrumpe; acciones, fallas y alertas +de seguridad sí suenan. Cuando se ejecuta una acción correctiva, el +`message_id` de Telegram queda guardado por recurso en `state.json` +(`telegram_message_id`); si ese recurso se recupera solo en una corrida +posterior, se manda un aviso silencioso como **respuesta** (hilo) al +mensaje original antes de limpiar el estado — agrupa visualmente todo +un incidente. Limitación conocida: si un humano desbloquea el recurso a +mano borrando su entrada de `state.json` (ver más abajo), el +`message_id` se pierde con esa entrada, así que ese caso puntual no +queda threadeado — solo el "se recuperó solo" está cubierto hoy. +Validado en vivo con el canario: acción real → `message_id` capturado → +canario parcheado a una imagen sana → reply en hilo confirmado, +silencioso, al recuperarse. + ## Horario activo y costo **Pausa nocturna (`ACTIVE_HOURS_START`/`END`, hora local del host):**