Skip to main content
Quick Reference - Initiate a call and listen for events:
// Initiate a video call
const call = new CometChat.Call("RECEIVER_ID", CometChat.CALL_TYPE.VIDEO, CometChat.RECEIVER_TYPE.USER);
await CometChat.initiateCall(call);

// Accept an incoming call
await CometChat.acceptCall(sessionId);

// Reject or cancel
await CometChat.rejectCall(sessionId, CometChat.CALL_STATUS.REJECTED);
Available via: SDK | REST API | UI Kits

Overview

This section explains how to implement a complete calling workflow with ringing functionality, including incoming/outgoing call UI, call acceptance, rejection, and cancellation. Previously known as Default Calling.
After the call is accepted, you need to start the call session. See the Call Session guide for details on starting and managing the actual call.
Call Flow:
  1. Caller initiates a call using initiateCall()
  2. Receiver gets notified via onIncomingCallReceived() callback
  3. Receiver can either:
    • Accept the call using acceptCall()
    • Reject the call using rejectCall() with status CALL_STATUS_REJECTED
  4. Caller can cancel the call using rejectCall() with status CALL_STATUS_CANCELLED
  5. Once accepted, both participants generate a call token and render the CometChatCalls.Component to join the call

Initiate Call

The initiateCall() method sends a call request to a user or a group. On success, the receiver gets an onIncomingCallReceived() callback.
const receiverID = "UID";
const callType = CometChat.CALL_TYPE.VIDEO;
const receiverType = CometChat.RECEIVER_TYPE.USER;

const call = new CometChat.Call(receiverID, callType, receiverType);

CometChat.initiateCall(call).then(
  (outgoingCall) => {
    console.log("Call initiated:", outgoingCall);
    // Show outgoing call UI
    // Store outgoingCall.getSessionId() for later use
  },
  (error) => {
    console.log("Call initiation failed:", error);
  }
);
ParameterDescription
receiverIDThe UID or GUID of the recipient
receiverTypeCometChat.RECEIVER_TYPE.USER or CometChat.RECEIVER_TYPE.GROUP
callTypeCometChat.CALL_TYPE.AUDIO or CometChat.CALL_TYPE.VIDEO
On success, a Call object is returned containing the call details including a unique sessionId required for starting the call session.
On SuccessinitiateCall() returns a Call object with session details:
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-7"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"initiated"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009087929026e8ed35bb3c1f9b4aea3d6fe52b63eaa060"
statusstringCurrent call status"initiated"
initiatedAtnumberUnix timestamp when call was initiated1772009087
joinedAtnumberUnix timestamp when user joined1772009087
idstringUnique message ID"25329"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who initiated the callSee User Object below
receiverobjectUser receiving the callSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call was sent1772009087
updatedAtnumberUnix timestamp of last update1772009087
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-6"
namestringDisplay name of the user"Ronald Jerry"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-6.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"

Call Listeners

Register the CallListener to receive real-time call events. Each listener requires a unique listenerId string to prevent duplicate registrations and enable targeted removal.
const listenerId = "UNIQUE_LISTENER_ID";

// Register listener
CometChat.addCallListener(
  listenerId,
  new CometChat.CallListener({
    onIncomingCallReceived: (call) => {
      console.log("Incoming call:", call);
      // Show incoming call UI
    },
    onOutgoingCallAccepted: (call) => {
      console.log("Outgoing call accepted:", call);
      // Receiver accepted, start the call session
    },
    onOutgoingCallRejected: (call) => {
      console.log("Outgoing call rejected:", call);
      // Receiver rejected, dismiss outgoing call UI
    },
    onIncomingCallCancelled: (call) => {
      console.log("Incoming call cancelled:", call);
      // Caller cancelled, dismiss incoming call UI
    },
    onCallEndedMessageReceived: (call) => {
      console.log("Call ended message:", call);
      // Call ended by remote participant
    }
  })
);

// Unregister listener when done
CometChat.removeCallListener(listenerId);
Always remove call listeners when the component unmounts using CometChat.removeCallListener(listenerId). Failing to do so can cause memory leaks and duplicate event handling.

Events

EventDescription
onIncomingCallReceived(call)Invoked when an incoming call is received. The call contains caller details, session ID, and call type. Display incoming call UI here.
onOutgoingCallAccepted(call)Invoked on the caller’s device when the receiver accepts. Generate call token and start the session here.
onOutgoingCallRejected(call)Invoked on the caller’s device when the receiver rejects the call. Dismiss outgoing call UI here.
onIncomingCallCancelled(call)Invoked on the receiver’s device when the caller cancels before answering. Dismiss incoming call UI here.
onCallEndedMessageReceived(call)Invoked when a call ends. The call contains final status and duration. Update call history here.
On EventonIncomingCallReceived returns a Call object (same structure as initiateCall response):
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-7"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"initiated"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009087929026e8ed35bb3c1f9b4aea3d6fe52b63eaa060"
statusstringCurrent call status"initiated"
initiatedAtnumberUnix timestamp when call was initiated1772009087
joinedAtnumberUnix timestamp when user joined1772009087
idstringUnique message ID"25329"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who initiated the callSee User Object below
receiverobjectUser receiving the callSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call was sent1772009087
updatedAtnumberUnix timestamp of last update1772009087

On EventonOutgoingCallRejected / onIncomingCallCancelled returns a Call object with status: "unanswered":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-7"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"unanswered"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009087929026e8ed35bb3c1f9b4aea3d6fe52b63eaa060"
statusstringCurrent call status"unanswered"
initiatedAtnumberUnix timestamp when call was initiated1772009087
idstringUnique message ID"25330"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who initiated the callSee User Object below
receiverobjectUser receiving the callSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call was sent1772009132
updatedAtnumberUnix timestamp of last update1772009132

On EventonOutgoingCallAccepted returns a Call object with status: "ongoing":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"ongoing"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009341a5f92ad7d21eba0bf840bb6950c7000eb9d5863b"
statusstringCurrent call status"ongoing"
initiatedAtnumberUnix timestamp when call was initiated1772009341
joinedAtnumberUnix timestamp when user joined1772009347
idstringUnique message ID"25332"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who accepted the callSee User Object below
receiverobjectUser receiving the acceptanceSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call was sent1772009347
updatedAtnumberUnix timestamp of last update1772009347

On EventonCallEndedMessageReceived returns a Call object with status: "ended":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"ended"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009341a5f92ad7d21eba0bf840bb6950c7000eb9d5863b"
statusstringCurrent call status"ended"
initiatedAtnumberUnix timestamp when call was initiated1772009341
idstringUnique message ID"25333"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who ended the callSee User Object below
receiverobjectOther participantSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call ended1772009475
updatedAtnumberUnix timestamp of last update1772009475
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-6"
namestringDisplay name of the user"Ronald Jerry"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-6.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"

Accept Call

When an incoming call is received via onIncomingCallReceived(), use acceptCall() to accept it. On success, start the call session.
const sessionId = call.getSessionId(); // From onIncomingCallReceived

CometChat.acceptCall(sessionId).then(
  (call) => {
    console.log("Call accepted:", call);
    // Call accepted, now start the call session
    // Generate token and render CometChatCalls.Component
  },
  (error) => {
    console.log("Accept call failed:", error);
  }
);
On SuccessacceptCall() returns a Call object with status: "ongoing":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"ongoing"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009341a5f92ad7d21eba0bf840bb6950c7000eb9d5863b"
statusstringCurrent call status"ongoing"
initiatedAtnumberUnix timestamp when call was initiated1772009341
joinedAtnumberUnix timestamp when user joined1772009347
idstringUnique message ID"25332"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who accepted the callSee User Object below
receiverobjectUser receiving the acceptanceSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call was sent1772009347
updatedAtnumberUnix timestamp of last update1772009347
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"

Reject Call

Use rejectCall() to reject an incoming call. Set the status to CALL_STATUS_REJECTED.
const sessionId = call.getSessionId();
const status = CometChat.CALL_STATUS.REJECTED;

CometChat.rejectCall(sessionId, status).then(
  (call) => {
    console.log("Call rejected:", call);
    // Dismiss incoming call UI
  },
  (error) => {
    console.log("Reject call failed:", error);
  }
);
On SuccessrejectCall() with REJECTED status returns a Call object:
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"rejected"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772011647d5c89acf4865fd17a9e7195bae5cee3e15d0dc34"
statusstringCurrent call status"rejected"
initiatedAtnumberUnix timestamp when call was initiated1772011647
idstringUnique message ID"25361"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who rejected the callSee User Object below
receiverobjectUser receiving the rejectionSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when rejection was sent1772011654
updatedAtnumberUnix timestamp of last update1772011654
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"

Cancel Call

The caller can cancel an outgoing call before it’s answered using rejectCall() with status CALL_STATUS_CANCELLED.
const sessionId = call.getSessionId();
const status = CometChat.CALL_STATUS.CANCELLED;

CometChat.rejectCall(sessionId, status).then(
  (call) => {
    console.log("Call cancelled:", call);
    // Dismiss outgoing call UI
  },
  (error) => {
    console.log("Cancel call failed:", error);
  }
);
On SuccessrejectCall() with CANCELLED status returns a Call object:
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-7"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"cancelled"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009850a11d03ce320d8df8fde2ac7b43a0c30009b954f5"
statusstringCurrent call status"cancelled"
initiatedAtnumberUnix timestamp when call was initiated1772009850
idstringUnique message ID"25338"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who cancelled the callSee User Object below
receiverobjectUser who was being calledSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when cancellation was sent1772009856
updatedAtnumberUnix timestamp of last update1772009856
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-6"
namestringDisplay name of the user"Ronald Jerry"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-6.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"

Start Call Session

Once the call is accepted, both participants need to start the call session. Caller flow: In the onOutgoingCallAccepted() callback, generate a token and start the session. Receiver flow: In the acceptCall() success callback, generate a token and start the session.
const sessionId = call.getSessionId();
const loggedInUser = await CometChat.getLoggedinUser();
const userAuthToken = loggedInUser.getAuthToken();

// Step 1: Generate call token
CometChatCalls.generateToken(sessionId, userAuthToken).then(
  (callToken) => {
    // Step 2: Configure call settings
    const callListener = new CometChatCalls.OngoingCallListener({
      onCallEnded: () => {
        CometChat.clearActiveCall();
        CometChatCalls.endSession();
        // Close calling screen
      },
      onCallEndButtonPressed: () => {
        CometChat.endCall(sessionId).then(
          () => {
            CometChat.clearActiveCall();
            CometChatCalls.endSession();
            // Close calling screen
          },
          (error) => console.log("End call failed:", error)
        );
      },
      onUserJoined: (user) => console.log("User joined:", user),
      onUserLeft: (user) => console.log("User left:", user),
      onError: (error) => console.log("Call error:", error)
    });

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

    // Step 3: Render call component
    // <CometChatCalls.Component callSettings={callSettings} callToken={callToken} />
  },
  (error) => {
    console.log("Token generation failed:", error);
  }
);
On SuccessgenerateToken() returns an object with session and token:
ParameterTypeDescriptionSample Value
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772009341a5f92ad7d21eba0bf840bb6950c7000eb9d5863b"
tokenstringJWT token for authenticating the call session"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImNjcHJvX2p3dF9yczI1Nl9rZXkxIn0..."

On EventonUserJoined returns user info when a participant joins:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
isVideoMutedbooleanWhether user’s video is mutedtrue
isAudioMutedbooleanWhether user’s audio is mutedfalse
isLocalUserbooleanWhether this is the local userfalse
idstringInternal participant ID"03dcf87d"
joinedAtstringUnix timestamp (ms) when user joined"1772009349593"

On EventonUserListUpdated returns the current list of participants:
ParameterTypeDescriptionSample Value
(array)arrayArray of participant objectsSee below
Each participant object:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-6"
namestringDisplay name of the user"Ronald Jerry"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-6.webp"

On EventonUserLeft returns user info when a participant leaves:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
idstringInternal participant ID"07ba41cd"
joinedAtstringUnix timestamp (ms) when user joined"1772010034825"
isAudioMutedbooleanWhether user’s audio was mutedfalse
isVideoMutedbooleanWhether user’s video was mutedtrue
For more details on call settings and customization, see the Call Session guide.

End Call

To end an active call in the ringing flow, the process differs based on who ends the call. User who ends the call: When the user presses the end call button, the onCallEndButtonPressed() callback is triggered. Inside this callback, call CometChat.endCall() to notify other participants. On success, call CometChat.clearActiveCall() and CometChatCalls.endSession() to release resources.
onCallEndButtonPressed: () => {
  CometChat.endCall(sessionId).then(
    (call) => {
      console.log("Call ended successfully");
      CometChat.clearActiveCall();
      CometChatCalls.endSession();
      // Close the calling screen
    },
    (error) => {
      console.log("End call failed:", error);
    }
  );
}
Remote participant (receives onCallEnded() callback):
onCallEnded: () => {
  CometChat.clearActiveCall();
  CometChatCalls.endSession();
  // Close the calling screen
}
On SuccessendCall() returns a Call object with status: "ended":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"ongoing"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.17720117078263785b8e96c36c6a586d6bb3a60e0a6c16d018"
statusstringCurrent call status"ended"
initiatedAtnumberUnix timestamp when call was initiated1772011707
joinedAtnumberUnix timestamp when user joined1772011711
idstringUnique message ID"25363"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who ended the callSee User Object below
receiverobjectOther participantSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when call ended1772011711
updatedAtnumberUnix timestamp of last update1772011711
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"
For more details, see the End Call Session guide.

Busy Call Handling

If the receiver is already on another call, you can reject the incoming call with CALL_STATUS_BUSY status.
const sessionId = call.getSessionId();
const status = CometChat.CALL_STATUS.BUSY;

CometChat.rejectCall(sessionId, status).then(
  (call) => {
    console.log("Busy status sent:", call);
  },
  (error) => {
    console.log("Busy rejection failed:", error);
  }
);
On SuccessrejectCall() with BUSY status returns a Call object:
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"busy"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772011351c36eb867b604d0a861952ea718d3d8eaf1c89ec0"
statusstringCurrent call status"busy"
initiatedAtnumberUnix timestamp when call was initiated1772011351
idstringUnique message ID"25359"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who sent busy statusSee User Object below
receiverobjectUser receiving the busy statusSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when busy status was sent1772011351
updatedAtnumberUnix timestamp of last update1772011351

On Event — The caller receives onOutgoingCallRejected with status: "busy":
ParameterTypeDescriptionSample Value
receiverIdstringUID of the call recipient"cometchat-uid-6"
typestringType of call"audio"
receiverTypestringType of receiver"user"
categorystringMessage category"call"
actionstringCurrent call action"busy"
sessionIdstringUnique session identifier for the call"v1.in.2748663902141719.1772011351c36eb867b604d0a861952ea718d3d8eaf1c89ec0"
statusstringCurrent call status"busy"
initiatedAtnumberUnix timestamp when call was initiated1772011351
idstringUnique message ID"25359"
conversationIdstringUnique conversation identifier"cometchat-uid-6_user_cometchat-uid-7"
senderobjectUser who sent busy statusSee User Object below
receiverobjectUser receiving the busy statusSee User Object below
callInitiatorobjectUser who started the callSee User Object below
callReceiverobjectIntended call recipientSee User Object below
sentAtnumberUnix timestamp when busy status was sent1772011351
updatedAtnumberUnix timestamp of last update1772011351
User Object Structure:
ParameterTypeDescriptionSample Value
uidstringUnique user identifier"cometchat-uid-7"
namestringDisplay name of the user"Henry Marino"
avatarstringURL to user’s avatar image"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"
statusstringUser’s online status"online"
rolestringUser’s role"default"
  • Always remove call listeners on component unmount to prevent memory leaks and duplicate events
  • Store the sessionId from initiateCall() or onIncomingCallReceived() — you’ll need it for accept, reject, cancel, and starting the session
  • Handle the CALL_STATUS_BUSY case when the receiver is already on another call
  • Call CometChat.clearActiveCall() and CometChatCalls.endSession() together when a call ends to properly release all resources
  • Request camera and microphone permissions before initiating or accepting a call
  • Show appropriate UI feedback (spinner, ringing animation) while waiting for the receiver to respond
  • onIncomingCallReceived not firing: Ensure CometChat.addCallListener() is registered before the call is initiated and that the listener ID is unique
  • Call accepted but no audio/video: After acceptCall(), you must start the call session by generating a token and rendering CometChatCalls.Component — see the Start Call Session section above
  • Duplicate call events: You may have registered the same listener multiple times — always call CometChat.removeCallListener(listenerId) on unmount
  • initiateCall fails with error: Verify the receiver UID/GUID exists and that the logged-in user has an active session
  • Call ends immediately after accept: Make sure both caller and receiver generate a call token and render CometChatCalls.Component — if only one side renders the component, the call will appear to drop
  • Busy status not working: Ensure you’re using CometChat.CALL_STATUS.BUSY (not REJECTED) when the receiver is already on a call

Next Steps