logoRocketFlow

Session Initialization

Learn how to implement and use session initialization in RKT Chat Client

Session Initialization

The RKT Chat Client provides a robust session initialization system that automatically manages chat sessions with background processing, telemetry integration, and error handling.

Overview

Session initialization in RKT Chat Client includes:

  • Automatic Session ID Generation: Unique session identifiers generated when the page is ready
  • Background Processing: Non-blocking initialization using browser idle time
  • Telemetry Integration: Comprehensive device and user preference tracking
  • Error Handling: Graceful error management with tracking integration
  • State Management: Real-time session state tracking

Key Features

🚀 Non-blocking Initialization

The session initialization process runs in the background to ensure your application remains responsive:

// Uses requestIdleCallback when available
if (typeof window !== "undefined" && "requestIdleCallback" in window) {
  window.requestIdleCallback(initSession, { timeout: 5000 });
} else {
  // Fallback for older browsers
  setTimeout(initSession, 0);
}

📊 Comprehensive Telemetry

Automatically collects device and user information:

  • Device Information: User agent, language, platform, screen dimensions
  • User Preferences: Theme (dark/light), timezone, language settings
  • Session Context: Chatbot ID, session ID, timestamps

🎯 State Management

Track session initialization progress with real-time state updates:

  • sessionId: Unique identifier for the chat session
  • isSessionReady: Boolean indicating full initialization completion
  • telemetryInitialized: Boolean indicating telemetry setup completion

Basic Usage

Simple Implementation

import { useChat } from "@rkt/rkt-chat-client";

const MyChatComponent = () => {
  const {
    sessionId,
    isSessionReady,
    telemetryInitialized,
    messages,
    sendMessage,
  } = useChat({
    chatbot: {
      id: "your-chatbot-id",
      prompt: "You are a helpful assistant.",
    },
    baseUrl: "https://your-api.com/api/chat",
  });

  if (!isSessionReady) {
    return <div>Initializing session...</div>;
  }

  return (
    <div>
      <div>Session ID: {sessionId}</div>
      <div>Telemetry: {telemetryInitialized ? "" : ""}</div>
      {/* Your chat interface */}
    </div>
  );
};

With Telemetry and Error Tracking

import { useChat } from "@rkt/rkt-chat-client";

const AdvancedChatComponent = () => {
  const {
    sessionId,
    isSessionReady,
    telemetryInitialized,
    messages,
    sendMessage,
  } = useChat({
    chatbot: {
      id: "your-chatbot-id",
      prompt: "You are a helpful assistant.",
    },
    baseUrl: "https://your-api.com/api/chat",
    telemetry: {
      initializeSession: (data) => {
        console.log("Session initialized:", data);
        // Send to your analytics service
      },
      trackEvent: (event, properties) => {
        console.log("Event tracked:", event, properties);
        // Track user interactions
      },
      trackError: (error, context) => {
        console.error("Error tracked:", error, context);
        // Send to error tracking service
      },
    },
    errorTracker: {
      captureException: (error, context) => {
        console.error("Exception captured:", error, context);
        // Send to error monitoring service
      },
      captureMessage: (message, level, context) => {
        console.log("Message captured:", message, level, context);
        // Log important messages
      },
    },
    onReady: (sessionId) => {
      console.log(`Session ready: ${sessionId}`);
      // Perform any initialization that depends on the session
    },
  });

  return (
    <div>
      {isSessionReady ? (
        <ChatInterface messages={messages} onSend={sendMessage} />
      ) : (
        <LoadingSpinner />
      )}
    </div>
  );
};

Session Lifecycle

Page Load

  • Component mounts and useChat hook initializes
  • Session ID generation begins when window is available

Background Initialization

  • Session initialization runs in browser idle time
  • Telemetry data collection begins
  • Device and user preference information gathered

Session Ready

  • isSessionReady becomes true
  • onReady callback triggered (if provided)
  • Chat functionality becomes fully available

Active Session

  • User can send messages and interact with chat
  • All telemetry events are tracked
  • Error handling is active

Browser Compatibility

FeatureModern BrowsersLegacy Browsers
Background ProcessingrequestIdleCallbacksetTimeout fallback
Session ManagementFull supportFull support
TelemetryFull supportFull support
Error HandlingFull supportFull support

Performance Considerations

  • Idle Time Usage: Initialization only runs during browser idle periods
  • Minimal State: Session state is optimized for React re-renders
  • Efficient Data Collection: Telemetry data is batched and lightweight
  • Error Recovery: Graceful degradation on initialization failures

Next Steps

Last updated on