From 7b1c260af57f8c192b25e72ebeb65f22459b7510 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 25 May 2026 12:49:19 -0500 Subject: [PATCH] Update notif_dispatch.go --- pkg/services/notif_dispatch.go | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/pkg/services/notif_dispatch.go b/pkg/services/notif_dispatch.go index 7cf5184..3e4cdd7 100644 --- a/pkg/services/notif_dispatch.go +++ b/pkg/services/notif_dispatch.go @@ -129,13 +129,12 @@ func DispatchTicketRespuestaAdmin(ticket *models.ProyectoTicket, contenido strin go SendTicketRespuestaPortalUser(portalUser.Email, portalUser.Nombre, proyectoNombre, ticket.Titulo, contenido, portalURL) } if cfg.CanalTelegram && portalUser.TelegramChatID != "" { - ts := NewTelegramService() msg := fmt.Sprintf("💬 El equipo respondió tu ticket\nProyecto: %s\nTicket: %s\n\n%s\n\n🔗 %s", escapeTelegramHTML(proyectoNombre), escapeTelegramHTML(ticket.Titulo), escapeTelegramHTML(contenido), telegramHTMLLink(portalURL, "Ver en el portal")) - if err := ts.SendMessageWithToken(portalUser.TelegramChatID, msg, getAdminBotToken()); err != nil { + if err := sendTelegramPortalUser(portalUser.TelegramChatID, msg); err != nil { log.Printf("[Notif] Error telegram portal_user %d: %v", portalUser.ID, err) } } @@ -186,13 +185,12 @@ func DispatchFacturaSubida(factura *models.Factura) { go SendFacturaSubidaPortalUser(u.Email, u.Nombre, clienteNombre, factura.Numero, factura.Monto, factura.Moneda, portalURL) } if cfg.CanalTelegram && u.TelegramChatID != "" { - ts := NewTelegramService() msg := fmt.Sprintf("🧾 Nueva factura disponible\nNúmero: %s\nMonto: %s %.2f\n\n🔗 %s", escapeTelegramHTML(factura.Numero), escapeTelegramHTML(factura.Moneda), factura.Monto, telegramHTMLLink(portalURL, "Ver en el portal")) - if err := ts.SendMessageWithToken(u.TelegramChatID, msg, getAdminBotToken()); err != nil { + if err := sendTelegramPortalUser(u.TelegramChatID, msg); err != nil { log.Printf("[Notif] Error telegram portal_user %d: %v", u.ID, err) } } @@ -223,6 +221,31 @@ func getAdminBotToken() string { return "" } +// sendTelegramPortalUser intenta enviar usando todos los bots activos hasta que uno funcione. +// Esto evita fallos cuando el usuario se vinculó con un bot distinto al primer bot activo. +func sendTelegramPortalUser(chatID string, mensaje string) error { + configs, err := models.GetAllTelegramConfigs() + if err != nil { + return err + } + var lastErr error + for _, cfg := range configs { + if !cfg.Activo || cfg.BotToken == "" { + continue + } + ts := &TelegramService{BotToken: cfg.BotToken} + if err := ts.SendMessage(chatID, mensaje); err != nil { + lastErr = err + continue + } + return nil + } + if lastErr != nil { + return lastErr + } + return fmt.Errorf("no hay bots de Telegram activos para enviar") +} + func sendTelegramAdmin(mensaje string) { configs, err := models.GetAllTelegramConfigs() if err != nil {