feat: agente Telegram con IA + Coolify multi-instancia

- Coolify: soporte multi-instancia (CRUD de configs, ?config_id= en todos
  los endpoints, endpoints expandidos para services/databases/teams/envs)
- AiConfig: campos es_agente_bot + telegram_config_id para marcar qué
  config de IA actúa como cerebro del bot administrador
- TelegramAgentHistory + TelegramAgentAuth: historial de conversación por
  chat_id y whitelist de chats autorizados
- Agent Engine: function calling OpenAI-compatible con 25+ herramientas
  (clientes, contratos, contabilidad, proyectos, tickets, tareas,
  Coolify multi-instancia, servidores, monitores URL)
- Webhook POST /webhooks/telegram-agent/:bot_token (público, sin sesión)
- API /api/v2/agent/auth y /api/v2/agent/history para administrar el agente
- AutoMigrate: AiConfig, TelegramAgentHistory, TelegramAgentAuth

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro GD
2026-07-13 18:29:06 +00:00
co-authored by Claude Sonnet 4.6
parent 50812749ea
commit 33cfe4fdb0
10 changed files with 1358 additions and 14 deletions
+38 -1
View File
@@ -349,20 +349,57 @@ func AdminApiRoutes(api fiber.Router) {
h.Put("/cloudflare/zones/:zone_id/dns/:record_id", controllers.UpdateCloudflareDNS)
h.Delete("/cloudflare/zones/:zone_id/dns/:record_id", controllers.DeleteCloudflareDNS)
// ─── Coolify ─────────────────────────────────────────────────────────────
// ─── Coolify instancias (CRUD multi-instancia) ───────────────────────────
h.Get("/coolify/configs", controllers.CoolifyListConfigs)
h.Post("/coolify/configs", controllers.CoolifyCreateConfig)
h.Put("/coolify/configs/:id", controllers.CoolifyUpdateConfig)
h.Delete("/coolify/configs/:id", controllers.CoolifyDeleteConfig)
h.Get("/coolify/configs/:id/test", controllers.CoolifyTestConfig)
// ─── Coolify operaciones (todos soportan ?config_id=) ────────────────────
h.Get("/coolify/apps", controllers.CoolifyListApplications)
h.Get("/coolify/apps/:uuid", controllers.CoolifyGetApplication)
h.Get("/coolify/apps/:uuid/logs", controllers.CoolifyApplicationLogs)
h.Get("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvs)
h.Post("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvCreate)
h.Patch("/coolify/apps/:uuid/envs", controllers.CoolifyApplicationEnvUpdateBulk)
h.Delete("/coolify/apps/:uuid/envs/:env_id", controllers.CoolifyApplicationEnvDelete)
h.Get("/coolify/apps/:uuid/start", controllers.CoolifyApplicationStart)
h.Get("/coolify/apps/:uuid/stop", controllers.CoolifyApplicationStop)
h.Get("/coolify/apps/:uuid/restart", controllers.CoolifyApplicationRestart)
h.Get("/coolify/apps/:uuid/deployments", controllers.CoolifyApplicationDeployments)
h.Post("/coolify/apps/:uuid/deploy", controllers.CoolifyApplicationDeploy)
h.Get("/coolify/servers", controllers.CoolifyListServers)
h.Get("/coolify/servers/:uuid", controllers.CoolifyGetServer)
h.Get("/coolify/servers/:uuid/resources", controllers.CoolifyServerResources)
h.Get("/coolify/servers/:uuid/domains", controllers.CoolifyServerDomains)
h.Get("/coolify/servers/:uuid/validate", controllers.CoolifyServerValidate)
h.Get("/coolify/services", controllers.CoolifyListServices)
h.Get("/coolify/services/:uuid", controllers.CoolifyGetService)
h.Get("/coolify/services/:uuid/start", controllers.CoolifyServiceStart)
h.Get("/coolify/services/:uuid/stop", controllers.CoolifyServiceStop)
h.Get("/coolify/services/:uuid/restart", controllers.CoolifyServiceRestart)
h.Get("/coolify/services/:uuid/envs", controllers.CoolifyServiceEnvs)
h.Patch("/coolify/services/:uuid/envs", controllers.CoolifyServiceEnvUpdateBulk)
h.Get("/coolify/databases", controllers.CoolifyListDatabases)
h.Get("/coolify/databases/:uuid", controllers.CoolifyGetDatabase)
h.Get("/coolify/databases/:uuid/start", controllers.CoolifyDatabaseStart)
h.Get("/coolify/databases/:uuid/stop", controllers.CoolifyDatabaseStop)
h.Get("/coolify/databases/:uuid/restart", controllers.CoolifyDatabaseRestart)
h.Get("/coolify/projects", controllers.CoolifyListProjects)
h.Get("/coolify/projects/:uuid", controllers.CoolifyGetProject)
h.Get("/coolify/projects/:uuid/environments", controllers.CoolifyProjectEnvironments)
h.Get("/coolify/deployments", controllers.CoolifyListDeployments)
h.Get("/coolify/deployments/:uuid", controllers.CoolifyGetDeployment)
h.Get("/coolify/teams", controllers.CoolifyListTeams)
h.Get("/coolify/teams/current", controllers.CoolifyCurrentTeam)
h.Get("/coolify/teams/current/members", controllers.CoolifyTeamMembers)
// ─── Agente Telegram: chats autorizados ──────────────────────────────────
h.Get("/agent/auth", controllers.AgentAuthList)
h.Post("/agent/auth", controllers.AgentAuthCreate)
h.Delete("/agent/auth/:id", controllers.AgentAuthDelete)
h.Delete("/agent/history/:chat_id", controllers.AgentHistoryClear)
// ─── VCard API ───────────────────────────────────────────────────────────
h.Get("/vcard-api/config", controllers.VcardApiGetConfig)
+4
View File
@@ -37,6 +37,10 @@ func RutasPublicas(web fiber.Router) {
// Configurar en el bot: POST https://api.telegram.org/bot{TOKEN}/setWebhook?url={HOST}/webhooks/telegram-portal
web.Post("/webhooks/telegram-portal", controllers.TelegramPortalWebhook)
// ─── Webhook del agente administrador (bot con IA) ──────────────────────
// Configurar en el bot: POST https://api.telegram.org/bot{TOKEN}/setWebhook?url={HOST}/webhooks/telegram-agent/{BOT_TOKEN}
web.Post("/webhooks/telegram-agent/:bot_token", controllers.TelegramAgentWebhook)
// ─── WebSMS (LabsMobile) — API de envío + webhooks ──────────────────
web.Post("/api/sms/send", controllers.ApiSendSms)
web.Post("/webhooks/websms/delivery", controllers.WebSmsDeliveryWebhook)