Skip to main content

Documentation Index

Fetch the complete documentation index at: https://cometchat-22654f5b-v5-calling-sdk-enhancement-react-native.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

The idle timeout feature automatically ends a call session when a participant is alone for a specified period. This prevents abandoned calls from running indefinitely.

Configure Idle Timeout

Set the idle timeout period when creating call settings:
import { CometChatCalls } from '@cometchat/calls-sdk-react-native';

const sessionSettings = {
  idleTimeoutPeriodBeforePrompt: 180000, // 180 seconds (3 minutes)
  idleTimeoutPeriodAfterPrompt: 120000,  // 120 seconds (2 minutes)
};
ParameterTypeDefaultDescription
idleTimeoutPeriodBeforePromptnumber180000Milliseconds of inactivity before the prompt appears
idleTimeoutPeriodAfterPromptnumber120000Milliseconds the user has to respond before the session ends

How It Works

  1. When all other participants leave the call, the idle timeout timer starts
  2. A prompt appears 60 seconds before the timeout, allowing the user to extend the session
  3. If the user doesn’t respond, the session ends automatically
  4. If another participant joins, the timer is cancelled

Listen for Timeout Events

Session Timeout Event

Listen for when the session times out:
CometChatCalls.addEventListener('onSessionTimedOut', () => {
  console.log('Session timed out due to inactivity');
  // Navigate away from call screen
});

Disable Idle Timeout

Set a very high value to effectively disable the timeout:
const sessionSettings = {
  idleTimeoutPeriodBeforePrompt: 86400000, // 24 hours
};

Complete Example

import React, { useEffect, useCallback } from 'react';
import { Alert } from 'react-native';
import { CometChatCalls } from '@cometchat/calls-sdk-react-native';

interface CallScreenProps {
  sessionId: string;
  onCallEnd: () => void;
}

function CallScreen({ sessionId, onCallEnd }: CallScreenProps) {
  const handleSessionTimeout = useCallback(() => {
    Alert.alert(
      'Session Ended',
      'The call has ended due to inactivity.',
      [
        {
          text: 'OK',
          onPress: onCallEnd,
        },
      ]
    );
  }, [onCallEnd]);

  useEffect(() => {
    const unsubscribe = CometChatCalls.addEventListener(
      'onSessionTimedOut',
      handleSessionTimeout
    );

    return () => unsubscribe();
  }, [handleSessionTimeout]);

  useEffect(() => {
    async function initializeCall() {
      try {
        const { token } = await CometChatCalls.generateToken(sessionId);

        const sessionSettings = {
          idleTimeoutPeriodBeforePrompt: 180000, // 3 minutes
          idleTimeoutPeriodAfterPrompt: 120000,  // 2 minutes
        };

        // Render call component with token and sessionSettings
      } catch (error) {
        console.error('Failed to initialize call:', error);
      }
    }

    initializeCall();
  }, [sessionId, handleSessionTimeout, onCallEnd]);

  // ... render call UI
  return null;
}

export default CallScreen;

Timeout Behavior

ScenarioBehavior
User is aloneTimer starts counting down
Another participant joinsTimer is cancelled
User extends sessionTimer resets
Timer expiresSession ends, onSessionTimedOut fires