Open the inbox
@switch (activePanel()) {
@case ('queue') {
@for (channel of channels; track channel) {
}
@if (queue().length > 0) {
@for (item of queue(); track item.id) {
{{ item.customer }}{{ item.channel }}{{ item.intent }}{{ wait(item.waitingSeconds) }}
}
} @else {
Nothing waiting on this channel.
}
}
@case ('workload') {
@if (understaffed()) {
{{ waiting() }} conversations are waiting and only {{ spare() }} free
slot(s) exist across everyone online. No balancing strategy fixes that —
it is a staffing gap, not a settings one.
}
Assignment strategy
@for (option of strategies; track option) {
}
{{ strategyNotes[strategy()] }}
Agents
@for (agent of agents; track agent.id) {
}
}
@case ('handover') {
@if (unheld().length > 0) {
{{ unheld().length }} surface(s) have no hold configured. On those, a
handover looks to the customer exactly like a chat that died — they see
nothing, assume nobody is coming, and leave.
}
Session hold during a handover
@if (selectedQueueItem(); as item) {
Selected
@if (item.agent) {
}
@if (item.fromBot) {
The bot transcript and every captured value come with the handover,
so the customer does not start again.
}
} @else {
Select a conversation.
}
}
@case ('workload') {
@if (selectedAgent(); as agent) {
{{ agent.name }}
{{ agent.presence }}
LoadMatchTeam capacityGroups, shifts and routing rules
} @else {
Select an agent.
}
}
@case ('handover') {
@if (selectedHold(); as policy) {
{{ policy.surface }}
{{ policy.enabled ? policy.holdSeconds + ' second hold' : 'No hold configured' }}
While the handover runs
{{ policy.customerSees }}
If nobody accepts{{ policy.onTimeout }}Why the hold matters
A handover with no hold is invisible to the customer. They see
silence, decide the chat is dead, and close it — and the transcript
shows a conversation that simply stopped.