Forecast¶
Forecast calculates how many agents you need at each time of day, based on historical call data from your Daktela contact centre. The output is a set of Needs that Smart Schedule then uses to generate the schedule.
This removes the manual step of estimating staffing requirements - the system uses real call history, applies an Erlang C model, and produces concrete numbers per slot.
How it works¶
Forecast runs in four stages:
- Load history - reads the aggregated call history for the selected queue over the lookback window (12 weeks by default).
- Build a typical week - groups the history by weekday, hour and minute, and reduces each slot to one number for call volume and one for AHT (Average Handle Time). How that reduction is done is your choice - see How the typical value is calculated.
- Project onto your dates - copies the typical week onto the dates you asked for and adjusts each day for public holidays in the queue's country.
- Erlang C - converts predicted call volume + AHT into the minimum number of agents needed to hit the Service Level target.
Nothing is written until you click Apply as Needs.
Forecast predicts inbound calls. Other channels (e-mail, chat, SMS) have a place in the model but no implementation yet - a queue mapped to a non-voice channel produces no staffing numbers and says why.
Prerequisites¶
Before running Forecast, make sure these are set up:
| Item | Where | Why |
|---|---|---|
| Call Center | Settings > Integrations > Call Centers | Source of historical call data |
| Queue | Settings > Integrations > Queues | Maps Daktela call queues into WFM and ties them to skills + workplaces |
| Skills | Settings > Configuration > Skills | Each skill the queue covers. The skill must carry the numeric Daktela queue id, otherwise the forecast has nothing to read. |
| Workplace | People > Workplaces | Where the resulting Needs are created. Its time zone also decides the clock the whole screen is drawn in. |
| Historical data | (collected automatically by the nightly import) | Forecast quality scales with how much history is available |
If a queue has no Daktela mapping or no history has been collected yet, Forecast returns zeros - wait for the import to run or check the queue mapping.
Generate a forecast¶
- In the left menu, click Forecast.
- Fill in the settings on the right. The forecast recalculates by itself as you change them - there is no Calculate button.
- Review the charts on the left.
- Click Apply as Needs when the numbers look right.
Input settings¶
| Field | Description |
|---|---|
| Queue | The queue whose history you want to forecast from |
| Workplace | Where the resulting Needs are created. Also sets the time zone the charts are drawn in. |
| Skills | One or more skills the forecast should cover - defaults to all skills mapped to the queue. Each skill gets its own line in the charts. |
| Period | Optional - if you pick a period, Date From / Date To are filled automatically |
| Date From / Date To | The date range you want to schedule |
| Working hours only | Limits the forecast to the hours the workplace is open. See Limiting the forecast to working hours. |
| Excluded days | Historical days to ignore - one-off anomalies. See Excluding anomalous days. |
| How the typical value is calculated | How each interval's several observations become one number. See below. |
| Granularity | Slot size in minutes - 15 (recommended), 30 or 60 |
| Service Level (%) | Target service level - the percentage of calls answered within the target ASA. Industry standard is 80. |
| Target ASA (s) | Average Speed of Answer - the time in seconds within which the target service level applies (typically 20) |
| Shrinkage (%) | Lost agent capacity (breaks, training, admin, sick leave). Typical contact centre: 30. |
Changing Service Level, Target ASA or Shrinkage only recalculates the agent counts, which is fast. Changing anything else rebuilds the prediction from history.
Reading the charts¶
Three charts share one time axis; hovering one shows the same moment on all of them.
| Chart | What it shows |
|---|---|
| Forecast vs. actual | The prediction against what really happened. Dashed = forecast, solid = actual. A gap means the interval has not been aggregated yet. |
| Inbound contacts | Predicted call volume per interval |
| Coverage required | Agents needed per interval, after Erlang C and shrinkage |
Above the charts you can switch between Month, Week and Day. Day view shows every interval; Week and Month show one point per day. Public holidays are marked in red on the axis, weekends have a shaded background, and both are listed in a legend under the switcher.
Apply as Needs¶
Two options sit next to the button:
| Option | Effect |
|---|---|
| Whole period | On: applies the whole date range. Off: applies only what is currently visible in the charts. |
| Merge equal blocks | On (default): consecutive intervals needing the same number of agents become one Need item. Off: one item per interval. |
Applying creates Need records per date, so seasonal differences between individual days survive into the schedule. Re-applying the same range replaces what the previous run created and leaves manual Needs alone.
Limiting the forecast to working hours¶
By default the charts cover the full day, including hours the workplace is closed. Since nobody can be scheduled then, those intervals only stretch the axis.
Switch on Working hours only (under the Workplace select) to drop them. This affects the whole screen, not just the drawing:
- the charts start and end at the workplace's opening hours,
- days the workplace is closed disappear from the day switcher and from the Week and Month views,
- daily totals are recalculated from what remains,
- and Apply as Needs creates Needs only inside those hours.
The opening hours come from the workplace (People > Workplaces > Working hours). The switch is unavailable until you pick a workplace, and stays unavailable for a workplace with no working hours defined - the screen says which of the two it is.
Public holidays keep their full day even with the switch on. That is deliberate: the forecast still shows the demand, and the warning that nobody will be scheduled that day needs a day to point at.
If a workplace has a gap in its opening hours (for example 08:00-12:00 and 13:00-17:00), the charts draw the two halves next to each other without a visible break.
Time zone of the charts¶
Times are shown in the workplace's time zone, not yours and not UTC. A caption under the Workplace select names the zone whenever it differs from your own, so a planner in Prague reading a London workplace does not misread 08:00 as their own morning.
This matters for the Needs too: an applied Need is stored in the workplace's wall clock, which is what the scheduler expects. If you compare the forecast against a report drawn in a different zone, expect the offset.
How the typical value is calculated¶
Each interval of the typical week has several historical observations - one per week in the lookback window. This setting decides how they become one number.
| Option | When to use it |
|---|---|
| Average | The default, and the right answer on most queues. Stable, works on quiet queues. One exceptional day will move it. |
| Median | Ignores extremes. On a quiet queue, where more than half the observations are zero, the median is zero and nobody gets scheduled - do not use it there. |
| Trimmed mean | Drops the highest and lowest observations, then averages the rest. |
| Recency-weighted | Recent weeks count for more than older ones. |
The screen explains each option as you select it.
On queues with sparse traffic, leave the average and remove exceptional days with Excluded days instead.
Verify the result¶
- Go to Settings > Configuration > Needs.
- Look for Needs with the description "Generated by Forecast".
- Open one to see its time blocks.
- The workplace and skill should match what you selected.
You can edit a generated Need afterwards - from that point it behaves like any other Need. A later Apply over the same range will replace it.
Quality levels¶
The banner above the charts reports how much history is behind the numbers:
| Available history | Shown as | What it means |
|---|---|---|
| Under 12 weeks | basic | The typical week is built from few observations, so single days weigh heavily |
| 12 weeks and more | standard | Enough history for the typical week to be stable |
| 52 weeks and more | seasonal | A full year is available |
The label describes how much data there is, not a different calculation - the maths is the same at every level.
Yearly seasonality is not modelled. The typical week captures weekly and daily patterns; a Christmas peak or a summer slump is not predicted from last year's. Public holidays are handled separately, see below.
A year-over-year trend is not applied either. It is measured internally but deliberately switched off product-wide until it is proven on real data, so the forecast does not silently scale your staffing by a factor nobody chose.
Excluding anomalous days¶
A few historical days can distort the whole forecast - a winter storm that kept half the operators home, an outage, a sickday wave after a teambuilding. These are one-off events, not trend or seasonality, so feeding them into the averages skews staffing for every future day that shares the same weekday and hour.
The Excluded days picker marks which historical days to drop:
- Click days in the calendar to toggle them. Selected days appear as chips underneath - click the x on a chip to remove one.
- You can go up to 2 years back; today and future dates are not selectable.
- The forecast recalculates by itself. Excluded days are dropped from the typical week and from the "weeks of data" count behind the quality level.
- Click Save excluded days to keep the set for this queue. Until you do, the days apply to your preview only.
The set belongs to the queue, so it applies to every later forecast for it. The underlying history is never modified.
Excluding many days can lower the quality level, because fewer clean weeks remain.
Days with no data¶
A day on which nothing was measured looks exactly like a day on which nobody called. The forecast reads both as "demand was zero", so a stretch of history that was never imported quietly drags every average down - and the plan comes out short without anything looking wrong.
Two different things can go missing, and Forecast handles them differently.
History that stops¶
If the import for a queue stops - a collector that was switched off, a migration whose export ended weeks ago - everything after the last real contact is empty. Forecast ignores it by itself: the history window closes on the last day that carried traffic, per skill, so a queue that is still importing is unaffected by one that is not.
You are told when this happens. The quality banner adds a sentence like:
History ends on 2026-08-24 (28 days ago), so only 8 of the 12 weeks it looks back over carry data. Check that the import for this queue is still running.
The forecast is correct for the history it has, but it is standing on less of it than you asked for. Restarting the import - or, for a queue not yet live on Daktela, loading a fresher export - is the actual fix. Raising Lookback weeks only softens the ratio.
Days missing in the middle¶
A single day that failed to import, in the middle of otherwise healthy history, is marked red in the Excluded days calendar. Hover it to see what that weekday normally carries:
No contacts measured. This weekday usually carries about 264.
Nothing is excluded for you. A red day is a question, because the system cannot tell a failed import from a line that was genuinely closed that day - only you can:
- It was a failure - click the day to exclude it, or use Exclude all flagged days. The remaining days of that weekday then stand in for it.
- The line really was closed - exclude the day and then remove its chip. Forecast records that you have looked at it, keeps it in the average, and stops suggesting it.
Either answer is stored with Save excluded days, along with the rest of the set.
Days that are legitimately empty are never flagged: closed weekends, public holidays, and weekdays that are quiet more often than not. A weekday is only ever questioned when its other occurrences carry traffic.
Holiday handling¶
Forecast uses the queue's Country field to look up public holidays (for example CzechRepublic, Slovakia, Germany). On a holiday, and on the day before and after, the system applies a correction learned from past holidays.
Two calendars are in play and they are allowed to differ: the queue's country answers "when does demand drop" (the callers' holidays), while the workplace's country answers "when are agents off". A queue serving Czech customers staffed from Slovakia is a legitimate setup. When the two differ, the screen says so - check that it is intended, because a holiday in only one of them means either demand nobody is scheduled for, or staff with nothing to do.
If the workplace does not work on public holidays, the charts mark those days and warn that nobody will be scheduled there even though demand is shown.
Tips¶
- Start with the defaults (SL 80%, ASA 20s, Shrinkage 30%, granularity 15 min, Average) - they match common contact centre practice.
- Wait for at least 12 weeks of history before relying on the output. Below that the typical week rests on very few observations.
- Run Forecast separately per workplace - each usually has its own staffing pattern.
- Use Working hours only once the workplace has its opening hours filled in. The charts get much easier to read.
- After Apply as Needs, check the result in Smart Schedule - if coverage gaps appear, the forecast was too conservative; if you over-staff, it was too aggressive. Adjust Shrinkage or Service Level and re-run.
- If a forecast suddenly looks too low or too high, check whether an anomalous day snuck into the lookback window and add it to Excluded days.
- Watch the Forecast vs. actual chart over time - it is the only thing that tells you whether the prediction is any good on your data.
Planning several Daktela queues as one skill¶
A contact centre can run twenty queues that one team answers as a single line. By default WFM plans each Daktela queue as its own skill, which forces that team into twenty forecasts and twenty sets of Needs. Merging lets you plan them as one.
It is off by default and changes nothing until you turn it on.
How to set it up¶
- Go to Settings > Integrations > Queues and edit the queue.
- Under Skills, make sure the skill you want to plan as is assigned to the queue.
- Under Daktela queues, select every queue whose traffic belongs to that skill.
- Switch on Merge Daktela queues into one skill.
- For each Daktela queue in the list, pick the skill under Plan as skill. Leave it on Its own skill for any queue that should keep being planned separately.
- Click Update.
Saving rebuilds the queue's history in the new grouping. The queue is locked while that runs - you do not have to start it by hand.
What it changes¶
- Forecast reads the sum of the merged queues, so the intraday shape is built from one dense series instead of several thin ones. Quiet queues that had too little traffic to forecast on their own stop being a problem.
- Needs are created for the one merged skill, so the schedule plans a single line.
- The call history itself is untouched. Each contact keeps its original Daktela queue, which is why switching the merge back off restores per-queue planning without losing anything.
All queues in one group must be the same channel. A group cannot mix calls with chat or e-mail: the two are measured differently, and staffing calculated from a mixture would be wrong. The form refuses it and says which queue is the odd one out.
Average waiting, hold and ringing times are recalculated across the merged traffic, so they are weighted by volume rather than being the average of the per-queue averages. They will move on the day you switch merging on. Contact volumes and handling times are unaffected.
A skill that stood for a queue you have just merged away receives no data any more - it stays in the plan as an empty skill. The form lists any such skill when you configure the merge; remove it from Skills if you no longer plan it.
Troubleshooting¶
| Issue | Likely cause | Fix |
|---|---|---|
| Charts stay empty | Queue, Skills, Date From or Date To not filled | Fill in all of them - the forecast only runs on a complete set |
| All slots show 0 agents | No history for the queue, or the skill has no Daktela queue id | Check the queue mapping and the skill's Daktela queue id; wait for the import to run |
| Quality = basic, 0 weeks | No history at all | Same fix |
| Banner says history ends weeks ago | The import for this queue has stopped | Restart the collection, or load a fresher export; see Days with no data |
| Needs look about a third too low | Part of the lookback window carries no data | Check the banner for where the history ends |
| Red days in the calendar | Days on which nothing was measured, although that weekday usually is | Exclude them if the import failed, or keep them if the line was closed |
| Working hours only cannot be switched on | No workplace selected, or the workplace has no working hours | The caption under the switch says which one; set the hours in People > Workplaces |
| Charts show times an hour or two off what you expect | The charts use the workplace's time zone | Check the zone named under the Workplace select, and the workplace's time zone setting |
| Holiday correction wrong or missing | Queue has no Country, or the wrong one | Edit the queue and pick the country |
| Too many agents at peak | Service Level too strict, Shrinkage too low | Try SL 75% or Shrinkage 35-40% |
| Too few agents | Shrinkage too high | Lower Shrinkage |
| Nobody scheduled on a quiet queue | Median on a queue where most observations are zero | Switch to Average |
| Apply fails | No skill assigned to the queue, or no workplace selected | Edit the queue to add a skill, or pick a workplace |
| A merged skill shows no data | The queue's history has not been rebuilt since the merge was changed | Open the queue and run Aggregate - the automatic rebuild is skipped while a queue is inactive or already busy |
Related¶
- Needs - manual definition of staffing requirements (Forecast generates these automatically)
- Smart Schedule - uses the Needs that Forecast produced
- Daktela CC Integration - sets up the Call Center that supplies the call history