diff --git a/admin/DashboardController.php b/admin/DashboardController.php index 0b8fa97..4c8fe88 100644 --- a/admin/DashboardController.php +++ b/admin/DashboardController.php @@ -2441,7 +2441,7 @@ HTML; $parsed = json_decode($cj, true); if (is_array($parsed)) $config = $parsed; } - $epStmt = db()->prepare('SELECT endpoint_key, url, method FROM company_endpoints WHERE company_id=? AND is_active=1 ORDER BY endpoint_key'); + $epStmt = db()->prepare('SELECT endpoint_key, name, url, method, direction FROM company_endpoints WHERE company_id=? AND is_active=1 ORDER BY endpoint_key'); $epStmt->execute([$companyId]); $companyEndpoints = $epStmt->fetchAll(PDO::FETCH_ASSOC); } @@ -2519,7 +2519,7 @@ HTML; // Per-category config HTML $perTypeConfig = $config['per_type'] ?? []; $menuKeysList = array_keys($menus); - $catLabels = ['1' => 'Categoría 1 — Solo recibe info', '2' => 'Categoría 2 — Solo descarga informes', '3' => 'Categoría 3 — Reporta y recibe']; + $catLabels = ['1' => 'Categoría 1 — Solo reporta', '2' => 'Categoría 2 — Solo recibe informes', '3' => 'Categoría 3 — Reporta y recibe']; $categoryTabHtml = ''; foreach ([1, 2, 3] as $cat) { $catCfg = $perTypeConfig[(string)$cat] ?? []; @@ -2538,7 +2538,7 @@ HTML; -
Menú en botones que se muestra cuando el usuario escribe por primera vez o sin contexto activo
+
Menú que se muestra cuando el usuario escribe por primera vez o sin contexto activo
CATHTML; @@ -2563,16 +2563,22 @@ CATHTML;
📋 Comandos
-

Palabras clave que el usuario escribe para ejecutar acciones. Ej: "menu", "info", "contacto"

+

Palabras clave que el usuario escribe para ejecutar acciones directamente. El valor de acción debe coincidir con un ID de menú o flujo.

+ +HTML; + foreach (array_keys($menus) as $mk) echo "\n"; + foreach (array_keys($config['flows'] ?? []) as $fk) echo "\n"; + echo << - + HTML; $cmdIdx = 0; foreach ($commands as $keyword => $action) { echo " - + "; $cmdIdx++; @@ -2683,9 +2689,14 @@ HTML; foreach (array_keys($menus) as $mk) { $menuOptHtml .= ''; } + // Helper para etiqueta de endpoint: muestra nombre si existe, si no la key + $epLabel = fn(array $ep): string => self::h( + ($ep['name'] !== '' && $ep['name'] !== null) ? $ep['name'] : $ep['endpoint_key'] + ); + $epOptHtml = ''; foreach ($companyEndpoints as $ep) { - $epOptHtml .= ''; + $epOptHtml .= ''; } $flowKeys = array_keys($flows); @@ -2721,19 +2732,19 @@ HTML; $epSelHtml = ''; foreach ($companyEndpoints as $ep) { $sel = $epKey === self::h($ep['endpoint_key']) ? ' selected' : ''; - $epSelHtml .= ''; + $epSelHtml .= ''; } // For dynamic_list source endpoint $dlEpSelHtml = ''; foreach ($companyEndpoints as $ep) { $sel = $srcEp === self::h($ep['endpoint_key']) ? ' selected' : ''; - $dlEpSelHtml .= ''; + $dlEpSelHtml .= ''; } // For submit_form endpoint $sfEpSelHtml = ''; foreach ($companyEndpoints as $ep) { $sel = $epKey === self::h($ep['endpoint_key']) ? ' selected' : ''; - $sfEpSelHtml .= ''; + $sfEpSelHtml .= ''; } // Next-node select $nnSelHtml = ''; @@ -2873,7 +2884,7 @@ HTML;
👥 Configuración por Categoría
-

Define qué menú de bienvenida ve cada categoría de usuario cuando escribe por primera vez o sin contexto activo. El menú debe ser de tipo botón.

+

Define qué menú de bienvenida ve cada categoría de usuario cuando escribe por primera vez o sin contexto activo.

{$categoryTabHtml}
@@ -2992,7 +3003,7 @@ function addCmd() { const tr = document.createElement('tr'); tr.id = 'cmd-row-' + idx; tr.innerHTML = '' + - '' + + '' + ''; tbody.appendChild(tr); } diff --git a/public/index.php b/public/index.php index f497b97..7a0cd6b 100644 --- a/public/index.php +++ b/public/index.php @@ -477,20 +477,20 @@ $routes = [ if ($aiProvider !== '') $config['ai_provider'] = $aiProvider; $config['ai_for_media'] = isset($_POST['ai_for_media']); - // Per-category menus + // Per-category menus — merge sobre la config existente para no perder flows/commands por categoría $perTypeMenus = $_POST['per_type_menu'] ?? []; - $perType = []; + $perType = $config['per_type'] ?? []; foreach ([1, 2, 3] as $cat) { $mk = trim($perTypeMenus[$cat] ?? ''); + $key = (string)$cat; if ($mk !== '') { - $perType[(string)$cat] = [ - 'greeting_menu' => $mk, - 'greeting' => '', - 'fallback' => '', - ]; + $perType[$key] = array_merge($perType[$key] ?? [], ['greeting_menu' => $mk]); + } elseif (isset($perType[$key]['greeting_menu'])) { + unset($perType[$key]['greeting_menu']); + if (empty($perType[$key])) unset($perType[$key]); } } - if (!empty($perType)) $config['per_type'] = $perType; + $config['per_type'] = $perType; // General $greeting = trim($_POST['greeting'] ?? '');
Palabra claveAcción (menú o flujo)
Palabra claveAcción (ID de menú o flujo)