Fetch Call Logs
UseCallLogRequest to fetch call logs with pagination support. The builder pattern allows you to filter results by various criteria.
- Kotlin
- Java
val callLogRequest = CallLogRequest.CallLogRequestBuilder()
.setLimit(30)
.build()
callLogRequest.fetchNext(object : CometChatCalls.CallbackListener<List<CallLog>>() {
override fun onSuccess(callLogs: List<CallLog>) {
for (callLog in callLogs) {
Log.d(TAG, "Session: ${callLog.sessionID}")
Log.d(TAG, "Duration: ${callLog.totalDuration}")
Log.d(TAG, "Status: ${callLog.status}")
}
}
override fun onError(e: CometChatException) {
Log.e(TAG, "Error: ${e.message}")
}
})
CallLogRequest callLogRequest = new CallLogRequest.CallLogRequestBuilder()
.setLimit(30)
.build();
callLogRequest.fetchNext(new CometChatCalls.CallbackListener<List<CallLog>>() {
@Override
public void onSuccess(List<CallLog> callLogs) {
for (CallLog callLog : callLogs) {
Log.d(TAG, "Session: " + callLog.getSessionID());
Log.d(TAG, "Duration: " + callLog.getTotalDuration());
Log.d(TAG, "Status: " + callLog.getStatus());
}
}
@Override
public void onError(CometChatException e) {
Log.e(TAG, "Error: " + e.getMessage());
}
});
CallLogRequestBuilder
Configure the request using the builder methods:| Method | Type | Description |
|---|---|---|
setLimit(int) | int | Number of call logs to fetch per request (default: 30, max: 100) |
setSessionType(String) | String | Filter by call type: video or audio |
setCallStatus(String) | String | Filter by call status |
setHasRecording(boolean) | boolean | Filter calls that have recordings |
setCallCategory(String) | String | Filter by category: call or meet |
setCallDirection(String) | String | Filter by direction: incoming or outgoing |
setUid(String) | String | Filter calls with a specific user |
setGuid(String) | String | Filter calls with a specific group |
Filter Examples
- Kotlin
- Java
// Fetch only video calls
val videoCallsRequest = CallLogRequest.CallLogRequestBuilder()
.setSessionType("video")
.setLimit(20)
.build()
// Fetch calls with recordings
val recordedCallsRequest = CallLogRequest.CallLogRequestBuilder()
.setHasRecording(true)
.build()
// Fetch missed incoming calls
val missedCallsRequest = CallLogRequest.CallLogRequestBuilder()
.setCallStatus("missed")
.setCallDirection("incoming")
.build()
// Fetch calls with a specific user
val userCallsRequest = CallLogRequest.CallLogRequestBuilder()
.setUid("user_id")
.build()
// Fetch only video calls
CallLogRequest videoCallsRequest = new CallLogRequest.CallLogRequestBuilder()
.setSessionType("video")
.setLimit(20)
.build();
// Fetch calls with recordings
CallLogRequest recordedCallsRequest = new CallLogRequest.CallLogRequestBuilder()
.setHasRecording(true)
.build();
// Fetch missed incoming calls
CallLogRequest missedCallsRequest = new CallLogRequest.CallLogRequestBuilder()
.setCallStatus("missed")
.setCallDirection("incoming")
.build();
// Fetch calls with a specific user
CallLogRequest userCallsRequest = new CallLogRequest.CallLogRequestBuilder()
.setUid("user_id")
.build();
Pagination
UsefetchNext() and fetchPrevious() for pagination:
- Kotlin
- Java
// Fetch next page
callLogRequest.fetchNext(object : CometChatCalls.CallbackListener<List<CallLog>>() {
override fun onSuccess(callLogs: List<CallLog>) {
// Handle next page
}
override fun onError(e: CometChatException) {
Log.e(TAG, "Error: ${e.message}")
}
})
// Fetch previous page
callLogRequest.fetchPrevious(object : CometChatCalls.CallbackListener<List<CallLog>>() {
override fun onSuccess(callLogs: List<CallLog>) {
// Handle previous page
}
override fun onError(e: CometChatException) {
Log.e(TAG, "Error: ${e.message}")
}
})
// Fetch next page
callLogRequest.fetchNext(new CometChatCalls.CallbackListener<List<CallLog>>() {
@Override
public void onSuccess(List<CallLog> callLogs) {
// Handle next page
}
@Override
public void onError(CometChatException e) {
Log.e(TAG, "Error: " + e.getMessage());
}
});
// Fetch previous page
callLogRequest.fetchPrevious(new CometChatCalls.CallbackListener<List<CallLog>>() {
@Override
public void onSuccess(List<CallLog> callLogs) {
// Handle previous page
}
@Override
public void onError(CometChatException e) {
Log.e(TAG, "Error: " + e.getMessage());
}
});
CallLog Object
EachCallLog object contains detailed information about a call:
| Property | Type | Description |
|---|---|---|
sessionID | String | Unique identifier for the call session |
initiator | CallEntity | User who initiated the call |
receiver | CallEntity | User or group that received the call |
receiverType | String | user or group |
type | String | Call type: video or audio |
status | String | Final status of the call |
callCategory | String | Category: call or meet |
initiatedAt | long | Timestamp when call was initiated |
endedAt | long | Timestamp when call ended |
totalDuration | String | Human-readable duration (e.g., “5:30”) |
totalDurationInMinutes | double | Duration in minutes |
totalAudioMinutes | double | Audio duration in minutes |
totalVideoMinutes | double | Video duration in minutes |
totalParticipants | int | Number of participants |
hasRecording | boolean | Whether the call was recorded |
recordings | List<Recording> | List of recording objects |
participantInfoList | List<ParticipantInfo> | List of participant details |
Access Recordings
If a call has recordings, access them through therecordings property:
- Kotlin
- Java
callLogRequest.fetchNext(object : CometChatCalls.CallbackListener<List<CallLog>>() {
override fun onSuccess(callLogs: List<CallLog>) {
for (callLog in callLogs) {
if (callLog.isHasRecording) {
callLog.recordings?.forEach { recording ->
Log.d(TAG, "Recording ID: ${recording.rid}")
Log.d(TAG, "Recording URL: ${recording.recordingURL}")
Log.d(TAG, "Duration: ${recording.duration} seconds")
}
}
}
}
override fun onError(e: CometChatException) {
Log.e(TAG, "Error: ${e.message}")
}
})
callLogRequest.fetchNext(new CometChatCalls.CallbackListener<List<CallLog>>() {
@Override
public void onSuccess(List<CallLog> callLogs) {
for (CallLog callLog : callLogs) {
if (callLog.isHasRecording()) {
for (Recording recording : callLog.getRecordings()) {
Log.d(TAG, "Recording ID: " + recording.getRid());
Log.d(TAG, "Recording URL: " + recording.getRecordingURL());
Log.d(TAG, "Duration: " + recording.getDuration() + " seconds");
}
}
}
}
@Override
public void onError(CometChatException e) {
Log.e(TAG, "Error: " + e.getMessage());
}
});
Call Status Values
Call Status Values
| Status | Description |
|---|---|
ongoing | Call is currently in progress |
busy | Receiver was busy |
rejected | Call was rejected |
cancelled | Call was cancelled by initiator |
ended | Call ended normally |
missed | Call was missed |
initiated | Call was initiated but not answered |
unanswered | Call was not answered |
Call Category Values
Call Category Values
| Category | Description |
|---|---|
call | Direct call between users |
meet | Meeting/conference call |
Call Direction Values
Call Direction Values
| Direction | Description |
|---|---|
incoming | Call received by the user |
outgoing | Call initiated by the user |