Skip to main content
Version: v4

Default Calling

This section will provide information on how a complete calling workflow can be set up using CometChat. We've built the complete workflow to help your users make calls, receive calls as well as accept/reject calls.

Let us assume Alex to be the call initiator and Bob is the receiver.

  1. Alex initiates the call to Bob using the initiateCall() method.

  2. Bob now has two choices:
    a. Accept the call from Alex using the acceptCall() method.
    b. Reject the call from Alex using the rejectCall("rejected") method passing the status as rejected.

  3. In the meantime, Alex has the option to cancel the call he initiated to Bob using the rejectCall("cancelled") method passing the status as cancelled.

  4. If Bob accepts the call from Alex, both Alex and Bob need to call the startCall() method. Alex in the onIncomingCallReceived() method of the CallListener and Bob in the success obtained from the call to acceptCall() method and both will be connected to each other.

Initiate Call

The initiateCall() method sends a call request to a user or a group.

let receiverID = "UID"
let receiverType:CometChat.ReceiverType = .user OR.group
let callType: CometChat.CallType = .audio OR .video

let newCall = Call(receiverId: receiverID, callType: callType, receiverType: receiverType);

CometChat.initiateCall(call: newCall, onSuccess: { (ongoing_call) in

print("Call initiated successfully " + ongoing_call!.stringValue());

}) { (error) in

print("Call initialization failed with error: " + error!.errorDescription);

}

This method takes an object of the Call class. The constructor for Call class takes the following parameters:

Properties
ParameterDescriptions
receiverIDThe UID or GUID of the recipient
receiverTypeThe type of the receiver viz.
- user
- group
callTypeThe type of the receiver viz.
- audio
- video

Receive Calls

In order to receive all call events, you must add protocol conformance CometChatCallDelegate as Shown Below :

extension ViewController: CometChatCallDelegate {
func onIncomingCallReceived(incomingCall: Call ? , error : CometChatException ? ) {
print(" Incoming call " + incomingCall!.stringValue());
}

func onOutgoingCallAccepted(acceptedCall: Call ? , error : CometChatException ? ) {
print("Outgoing call " + acceptedCall!.stringValue());
}

func onOutgoingCallRejected(rejectedCall: Call ? , error : CometChatException ? ) {
print("Rejected call " + rejectedCall!.stringValue());
}
func onIncomingCallCanceled(canceledCall: Call ? , error : CometChatException ? ) {
print("Cancelled call " + canceledCall!.stringValue());
}

func onCallEndedMessageReceived(endedCall: Call?, error: CometChatException?) {
print(" Ended call " + endedCall!.stringValue())
}
}

Do not forget to set your view controller as a CometChat delegate probably in viewDidLoad() as CometChat.calldelegate = self

As mentioned in the Integration section, Once the call is initiated, there are three options that can be possible:

  1. The receiver of the call accepts the call.
  2. The receiver of the call rejects the call.
  3. The initiator of the call cancels the call.

Please find below how these three scenarios can be implemented:

Accept the incoming Call

Once you have received an incoming call from a user or in any group in onIncomingCallReceived(incomingCall:, error:), you need to accept the call using the acceptCall() method.

CometChat.acceptCall(sessionID: incomingCall!.sessionID, onSuccess: { (ongoing_call) in

print("Accepted Call. " + call!.stringValue());

}) { (error) in

print("Call accepting failed with error: " + error!.errorDescription);
}

Reject the incoming Call

You can also choose to reject the incoming call once it is received using the rejectCall() method.

let status: CometChatConstants.callStatus = .rejected;

CometChat.rejectCall(sessionID: (incomingCall?.sessionID)!, status: status, onSuccess: { (rejeceted_call) in

print("Call rejected successfully. " + rejeceted_call!.stringValue());

}) { (error) in

print("Call rejection failed with error: " + error!.errorDescription);
}
Properties
statusReason for rejection of the call
sessionIDThe unique session ID available in the Call object

Here the status needs to be set as CometChatConstants.callStatus.rejected as the call is being rejected by the receiver of the call.

Cancel the Outgoing Call

In the case where the initiator wishes to cancel the call, use the same above rejectCall() method and just pass the status to the rejectCall() method as CometChatConstants.callStatus.cancelled

The possible values for the status can be one of the below:

Description
statusinterpretationEnum available
rejectedThe receiver rejects the call as it is received without accepting the call.rejected
cancelledThe initiator ends the call without the receiver accepting the call.cancelled
busyThe receiver rejects the call, as he/she is busy on another call.busy

Start a Call

Once the call request is sent and the receiver has accepted the call, both the initiator and the receiver need to call the startSession() method.