{"id":"cs-1782306207228-9gaxzl4o","status":"done","createdAt":1782306207228,"finishedAt":1782306241967,"meta":{"projectName":"chatbot","projectPath":"C:\\xampp\\htdocs\\chatbot","messagePreview":"Consolida el CONOCIMIENTO del proyecto para uso futuro del agente.\n\nEntrega en Markdown:\n1. **Resumen ejecutivo** (5 lín","phaseId":"knowledge"},"events":[{"event":"status","data":{"text":"Modo completo — hasta 80 herramientas, usa solo las necesarias"},"at":1782306207233},{"event":"status","data":{"text":"Agente + Serena (project-mcp.json)"},"at":1782306207881},{"event":"agent","data":{"agentId":"agent-2c351a89-83dc-41d0-9e2f-17c37cd7598d","projectPath":"C:\\xampp\\htdocs\\chatbot"},"at":1782306207881},{"event":"changes","data":{"sessionId":"cs-1782306207233-7rq3sl","pending":0},"at":1782306207881},{"event":"status","data":{"text":"Procesando…"},"at":1782306208511},{"event":"tool_activity","data":{"activity":{"id":"tool_a5e0ae12-f1ab-4e90-818d-f54660bc69d","name":"mcp","status":"running","summary":"MCP list_memories","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"list_memories\",\"args\":{}}","at":"2026-06-24T13:03:34.852Z"}},"at":1782306214852},{"event":"tool_activity","data":{"activity":{"id":"tool_ef80fa53-1445-4527-8444-cf3177786cf","name":"glob","status":"running","summary":"glob: ","detail":"","at":"2026-06-24T13:03:34.855Z"}},"at":1782306214855},{"event":"tool_activity","data":{"activity":{"id":"tool_0aef4718-cced-4b95-b660-faa4a1d6e51","name":"glob","status":"running","summary":"glob: ","detail":"","at":"2026-06-24T13:03:34.856Z"}},"at":1782306214856},{"event":"text","data":{"chunk":"Explorando el proyecto de forma estructurada para consolidar el conocimiento solicitado.\n"},"at":1782306241967},{"event":"tool_activity","data":{"activity":{"id":"tool_a5e0ae12-f1ab-4e90-818d-f54660bc69d","name":"mcp","status":"completed","summary":"MCP list_memories","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"list_memories\",\"args\":{}}","at":"2026-06-24T13:03:35.134Z"}},"at":1782306215134},{"event":"tool_activity","data":{"activity":{"id":"tool_0aef4718-cced-4b95-b660-faa4a1d6e51","name":"glob","status":"completed","summary":"glob: ","detail":"","at":"2026-06-24T13:03:35.368Z"}},"at":1782306215368},{"event":"tool_activity","data":{"activity":{"id":"tool_ef80fa53-1445-4527-8444-cf3177786cf","name":"glob","status":"completed","summary":"glob: ","detail":"","at":"2026-06-24T13:03:36.456Z"}},"at":1782306216456},{"event":"tool_activity","data":{"activity":{"id":"tool_99fb3ee5-bcf7-4c21-b3cb-65b6f2df3b0","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\MANUAL_ACCESO.md","detail":"","at":"2026-06-24T13:03:37.835Z"}},"at":1782306217835},{"event":"tool_activity","data":{"activity":{"id":"tool_69e650fd-8f32-4a6d-b0a3-f3a36756050","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\DEPLOY_CHECKLIST.md","detail":"","at":"2026-06-24T13:03:37.836Z"}},"at":1782306217836},{"event":"tool_activity","data":{"activity":{"id":"tool_b3ef9144-d456-4fbc-b57d-df7c0e73a85","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\README_STAGING.md","detail":"","at":"2026-06-24T13:03:37.837Z"}},"at":1782306217837},{"event":"tool_activity","data":{"activity":{"id":"tool_947d95a1-47f6-4146-9006-192b3d2ecbd","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\.serena\\project.yml","detail":"","at":"2026-06-24T13:03:37.838Z"}},"at":1782306217838},{"event":"tool_activity","data":{"activity":{"id":"tool_6e8b3b47-e833-4c95-bff4-cbde62e8568","name":"mcp","status":"running","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot/ChatbotManager.php\"}}","at":"2026-06-24T13:03:37.843Z"}},"at":1782306217843},{"event":"tool_activity","data":{"activity":{"id":"tool_c4e5bfa4-fa73-466c-9724-517a25b0b63","name":"mcp","status":"running","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot-unified/core/SuperChatbotManager.php\"}}","at":"2026-06-24T13:03:37.845Z"}},"at":1782306217845},{"event":"tool_activity","data":{"activity":{"id":"tool_99fb3ee5-bcf7-4c21-b3cb-65b6f2df3b0","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\MANUAL_ACCESO.md","detail":"","at":"2026-06-24T13:03:37.962Z"}},"at":1782306217962},{"event":"tool_activity","data":{"activity":{"id":"tool_69e650fd-8f32-4a6d-b0a3-f3a36756050","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\DEPLOY_CHECKLIST.md","detail":"","at":"2026-06-24T13:03:37.965Z"}},"at":1782306217965},{"event":"tool_activity","data":{"activity":{"id":"tool_b3ef9144-d456-4fbc-b57d-df7c0e73a85","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\README_STAGING.md","detail":"","at":"2026-06-24T13:03:37.969Z"}},"at":1782306217969},{"event":"tool_activity","data":{"activity":{"id":"tool_947d95a1-47f6-4146-9006-192b3d2ecbd","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\.serena\\project.yml","detail":"","at":"2026-06-24T13:03:37.971Z"}},"at":1782306217971},{"event":"tool_activity","data":{"activity":{"id":"tool_6e8b3b47-e833-4c95-bff4-cbde62e8568","name":"mcp","status":"completed","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot/ChatbotManager.php\"}}","at":"2026-06-24T13:03:38.061Z"}},"at":1782306218061},{"event":"tool_activity","data":{"activity":{"id":"tool_c4e5bfa4-fa73-466c-9724-517a25b0b63","name":"mcp","status":"completed","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot-unified/core/SuperChatbotManager.php\"}}","at":"2026-06-24T13:03:38.209Z"}},"at":1782306218209},{"event":"tool_activity","data":{"activity":{"id":"tool_f9bf45bb-3678-434c-a714-43dc4ffed6d","name":"mcp","status":"running","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"name_path_pattern\":\"ChatbotManager\",\"include_body\":false,\"depth\":1,\"relative_path\":\"chatbot/Ch…","at":"2026-06-24T13:03:39.216Z"}},"at":1782306219216},{"event":"tool_activity","data":{"activity":{"id":"tool_653b921b-eed7-4720-966a-2a381eb17ba","name":"mcp","status":"running","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"name_path_pattern\":\"SuperChatbotManager\",\"include_body\":false,\"depth\":1,\"relative_path\":\"chatb…","at":"2026-06-24T13:03:39.217Z"}},"at":1782306219217},{"event":"tool_activity","data":{"activity":{"id":"tool_3872bcdb-8322-445e-a66d-f9438434788","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\chatbot_config.php","detail":"","at":"2026-06-24T13:03:39.219Z"}},"at":1782306219219},{"event":"tool_activity","data":{"activity":{"id":"tool_e39ae9d6-14dd-442f-be69-7582a9afba8","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\docs\\CHATBOT_AUTOMATICO_PLAN.md","detail":"","at":"2026-06-24T13:03:39.221Z"}},"at":1782306219221},{"event":"tool_activity","data":{"activity":{"id":"tool_3cdc7a08-470f-40a9-8a90-980e7b06fd8","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\docs\\WHATSAPP_FULL_ROADMAP.md","detail":"","at":"2026-06-24T13:03:39.262Z"}},"at":1782306219262},{"event":"tool_activity","data":{"activity":{"id":"tool_3872bcdb-8322-445e-a66d-f9438434788","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\chatbot_config.php","detail":"","at":"2026-06-24T13:03:39.321Z"}},"at":1782306219321},{"event":"tool_activity","data":{"activity":{"id":"tool_e39ae9d6-14dd-442f-be69-7582a9afba8","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\docs\\CHATBOT_AUTOMATICO_PLAN.md","detail":"","at":"2026-06-24T13:03:39.326Z"}},"at":1782306219326},{"event":"tool_activity","data":{"activity":{"id":"tool_3cdc7a08-470f-40a9-8a90-980e7b06fd8","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\docs\\WHATSAPP_FULL_ROADMAP.md","detail":"","at":"2026-06-24T13:03:39.365Z"}},"at":1782306219365},{"event":"tool_activity","data":{"activity":{"id":"tool_f9bf45bb-3678-434c-a714-43dc4ffed6d","name":"mcp","status":"completed","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"name_path_pattern\":\"ChatbotManager\",\"include_body\":false,\"depth\":1,\"relative_path\":\"chatbot/Ch…","at":"2026-06-24T13:03:39.403Z"}},"at":1782306219403},{"event":"tool_activity","data":{"activity":{"id":"tool_653b921b-eed7-4720-966a-2a381eb17ba","name":"mcp","status":"completed","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"name_path_pattern\":\"SuperChatbotManager\",\"include_body\":false,\"depth\":1,\"relative_path\":\"chatb…","at":"2026-06-24T13:03:39.549Z"}},"at":1782306219549},{"event":"tool_activity","data":{"activity":{"id":"tool_c1020ac2-eb18-4a3a-aa03-cd277729947","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\composer.json","detail":"","at":"2026-06-24T13:03:40.491Z"}},"at":1782306220491},{"event":"tool_activity","data":{"activity":{"id":"tool_3e45c710-4511-40cf-8aa6-6daf76fc043","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\ChatbotFactory.php","detail":"","at":"2026-06-24T13:03:40.492Z"}},"at":1782306220492},{"event":"tool_activity","data":{"activity":{"id":"tool_5a5941b6-b90d-4dbf-accf-f51d7217fb7","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\webhook.php","detail":"","at":"2026-06-24T13:03:40.493Z"}},"at":1782306220493},{"event":"tool_activity","data":{"activity":{"id":"tool_c1020ac2-eb18-4a3a-aa03-cd277729947","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\composer.json","detail":"","at":"2026-06-24T13:03:40.589Z"}},"at":1782306220589},{"event":"tool_activity","data":{"activity":{"id":"tool_3e45c710-4511-40cf-8aa6-6daf76fc043","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\ChatbotFactory.php","detail":"","at":"2026-06-24T13:03:40.596Z"}},"at":1782306220596},{"event":"tool_activity","data":{"activity":{"id":"tool_5a5941b6-b90d-4dbf-accf-f51d7217fb7","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\webhook.php","detail":"","at":"2026-06-24T13:03:40.598Z"}},"at":1782306220598},{"event":"tool_activity","data":{"activity":{"id":"tool_b8e6cb04-a09c-4835-ab53-0480097a4d0","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\setup\\database_setup.sql","detail":"","at":"2026-06-24T13:03:40.608Z"}},"at":1782306220608},{"event":"tool_activity","data":{"activity":{"id":"tool_e5a46775-e91b-4a38-bba1-fa0dd54e02e","name":"mcp","status":"running","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot-unified/api/SuperChatbotAPI.php\"}}","at":"2026-06-24T13:03:40.713Z"}},"at":1782306220713},{"event":"tool_activity","data":{"activity":{"id":"tool_f8dea6f4-08dc-496b-b428-9b8074bf55c","name":"glob","status":"running","summary":"glob: ","detail":"","at":"2026-06-24T13:03:40.721Z"}},"at":1782306220721},{"event":"tool_activity","data":{"activity":{"id":"tool_b8e6cb04-a09c-4835-ab53-0480097a4d0","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\setup\\database_setup.sql","detail":"","at":"2026-06-24T13:03:40.814Z"}},"at":1782306220814},{"event":"tool_activity","data":{"activity":{"id":"tool_e5a46775-e91b-4a38-bba1-fa0dd54e02e","name":"mcp","status":"completed","summary":"MCP get_symbols_overview","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"get_symbols_overview\",\"args\":{\"relative_path\":\"chatbot-unified/api/SuperChatbotAPI.php\"}}","at":"2026-06-24T13:03:40.976Z"}},"at":1782306220976},{"event":"tool_activity","data":{"activity":{"id":"tool_f8dea6f4-08dc-496b-b428-9b8074bf55c","name":"glob","status":"completed","summary":"glob: ","detail":"","at":"2026-06-24T13:03:41.151Z"}},"at":1782306221151},{"event":"tool_activity","data":{"activity":{"id":"tool_77e4a80e-49fd-4340-b458-4795d5b95bd","name":"mcp","status":"running","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"depth\":0,\"include_body\":true,\"name_path_pattern\":\"BulkMessagingSystem\",\"relative_path\":\"chatbo…","at":"2026-06-24T13:03:42.682Z"}},"at":1782306222682},{"event":"tool_activity","data":{"activity":{"id":"tool_1fe83800-1b77-4f54-9fc3-9c16979de58","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\README_BULK_MESSAGING.md","detail":"","at":"2026-06-24T13:03:42.683Z"}},"at":1782306222683},{"event":"tool_activity","data":{"activity":{"id":"tool_da6c0e77-b7fb-4bdb-872a-68d4bdb86a0","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\setup\\quick_start.ps1","detail":"","at":"2026-06-24T13:03:42.688Z"}},"at":1782306222688},{"event":"tool_activity","data":{"activity":{"id":"tool_906158e5-1ff8-4d26-9994-a6755c3b2cb","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\index.php","detail":"","at":"2026-06-24T13:03:42.816Z"}},"at":1782306222816},{"event":"tool_activity","data":{"activity":{"id":"tool_da6c0e77-b7fb-4bdb-872a-68d4bdb86a0","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\setup\\quick_start.ps1","detail":"","at":"2026-06-24T13:03:42.818Z"}},"at":1782306222818},{"event":"tool_activity","data":{"activity":{"id":"tool_1fe83800-1b77-4f54-9fc3-9c16979de58","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\README_BULK_MESSAGING.md","detail":"","at":"2026-06-24T13:03:42.822Z"}},"at":1782306222822},{"event":"tool_activity","data":{"activity":{"id":"tool_77e4a80e-49fd-4340-b458-4795d5b95bd","name":"mcp","status":"completed","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"depth\":0,\"include_body\":true,\"name_path_pattern\":\"BulkMessagingSystem\",\"relative_path\":\"chatbo…","at":"2026-06-24T13:03:42.890Z"}},"at":1782306222890},{"event":"tool_activity","data":{"activity":{"id":"tool_65325388-1f0f-4eb3-b5bb-7e5ff55c791","name":"mcp","status":"running","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"depth\":0,\"include_body\":false,\"name_path_pattern\":\"MarketingModule\",\"relative_path\":\"chatbot-u…","at":"2026-06-24T13:03:44.966Z"}},"at":1782306224966},{"event":"tool_activity","data":{"activity":{"id":"tool_d893efdb-6bae-493d-b316-b3ceaa14218","name":"read","status":"running","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\MONOLOG_CONFIGURATION.md","detail":"","at":"2026-06-24T13:03:44.967Z"}},"at":1782306224967},{"event":"tool_activity","data":{"activity":{"id":"tool_34613d20-bafa-4639-acae-693342a7e4e","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot-unified\\setup\\CREDENTIALS_TEMPLATE.php","detail":"","at":"2026-06-24T13:03:45.082Z"}},"at":1782306225082},{"event":"tool_activity","data":{"activity":{"id":"tool_d893efdb-6bae-493d-b316-b3ceaa14218","name":"read","status":"completed","summary":"read: C:\\xampp\\htdocs\\chatbot\\chatbot\\MONOLOG_CONFIGURATION.md","detail":"","at":"2026-06-24T13:03:45.086Z"}},"at":1782306225086},{"event":"tool_activity","data":{"activity":{"id":"tool_65325388-1f0f-4eb3-b5bb-7e5ff55c791","name":"mcp","status":"completed","summary":"MCP find_symbol","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"find_symbol\",\"args\":{\"depth\":0,\"include_body\":false,\"name_path_pattern\":\"MarketingModule\",\"relative_path\":\"chatbot-u…","at":"2026-06-24T13:03:45.143Z"}},"at":1782306225143},{"event":"text","data":{"chunk":"Guardando el conocimiento consolidado en memoria Serena para uso futuro del agente.\n"},"at":1782306241967},{"event":"tool_activity","data":{"activity":{"id":"tool_c1f1bc72-828e-46d1-aaff-198d267026f","name":"mcp","status":"completed","summary":"MCP write_memory","detail":"{\"providerIdentifier\":\"serena\",\"toolName\":\"write_memory\",\"args\":{\"memory_name\":\"project_knowledge_consolidated\",\"content\":\"# Conocimiento consolidado — Proyect…","at":"2026-06-24T13:03:49.313Z"}},"at":1782306229313},{"event":"text","data":{"chunk":"# Conocimiento consolidado — Chatbot XZonas Valencia\n\n> **Proyecto:** `C:\\xampp\\htdocs\\chatbot`  \n> **Memoria Serena:** `project_knowledge_consolidated`  \n> **Uso:** copiar a knowledge local o activar con `read_memory(\"project_knowledge_consolidated\")`\n\n---\n\n## 1. Resumen ejecutivo\n\nMonorepo PHP 8+ para **XZonas Valencia** con dos capas: **legacy** (`chatbot/`) en producción y **unificada** (`chatbot-unified/`) como evolución con módulos, créditos y widgets.\n\nEl núcleo legacy orquesta envíos multicanal (WhatsApp Meta, SMS, Email) vía `ChatbotManager` y campañas masivas con opt-in obligatorio en `BulkMessagingSystem`.\n\nLa capa unificada añade `SuperChatbotManager`, router conversacional, sistema de créditos, marketing automatizado, paneles de compliance y cron jobs programables.\n\nStack: **PHP + MySQL** (`xzonasva_xzvlc_19uck`), **Monolog**, **Guzzle**, Redis opcional, **WhatsApp Business API** (Graph `v17.0`).\n\nDespliegue en `https://xzonasvalencia.com/admin/chatbot/` con autenticación unificada del panel admin (`auth_loader.php`).\n\n---\n\n## 2. Glosario\n\n| Término | Definición |\n|---------|------------|\n| **ChatbotManager** | Clase legacy central: envío, métricas, cola, webhooks, rate limit y health check. |\n| **SuperChatbotManager** | Evolución unificada: conversaciones, módulos, créditos, router y chat anunciante. |\n| **ChatbotFactory** | Singleton/factory para instanciar `ChatbotManager` sin auth automática (`SKIP_AUTO_AUTH`). |\n| **BulkMessagingSystem** | Motor de envío masivo WhatsApp: CSV, campañas, logs, consentimiento y rate limiting. |\n| **WhatsApp Meta API** | API oficial de Meta (Graph API) para mensajes, templates y webhooks. |\n| **Template / Plantilla** | Mensaje preaprobado por Meta; obligatorio para contacto proactivo fuera de ventana 24h. |\n| **Opt-in / Consentimiento** | Permiso explícito del usuario para marketing WhatsApp; tablas `bulk_consents` / `whatsapp_consents`. |\n| **WABA** | WhatsApp Business Account vinculada a Meta Business Manager. |\n| **Dry-run** | Modo simulación (`WHATSAPP_DRY_RUN=true`) sin envíos reales; útil en staging. |\n| **Webhook** | Endpoint `webhook.php`: GET verifica token Meta; POST recibe mensajes y delivery receipts. |\n| **Rate limit** | Throttling de envíos (p.ej. 10 msg/min en bulk) para respetar límites Meta. |\n| **MarketingModule** | Módulo unified: campañas, templates, consentimientos y cola de envíos. |\n| **ChatCreditsManager** | Gestión de créditos de anunciantes/usuarios para acciones del chatbot. |\n| **auth_loader.php** | Autenticación unificada del panel admin (`dash_auth_is_authenticated`). |\n| **Anunciante (Advertiser)** | Usuario comercial del portal; target del chatbot automático de onboarding. |\n| **Handoff** | Derivación de conversación bot → humano cuando el flujo no puede resolverse. |\n| **XZonas** | Portal de anuncios clasificados de Valencia; contexto de negocio del chatbot. |\n\n---\n\n## 3. FAQ dev\n\n### ¿Cuál es la diferencia entre `chatbot/` y `chatbot-unified/`?\n`chatbot/` es el sistema **legacy operativo** (panel admin, bulk messaging, webhook, APIs REST). `chatbot-unified/` es la **evolución arquitectónica** con módulos, créditos, widgets frontend, pagos (Stripe/PayPal) y cron de marketing. Ambos coexisten; producción actual apunta principalmente al legacy.\n\n### ¿Dónde configuro WhatsApp?\nVariables de entorno (`WHATSAPP_TOKEN`, `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_VERIFY_TOKEN`) y/o `chatbot/chatbot_config.php`. Webhook: `webhook.php`. Docs: `DEPLOY_CHECKLIST.md`, `WHATSAPP_FULL_ROADMAP.md`.\n\n### ¿Cómo arranco en local (XAMPP)?\n1. `cd chatbot && composer install`  \n2. Configurar `.env` o variables PowerShell (ver `README_STAGING.md`)  \n3. `php -S localhost:8000` + ngrok para webhook Meta  \n4. Probar: `php tests/test_whatsapp_live.php` (máx. 3 números de prueba)\n\n### ¿Cómo funciona la autenticación del panel?\nSesión PHP unificada vía `includes/dashboard/auth_loader.php`. Los archivos protegidos llaman `dash_auth_is_authenticated()` y redirigen si falla. Scripts CLI usan `SKIP_AUTO_AUTH` o `ChatbotFactory`.\n\n### ¿Qué tablas crea el bulk messaging automáticamente?\n`bulk_contacts`, `bulk_campaigns`, `bulk_send_log`, `bulk_consents`. El schema se crea al instanciar `BulkMessagingSystem`. Contactos sin opt-in se marcan `skipped_no_consent`.\n\n### ¿Qué cron jobs debo programar?\n- **Legacy:** `chatbot/bulk_cron.php` (campañas masivas)  \n- **Unified:** `chatbot-unified/cron/send_marketing_messages.php` (cada 1–5 min), `queue_worker.php`, `personalize_messages.php`, `auto_renew_anuncios.php`  \nScripts `.bat`/`.sh` en `chatbot-unified/cron/` para Task Scheduler o crontab.\n\n### ¿Dónde están los logs?\n`chatbot/logs/chatbot.log` (rotación Monolog). Configuración en `includes/logger.php` y `MONOLOG_CONFIGURATION.md`. Alertas CRITICAL vía Slack (`CHATBOT_SLACK_WEBHOOK`).\n\n### ¿Cómo migro la base de datos unified?\nEjecutar `chatbot-unified/setup/database_setup.sql` o scripts en `database/migrations/` (`quick_migrate.php`, `final_migrate.php`). Verificar con `verificar_migracion.php` (legacy) o `setup/verificar_servidor.php` (unified).\n\n---\n\n## 4. Checklist onboarding\n\n### Entorno\n- [ ] PHP 8+ en PATH (`C:\\xampp\\php`)\n- [ ] Composer instalado\n- [ ] MySQL accesible (local o remoto `217.76.139.18`)\n- [ ] Clonar/abrir workspace `C:\\xampp\\htdocs\\chatbot`\n- [ ] `composer install` en `chatbot/`\n\n### Configuración\n- [ ] Copiar plantilla: `chatbot-unified/setup/CREDENTIALS_TEMPLATE.php` → `CREDENTIALS_LIVE.php` (no commitear)\n- [ ] Definir variables WhatsApp en entorno o `.env` raíz\n- [ ] Revisar `chatbot/chatbot_config.php` y `includes/database_config.php`\n- [ ] Activar `WHATSAPP_DRY_RUN=true` en desarrollo\n\n### Base de datos\n- [ ] Importar `database_setup.sql` (unified) si se trabaja en módulos nuevos\n- [ ] Verificar tablas bulk existentes si se usa legacy\n- [ ] Ejecutar `verificar_migracion.php`\n\n### Autenticación y acceso\n- [ ] Entender flujo `auth_loader.php`\n- [ ] Acceder a `index.php` con credenciales admin del panel\n- [ ] Revisar `MANUAL_ACCESO.md`\n\n### WhatsApp / Meta\n- [ ] Leer `DEPLOY_CHECKLIST.md` y `WHATSAPP_FULL_ROADMAP.md`\n- [ ] Configurar webhook con ngrok en staging (`README_STAGING.md`)\n- [ ] Validar GET challenge en `webhook.php`\n- [ ] Ejecutar `tests/test_whatsapp_dryrun.php` → `test_whatsapp_live.php`\n\n### Operación\n- [ ] Revisar `production-status.php`\n- [ ] Configurar cron (`bulk_cron.php` y/o unified crons)\n- [ ] Configurar alertas Slack para CRITICAL\n- [ ] Leer `README_BULK_MESSAGING.md` si se trabaja en campañas\n\n### Convenciones del repo\n- [ ] Usar Serena MCP para exploración simbólica\n- [ ] No escanear `vendor/`, `node_modules/`, `Core/`, `Dinamic/` sin petición explícita\n- [ ] Leer docs en `chatbot-unified/docs/` antes de features nuevas\n\n---\n\n## 5. Prompts guardados\n\n### Bugfix\n```\nEn chatbot/ (legacy), el webhook WhatsApp devuelve 403 en verificación GET.\nRevisa webhook.php, WHATSAPP_VERIFY_TOKEN y chatbot_config.php.\nCompara hub.verify_token con hash_equals. Propón fix mínimo y prueba con curl de README_STAGING.md.\n```\n\n```\nBulkMessagingSystem marca todos los contactos como skipped_no_consent.\nInvestiga bulk_consents, importación CSV (columna opt_in) y hasConsent().\nFix sin romper campañas existentes.\n```\n\n```\nChatbotManager falla al conectar Redis en XAMPP local.\nRevisa initCache() y fallback cuando Redis no está disponible.\nSolución que funcione sin Redis en dev.\n```\n\n### Feature\n```\nAñadir soporte de plantillas WhatsApp aprobada en BulkMessagingSystem.\nUsar WhatsAppMetaProvider existente. Campos: template_name, language, parameters.\nPanel en bulk_messaging_panel.php. Opt-in obligatorio.\n```\n\n```\nImplementar estado handoff_to_human en SuperChatbotManager según CHATBOT_AUTOMATICO_PLAN.md.\nTabla chatbot_leads, notificación al panel conversations.php. Cambio mínimo en AdvertiserModule.\n```\n\n```\nCrear endpoint API en chatbot/api/ para listar campañas bulk con paginación.\nSeguir patrón de api/stats.php y api/metrics.php. Auth vía chatbot_auth.php.\n```\n\n### Refactor\n```\nExtraer lógica de rate limiting duplicada entre ChatbotManager::checkRateLimit y BulkMessagingSystem::executeCampaign.\nHelper compartido en includes/ sin cambiar comportamiento en producción.\n```\n\n```\nUnificar logging: migrar includes/logger_clean.php a Monolog según MONOLOG_CONFIGURATION.md.\nMantener compatibilidad con función chatbot_log(). Sin PII en logs.\n```\n\n```\nLimpiar bloques duplicados de require auth.php en index.php.\nUn solo punto de carga auth. Verificar que dash_auth sigue funcionando.\n```\n\n### Deploy\n```\nChecklist deploy WhatsApp a producción según DEPLOY_CHECKLIST.md.\nVerificar: composer install, env vars, webhook Meta, dry-run off, Monolog+Slack, permisos DB.\nLista de comandos PowerShell para Windows/XAMPP.\n```\n\n```\nConfigurar Task Scheduler Windows para chatbot-unified/cron/send_marketing_messages.php cada 5 min.\nUsar setup/setup_task_scheduler.ps1 como base. Documentar en comentario del script.\n```\n\n```\nValidar producción post-deploy con validate-production.php y production-status.php.\nReportar estado de providers WhatsApp/SMS/Email y conectividad DB.\n```\n\n### QA\n```\nEjecutar suite de tests en chatbot/tests/: test_webhook.php, test_whatsapp_dryrun.php, test_csv_parsing.php.\nReportar fallos con archivo y línea. No modificar vendor/.\n```\n\n```\nProbar flujo completo bulk: importar ejemplo_contactos.csv, crear campaña draft, ejecutar con WHATSAPP_DRY_RUN=true.\nVerificar bulk_send_log y estadísticas en bulk_messaging_panel.php.\n```\n\n```\nAuditar compliance WhatsApp: opt-in en bulk_consents y whatsapp_consents, templates aprobadas, evidencia proof.\nRevisar panel/whatsapp_consents.php y compliance_center.php. Informe de gaps.\n```\n\n---\n\n## Referencias rápidas\n\n| Recurso | Ruta |\n|---------|------|\n| Manual acceso | `chatbot/MANUAL_ACCESO.md` |\n| Deploy | `chatbot/DEPLOY_CHECKLIST.md` |\n| Staging/ngrok | `chatbot/README_STAGING.md` |\n| Bulk messaging | `chatbot/README_BULK_MESSAGING.md` |\n| Roadmap WhatsApp | `chatbot-unified/docs/WHATSAPP_FULL_ROADMAP.md` |\n| Plan chatbot auto | `chatbot-unified/docs/CHATBOT_AUTOMATICO_PLAN.md` |\n| Quick start | `chatbot-unified/setup/quick_start.ps1` |\n| DB schema unified | `chatbot-unified/setup/database_setup.sql` |\n\n---\n\n**Nota de seguridad:** credenciales reales están en `.env`, `chatbot_config.php` y `CREDENTIALS_LIVE.php`. No commitear ni incluir en prompts. Usar variables de entorno en producción.\n\nEl conocimiento quedó persistido en Serena como **`project_knowledge_consolidated`** para futuras sesiones del agente."},"at":1782306241967},{"event":"status","data":{"text":"Procesando…"},"at":1782306241954},{"event":"phase_saved","data":{"phaseId":"knowledge","progress":{"status":"done","completedAt":"2026-06-24T13:04:01.958Z","name":"Conocimiento","summary":"Explorando el proyecto de forma estructurada para consolidar el conocimiento solicitado.\nGuardando el conocimiento consolidado en memoria Serena para uso futuro del agente.\n# Conocimiento consolidado — Chatbot XZonas Valencia\n\n> **Proyecto:** `C:\\xampp\\htdocs\\chatbot`  \n> **Memoria Serena:** `project_knowledge_consolidated`  \n> **Uso:** copiar a knowledge local o activar con `read_memory(\"project_knowledge_consolidated\")`\n\n---\n\n## 1. Resumen ejecutivo\n\nMonorepo PHP 8+ para **XZonas Valencia** con dos capas: **legacy** (`chatbot/`) en producción y **unificada** (`chatbot-unified/`) como evoluci","fullText":"Explorando el proyecto de forma estructurada para consolidar el conocimiento solicitado.\nGuardando el conocimiento consolidado en memoria Serena para uso futuro del agente.\n# Conocimiento consolidado — Chatbot XZonas Valencia\n\n> **Proyecto:** `C:\\xampp\\htdocs\\chatbot`  \n> **Memoria Serena:** `project_knowledge_consolidated`  \n> **Uso:** copiar a knowledge local o activar con `read_memory(\"project_knowledge_consolidated\")`\n\n---\n\n## 1. Resumen ejecutivo\n\nMonorepo PHP 8+ para **XZonas Valencia** con dos capas: **legacy** (`chatbot/`) en producción y **unificada** (`chatbot-unified/`) como evolución con módulos, créditos y widgets.\n\nEl núcleo legacy orquesta envíos multicanal (WhatsApp Meta, SMS, Email) vía `ChatbotManager` y campañas masivas con opt-in obligatorio en `BulkMessagingSystem`.\n\nLa capa unificada añade `SuperChatbotManager`, router conversacional, sistema de créditos, marketing automatizado, paneles de compliance y cron jobs programables.\n\nStack: **PHP + MySQL** (`xzonasva_xzvlc_19uck`), **Monolog**, **Guzzle**, Redis opcional, **WhatsApp Business API** (Graph `v17.0`).\n\nDespliegue en `https://xzonasvalencia.com/admin/chatbot/` con autenticación unificada del panel admin (`auth_loader.php`).\n\n---\n\n## 2. Glosario\n\n| Término | Definición |\n|---------|------------|\n| **ChatbotManager** | Clase legacy central: envío, métricas, cola, webhooks, rate limit y health check. |\n| **SuperChatbotManager** | Evolución unificada: conversaciones, módulos, créditos, router y chat anunciante. |\n| **ChatbotFactory** | Singleton/factory para instanciar `ChatbotManager` sin auth automática (`SKIP_AUTO_AUTH`). |\n| **BulkMessagingSystem** | Motor de envío masivo WhatsApp: CSV, campañas, logs, consentimiento y rate limiting. |\n| **WhatsApp Meta API** | API oficial de Meta (Graph API) para mensajes, templates y webhooks. |\n| **Template / Plantilla** | Mensaje preaprobado por Meta; obligatorio para contacto proactivo fuera de ventana 24h. |\n| **Opt-in / Consentimiento** | Permiso explícito del usuario para marketing WhatsApp; tablas `bulk_consents` / `whatsapp_consents`. |\n| **WABA** | WhatsApp Business Account vinculada a Meta Business Manager. |\n| **Dry-run** | Modo simulación (`WHATSAPP_DRY_RUN=true`) sin envíos reales; útil en staging. |\n| **Webhook** | Endpoint `webhook.php`: GET verifica token Meta; POST recibe mensajes y delivery receipts. |\n| **Rate limit** | Throttling de envíos (p.ej. 10 msg/min en bulk) para respetar límites Meta. |\n| **MarketingModule** | Módulo unified: campañas, templates, consentimientos y cola de envíos. |\n| **ChatCreditsManager** | Gestión de créditos de anunciantes/usuarios para acciones del chatbot. |\n| **auth_loader.php** | Autenticación unificada del panel admin (`dash_auth_is_authenticated`). |\n| **Anunciante (Advertiser)** | Usuario comercial del portal; target del chatbot automático de onboarding. |\n| **Handoff** | Derivación de conversación bot → humano cuando el flujo no puede resolverse. |\n| **XZonas** | Portal de anuncios clasificados de Valencia; contexto de negocio del chatbot. |\n\n---\n\n## 3. FAQ dev\n\n### ¿Cuál es la diferencia entre `chatbot/` y `chatbot-unified/`?\n`chatbot/` es el sistema **legacy operativo** (panel admin, bulk messaging, webhook, APIs REST). `chatbot-unified/` es la **evolución arquitectónica** con módulos, créditos, widgets frontend, pagos (Stripe/PayPal) y cron de marketing. Ambos coexisten; producción actual apunta principalmente al legacy.\n\n### ¿Dónde configuro WhatsApp?\nVariables de entorno (`WHATSAPP_TOKEN`, `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_VERIFY_TOKEN`) y/o `chatbot/chatbot_config.php`. Webhook: `webhook.php`. Docs: `DEPLOY_CHECKLIST.md`, `WHATSAPP_FULL_ROADMAP.md`.\n\n### ¿Cómo arranco en local (XAMPP)?\n1. `cd chatbot && composer install`  \n2. Configurar `.env` o variables PowerShell (ver `README_STAGING.md`)  \n3. `php -S localhost:8000` + ngrok para webhook Meta  \n4. Probar: `php tests/test_whatsapp_live.php` (máx. 3 números de prueba)\n\n### ¿Cómo funciona la autenticación del panel?\nSesión PHP unificada vía `includes/dashboard/auth_loader.php`. Los archivos protegidos llaman `dash_auth_is_authenticated()` y redirigen si falla. Scripts CLI usan `SKIP_AUTO_AUTH` o `ChatbotFactory`.\n\n### ¿Qué tablas crea el bulk messaging automáticamente?\n`bulk_contacts`, `bulk_campaigns`, `bulk_send_log`, `bulk_consents`. El schema se crea al instanciar `BulkMessagingSystem`. Contactos sin opt-in se marcan `skipped_no_consent`.\n\n### ¿Qué cron jobs debo programar?\n- **Legacy:** `chatbot/bulk_cron.php` (campañas masivas)  \n- **Unified:** `chatbot-unified/cron/send_marketing_messages.php` (cada 1–5 min), `queue_worker.php`, `personalize_messages.php`, `auto_renew_anuncios.php`  \nScripts `.bat`/`.sh` en `chatbot-unified/cron/` para Task Scheduler o crontab.\n\n### ¿Dónde están los logs?\n`chatbot/logs/chatbot.log` (rotación Monolog). Configuración en `includes/logger.php` y `MONOLOG_CONFIGURATION.md`. Alertas CRITICAL vía Slack (`CHATBOT_SLACK_WEBHOOK`).\n\n### ¿Cómo migro la base de datos unified?\nEjecutar `chatbot-unified/setup/database_setup.sql` o scripts en `database/migrations/` (`quick_migrate.php`, `final_migrate.php`). Verificar con `verificar_migracion.php` (legacy) o `setup/verificar_servidor.php` (unified).\n\n---\n\n## 4. Checklist onboarding\n\n### Entorno\n- [ ] PHP 8+ en PATH (`C:\\xampp\\php`)\n- [ ] Composer instalado\n- [ ] MySQL accesible (local o remoto `217.76.139.18`)\n- [ ] Clonar/abrir workspace `C:\\xampp\\htdocs\\chatbot`\n- [ ] `composer install` en `chatbot/`\n\n### Configuración\n- [ ] Copiar plantilla: `chatbot-unified/setup/CREDENTIALS_TEMPLATE.php` → `CREDENTIALS_LIVE.php` (no commitear)\n- [ ] Definir variables WhatsApp en entorno o `.env` raíz\n- [ ] Revisar `chatbot/chatbot_config.php` y `includes/database_config.php`\n- [ ] Activar `WHATSAPP_DRY_RUN=true` en desarrollo\n\n### Base de datos\n- [ ] Importar `database_setup.sql` (unified) si se trabaja en módulos nuevos\n- [ ] Verificar tablas bulk existentes si se usa legacy\n- [ ] Ejecutar `verificar_migracion.php`\n\n### Autenticación y acceso\n- [ ] Entender flujo `auth_loader.php`\n- [ ] Acceder a `index.php` con credenciales admin del panel\n- [ ] Revisar `MANUAL_ACCESO.md`\n\n### WhatsApp / Meta\n- [ ] Leer `DEPLOY_CHECKLIST.md` y `WHATSAPP_FULL_ROADMAP.md`\n- [ ] Configurar webhook con ngrok en staging (`README_STAGING.md`)\n- [ ] Validar GET challenge en `webhook.php`\n- [ ] Ejecutar `tests/test_whatsapp_dryrun.php` → `test_whatsapp_live.php`\n\n### Operación\n- [ ] Revisar `production-status.php`\n- [ ] Configurar cron (`bulk_cron.php` y/o unified crons)\n- [ ] Configurar alertas Slack para CRITICAL\n- [ ] Leer `README_BULK_MESSAGING.md` si se trabaja en campañas\n\n### Convenciones del repo\n- [ ] Usar Serena MCP para exploración simbólica\n- [ ] No escanear `vendor/`, `node_modules/`, `Core/`, `Dinamic/` sin petición explícita\n- [ ] Leer docs en `chatbot-unified/docs/` antes de features nuevas\n\n---\n\n## 5. Prompts guardados\n\n### Bugfix\n```\nEn chatbot/ (legacy), el webhook WhatsApp devuelve 403 en verificación GET.\nRevisa webhook.php, WHATSAPP_VERIFY_TOKEN y chatbot_config.php.\nCompara hub.verify_token con hash_equals. Propón fix mínimo y prueba con curl de README_STAGING.md.\n```\n\n```\nBulkMessagingSystem marca todos los contactos como skipped_no_consent.\nInvestiga bulk_consents, importación CSV (columna opt_in) y hasConsent().\nFix sin romper campañas existentes.\n```\n\n```\nChatbotManager falla al conectar Redis en XAMPP local.\nRevisa initCache() y fallback cuando Redis no está disponible.\nSolución que funcione sin Redis en dev.\n```\n\n### Feature\n```\nAñadir soporte de plantillas WhatsApp aprobada en BulkMessagingSystem.\nUsar WhatsAppMetaProvider existente. Campos: template_name, language, parameters.\nPanel en bulk_messaging_panel.php. Opt-in obligatorio.\n```\n\n```\nImplementar estado handoff_to_human en SuperChatbotManager según CHATBOT_AUTOMATICO_PLAN.md.\nTabla chatbot_leads, notificación al panel conversations.php. Cambio mínimo en AdvertiserModule.\n```\n\n```\nCrear endpoint API en chatbot/api/ para listar campañas bulk con paginación.\nSeguir patrón de api/stats.php y api/metrics.php. Auth vía chatbot_auth.php.\n```\n\n### Refactor\n```\nExtraer lógica de rate limiting duplicada entre ChatbotManager::checkRateLimit y BulkMessagingSystem::executeCampaign.\nHelper compartido en includes/ sin cambiar comportamiento en producción.\n```\n\n```\nUnificar logging: migrar includes/logger_clean.php a Monolog según MONOLOG_CONFIGURATION.md.\nMantener compatibilidad con función chatbot_log(). Sin PII en logs.\n```\n\n```\nLimpiar bloques duplicados de require auth.php en index.php.\nUn solo punto de carga auth. Verificar que dash_auth sigue funcionando.\n```\n\n### Deploy\n```\nChecklist deploy WhatsApp a producción según DEPLOY_CHECKLIST.md.\nVerificar: composer install, env vars, webhook Meta, dry-run off, Monolog+Slack, permisos DB.\nLista de comandos PowerShell para Windows/XAMPP.\n```\n\n```\nConfigurar Task Scheduler Windows para chatbot-unified/cron/send_marketing_messages.php cada 5 min.\nUsar setup/setup_task_scheduler.ps1 como base. Documentar en comentario del script.\n```\n\n```\nValidar producción post-deploy con validate-production.php y production-status.php.\nReportar estado de providers WhatsApp/SMS/Email y conectividad DB.\n```\n\n### QA\n```\nEjecutar suite de tests en chatbot/tests/: test_webhook.php, test_whatsapp_dryrun.php, test_csv_parsing.php.\nReportar fallos con archivo y línea. No modificar vendor/.\n```\n\n```\nProbar flujo completo bulk: importar ejemplo_contactos.csv, crear campaña draft, ejecutar con WHATSAPP_DRY_RUN=true.\nVerificar bulk_send_log y estadísticas en bulk_messaging_panel.php.\n```\n\n```\nAuditar compliance WhatsApp: opt-in en bulk_consents y whatsapp_consents, templates aprobadas, evidencia proof.\nRevisar panel/whatsapp_consents.php y compliance_center.php. Informe de gaps.\n```\n\n---\n\n## Referencias rápidas\n\n| Recurso | Ruta |\n|---------|------|\n| Manual acceso | `chatbot/MANUAL_ACCESO.md` |\n| Deploy | `chatbot/DEPLOY_CHECKLIST.md` |\n| Staging/ngrok | `chatbot/README_STAGING.md` |\n| Bulk messaging | `chatbot/README_BULK_MESSAGING.md` |\n| Roadmap WhatsApp | `chatbot-unified/docs/WHATSAPP_FULL_ROADMAP.md` |\n| Plan chatbot auto | `chatbot-unified/docs/CHATBOT_AUTOMATICO_PLAN.md` |\n| Quick start | `chatbot-unified/setup/quick_start.ps1` |\n| DB schema unified | `chatbot-unified/setup/database_setup.sql` |\n\n---\n\n**Nota de seguridad:** credenciales reales están en `.env`, `chatbot_config.php` y `CREDENTIALS_LIVE.php`. No commitear ni incluir en prompts. Usar variables de entorno en producción.\n\nEl conocimiento quedó persistido en Serena como **`project_knowledge_consolidated`** para futuras sesiones del agente."}},"at":1782306241961},{"event":"done","data":{"ok":true,"bridgeSessionId":"bs-1782306241956-v7pzb3","agentId":"agent-2c351a89-83dc-41d0-9e2f-17c37cd7598d","runId":"run-30df443d-19a8-45c8-940f-d89843302427","status":"finished","result":"# Conocimiento consolidado — Chatbot XZonas Valencia\n\n> **Proyecto:** `C:\\xampp\\htdocs\\chatbot`  \n> **Memoria Serena:** `project_knowledge_consolidated`  \n> **Uso:** copiar a knowledge local o activar con `read_memory(\"project_knowledge_consolidated\")`\n\n---\n\n## 1. Resumen ejecutivo\n\nMonorepo PHP 8+ para **XZonas Valencia** con dos capas: **legacy** (`chatbot/`) en producción y **unificada** (`chatbot-unified/`) como evolución con módulos, créditos y widgets.\n\nEl núcleo legacy orquesta envíos multicanal (WhatsApp Meta, SMS, Email) vía `ChatbotManager` y campañas masivas con opt-in obligatorio en `BulkMessagingSystem`.\n\nLa capa unificada añade `SuperChatbotManager`, router conversacional, sistema de créditos, marketing automatizado, paneles de compliance y cron jobs programables.\n\nStack: **PHP + MySQL** (`xzonasva_xzvlc_19uck`), **Monolog**, **Guzzle**, Redis opcional, **WhatsApp Business API** (Graph `v17.0`).\n\nDespliegue en `https://xzonasvalencia.com/admin/chatbot/` con autenticación unificada del panel admin (`auth_loader.php`).\n\n---\n\n## 2. Glosario\n\n| Término | Definición |\n|---------|------------|\n| **ChatbotManager** | Clase legacy central: envío, métricas, cola, webhooks, rate limit y health check. |\n| **SuperChatbotManager** | Evolución unificada: conversaciones, módulos, créditos, router y chat anunciante. |\n| **ChatbotFactory** | Singleton/factory para instanciar `ChatbotManager` sin auth automática (`SKIP_AUTO_AUTH`). |\n| **BulkMessagingSystem** | Motor de envío masivo WhatsApp: CSV, campañas, logs, consentimiento y rate limiting. |\n| **WhatsApp Meta API** | API oficial de Meta (Graph API) para mensajes, templates y webhooks. |\n| **Template / Plantilla** | Mensaje preaprobado por Meta; obligatorio para contacto proactivo fuera de ventana 24h. |\n| **Opt-in / Consentimiento** | Permiso explícito del usuario para marketing WhatsApp; tablas `bulk_consents` / `whatsapp_consents`. |\n| **WABA** | WhatsApp Business Account vinculada a Meta Business Manager. |\n| **Dry-run** | Modo simulación (`WHATSAPP_DRY_RUN=true`) sin envíos reales; útil en staging. |\n| **Webhook** | Endpoint `webhook.php`: GET verifica token Meta; POST recibe mensajes y delivery receipts. |\n| **Rate limit** | Throttling de envíos (p.ej. 10 msg/min en bulk) para respetar límites Meta. |\n| **MarketingModule** | Módulo unified: campañas, templates, consentimientos y cola de envíos. |\n| **ChatCreditsManager** | Gestión de créditos de anunciantes/usuarios para acciones del chatbot. |\n| **auth_loader.php** | Autenticación unificada del panel admin (`dash_auth_is_authenticated`). |\n| **Anunciante (Advertiser)** | Usuario comercial del portal; target del chatbot automático de onboarding. |\n| **Handoff** | Derivación de conversación bot → humano cuando el flujo no puede resolverse. |\n| **XZonas** | Portal de anuncios clasificados de Valencia; contexto de negocio del chatbot. |\n\n---\n\n## 3. FAQ dev\n\n### ¿Cuál es la diferencia entre `chatbot/` y `chatbot-unified/`?\n`chatbot/` es el sistema **legacy operativo** (panel admin, bulk messaging, webhook, APIs REST). `chatbot-unified/` es la **evolución arquitectónica** con módulos, créditos, widgets frontend, pagos (Stripe/PayPal) y cron de marketing. Ambos coexisten; producción actual apunta principalmente al legacy.\n\n### ¿Dónde configuro WhatsApp?\nVariables de entorno (`WHATSAPP_TOKEN`, `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_VERIFY_TOKEN`) y/o `chatbot/chatbot_config.php`. Webhook: `webhook.php`. Docs: `DEPLOY_CHECKLIST.md`, `WHATSAPP_FULL_ROADMAP.md`.\n\n### ¿Cómo arranco en local (XAMPP)?\n1. `cd chatbot && composer install`  \n2. Configurar `.env` o variables PowerShell (ver `README_STAGING.md`)  \n3. `php -S localhost:8000` + ngrok para webhook Meta  \n4. Probar: `php tests/test_whatsapp_live.php` (máx. 3 números de prueba)\n\n### ¿Cómo funciona la autenticación del panel?\nSesión PHP unificada vía `includes/dashboard/auth_loader.php`. Los archivos protegidos llaman `dash_auth_is_authenticated()` y redirigen si falla. Scripts CLI usan `SKIP_AUTO_AUTH` o `ChatbotFactory`.\n\n### ¿Qué tablas crea el bulk messaging automáticamente?\n`bulk_contacts`, `bulk_campaigns`, `bulk_send_log`, `bulk_consents`. El schema se crea al instanciar `BulkMessagingSystem`. Contactos sin opt-in se marcan `skipped_no_consent`.\n\n### ¿Qué cron jobs debo programar?\n- **Legacy:** `chatbot/bulk_cron.php` (campañas masivas)  \n- **Unified:** `chatbot-unified/cron/send_marketing_messages.php` (cada 1–5 min), `queue_worker.php`, `personalize_messages.php`, `auto_renew_anuncios.php`  \nScripts `.bat`/`.sh` en `chatbot-unified/cron/` para Task Scheduler o crontab.\n\n### ¿Dónde están los logs?\n`chatbot/logs/chatbot.log` (rotación Monolog). Configuración en `includes/logger.php` y `MONOLOG_CONFIGURATION.md`. Alertas CRITICAL vía Slack (`CHATBOT_SLACK_WEBHOOK`).\n\n### ¿Cómo migro la base de datos unified?\nEjecutar `chatbot-unified/setup/database_setup.sql` o scripts en `database/migrations/` (`quick_migrate.php`, `final_migrate.php`). Verificar con `verificar_migracion.php` (legacy) o `setup/verificar_servidor.php` (unified).\n\n---\n\n## 4. Checklist onboarding\n\n### Entorno\n- [ ] PHP 8+ en PATH (`C:\\xampp\\php`)\n- [ ] Composer instalado\n- [ ] MySQL accesible (local o remoto `217.76.139.18`)\n- [ ] Clonar/abrir workspace `C:\\xampp\\htdocs\\chatbot`\n- [ ] `composer install` en `chatbot/`\n\n### Configuración\n- [ ] Copiar plantilla: `chatbot-unified/setup/CREDENTIALS_TEMPLATE.php` → `CREDENTIALS_LIVE.php` (no commitear)\n- [ ] Definir variables WhatsApp en entorno o `.env` raíz\n- [ ] Revisar `chatbot/chatbot_config.php` y `includes/database_config.php`\n- [ ] Activar `WHATSAPP_DRY_RUN=true` en desarrollo\n\n### Base de datos\n- [ ] Importar `database_setup.sql` (unified) si se trabaja en módulos nuevos\n- [ ] Verificar tablas bulk existentes si se usa legacy\n- [ ] Ejecutar `verificar_migracion.php`\n\n### Autenticación y acceso\n- [ ] Entender flujo `auth_loader.php`\n- [ ] Acceder a `index.php` con credenciales admin del panel\n- [ ] Revisar `MANUAL_ACCESO.md`\n\n### WhatsApp / Meta\n- [ ] Leer `DEPLOY_CHECKLIST.md` y `WHATSAPP_FULL_ROADMAP.md`\n- [ ] Configurar webhook con ngrok en staging (`README_STAGING.md`)\n- [ ] Validar GET challenge en `webhook.php`\n- [ ] Ejecutar `tests/test_whatsapp_dryrun.php` → `test_whatsapp_live.php`\n\n### Operación\n- [ ] Revisar `production-status.php`\n- [ ] Configurar cron (`bulk_cron.php` y/o unified crons)\n- [ ] Configurar alertas Slack para CRITICAL\n- [ ] Leer `README_BULK_MESSAGING.md` si se trabaja en campañas\n\n### Convenciones del repo\n- [ ] Usar Serena MCP para exploración simbólica\n- [ ] No escanear `vendor/`, `node_modules/`, `Core/`, `Dinamic/` sin petición explícita\n- [ ] Leer docs en `chatbot-unified/docs/` antes de features nuevas\n\n---\n\n## 5. Prompts guardados\n\n### Bugfix\n```\nEn chatbot/ (legacy), el webhook WhatsApp devuelve 403 en verificación GET.\nRevisa webhook.php, WHATSAPP_VERIFY_TOKEN y chatbot_config.php.\nCompara hub.verify_token con hash_equals. Propón fix mínimo y prueba con curl de README_STAGING.md.\n```\n\n```\nBulkMessagingSystem marca todos los contactos como skipped_no_consent.\nInvestiga bulk_consents, importación CSV (columna opt_in) y hasConsent().\nFix sin romper campañas existentes.\n```\n\n```\nChatbotManager falla al conectar Redis en XAMPP local.\nRevisa initCache() y fallback cuando Redis no está disponible.\nSolución que funcione sin Redis en dev.\n```\n\n### Feature\n```\nAñadir soporte de plantillas WhatsApp aprobada en BulkMessagingSystem.\nUsar WhatsAppMetaProvider existente. Campos: template_name, language, parameters.\nPanel en bulk_messaging_panel.php. Opt-in obligatorio.\n```\n\n```\nImplementar estado handoff_to_human en SuperChatbotManager según CHATBOT_AUTOMATICO_PLAN.md.\nTabla chatbot_leads, notificación al panel conversations.php. Cambio mínimo en AdvertiserModule.\n```\n\n```\nCrear endpoint API en chatbot/api/ para listar campañas bulk con paginación.\nSeguir patrón de api/stats.php y api/metrics.php. Auth vía chatbot_auth.php.\n```\n\n### Refactor\n```\nExtraer lógica de rate limiting duplicada entre ChatbotManager::checkRateLimit y BulkMessagingSystem::executeCampaign.\nHelper compartido en includes/ sin cambiar comportamiento en producción.\n```\n\n```\nUnificar logging: migrar includes/logger_clean.php a Monolog según MONOLOG_CONFIGURATION.md.\nMantener compatibilidad con función chatbot_log(). Sin PII en logs.\n```\n\n```\nLimpiar bloques duplicados de require auth.php en index.php.\nUn solo punto de carga auth. Verificar que dash_auth sigue funcionando.\n```\n\n### Deploy\n```\nChecklist deploy WhatsApp a producción según DEPLOY_CHECKLIST.md.\nVerificar: composer install, env vars, webhook Meta, dry-run off, Monolog+Slack, permisos DB.\nLista de comandos PowerShell para Windows/XAMPP.\n```\n\n```\nConfigurar Task Scheduler Windows para chatbot-unified/cron/send_marketing_messages.php cada 5 min.\nUsar setup/setup_task_scheduler.ps1 como base. Documentar en comentario del script.\n```\n\n```\nValidar producción post-deploy con validate-production.php y production-status.php.\nReportar estado de providers WhatsApp/SMS/Email y conectividad DB.\n```\n\n### QA\n```\nEjecutar suite de tests en chatbot/tests/: test_webhook.php, test_whatsapp_dryrun.php, test_csv_parsing.php.\nReportar fallos con archivo y línea. No modificar vendor/.\n```\n\n```\nProbar flujo completo bulk: importar ejemplo_contactos.csv, crear campaña draft, ejecutar con WHATSAPP_DRY_RUN=true.\nVerificar bulk_send_log y estadísticas en bulk_messaging_panel.php.\n```\n\n```\nAuditar compliance WhatsApp: opt-in en bulk_consents y whatsapp_consents, templates aprobadas, evidencia proof.\nRevisar panel/whatsapp_consents.php y compliance_center.php. Informe de gaps.\n```\n\n---\n\n## Referencias rápidas\n\n| Recurso | Ruta |\n|---------|------|\n| Manual acceso | `chatbot/MANUAL_ACCESO.md` |\n| Deploy | `chatbot/DEPLOY_CHECKLIST.md` |\n| Staging/ngrok | `chatbot/README_STAGING.md` |\n| Bulk messaging | `chatbot/README_BULK_MESSAGING.md` |\n| Roadmap WhatsApp | `chatbot-unified/docs/WHATSAPP_FULL_ROADMAP.md` |\n| Plan chatbot auto | `chatbot-unified/docs/CHATBOT_AUTOMATICO_PLAN.md` |\n| Quick start | `chatbot-unified/setup/quick_start.ps1` |\n| DB schema unified | `chatbot-unified/setup/database_setup.sql` |\n\n---\n\n**Nota de seguridad:** credenciales reales están en `.env`, `chatbot_config.php` y `CREDENTIALS_LIVE.php`. No commitear ni incluir en prompts. Usar variables de entorno en producción.\n\nEl conocimiento quedó persistido en Serena como **`project_knowledge_consolidated`** para futuras sesiones del agente.","changeSessionId":"cs-1782306207233-7rq3sl","pendingChanges":0,"changes":[],"transcriptPath":null,"notifyTitle":"Agente terminado","notifyBody":"Explorando el proyecto de forma estructurada para consolidar el conocimiento solicitado.\nGuardando el conocimiento conso"},"at":1782306241961}]}
