The Work Sessions report provides a line-by-line breakdown of what Agents are working on. It allows you to understand precisely how Agents are using their time, how many Customers they’ve helped, which Contacts, and more. The primary use of this information is for forecasting and scheduling purposes. The report can also help you understand other aspects of Agent behavior, Agent performance, multichannel Conversation patterns, and more.
How data in the report is measured #
The Work Sessions report is measured using the following:
Grouping
- Grouped by Work Session.
Time Anchor
- Data is anchored to ‘Contact Ended Date‘ in the UI and ‘Contact Ended At‘ in the API.
Two versions: API and UI report #
The Work Sessions report is available in two formats: API and UI. There are slight differences in available data for each format:
- UI report is filtered and created on the Reports page, whereas API is generated via API.
- Each format uses a different time anchor. The UI report uses ‘Contact Ended Date,’ and the API uses ‘Contact Ended At.‘
Metrics used for the Work Session report #
Review the definition of each metric and how it’s used to calculate data. These are fields you’ll see in the CSV download. The columns in the report fill dynamically and are populated when the event comes in.
Metric | Description | API Name | Comments |
Agent | Name of the Agent that worked on the Contact. | agent_id | • Data is available at the time of a Contact end event. • If two outgoing sessions are stacked, this field may be blank for outgoing sessions. ◦Note – Stacked is when there is more than one outbound session (Contact). For example, in an outbound email and outbound SMS, the handle time is associated only with one, higher ranking session in the list of Channels. In this case, the SMS session would rank higher, therefore, the Agent will be associated with the SMS session. The email row in the report will have the Agent column blank. |
Link | Link to the Conversation | n/a | |
Contact ID | An alphanumeric identifier for the Contact that an Agent works with a Customer on a given Channel. | contact_session_id | • Data is available at the time of a Contact start event. |
Customer ID | Unique Alphanumeric identifier for the Customer | customer_id | Data is available at the time of a Contact start event. |
Conversation ID | Unique Alphanumeric identifier of the Conversation that the Customer and Contact are a part of. | conversation_id | Data is available at the time of a Contact start event. |
Inbox | Inbox where Conversation is located. | inbox_id | |
Channel | Channel used for Contact. | channel | Data is available at the time of a Contact start event. |
Direction | Indicates if the Contact is Incoming or Outgoing. | direction | Data is available at the time of a Contact start event. |
Contact Started at | Date and time when a Contact started. | contact_session_created_at | |
Agent Routed at | Date and Time the Agent was routed or offered, an incoming Contact. | contact_session_routed_at | • Data is available at the time of a Contact end event. • This field is blank for any outgoing Contact session. •If the same Agent is offered the same Contact more than once, this timestamp will show the earliest of those times. |
Agent Accepted at | Date and time when the Agent accepted an incoming Contact. | agent_accepted_at | • Data is available at the time of a Contact end event. • This field is blank for any outgoing Contact session. • If the same Agent accepts the same Contact more than once, this timestamp will show the earliest of those times. |
Contact Fulfilled at | Date and time a Contact fulfilled SLA. | sla_fulfilled_at | • Data is available at the time of a Contact end event. • This field is blank for any outgoing Contact session. |
Contact Ended at | Date and time a Contact ended. | contact_session_ended_at | Data is available at the time of a Contact end event. |
Status | Indicates if a Contact is Answered, Unanswered, Abandoned, or Unknown. | status | Data is available at the time of a Contact end event. |
Seconds within (-) or over (+) SLA | A numeric value that identifies if a Contact was fulfilled within or outside of Service Levels (SL). This value can be negative or positive. A negative value tells you how many seconds under service level targets this Contact was fulfilled. A positive value tells you how many seconds outside of SL targets was this Contact fulfilled. | within_sla | Data is available at the time of a Contact end event. |
Handle Time in sec | The amount of time an Agent spends on the Customer Profile during an active Contact. If multiple Contacts are ongoing simultaneously, Handle Time will be attributed to the most synchronous Channel. As defined here, handle time does not include After Call Work (ACW), which is labeled Unknown Time. | work_session_handle_time | • Handle time is accumulated regardless of Agent availability if the Contact is accessed while Available. • This field may be blank for outgoing sessions if two outgoing sessions are stacked. ◦ Note – Stacked is when there is more than one outbound session (Contact). For example, in an outbound email and outbound SMS, the handle time is associated only with one, higher ranking session in the list of Channels. In this case, the SMS session would rank higher, therefore, the Agent will be associated with the SMS session. The email row in the report will have the Agent column blank. • See Handle Time examples here. |
After Contact Time in sec | Duration of time the Agent viewed a Customer profile while in an available status, with an ongoing Conversation and after an ongoing Contact during the specified window. | ||
Total Handle Time in sec | work_session_handle_time_sec | Available for a Contact after it ends. | |
Unknown Time in sec | The amount of time an Agent spends on the Customer Profile after the Contact has ended but before the Conversation is closed and while the Agent is unavailable. | work_session_unknown_time_sec | • Data is available at the time of a Contact end event. • This field may be blank for outgoing sessions if two outgoing sessions are stacked. ◦ Note – Stacked is when there is more than one outbound session (Contact). For example, in an outbound email and outbound SMS, the handle time is associated only with one, higher ranking session in the list of Channels. In this case, the SMS session would rank higher, therefore, the Agent will be associated with the SMS session. The email row in the report will have the Agent column blank. |
Accepted Inbox ID | Inbox where the Contact was assigned when the Agent first accepted the Contact. | accepted_inbox_id | • This field is not provided in the UI version of the report; it is only provided in the API version. |
Work Session ID | • Data is available at the time of a Contact end event. • This field may be blank for outgoing sessions if two outgoing sessions are stacked. ◦Note – Stacked is when there is more than one outbound session (Contact). For example, in an outbound email and outbound SMS, the handle time is associated only with one, higher ranking session in the list of Channels. In this case, the SMS session would rank higher, therefore, the Agent will be associated with the SMS session. The email row in the report will have the Agent column blank. |
How the Work Session report is filtered #
You can filter the report using the following criteria. This is how you start segmenting the data based on what you are trying to learn. You can learn more about filters here.
Date
- When filtering by date in the Gladly UI, the Work Session report will list all Contacts worked on and completed on the specified date. These Contacts could have started before the date, but they were all completed on the date specified in the filter.
Channels
- Indicates the Channel in which the Contact was initiated.
- The Channel column in the CSV will have an additional status: “Abandoned_Call.” In this case, the “Abandoned_Call” Channel does not refer to the abandoned call itself but to the follow-up event created when a known Customer abandons a call.
Inbox
- The Inbox column and report filter refer to the Inbox where the Contact was when it started.
Teams
- This allows you to filter the report on one or more Teams you defined in Gladly. Teams are a logical grouping of one or more Agents.
How to use the Work Session report #
Depending on what you are trying to learn, there are many ways to slice and dice the Work Session report’s data.
The first step is to download the CSV version of the report and then follow up with the filters below.
Scenario | Column Filter |
How to calculate the number of inbound calls | •Channel = Phone_Ca •Direction = Incoming •Count of unique Contacts IDs |
How to calculate the number of Outbound calls | •Channel = Phone_Ca •Direction = Outcoming •Count of unique Contacts IDs |
How to calculate the number of Calls answered | •Channel = Phone_Ca •Direction = Incoming •Status = Answered •Count of unique Contacts IDs |
How to calculate the number of Calls answered in 30 Sec | • Channel = Phone_Call • Direction = Incoming • Status = Answered • Count of unique Contacts IDs – where “Contact Fulfilled at” minus “Contact Started at” is less than 30 seconds. |
How to calculate the calculate phone average handle time for a team | • Team = The team you want to focus on • Channel = Phone_Call • Direction = Incoming • Sum all “Handle Time in sec” and divide by the count of unique “Contacts ID” |
How to calculate the calculate short abandons | • Channel = Phone_Call • Direction = Incoming • Status = Abandoned • Count of unique Contacts IDs, where the difference between “Contact Ended At” and “Contact Started At” is less than your short Abandon time threshold (i.e., 5 seconds |
How to calculate the calculate abandons | • Channel = Phone_Call • Direction = Incoming • Status = Abandoned • Count of unique Contacts IDs |
How to calculate the calculate total After Call Work | • Channel = Phone_Call • Direction = Incoming • Status = Answered • Sum all “Unknown Time” • Sum of “After Contact Time |
FAQs #
What happens if a Conversation moves to a different Inbox? How does this affect the report?
The Work Session report is not anchored to a Conversation. The report focuses on Agents’ work on the Contact and Inboxes those Contacts were originally assigned. So if a Contact is initially routed to Inbox A and gets reassigned to Inbox B, as long as you filter the report to include inbox A, that Contact will be in the report.
How do you report on data for an escalation Inbox if you include all Inboxes that may have been the source of the inquiry as well?
Work done by Agents will be captured regardless of what Inbox it’s in. The difference to note is that the report only shows data from the first Inbox of the Contact.
Does the Inbox indicate where the Contact initially routed to or where the Contact was completed?
The Inbox in the Work Sessions report tells you the Inbox the Contact was initially assigned to.
What type of call would show a status of “unknown”?
All outbound calls have a status of “unknown.”
How can something show as unanswered have a handle time?
An Agent might have accepted a Contact and done some work without ever answering the Customer. They could have also switched Channels to a higher-order Channel.
How can two or more Agents have handle time associated with the same Contact?
There are several ways this could happen. For example, if a call comes in and gets transferred between Agents, then all those Agents will have handle time associated with the call. Another example is if an email gets routed to agent A and they create a task for Agent B, As Agent B works the task and Agent A works the email, both will accrue handle time for the same Contact.
Is the handle time reported unique to each Agent, or do they share the sum of the total handle time for that Contact?
A “Work Session” is, by definition, the time one Agent spends on one Contact. For example, if Agent A and Agent B would both accrue their own handle times, but we do not specify that Agent B was working on a task, we show they had handle time equal to the time spent viewing the Customer Profile.
Does this re-write history? What does it re-write?
Work Sessions are event-based, so history is not re-written.
Why are there duplicate Work Session IDs?
Work Session IDs generated before 10/27/2022 5 PM PT may not be unique. These IDs were not always unique because Gladly uses the contact “ended” event id as the Work Session ID when Agents have utilization activity only (i.e., working with the Customer without creating any Contact events directly). We suggest using agent_id + contact_session_id as that will always be unique.
Work Session IDs generated on or after 10/27/2022 at 5 PM PT will be unique.
Why do some events have a “Null” value for one record but have a value for a second record?
When a Contact session has not ended, only certain fields are populated:
- contact_session_id
- contact_session_created_at
- customer_id
- conversation_id
- inbox_id
- channel
- direction
This means other fields remain empty until the Contact session ends.
Note that Work Session ID may also be NULL (or blank) until the Contact session ends.
Like agent_accepted_at, agent_routed_at, other fields may also be blank if an Agent never worked on the Contact session. OR if the Agent’ cherry-picked’ the interaction (e.g., a manager took it from the queue vs. being routed the Conversation.)
Increasing Time Needed to Resolve Customer Conversations
Think about the following If you notice that it’s taking longer than usual to help Customers:
- Check in which Channel (s) the increase is more prevalent. Are the Agents staffing that particular Channel/Inbox adequately trained to handle these requests?
- Did you recently introduce a new communication Channel? Do your Customers prefer to communicate over a particular Channel?
- Did First Contact Resolution (FCR) decrease? Potential issues typically require multiple interactions to resolve.
- Check your Topic report. Is there an abnormal increase in usage for a certain Topic?