Skip to main content

Overview

This section demonstrates how to implement calling functionality using only the CometChat Calls SDK, without requiring the Chat SDK. This is ideal for applications that need video/audio calling capabilities without the full chat infrastructure.
Before you begin, ensure you have completed the Calls SDK setup.

User Authentication

To start a call session, you need a user auth token. Since this implementation doesn’t use the Chat SDK, you’ll need to obtain the auth token via the CometChat REST API.
To understand user authentication in CometChat, see the User Auth documentation.
You can obtain the auth token using one of these REST API endpoints:
For testing or POC purposes, you can create an auth token directly from the CometChat Dashboard. Navigate to Users & Groups → Users, select a user, and click + Create Auth Token.
Store the auth token securely in your application for use when generating call tokens.

Generate Call Token

A call token is required for secure access to a call session. Each token is unique to a specific session and user combination, ensuring that only authorized users can join the call. You can generate the token just before starting the call, or generate and store it ahead of time based on your use case. Use the generateToken() method to create a call token:
const sessionId = "UNIQUE_SESSION_ID"; // Generate a unique session ID
const userAuthToken = "USER_AUTH_TOKEN"; // Obtained from REST API

CometChatCalls.generateToken(sessionId, userAuthToken).then(
  (callToken) => {
    console.log("Call token generated:", callToken.token);
    // Use callToken to start the session
  },
  (error) => {
    console.log("Token generation failed:", error);
  }
);
ParameterDescription
sessionIdA unique session ID for the call. Generate this yourself or use a shared ID for participants to join the same call.
userAuthTokenThe user auth token obtained from the CometChat REST API.

Start Call Session

Use the CometChatCalls.Component to render the call UI. This component requires a call token (generated in the previous step) and a CallSettings object that configures the call UI and behavior.
const callListener = new CometChatCalls.OngoingCallListener({
  onUserJoined: (user) => {
    console.log("User joined:", user);
  },
  onUserLeft: (user) => {
    console.log("User left:", user);
  },
  onUserListUpdated: (userList) => {
    console.log("User list updated:", userList);
  },
  onCallEnded: () => {
    console.log("Call ended");
    CometChatCalls.endSession();
    // Close calling screen
  },
  onCallEndButtonPressed: () => {
    console.log("End call button pressed");
    CometChatCalls.endSession();
    // Close calling screen
  },
  onError: (error) => {
    console.log("Call error:", error);
  },
  onAudioModesUpdated: (audioModes) => {
    console.log("Audio modes updated:", audioModes);
  },
  onCallSwitchedToVideo: (event) => {
    console.log("Call switched to video:", event);
  },
  onUserMuted: (event) => {
    console.log("User muted:", event);
  },
  onSessionTimeout: () => {
    console.log("Session timed out");
  }
});

const callSettings = new CometChatCalls.CallSettingsBuilder()
  .enableDefaultLayout(true)
  .setIsAudioOnlyCall(false)
  .setCallEventListener(callListener)
  .build();

// In your render method
return (
  <View style={{ height: '100%', width: '100%', position: 'relative' }}>
    <CometChatCalls.Component callSettings={callSettings} callToken={callToken} />
  </View>
);
ParameterDescription
callTokenThe GenerateToken object received from generateToken() onSuccess
callSettingsObject of CallSettings class configured via CallSettingsBuilder

Call Settings

Configure the call experience using the following CallSettingsBuilder methods:
MethodDescription
enableDefaultLayout(boolean)Enables or disables the default call UI layout with built-in controls. true shows the default layout with end call, mute, video toggle buttons. false hides the button layout. Default: true
setIsAudioOnlyCall(boolean)Sets whether the call is audio-only or audio-video. true for audio-only, false for audio-video. Default: false
setCallEventListener(OngoingCallListener)Sets the listener to receive call events. See Call Listeners for available callbacks.
setMode(string)Sets the call UI layout mode. Available: CometChat.CALL_MODE.DEFAULT (grid), CometChat.CALL_MODE.SPOTLIGHT (active speaker), CometChat.CALL_MODE.SINGLE (one participant). Default: DEFAULT
setAvatarMode(string)Sets how avatars are displayed when video is off. Available: circle, square, fullscreen. Default: circle
setDefaultAudioMode(string)Sets the initial audio output device. Available: SPEAKER, EARPIECE, BLUETOOTH, HEADPHONES
startWithAudioMuted(boolean)Starts the call with the microphone muted. Default: false
startWithVideoMuted(boolean)Starts the call with the camera turned off. Default: false
showEndCallButton(boolean)Shows or hides the end call button in the default layout. Default: true
showSwitchCameraButton(boolean)Shows or hides the switch camera button (front/back). Default: true
showMuteAudioButton(boolean)Shows or hides the mute audio button. Default: true
showPauseVideoButton(boolean)Shows or hides the pause video button. Default: true
showAudioModeButton(boolean)Shows or hides the audio mode selection button. Default: true
showSwitchToVideoCallButton(boolean)Shows or hides the button to upgrade an audio call to video. Default: true
setMainVideoContainerSetting(MainVideoContainerSetting)Customizes the main video container. See Video View Customization.
enableVideoTileClick(boolean)Enables or disables click interactions on video tiles in Spotlight mode. Default: true
enableVideoTileDrag(boolean)Enables or disables drag functionality for video tiles in Spotlight mode. Default: true
setIdleTimeoutPeriod(number)Sets idle timeout in seconds. Warning appears 60 seconds before auto-termination. Default: 180 seconds. v4.2.0+

Call Listeners

The OngoingCallListener provides real-time callbacks for call session events, including participant changes, call state updates, and error conditions. You can register listeners in two ways:
  1. Via CallSettingsBuilder: Use .setCallEventListener(listener) when building call settings
  2. Via addCallEventListener: Use CometChatCalls.addCallEventListener(listenerId, listener) to add multiple listeners
Each listener requires a unique listenerId string. This ID is used to:
  • Prevent duplicate registrations — Re-registering with the same ID replaces the existing listener
  • Enable targeted removal — Remove specific listeners without affecting others
useEffect(() => {
  const listenerId = "UNIQUE_LISTENER_ID";
  
  CometChatCalls.addCallEventListener(listenerId, {
    onUserJoined: (user) => {
      console.log("User joined:", user);
    },
    onUserLeft: (user) => {
      console.log("User left:", user);
    },
    onUserListUpdated: (userList) => {
      console.log("User list updated:", userList);
    },
    onCallEnded: () => {
      console.log("Call ended");
      CometChatCalls.endSession();
      // Close calling screen
    },
    onCallEndButtonPressed: () => {
      console.log("End call button pressed");
      CometChatCalls.endSession();
      // Close calling screen
    },
    onError: (error) => {
      console.log("Call error:", error);
    },
    onAudioModesUpdated: (audioModes) => {
      console.log("Audio modes updated:", audioModes);
    },
    onCallSwitchedToVideo: (event) => {
      console.log("Call switched to video:", event);
    },
    onUserMuted: (event) => {
      console.log("User muted:", event);
    },
    onSessionTimeout: () => {
      console.log("Session timed out");
    }
  });

  // Cleanup on unmount
  return () => CometChatCalls.removeCallEventListener(listenerId);
}, []);

Events

EventDescription
onCallEnded()Invoked when the call session terminates for a 1:1 call. Both participants receive this callback. Only fires for calls with exactly 2 participants.
onSessionTimeout()Invoked when the call is auto-terminated due to inactivity (default: 180 seconds). Warning appears 60 seconds before. v4.2.0+
onCallEndButtonPressed()Invoked when the local user taps the end call button. Call CometChatCalls.endSession() to leave the session.
onUserJoined(user)Invoked when a remote participant joins. The user contains UID, name, and avatar.
onUserLeft(user)Invoked when a remote participant leaves the call session.
onUserListUpdated(userList)Invoked whenever the participant list changes (join or leave events).
onAudioModesUpdated(audioModes)Invoked when available audio devices change (e.g., Bluetooth connected).
onCallSwitchedToVideo(event)Invoked when an audio call is upgraded to a video call.
onUserMuted(event)Invoked when a participant’s mute state changes.
onScreenShareStarted()Invoked when the local user starts sharing a screen.
onScreenShareStopped()Invoked when the local user stops sharing a screen.
onError(error)Invoked when an error occurs during the call session.

End Call Session

To end the call session and release all media resources (camera, microphone, network connections), call CometChatCalls.endSession() in the onCallEndButtonPressed() callback.
onCallEndButtonPressed: () => {
  CometChatCalls.endSession();
  // Close the calling screen
}

Methods

These methods are available for performing custom actions during an active call session. Use them to build custom UI controls or implement specific behaviors based on your use case.
These methods can only be called when a call session is active.

Switch Camera

Toggles between the front and rear camera during a video call. Useful for allowing users to switch their camera view without leaving the call.
CometChatCalls.switchCamera();

Mute Audio

Controls the local audio stream transmission. When muted, other participants cannot hear the local user.
  • true — Mutes the microphone, stops transmitting audio
  • false — Unmutes the microphone, resumes audio transmission
CometChatCalls.muteAudio(true);

Pause Video

Controls the local video stream transmission. When paused, other participants see a frozen frame or avatar instead of live video.
  • true — Pauses the camera, stops transmitting video
  • false — Resumes the camera, continues video transmission
CometChatCalls.pauseVideo(true);

Set Audio Mode

Routes the audio output to a specific device. Use this to let users choose between speaker, earpiece, or connected audio devices. Available modes:
  • CometChat.AUDIO_MODE.SPEAKER — Device speaker (loudspeaker)
  • CometChat.AUDIO_MODE.EARPIECE — Phone earpiece
  • CometChat.AUDIO_MODE.BLUETOOTH — Connected Bluetooth device
  • CometChat.AUDIO_MODE.HEADPHONES — Wired headphones
CometChatCalls.setAudioMode(CometChat.AUDIO_MODE.EARPIECE);

Switch To Video Call

Upgrades an ongoing audio call to a video call. This enables the camera and starts transmitting video to other participants. The remote participant receives the onCallSwitchedToVideo() callback.
CometChatCalls.switchToVideoCall();

Get Audio Output Modes

Returns the list of available audio output devices. Use this to display audio options to the user and then set the selected mode using setAudioMode().
CometChatCalls.getAudioOutputModes().then(
  (modes) => {
    console.log("Available audio modes:", modes);
    // Each mode has: mode (string) and isSelected (boolean)
  },
  (error) => {
    console.log("Failed to get audio modes:", error);
  }
);

End Call

Terminates the current call session and releases all media resources (camera, microphone, network connections). After calling this method, the call view should be closed.
CometChatCalls.endSession();