Notificaciones en PrintStash al acabar una impresión
Configura las alertas en PrintStash: impresiones completadas, fallidas o canceladas e impresoras desconectadas, por Discord, Telegram, ntfy o webhook firmado.
PrintStash puede enviar eventos de impresión y de impresora a Discord, Telegram, ntfy o un webhook genérico. Las notificaciones están desactivadas por defecto y solo un superusuario puede configurarlas.
Qué se dispara y cuándo
Cada canal puede suscribirse a:
- impresión completada;
- impresión fallida;
- impresión cancelada;
- impresora desconectada, tras una transición real de conectada a desconectada.
El evento de desconexión no se dispara solo porque PrintStash arranque mientras una impresora está inaccesible. No hay un evento aparte de impresora conectada.
Elige los eventos canal por canal y, si quieres, limita un canal a impresoras concretas. Tener las cancelaciones separadas viene bien cuando cancelas trabajos de prueba a menudo pero los fallos de verdad siguen necesitando atención.
Configurar un canal
Abre Ajustes -> Notificaciones, activa el interruptor general y añade un canal.
- Discord necesita una URL de webhook de los ajustes de integración del servidor.
- Telegram necesita un token de BotFather y el ID del chat de destino.
- ntfy necesita una URL de servidor, un topic y, opcionalmente, un token de acceso. El servidor por defecto es
https://ntfy.sh; un servidor ntfy autoalojado tiene que estar accesible en una dirección pública que pase las comprobaciones de URL de salida. - Un webhook genérico recibe un cuerpo JSON y puede usar un secreto HMAC de firma opcional.
PrintStash bloquea los destinos de webhook que resuelven a direcciones privadas, de loopback o link-local. Esta protección contra SSRF implica que http://homeassistant.local y una IP privada de n8n no van a funcionar directamente. Usa un endpoint HTTPS público, un relay permitido u otra vía de integración, en lugar de debilitar las comprobaciones de peticiones salientes del servidor.
Pulsa Test y confirma que el mensaje llega antes de confiar en el canal.
Cómo funcionan los reintentos
PrintStash escribe el evento en un outbox dentro de la misma transacción de base de datos que el cambio de estado. Un despachador en segundo plano lo envía y reintenta los fallos con esperas cada vez mayores.
La entrega es al menos una vez. Un reintento o una recuperación puede producir un duplicado, así que quien reciba webhooks genéricos debería deduplicar con la cabecera Idempotency-Key. Si configuras un secreto de firma, verifica el HMAC de X-PrintStash-Signature contra el cuerpo exacto de la petición.
Una respuesta del servicio con Retry-After se respeta sin consumir el presupuesto normal de reintentos. Un canal que falla repetidamente se desactiva para cortar el ruido infinito. Arréglalo y reactívalo a mano; PrintStash no manda otra alerta avisando de que el canal de alertas está desactivado.
Una anécdota breve
La primera implementación se topó con dos fallos maravillosamente corrientes. Telegram rechazó un guion bajo en bracket_v2.gcode por sus reglas de Markdown. ntfy metió un título Unicode en una cabecera HTTP que no podía transportarlo con seguridad. Los dos errores se corrigieron, pero son buenas razones para probar con nombres de archivo reales y no con test.gcode.
Los secretos de los canales se guardan sin cifrar en la base de datos, igual que las demás credenciales de servicios configurados. Mantén la instalación en una red de confianza, restringe el acceso a los ajustes e incluye la base de datos en tu plan de seguridad y de copias de seguridad.
Mira el stack de una granja pequeña para enrutar alertas junto a los controladores de impresora y Spoolman, o el modelo de seguridad para los límites de los secretos almacenados y de las peticiones salientes.