HappyFox Contact Center provides two raw data exports the Call Report and the Call Leg Report. The Call Report gives you one row per call and covers outcomes, durations, and agent details. The Call Leg Report goes deeper, giving you one row per participant entry so you can see exactly who joined a call, in what capacity, and for how long. Use both together for complete call-level and participant-level analysis.
Permission required: Your agent role must have the View Contact Center Report permission enabled to access these exports.
How to export
- Go to Reports > Agent Performance.
- Apply the filters you need - Phone Line, Category, and Date Range - using the controls at the top of the page. These filters are applied to the exported data.
- Scroll to the bottom of the page.
- Select Download Call Report or Download Call Leg Report depending on which export you need.
The file downloads as a CSV.
Note: The filters you set on the report page - phone line, category, and date range are carried through to the export. You can export up to 30 days at a time.
Call Report
One row per call. Every call that passed through your contact center appears here - inbound, outbound, callbacks, voicemails, and missed calls.
| Column |
Description |
Example |
| call_id |
Unique identifier for the call. Use this to join rows to the Call Leg Report. |
CALL-10001 |
| ticket_id |
ID of the ticket associated with this call. |
5521 |
| ticket_category_id |
ID of the ticket category. |
23 |
| ticket_category_name |
Name of the ticket category. |
Billing Support |
| contact_id |
ID of the contact record in HappyFox. |
8801 |
| contact_name |
Display name of the contact. |
Mark Boucher |
| contact_phone_number |
Phone number of the contact. |
+18005550100 |
| contact_group_id |
ID of the contact group the contact belongs to. |
12 |
| contact_group_name |
Name of the contact group. |
Enterprise Clients |
Phone line
| Column |
Description |
Example |
| phone_line |
The contact center phone number the call came in on or went out from. |
+18005550100 |
| phone_line_display_name |
The configured display name for that number. |
HappyFox Support |
Call classification
| Column |
Description |
Possible values |
| call_direction |
Whether the call was initiated by the contact or by an agent. |
Inbound, Outbound |
| routing_type |
How the call was routed once it entered the system. |
Category, IVR |
| routing_strategy |
The agent assignment method used. |
Ringall, LIAF |
| routing_category_id |
ID of the routing category or queue. |
31 |
| routing_category_name |
Name of the routing category or queue. |
Billing Support |
Call outcome
| Column |
Description |
Possible values |
| call_status |
The final outcome of the call. |
Completed, Abandoned, Missed, Discarded |
| call_sub_status |
The specific reason for the outcome. Populated when call_status is Abandoned or Missed. |
Abandoned in queue, Abandoned in IVR, Abandoned on hold, Abandoned in voicemail, Ring no answer, Queue wait timeout, Queue full blocked, Outside business hours |
| voicemail |
Whether the call resulted in a voicemail. |
TRUE, FALSE |
| callback |
Whether the contact requested a callback instead of waiting in queue. |
TRUE, FALSE |
| callback_parent_call_id |
The call_id of the original inbound call where the callback was requested. Populated only on callback calls. |
CALL-10000 |
| forwarded |
Whether the call was forwarded to an external number. |
TRUE, FALSE |
| forwarded_to |
The external number the call was forwarded to. |
+1234567890 |
| recorded |
Whether the call was recorded. |
TRUE, FALSE |
Timestamps
All timestamps are in UTC in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ).
| Column |
Description |
| call_started_at |
When the call first entered the system. This is the primary timestamp used for date range filtering. |
| call_queue_entered_at |
When the call entered the queue. |
| call_first_offered_at |
When the first agent notification was sent. |
| call_answered_at |
When an agent answered. Empty for unanswered calls. |
| call_ended_at |
When the call ended. |
| callback_requested_at |
When the contact requested a callback. Populated on callback calls only. |
| callback_first_attempted_at |
When the first callback attempt was made. |
| callback_connected_at |
When the callback was answered by the contact. |
| callback_ended_at |
When the callback call ended. |
Durations
All values are in seconds.
| Column |
Description |
| call_duration |
End-to-end call time from when the call entered the system to when it ended. |
| wait_time |
Time the contact spent waiting in queue before connecting to an agent or leaving. |
| talk_time |
Active conversation time, excluding hold. |
| hold_time |
Total time the contact spent on hold. |
Agent details
| Column |
Description |
Example |
| accepted_agent_id |
ID of the agent who answered. |
31 |
| accepted_agent_name |
Name of the agent who answered. |
John |
| agents_offered_ids |
Comma-separated IDs of all agents offered the call. |
88, 102 |
| agents_offered_names |
Comma-separated names of all agents offered the call. |
John, Rahul |
| agents_declined_ids |
Comma-separated IDs of agents who actively declined. |
88 |
| agents_declined_names |
Comma-separated names of agents who declined. |
John |
| agents_not_answered_ids |
Comma-separated IDs of agents who did not answer before the call moved on. |
102 |
| agents_not_answered_names |
Comma-separated names of agents who did not answer. |
Rahul |
| agents_transferred_ids |
Comma-separated IDs of agents the call was transferred to. |
88, 102 |
| agents_transferred_names |
Comma-separated names of agents the call was transferred to. |
John, Rahul |
| conference_participant_ids |
Comma-separated IDs of all agents who participated in a conference on this call. |
88, 102 |
| conference_participant_names |
Comma-separated names of conference participants. |
John, Rahul |
Recording
| Column |
Description |
Example |
| pause_counts |
Number of times the recording was paused. |
3 |
| pause_duration_seconds |
Total duration the recording was paused, in seconds. |
180 |
Call quality
| Column |
Description |
Possible values |
| call_quality |
Technical quality rating for the call. |
Good, Bad, No data |
| call_quality_issues |
Comma-separated list of quality problems detected. Empty when call_quality is Good or No data. |
High jitter, Packet loss, High latency, Silence |
Call Leg Report
One row per participant entry. Every agent offered the call and every supervisor action appears as a separate row. All rows belonging to the same call share the same call_id.
How legs work
A leg is created each time a participant joins a call or changes their mode on a call. The same call produces multiple legs when:
- More than one agent is offered the call before someone answers
- A call is transferred from one agent to another
- A supervisor enters the call in Listen, Whisper, or Barge mode
- A supervisor switches between modes - each mode change creates a new leg
For example, if a supervisor listens to a call and then switches to Barge, two legs are created - one for the Listen period and one for the Barge period. All legs share the same call_id.
Call linkage
| Column |
Description |
Example |
| call_id |
Identifier of the parent call. Join this to the Call Report on call_id to see the full call context alongside per-participant detail. |
CALL-10001 |
| leg_id |
Unique identifier for this leg. |
LEG-1001 |
Participant identity
| Column |
Description |
Example |
| participant_id |
ID of the agent or supervisor on this leg. |
AGT001 |
| participant_name |
Display name of the agent or supervisor. |
John |
| participant_type |
Whether the participant is an agent or a supervisor. |
Agent, Supervisor |
Leg classification
| Column |
Description |
Possible values |
| mode |
Why this participant joined the call and in what capacity. |
Accepted Offer - agent answered an inbound or callback offer. Transfer In - agent received a transfer from another agent. Supervisor Listen - supervisor joined silently; the agent and contact cannot hear them. Supervisor Whisper - supervisor joined in coaching mode; the agent hears the supervisor but the contact does not. Supervisor Barge - supervisor joined as a full active participant; all parties can hear each other. Consult Participant - participant was invited to join as a conference or consult party. |
Leg timestamps
All timestamps are in UTC in ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ).
| Column |
Description |
| start_time |
When this leg began. |
| end_time |
When this leg ended. |
Leg durations
| Column |
Description |
Example |
| duration |
Total duration of this leg in seconds, from start_time to end_time. |
34 |
| wrapup_time |
Time in seconds the agent spent in after-call work after the call ended. Populated only on Agent legs where exit_reason is Call Ended or Transferred Out. |
34 |
Leg outcome
| Column |
Description |
Possible values |
| exit_reason |
How this leg ended. |
Left Conference - participant voluntarily dropped off. Call Ended - the call terminated while the participant was still active. Transferred Out - agent handed the call off. Dropped - participant disconnected unexpectedly. |
Leg quality
| Column |
Description |
Possible values |
| quality |
Quality rating for this specific leg. More precise than call-level quality because it identifies which participant had the connection issue. |
Good, Bad, No data |
| quality_issues |
Comma-separated list of quality problems detected on this leg. Empty when quality is Good or No data. |
High jitter, Packet loss, High latency, Silence |
Notes
- The date range filter applies to call_started_at when the call first entered the system.
- Filters set on the report page (phone line, category, date range) are reflected in both exports.
- Each supervisor mode change creates a separate leg. If a supervisor listens, then barges, then whispers during a single call, three legs appear in the export - one for each mode.
- Comma-separated columns use a comma-space delimiter (,).
- Empty cells indicate the field does not apply to that call or leg type, not that data is missing.