Workforce Management¶
Workforce Management (WFM) answers three questions about your contact center:
- What should each agent be doing right now? — you answer this, with an Agent Schedule.
- Did they do it? — the Schedule Adherence report answers this.
- How many agents will I need next week? — Capacity Planning answers this.
The three screens live under Contact Center → Workforce Management in the admin portal.
Who this page is for
The Set it up sections are for administrators. The Read the reports sections are for supervisors and team leads who use WFM day to day. If someone else has already configured schedules for you, skip to Schedule Adherence.
How the pieces fit together¶
flowchart LR
A[Agent States<br/>Configuration] --> B[Agent Schedule<br/>what should happen]
C[Live agent activity<br/>what did happen] --> D[Schedule Adherence<br/>compare the two]
B --> D
E[Historical queue volume] --> F[Capacity Planning<br/>how many agents]
G[Queue SLA target] --> F
Two ideas carry the whole module:
- Agent Schedule is the planned timeline — where each agent is supposed to be, minute by minute.
- The actual timeline already exists. QVOICE Platform has always reconstructed what each agent was really doing, and that is what the Agents Status Activity report shows. WFM does not re-measure it.
Adherence is simply those two timelines compared. Capacity Planning is separate — it never looks at schedules, only at how much work arrived.
Before you start¶
WFM builds on things you have already configured. Get these right first, or the reports will be misleading.
Agent States¶
Contact Center → Configuration → Agent States
A schedule says "this agent should be in this state at this time", and the states it can choose from are the ones configured here. WFM does not introduce a separate list of its own.
Each state has a Productive setting. Mark a state productive when time in it is the work the agent is scheduled to do; leave it off for breaks, training and meetings.
Name your states carefully
A state's name is free text and it is what the reports match on. Avoid naming a custom state Idle, OnCall, WrapUp, Hold, DND or LoggedOut — those are reserved for the states QVOICE Platform tracks automatically, and a custom state sharing one of those names will have its time counted against the wrong thing.
Queue service level¶
Contact Center → Configuration → Queues → (a queue) → SLA
Capacity Planning uses each queue's configured SLA target and threshold — "answer X% of calls within Y seconds". If a queue has none, the forecast falls back to the industry convention of 80% within 20 seconds.
Setting this per queue is worth the minute it takes: it means the forecast and the Queue reports you check it against are held to the same standard.
Permissions¶
Each of the three screens has its own permission, so you can give a supervisor the reports without giving them the ability to edit schedules.
Configuration → Roles → (a role) → Contact Center → Workforce Management
| Permission | Grants access to |
|---|---|
| Agent Schedule | Creating and editing schedules |
| Schedule Adherence | The adherence report |
| Capacity Planning | The forecast |
Existing roles do not get these automatically
Custom roles you created before WFM was installed will not have these permissions, by design — nobody silently gains access to new screens. Turn them on for the roles that need them. Built-in system roles with full Contact Center access receive them automatically.
Agent Schedule¶
What a schedule is¶
A schedule is a repeating weekly pattern, not a list of dated shifts. You describe a normal week once, and it applies to every week inside the schedule's date range.
Each schedule has:
| Field | Meaning |
|---|---|
| Name | How it appears in reports and exception lists |
| Timezone | The zone the shift times are written in |
| Effective From / To | The dates the pattern applies between. Leave To empty for an open-ended schedule |
| Agents | Everyone this pattern applies to |
| Weekly pattern | For each day, a list of segments |
A segment is one block of a day: a start time, an end time, and the state the agent is expected to be in.
A break is just a segment
There is no separate "break" object. A lunch break is a segment from 13:00 to 14:00 whose expected state is your Lunch agent state. This is why the state list matters — it is the only vocabulary the schedule has.
Set it up¶
Contact Center → Workforce Management → Agent Schedule
- Click Add.
- Give it a Name, and pick the Timezone the shift is written in.
- Set Effective From. Leave Effective To empty unless the pattern has a known end date.
- Choose the Agents it applies to.
- For each working day, click Add segment and set the times and the expected state.
- Save.
A typical office day looks like this:
| Day | From | To | Expected state |
|---|---|---|---|
| Monday | 09:00 | 13:00 | Available |
| Monday | 13:00 | 14:00 | Lunch |
| Monday | 14:00 | 18:00 | Available |
Rules to know¶
Segments of the same day cannot overlap. If two segments both cover 10:00, there is no single answer to "what should this agent be doing at 10:00", and adherence would have nothing to measure against. The form blocks it.
A shift crossing midnight is two segments. A 22:00-to-06:00 night shift is written as 22:00 → 24:00 on one day and 00:00 → 06:00 on the next. The end time 24:00 means midnight closing that day.
Times are local to the schedule's timezone. A shift written as 09:00 stays at 09:00 through daylight-saving changes. If you run sites in different countries, give each its own schedule with its own timezone rather than converting times by hand.
An agent can hold more than one schedule, and their plan is all of them combined. Two schedules that roster them identically are counted once, not twice.
Conflicting schedules are reported, not resolved
If two of an agent's schedules expect different states at the same moment, QVOICE Platform will not pick one — the adherence report flags it as a plan conflict so you can fix the schedules. Until you do, that agent's percentage is not trustworthy.
Deleting an agent state¶
You cannot delete an agent state that a schedule still uses. The portal will refuse and name the schedules that reference it. Edit those schedules first.
Schedule Adherence¶
Contact Center → Workforce Management → Schedule Adherence
What it tells you¶
Pick a date range and, optionally, a queue. The report gives you one row per agent with two different percentages. Both matter, and confusing them is the most common mistake.
| What it measures | Answers | |
|---|---|---|
| Adherence | The right state at the right time | "Were they where they were supposed to be, when they were supposed to be?" |
| Conformance | Enough hours, regardless of when | "Did they work their hours at all?" |
An agent who works a full eight-hour shift starting two hours late is 100% conformant and about 50% adherent. That is not a contradiction — it is exactly the distinction the two numbers exist to draw.
Conformance can exceed 100%
An agent who works ten hours against an eight-hour schedule shows 125%. Overtime is surfaced, not hidden.
What counts as adherent¶
- A segment scheduled as an available state is satisfied by any state where the agent is at their post and reachable: idle, on a call, wrapping up, or on hold. An agent typing up the call they just handled is doing the job they were scheduled for.
- A segment scheduled as a specific away state — Lunch, Training — is satisfied only by that state. Taking calls during your scheduled lunch is a deviation from the plan, even though it is productive work. That is what makes adherence different from conformance.
- Logged out and DND never count as adherent, because the queue cannot reach the agent.
Exceptions¶
Click any agent row to expand their exceptions — the individual deviations, each with its own timestamps. The percentage tells you how much was missed; the exceptions tell you when and why, which is what you actually act on.
| Exception | Means |
|---|---|
| Late start | Was not in the expected state when the segment began |
| Early end | Left the expected state before the segment ended |
| Absent | Never appeared for the segment at all |
| Over-long break | Deviated during a scheduled away segment |
| Unscheduled away | Went away during a scheduled available segment |
| Worked outside schedule | Was at their post when nothing was scheduled |
Deviations shorter than the grace threshold are not reported. The default is five minutes, so a login at 09:00:12 does not generate a row — the point is that a report full of trivia stops being read.
Reading the report honestly¶
\"Not scheduled\" is not 0%
An agent with no schedule for the period shows Not scheduled, not 0%. A zero would read as "worked their shift badly"; the truth is that nobody rostered them. Those agents are not counted as failing.
Use Download for a CSV with one row per exception, which is the shape you want for a one-to-one conversation or for tracking a pattern over weeks.
Capacity Planning¶
Contact Center → Workforce Management → Capacity Planning
What it tells you¶
For a future date range, how many agents each interval needs in order to hit your service level target. It is the only WFM screen that does not look at schedules at all — it looks at how much work has historically arrived.
How the forecast is built¶
For each future interval — say Tuesday 09:30 — QVOICE Platform finds the same weekday and time of day in the past few weeks, averages the calls offered and the talk time, and works out the staffing that meets the queue's SLA target.
The model is Erlang C, the industry-standard queueing formula. This is deliberate: it is the model you can check against any online staffing calculator, which matters because a headcount nobody can verify is a headcount nobody will trust.
Set it up¶
- Choose the future date range you are planning for.
- Choose a queue, or leave it on All.
- Choose a shrinkage percentage.
- Click Apply.
Shrinkage is the share of paid time an agent is not available to take calls — breaks, training, meetings, coaching. The default is 0%, which will understate what you need. Most contact centers sit between 20% and 35%; use your own measured figure if you have one, and the Schedule Adherence report is where that figure comes from.
Reading every column¶
Every input is on screen next to the answer, so the number can be reconstructed by hand:
| Column | Meaning |
|---|---|
| Required agents | What to roster, after shrinkage |
| Before shrinkage | The raw Erlang C answer |
| Offered | Forecast calls arriving in this interval |
| AHT | Average handle time the forecast used |
| Erlangs | The workload: offered × AHT ÷ interval length |
| Projected SL | The service level that staffing actually achieves |
| Hist. abandon | How often callers hung up while waiting, historically |
| Samples | How many past weeks fed this interval |
What to watch for¶
\"Not enough data\" is not zero
An interval needs at least two historical observations before it is forecast. One Tuesday 09:30 is an anecdote — a public holiday or an outage would set your staffing for every Tuesday. Those intervals show Not enough data rather than a number. An interval that genuinely had no calls shows 0, which is a real answer.
A high historical abandon rate weakens the forecast
Erlang C assumes callers wait indefinitely and never hang up. When the Hist. abandon column is high — above roughly 10%, where it is highlighted — that assumption is visibly untrue for that interval, and the model is asking for more agents than reality requires. Treat those figures as an upper bound.
Do not add figures across queues
An agent who serves three queues is required by each of them, so summing per-queue forecasts counts them three times. When you select All, the forecast treats every queue as one shared pool instead — a lower and different number, valid only if your agents really do answer for all of them. The scope shown with the results tells you which of the two you are looking at.
Known limitations¶
These are real and worth knowing before you act on a forecast:
- Public holidays are not modelled. A holiday looks like an ordinary weekday and will pull that weekday's average down. Check the forecast around known holidays by hand.
- Handle time is measured talk time. After-call work is not measured per call anywhere in the platform, so unless you supply an allowance the forecast will understate what you need by roughly whatever wrap-up costs you.
- Outbound campaign traffic is included in the historical volume. If you run campaigns through the same queues, the forecast will overstate the headcount your inbound queues need.
Frequently asked¶
Do I have to schedule everyone before adherence works? No. Agents without a schedule appear as Not scheduled and are simply not measured. You can roster one team, learn from it, and expand.
Can an agent see their own schedule? Not yet. WFM is an administrative module in the admin portal; there is no agent-facing view in QVOICE Platform's user portal.
Does WFM build the roster for me? No. Capacity Planning tells you how many agents you need; deciding who works when is still yours. Automatic rostering is not part of this module.
Why does adherence disagree with my own count of someone's hours? Almost always because you are comparing it to conformance. Adherence penalises being in the right state at the wrong time; conformance does not. Check both columns before concluding a number is wrong.
Can I export any of this? Yes — both reports have a Download button producing a CSV. The adherence CSV has one row per exception; the capacity CSV carries every forecast input alongside each interval.