> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Queue-level AI ops digest

> Roll cached per-call AI summaries up to each queue — sentiment mix, common topics and action items — so a supervisor reads the queue at a glance without re-reading calls.

# Queue-level AI ops digest

Per-call AI summaries answer "what happened on this call." The queue-level digest answers "what is this queue doing right now." Open **Voice → Call Queues → AI digest** in the Devotel Orbit console to see, per queue, the sentiment mix, the most common topics, the most common action items, and the latest per-call summaries — rolled up from the summaries post-call synthesis already cached for every handled call.

The same aggregate is available over the API at `GET /voice/queues/digest`, with a window of up to seven days.

## What the digest does not do

The digest never calls the LLM. It aggregates the per-call summaries that post-call synthesis already produced at call wrap-up and cached, so reading the digest — from the dashboard or the API, at any cadence — does not re-bill the model. If you want it fresh, the answer is to summarise more calls, not to poll the digest harder.

A call joins a queue's rollup when two things hold:

* it was routed through the queue, so the call log carries a queue tag, and
* post-call synthesis completed for it (or an on-demand call summary was generated).

Calls without a queue tag appear in per-call surfaces but are not attributed to any queue here. Untagged queues keep their identifier in place of a name.

## What the dashboard shows

Open **Voice → Call Queues** and switch to the **AI digest** tab. Each queue is one row over the selected window:

* **Sentiment meter** — the positive / neutral / negative split across summarised calls, as a segmented bar with the share of each bucket below it. This is the queue-health headline: is the billing queue running hot, is support trending negative this afternoon.
* **Top topics** — the most common conversation subjects across the queue's calls, ranked by frequency. "Billing" climbing to the top of the support queue is a staffing or product signal you get without reading a transcript.
* **Top action items** — the most common follow-ups the per-call summaries recorded, ranked the same way. If the same item repeats thirty times, it is a process gap, not thirty individual loose ends.
* **Latest summaries** — the three most recent per-call summaries for the queue, so you can jump from a queue trend to specific calls.

The window selector covers the last **24 hours, 3 days, or 7 days**. Use 24 hours for shift-level triage and 7 days for coaching and staffing decisions, where one bad batch of calls should not move the numbers.

Queues with no summarised calls in the window show as empty — "no data" and "neutral" are different states, and the digest does not merge them.

## Reading the digest

1. **Pick the window** first. All breakdowns below belong to that window.
2. **Scan the sentiment meter per queue.** A queue with a negative share that outruns its peers is where triage starts; a queue running uniformly negative is a product or routing problem, not an agent problem.
3. **Check top topics and action items.** A topic mix you did not expect ("returns" on the sales queue) reroutes you to the right fix before you open a single transcript.
4. **Open the latest summaries.** The three newest per-call summaries per queue are your bridge from trend down to evidence.

## API access

The console's digest tab reads this same endpoint:

```bash theme={null}
curl "https://orbit.devotel.io/api/v1/voice/queues/digest?hours=24" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

Response shape (trimmed, one queue shown):

```json theme={null}
{
  "data": {
    "window_hours": 24,
    "queues": [
      {
        "queue_id": "q_support",
        "queue_name": "Support",
        "calls_summarised": 142,
        "sentiment_positive": 96,
        "sentiment_neutral": 31,
        "sentiment_negative": 15,
        "top_topics": [
          { "value": "billing", "count": 38 },
          { "value": "shipping", "count": 24 }
        ],
        "top_action_items": [
          { "value": "send return label", "count": 11 }
        ],
        "sample": [
          {
            "call_id": "call_01HZ…",
            "summary": "Customer asked about the duplicate charge; refund issued.",
            "sentiment": "neutral",
            "generated_at": "2026-08-21T14:02:00.000Z"
          }
        ],
        "generated": true
      }
    ]
  },
  "meta": { "request_id": "req_…", "timestamp": "2026-08-21T14:05:00.000Z" }
}
```

* `hours`: window in hours, default 24, maximum 168 (7 days). Non-numeric or out-of-range values fall back to the default.
* `queues` is sorted by summarised-call volume descending.
* `top_topics` and `top_action_items` return at most the top 5 entries each, ties broken alphabetically.
* `sample` carries at most the 3 most recent per-call summaries.
* The endpoint is tenant-scoped, read-only, and answers over the cached summaries — safe to poll on the same cadence you poll other read endpoints.

## See also

* [Read the sentiment portfolio dashboard](/guides/sentiment-portfolio-reading) — the inbox-wide counterpart over chat and email messages
* [Voice queues](/guides/voice-queues) — queue setup, membership, and routing basics
* [Post-call surveys](/guides/post-call-surveys) — collect the caller's explicit rating alongside the AI summary
