feat: pantalla para administrar chats autorizados del agente de Telegram
Antes la whitelist de telegram_agent_auth solo se podía tocar con curl/Postman contra /api/v2/agent/auth. Se agrega /app/agente/chats-autorizados con un CRUD simple, más un botón "buscar mensajes recientes" (UpdatesRecientesDelBot, vía getUpdates) para descubrir el chat_id de alguien que le acaba de escribir al bot sin tener que pedírselo por otro medio. Entrada nueva en el menú lateral del módulo Automatización IA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
7b0e4b9b5c
commit
5607836261
@@ -170,6 +170,51 @@ func sendAgentReply(botToken string, chatID int64, text string) error {
|
||||
|
||||
// ─── CRUD de chats autorizados ────────────────────────────────────────────────
|
||||
|
||||
// AgentAuthView renderiza la pantalla de administración de chats autorizados.
|
||||
func AgentAuthView(c *fiber.Ctx) error {
|
||||
return c.Render("automatizacion/chats_autorizados", fiber.Map{
|
||||
"user": c.Locals("user"),
|
||||
"modules": c.Locals("userModules"),
|
||||
}, "layouts/main")
|
||||
}
|
||||
|
||||
// AgentAuthRecientes consulta los últimos mensajes recibidos por el bot del
|
||||
// agente (getUpdates) y devuelve los remitentes distintos que todavía no están
|
||||
// autorizados, para que el admin pueda autorizarlos con un clic sin tener que
|
||||
// buscar el chat_id a mano.
|
||||
func AgentAuthRecientes(c *fiber.Ctx) error {
|
||||
tgCfg, err := models.GetAgentTelegramConfig()
|
||||
if err != nil || tgCfg.BotToken == "" {
|
||||
return c.Status(400).JSON(fiber.Map{"error": "No hay un bot de Telegram configurado para el agente"})
|
||||
}
|
||||
autorizados, _ := models.GetAllAgentAuth()
|
||||
yaAutorizado := map[int64]bool{}
|
||||
for _, a := range autorizados {
|
||||
yaAutorizado[a.ChatID] = true
|
||||
}
|
||||
|
||||
remitentes, err := services.UpdatesRecientesDelBot(tgCfg.BotToken)
|
||||
if err != nil {
|
||||
return c.Status(502).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
type item struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Nombre string `json:"nombre"`
|
||||
Mensaje string `json:"mensaje"`
|
||||
}
|
||||
seen := map[int64]bool{}
|
||||
out := make([]item, 0, len(remitentes))
|
||||
for _, r := range remitentes {
|
||||
if seen[r.ChatID] || yaAutorizado[r.ChatID] {
|
||||
continue
|
||||
}
|
||||
seen[r.ChatID] = true
|
||||
out = append(out, item{ChatID: r.ChatID, Nombre: r.Nombre, Mensaje: r.Mensaje})
|
||||
}
|
||||
return c.JSON(fiber.Map{"items": out})
|
||||
}
|
||||
|
||||
func AgentAuthList(c *fiber.Ctx) error {
|
||||
items, err := models.GetAllAgentAuth()
|
||||
if err != nil {
|
||||
|
||||
@@ -401,6 +401,7 @@ func AdminApiRoutes(api fiber.Router) {
|
||||
|
||||
// ─── Agente Telegram: chats autorizados ──────────────────────────────────
|
||||
h.Get("/agent/auth", controllers.AgentAuthList)
|
||||
h.Get("/agent/auth/recientes", controllers.AgentAuthRecientes)
|
||||
h.Post("/agent/auth", controllers.AgentAuthCreate)
|
||||
h.Delete("/agent/auth/:id", controllers.AgentAuthDelete)
|
||||
h.Delete("/agent/history/:chat_id", controllers.AgentHistoryClear)
|
||||
|
||||
@@ -76,6 +76,13 @@ func RenovacionesRoutes(protected fiber.Router) {
|
||||
protected.Post("/api/asistente/chat", controllers.PostAsistenteChat)
|
||||
protected.Delete("/api/asistente/historial", controllers.DeleteAsistenteHistorial)
|
||||
|
||||
// ─── Automatización IA: Chats autorizados del agente (Telegram) ────
|
||||
protected.Get("/agente/chats-autorizados", middlewares.MenuMiddleware, controllers.AgentAuthView)
|
||||
protected.Get("/api/agent/auth", controllers.AgentAuthList)
|
||||
protected.Get("/api/agent/auth/recientes", controllers.AgentAuthRecientes)
|
||||
protected.Post("/api/agent/auth", controllers.AgentAuthCreate)
|
||||
protected.Delete("/api/agent/auth/:id", controllers.AgentAuthDelete)
|
||||
|
||||
// ─── Automatización IA: Plantillas de documento ────────────────────
|
||||
protected.Get("/automatizacion/plantillas", middlewares.MenuMiddleware, controllers.PlantillasDocumentoView)
|
||||
protected.Get("/api/plantillas-documento", controllers.GetPlantillasDocumento)
|
||||
|
||||
Reference in New Issue
Block a user