query($query); $encontrado = false; if ($result && $result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $keywords = explode(',', $row['keywords']); foreach ($keywords as $keyword) { $keyword_limpia = trim(mb_strtolower($keyword, 'UTF-8')); if (!empty($keyword_limpia) && strpos($mensaje_usuario, $keyword_limpia) !== false) { $respuesta = $row['respuesta']; $encontrado = true; if (in_array($keyword_limpia, ['ubicacion', 'ubicación', 'direccion', 'dirección', 'donde', 'dónde'])) { $accion = "abrir_mapa"; } elseif (in_array($keyword_limpia, ['horario', 'horarios'])) { $accion = "abrir_horarios"; } elseif (in_array($keyword_limpia, ['novedad', 'novedades'])) { $accion = "abrir_novedades"; } elseif (in_array($keyword_limpia, ['telefono', 'teléfono', 'llamar', 'numero', 'número'])) { $accion = "mostrar_telefonos"; } elseif ($keyword_limpia === 'contacto') { $accion = "mostrar_contacto"; } elseif (in_array($keyword_limpia, ['redes', 'instagram'])) { $accion = "mostrar_redes"; } elseif (in_array($keyword_limpia, ['pago', 'pagos', 'transferencia', 'efectivo'])) { $accion = "mostrar_pagos"; } elseif (in_array($keyword_limpia, ['promo', 'promos', 'promocion', 'promoción', 'promociones', 'oferta', 'ofertas', 'menu', 'menú'])) { // ▼ Promos: consulta dinámica a la BD (últimas 24hs) $accion = "ninguna"; $res_promos = $conexion->query( "SELECT mensaje FROM promociones WHERE fecha_publicacion >= NOW() - INTERVAL 24 HOUR ORDER BY fecha_publicacion DESC LIMIT 5" ); if ($res_promos && $res_promos->num_rows > 0) { $lista = []; while ($p = $res_promos->fetch_assoc()) { $lista[] = "• " . $p['mensaje']; } $respuesta = "📢 ¡Promociones vigentes!
" . implode("
", $lista); } else { $respuesta = "Por el momento no hay promociones activas. ¡Volvé a consultar más tarde! 😊"; } } break 2; } } } } // 2. Si no se encontró coincidencia, armamos la respuesta dinámica desde la BD if (!$encontrado) { // Texto base limpio directamente definido sin necesidad de consultar otra tabla $texto_base = "No entendí tu consulta. Podés preguntarme sobre:"; // ▼ CONSULTA DINÁMICA: Traemos todas las categorías cargadas que no estén vacías $res_cats = $conexion->query("SELECT DISTINCT categoria FROM bot_preguntas WHERE categoria IS NOT NULL AND categoria != '' ORDER BY categoria ASC"); if ($res_cats && $res_cats->num_rows > 0) { $cats_lista = []; while ($c = $res_cats->fetch_assoc()) { // Las agregamos formateadas limpiamente con un puntito estético $cats_lista[] = "• " . htmlspecialchars($c['categoria']); } // Unimos todo el array con saltos de línea
$respuesta = $texto_base . "
" . implode("
", $cats_lista); } else { // Fallback secundario estático por si la tabla llegara a estar completamente vacía $respuesta = $texto_base . "
• promo
• horarios
• nosotros
• ubicación"; } $accion = "forzar_cierre"; } } else { $respuesta = "Error: No se recibió ninguna consulta."; } // Devolvemos el JSON estructurado echo json_encode([ 'respuesta' => $respuesta, 'accion' => $accion ]);