Skip to main content
Version: 4.6.1-saas

Frequently Asked Questions

Waiting Room Management

Q. What is the size limit for images that can be applied to the waiting room?

A. There are no restrictions on image resolution or ratio, but the maximum upload size is 2MB. The aspect ratio or shape of the image area cannot be changed, so the crop box shape will be fixed during editing.

Queue System

Q. Does Limited Inflow restrict concurrent users or total users?

A. It restricts concurrent users. For more details, refer to Inflow Settings in the Basic Control segment.

Q. If a user accesses from multiple browsers or tabs, will they receive different queue numbers?

A. They will be assigned the same queue position.

Q. What is the criteria for the queue to move forward?

A. The completion of processing or dropout of users ahead in the queue.

Segment Settings

Q. Can I change Queue Position Retention settings in real-time?

A. Yes! Queue Position Retention settings are applied in real-time—changes take effect immediately without requiring segment restart or service interruption.

Examples of real-time updates:

  • Temporarily disable retention: Turn OFF Queue Position Retention during high traffic to force all users through the queue again
  • Adjust retention window: Change retention time from 60 seconds to 10 minutes without affecting currently waiting visitors
  • Emergency queue reset: Disable retention to reset all queue positions for a fresh start
  • Conditional activation: Enable retention only during specific time periods by toggling it on/off as needed

This flexibility allows you to adapt your queue management strategy based on real-time conditions without downtime.

Q. Can I change Entry Pass settings in real-time?

A. Yes! Entry Pass settings are applied in real-time—changes take effect immediately without requiring segment restart or service interruption.

Examples of real-time updates:

  • Adjust pass duration: Change Entry Pass validity from 30 minutes to 2 hours to accommodate longer sessions
  • Disable Entry Pass: Turn OFF Entry Pass to force all users through the waiting room on every access
  • Enable Entry Pass mid-event: Activate Entry Pass during an ongoing event to improve user experience for returning visitors
  • Conditional pass control: Enable/disable Entry Pass based on traffic patterns or event phases

This flexibility allows you to adapt your access control strategy dynamically without downtime, responding to changing conditions in real-time.

Q. Can I use invalidation without Queue Position Retention or Entry Pass?

A. Yes, invalidation is independent. However, invalidation has maximum impact when used with Queue Position Retention and Entry Pass, as it provides granular control over when to bypass these protections.

Q. What happens if I trigger invalidation multiple times?

A. Invalidation is event-based: each time a key is checked and meets invalidation conditions, it gets invalidated. You can combine multiple invalidation conditions (URL + Timer) for complex scenarios.

Q. Can I disable invalidation after enabling it?

A. Yes! Disabling Entry Key Invalidation is a real-time change that takes effect immediately. Keys that were invalidated remain invalid, but new keys issued after disabling invalidation will have normal behavior.

Q. Does invalidation work with all integration types?

A. URL-based invalidation works with UTI (URL-Triggered Integration). Timer-based invalidation works with all integration types (UTI and CBI).

Q. Can I invalidate waiting keys and entry keys separately?

A. With timer-based invalidation, you can choose through the user scope setting:

  • Entered users only: Only entry keys are invalidated (reissued). Waiting users' waiting keys are not affected.
  • From waiting users: Both entry keys of entered users and waiting keys of waiting users are invalidated (reissued).

URL-based invalidation invalidates entry keys only (entry keys of users who access the URL are invalidated).

Q. Can I change the assignment after creation?

A. Yes. You can change the Person in Charge assignment at any time by editing the segment settings.

Q. Can multiple Operators be assigned?

A. Yes. You can assign multiple Operators to one segment. All assigned Operators can modify the segment.

Common Integration Questions

Q. How should I handle NetworkError?

A. Notify the user and either retry or proceed with original logic:

Web Javascript Integration

function handleNetworkError(response) {
if (confirm('Network error occurred. Retry?')) {
nfStart(keys, callback); // Retry
} else {
performOriginalLogic(); // Proceed
}
}

Android Integration

private val callback = object : NetfunnelCallback() {
override fun onNetworkError(statusCode: Int, message: String) {
when (statusCode) {
1001 -> {
// Network not connected
showNetworkErrorDialog()
}
1002 -> {
// Network timeout - retry
retryWithDelay()
}
}
}
}

private fun retryWithDelay() {
Handler(Looper.getMainLooper()).postDelayed({
Netfunnel.nfStart(projectKey, segmentKey, callback, this)
}, 2000)
}

Q. What if I forget to return the key?

A. The key may be auto-returned by server timeout, but this can cause bottlenecks. Always return explicitly:

Web Javascript Integration

// Recommended: Always return key
nfStart(keys, function(response) {
if (response.status === 'Success') {
performAction()
.then(() => nfStop(keys))
.catch(() => nfStop(keys)); // Return even on error
}
});

Android Integration

// Recommended: Always return key
private val callback = object : NetfunnelCallback() {
override fun onSuccess(statusCode: Int, message: String) {
performAction()
.onSuccess {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback)
}
.onFailure {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback) // Return even on error
}
}
}

Q. How do I debug NetFUNNEL integration?

A. Enable logging and check the console:

Web Javascript Integration

<script
src="https://agent-lib.stclab.com/agents/client/javascript/netfunnel-javascript-agent.js"
data-nf-client-id="your-client-id"
data-nf-print-log="true"
></script>

Then check DevTools Console for NetFUNNEL log messages.

Android Integration

Netfunnel.initialize(
clientId = "{{CLIENT_ID}}",
printLog = true // Enable logging
)

Then check Logcat for NetFUNNEL log messages.

Q. Can I use both URL-triggered and code-based methods?

A. Yes, you can use both methods together within a single service:

  • Use URL triggers for page-entry speed control
  • Use code-based for business concurrency control
// URL trigger for landing page protection
// (configured in console)

// Basic Control for login
function handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback);
}

// Section Control for checkout
function startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback);
}

Common patterns:

  • Use URL trigger integration for page entry protection
  • Use Basic Control (code-based integration) for entry points (login, main features) - quick key return after screen loads
  • Use Section Control (code-based integration) for important processes (checkout, payment processing) - keep key until entire process completes

However, to reduce operational complexity, it's recommended to prioritize one method.

Q. What's the difference between Basic Control and Section Control?

A.

  • Basic Control: Limits entry speed (how fast users can enter)
  • Section Control: Maintains fixed concurrent user count (how many users can be active simultaneously)

Use Basic Control for simple entry limiting, Section Control for maintaining specific concurrency levels.

For more details, refer to Control Type Comparison.

Q. Can I use both Basic Control and Section Control in the same app?

A. Yes, you can use both methods in the same application:

iOS

// Basic Control for login
func handleLogin() {
Netfunnel.shared.nfStart(projectKey: "login_project", segmentKey: "login_segment")
}

// Section Control for checkout
func startCheckout() {
Netfunnel.shared.nfStartSection(projectKey: "checkout_project", segmentKey: "checkout_segment")
}

Common patterns:

  • Use Basic Control (code-based integration) for entry points (login, main features) - quick key return after view controller loads
  • Use Section Control (code-based integration) for important processes (checkout, payment) - keep key until entire process completes

Android

// Basic Control for login
fun handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback, this)
}

// Section Control for checkout
fun startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback, this)
}

Common patterns:

  • Use Basic Control (code-based integration) for entry points (login, main features) - quick key return after Activity loads
  • Use Section Control (code-based integration) for important processes (checkout, payment) - keep key until entire process completes

Q. Can I initialize NetFUNNEL multiple times?

A. No, NetFUNNEL should be initialized only once in your Application class. Multiple initializations may cause unexpected behavior.

JavaScript Integration

Q. Can I put the script in a common JS file?

A. Yes, you can dynamically insert the script:

<script src="./netfunnel.js" defer></script>
// netfunnel.js
var scriptNF = document.createElement("script");
scriptNF.setAttribute("data-nf-client-id", "your-client-id");
scriptNF.src = "https://agent-lib.stclab.com/agents/client/javascript/netfunnel-javascript-agent.js";
document.head.appendChild(scriptNF);
info

If you can't find the answer to your question, please refer to Troubleshooting or contact STCLab technical support.

Android Integration

Q. Can I use NetFUNNEL in a Fragment?

A. Yes, but you need to pass the Activity context:

class MyFragment : Fragment() {
fun startNetFUNNEL() {
activity?.let { activity ->
Netfunnel.nfStart(projectKey, segmentKey, callback, activity)
}
}
}
info

If you can't find the answer to your question, please refer to Troubleshooting or contact STCLab technical support.

iOS Integration

Q. The agent doesn't build (Invalid privacy manifest)

A. From version 4.3.2-onprem, the agent's privacyinfo was updated due to Apple policy changes. Ensure you're using the latest agent version.

Q. The app crashes in delegate callbacks

A. If you manipulate UI inside delegate callbacks, ensure the code runs on the main thread using DispatchQueue.main.async.

Q. I want to see debug logs

A. Enable logs by setting printLog: true in the initialize function. Use this only while debugging and set it to false for production builds.

Q. The waiting room doesn't appear

A. If Entry Allowance is 0, the waiting room must appear and no users are allowed to enter. Set Console → Segment Settings → Basic Settings → Entry Allowance to 0 to force the waiting room to show.

Q. I want to update UI from delegate callbacks

A. NetFUNNEL callbacks are asynchronous. If you call UI elements directly inside these callbacks, your app may behave unexpectedly or crash. Always dispatch to the main queue for UI updates.

Q. How can I check the agent version?

A. Use getVersion() to retrieve the NetFUNNEL iOS Agent version.

info

If you can't find the answer to your question, please refer to Troubleshooting or contact STCLab technical support.