Appearance
Module 19 · Your agent team
Leer en español: Módulo 19 · Tu equipo de agentes.
Goal: add the seats on your floor, plan their shifts and read, with the figures the platform gives you, how much they work, how much room you have and whether your staffing covers what is expected. Time: ~8 minutes · You need: to have signed in to the dashboard with your own user (Module 1) and, for the last section, an inbound queue (Module 10).
It all lives in the Agents & Seats menu, on four screens: Seat Roster, Planned shifts, Seat Occupancy and Capacity. Staffing coverage is not a separate screen: it is a card inside Planned shifts.
A seat is one person on the floor. It is not a dashboard user: the user is whoever signs in to the console with their email and password (Module 11); the seat is whoever takes calls. The two are linked by email: it is the same in both. The live floor monitor is Module 8.
1. Add a seat
Open Seat Roster. At the top is Add a seat, with these fields:
| Field | What to enter |
|---|---|
| Full name | Required. It is what supervisors see on the floor. |
| Required. | |
| Floor role | agent, supervisor or admin; agent by default. It is not the user's console role (Account admin or Member, Module 11): an Admin seat runs the floor, not the console. |
| Extension (optional) | The SIP extension calls bridge to: digits only, 2 to 10 (for example 1009). Leave it blank to assign it later. |
Press Create seat. When the platform answers, the dashboard shows Seat created: with the name the platform returned (not the one you typed), and the seat appears in the table below. If a field fails validation, nothing is sent and the field is flagged.
Four things worth knowing:
- Creating a seat gives nobody access. For that person to take calls from the console, invite a user with the same email in Security → Console users (Module 11); the dashboard reminds you of this itself. For the embeddable widget, access is under Security → Agent widget access.
- The link is the email, nothing else. The platform finds the session's active seat by email, ignoring upper/lower case, inside your account. No button links them by hand (the checklist's Link seat and user only takes you to the screen where the data is missing): if the seat's email and the user's email differ by one letter they are not linked, and the person signing in cannot pick a seat by hand. In the Getting started checklist, step 4. Seat with a user tells you which side is missing.
- A seat without an extension shows as “— not assigned” and cannot take a call until one is assigned.
- Your plan sets the ceiling. Each plan allows a maximum number of active seats (the table is in Module 7). Above the table the dashboard tells you how many you have: “N of M active seats on the … plan” (or “N active seats; the … plan has no cap”), and at the ceiling it adds “Upgrade in Billing”. If you create one too many anyway, the platform refuses it with the code
seat_limit_reached, nothing is created, and the dashboard says why: “Your … plan allows M active seats and you already have N. To add another, upgrade your plan in Billing.” It is not billed as an extra seat. To free one without upgrading, deactivate a seat you no longer use (next section). If your plan moves to a smaller tier you keep the seats you already had; it is the next one that is refused.
Reading the table
The Seats table (with its count: “N seats”) has the columns Name, Email, Role, Extension, Presence, Status, Widget login, Console access (whether that person has an active user, a pending invitation or none; with Invite this email when missing), Routing skills, Created and Actions.
- Presence is live, from the floor. Status (active / inactive) is something else: whether the seat is on the roster and allowed to work. A seat can be active and offline (nobody signed in), and an inactive one reads as inactive whatever the other column says. Only active seats count toward the ceiling and your invoice.
- Manage skills opens that seat's routing skills (for example
spanish, late_collections), the ones the queues in Module 10 use. With none assigned, the cell says so. - If there are none yet, the table prompts you: No seats yet — add the first one above.
Correct and deactivate a seat
The last column of the table, Actions, has three buttons depending on the seat's status:
- Edit opens the name, the email, the floor role and the extension; only what you change is sent. Changing the extension evicts the SIP phone registered with the old one. The email of a seat linked to a console user cannot be changed here (the platform refuses it with
seat_linked_to_user); fix the other fields or create another seat. - Deactivate asks first and says what happens: the seat stops counting against the plan's seat ceiling and the invoice, its SIP phone is evicted, its widget login is revoked and it leaves the queue. The row is not deleted: it stays in the list as evidence, with status inactive. Nothing changes on their console user, which is a different object: if the person left, also disable their user in Security → Console users (Module 11). If the SIP phone could not be evicted the dashboard warns you: it may stay registered for up to 24 h; contact support.
- Reactivate (on an inactive seat) asks first and counts against the ceiling again: if it is full, it is refused and the seat stays deactivated.
The only active Admin seat cannot be deactivated or have its floor role changed (last_admin_seat): make another seat an admin first.
What this screen does not do
It creates seats and, from Actions, corrects and deactivates them. It does not delete them or import in bulk: the screen offers neither.
2. Plan the shifts
Open Planned shifts. A shift is the plan that adherence is measured against: “from this time to that time, this seat was supposed to be in this state”.
Under Plan a shift you fill in:
- Seat: pick from the list (Pick a seat).
- Planned state: Ready, Ringing, On Call, Wrap-up or Paused.
- Start (UTC) and End (UTC).
Press Add shift. If it works, the dashboard says Shift added and gives you the id the platform assigned; if the platform rejects it, you see its reason and nothing is added.
Two rules that surprise people:
- Times are UTC. What you type is sent as UTC and the list shows UTC, with no conversion to your browser's time zone. Convert before you type.
- Shifts are append-only. A shift cannot be edited or deleted. If you got one wrong, add the right one; there is no undo button.
Also, the platform returns at most a fixed number of shifts (the earliest by start), and the dashboard warns you when the list reaches that limit: one you just added may not be listed. If your role does not allow planning shifts, the dashboard says so and shows the platform's reason.
Until you plan one, the list says: No planned shifts yet — plan the first one in “Plan a shift” and it is listed here. That is your next step: plan one.
3. Read the occupancy
Open Seat Occupancy. It shows the time each seat spent in each state, per window: the shift, not the instant. Pick the window with Last 8 h, Last 24 h or Last 7 days, and press Refresh. You can filter by All seats or by one seat.
It sits behind a flag that is off by default
Occupancy is computed from a journal of seat states that the platform only writes when the agent_session_journal_enabled flag is on for your account. It ships off, and only the platform operator turns it on (it is an operator-level flag): there is no switch in your dashboard or your API key. Ask your platform contact, as for the plan changes in Module 7. While it is off nothing is written, so when you press Refresh you will see No seat has interval evidence in this window, which is correct: there is no data to show. (No occupancy loaded — pick a window and press “Refresh”. is only the state before the first load, flag or no flag.) Once it is on, the platform starts writing that journal.
For each seat the table has one column per state (with the time in h:mm:ss and how many intervals it is) plus Occupied (on call), Counted, Occupancy (v1), Excluded and Overlapping.
- Occupancy (v1) is computed by the platform, not by the page: (on call + wrap-up) ÷ (available + ringing + on call + wrap-up). Paused time is outside both sides.
- No figure is not zero. The cell says why: no figure: no staffed time or no figure: overlapping intervals.
- partial means open or synthetic intervals were left out (marked that way by the platform, not observed live): the percentage covers the counted time only. They are in the Excluded column.
- A seat with no evidence is absent, not zero. Widen the window or pick another seat.
How a transfer counts (from core v0.136.0)
In a transfer A → B → C, the seat of A (who transfers) is released the moment A transfers: from then on it is no longer on call and is free for the next call (or in wrap-up). Occupancy no longer adds the whole call to A, nor over-attributes it to B and C: each seat counts only its own time on the call.
Figures from before the cut do not change. The platform's journal only appends, so a transfer made before your platform ran core v0.136.0 keeps the old on-call time for A (the whole call). When you compare a window that spans the cut, expect A's occupancy to drop from then on; it is not a loss of data.
And adherence: it is the comparison between this real time and the shifts from section 2, measured from the same journal, so it also depends on the flag. Today the dashboard gives you both halves —the plan in Planned shifts and the real time here— but has no screen that shows the adherence percentage; do not work it out by eye from these figures and quote it as official.
4. Capacity and coverage
Live capacity
Open Capacity. It compares what is in use right now with the ceilings the platform administrator set for your account (you cannot raise your own ceiling). It re-reads itself every 15 seconds, and Refresh now forces a read. The table has Measure, In use and Ceiling:
| Measure | What it counts |
|---|---|
| Channels in use | Concurrent channels your account holds right now. |
| Dials per second | Dials started in the last second, at the moment of the reading: a sample, not an average. |
| Supervision sessions | Listen, whisper and barge sessions open now (Module 8); this lane has its own ceiling. |
In the Ceiling column you may read no ceiling set, not reported (the platform could not read the ceilings: that does not mean “no limit”) or at the ceiling, when usage has reached it. If the read fails, the dashboard clears the figures rather than show stale ones, and tries again.
Coverage against what is forecast
Inside Planned shifts, the Coverage by interval card answers: “do my shifts cover the calls we expect?”. Pick the Day (UTC). For each 30-minute interval (Interval (UTC)) you see:
| Column | Means |
|---|---|
| Forecast calls | The forecast for the interval. |
| AHT | The average length of each answered call (conversation plus wrap-up), per interval. |
| Required | Agents the service target asks for (Erlang C calculation). |
| Scheduled | Agents your planned shifts provide. |
| Coverage | Scheduled minus required: a negative number is a shortfall. |
Three notices the dashboard gives you and you should respect:
- “Default estimate”: if there is not enough history yet, the volume is a flat placeholder, not a prediction. With history, the card says how many reference days and calls it is based on.
- “No service target is configured…”: with no target, neither required agents nor coverage are shown, and the service target is set by your platform operator. You can still use Simulate target (Answer within (seconds), 1 to 86400, and Target (% of calls), 1 to 100) to see what coverage would come out. The simulation carries the Simulation: not saved mark, only changes that view, and Clear simulation removes it.
- A Paused shift does not cover, and the model does not discount holidays, breaks or absence: a shortfall is against the theoretical minimum, and in practice you will need margin.
What you learned
- How to add a seat, what happens with the extension and with your plan's seat ceiling, and that creating a seat is not granting access.
- How to plan shifts (in UTC, and not editable) and to read occupancy v1, including “no figure” and “partial”.
- That occupancy depends on the
agent_session_journal_enabledflag, off by default and turned on only by the operator, and that there is no adherence screen. - How to read live capacity and coverage against the forecast, and to tell an estimate from a forecast.
For developers: coverage can be read over the API in the WFM coverage guide.