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 } @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 After the conversation closes } } @switch (activePanel()) { @case ('queue') {

Queue

{{ waiting() }} waiting · longest {{ wait(longestWait()) }}

@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 }}

Load
Match
Team capacity
Groups, 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.

Edit the handover rules } @else { Select a surface. } } }