> ## 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.

# CSAT and NPS settings consoles: dispatch controls, detractor rescue, read paths

> Walk through the Settings → CSAT and Settings → NPS pages — the organization-level defaults that drive close-triggered survey dispatch, the per-conversation overrides that narrow the org default, and where every configured value surfaces in insights and over the REST API.

# Settings → CSAT / Settings → NPS consoles

Two settings consoles govern how conversation sentiment is collected and acted on in Orbit: **Settings → CSAT** (satisfaction, scored 1–5) and **Settings → NPS** (loyalty, scored 0–10). They expose the *org-level defaults* that decide who gets surveyed, when, and what happens to a bad rating — while the *per-conversation overrides* (an operator's close action, a queue's survey disposition) narrow or narrow-in nothing unless you explicitly scope them. This guide is the operator-facing map of both consoles: what each card sets, where the value persists, and where you read the result once it lands.

This page covers only the **tenant-owned defaults** for sentiment collection. Orbit does not add a platform-side gate over CSAT/NPS — your organization decides its own tenant quiet-hours, survey cadence, cooldown, and detractor policy; the platform never imposes a compliance guard over survey dispatch. (The one platform-global guard anywhere in the platform is the US federal voice-dialing window for outbound voice; it does not touch these pages.)

## 1. Two planes: the ops console vs the sentiment score

Understand the split before you change a single slider.

* **Ops plane** — the day-to-day contact-center surfaces: incidents, SLA adherence, breach signals, queue load. Those live under the operations console family, not under Settings → CSAT/NPS.
* **Sentiment plane** — the post-contact score your CSAT and NPS consoles configure: who gets a survey, how long after the close, whether the unhappy rating flips the conversation back open, and how long a contact is protected from repeat surveys.

The settings pages below occupy the *sentiment* plane only. Changing an SLA timer in the ops plane never touches your CSAT template, and changing the CSAT delay never changes your queue SLA — but the two planes *read* each other's output: an insights sentiment rollup folds the scores your console dispatched into the same per-queue view an SLA timer is measured against, so a queue can at once carry good on-time adherence and a falling satisfaction score.

## 2. What each console configures

Open **Settings → CSAT** (owner or admin role). Every card persists into one organization settings block and is consumed by the close-triggered dispatch loop.

| Setting              | What it decides                                                                                      | Where it's consumed                                                                                          |
| -------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| **Enabled**          | Master toggle — off stops all auto-dispatch tenant-wide                                              | Close path reads it before arming a survey                                                                   |
| **Survey template**  | Which `csat`, `nps`, or `ces` template fires on close; unset means nothing fires                     | Dispatch sweep stamps the chosen template onto a closing conversation                                        |
| **Delay (minutes)**  | How long after the close the survey goes out (clamped to 1–1440)                                     | Dispatch sweep waits for the stamped due timestamp                                                           |
| **Smart trigger**    | On skips conversations the sentiment analysis marked negative                                        | Per dispatch, gates the send                                                                                 |
| **Cooldown (days)**  | Per-contact fatigue window (clamped to 7–90) enforced across every template                          | Per dispatch, skips a contact inside the window                                                              |
| **Conditions**       | Optional matcher list (channel, agent, disposition, exclude bot-only) that narrows which closes fire | Close path decides whether to arm the close                                                                  |
| **Detractor rescue** | Detractor-band sliders (CSAT 1–4, NPS 0–6 by default) plus an optional auto-reopen                   | Response intake classifies the submitted score and, when auto-reopen is on, flips the conversation back open |

**Settings → NPS** exposes the *same* knob set on its own page — an independent enable flag, template, delay, smart trigger, cooldown, conditions, and detractor-rescue band — so the two tracks carry separate cadences. What the NPS console does not duplicate: the intakes classify NPS against the NPS band you set here (0–6 default, slider allowed up to 9), never against the CSAT band.

For the dispatch mechanics *after* a close — the exact arming sequence, the sweep cadence, the channel-pick order, and the quiet-hours hold — see [Auto-CSAT/NPS dispatch](/guides/auto-csat-nps). This page's contribution is the *settings surface itself*.

## 3. Per-conversation / per-queue overrides vs the org-level default

The pages above set **org-level defaults**. A single conversation can deviate from the org default at close time; a single *queue* can not override the org CSAT/NPS config in its own settings page — there is no per-queue CSAT override surface in this console family. What *is* per-conversation:

* The **conditions list** is the scoping mechanism — scope auto-dispatch to a channel, an assignee set, or a disposition taxonomy, and any conversation outside that scope silently skips. This is how you pilot CSAT on one queue or exclude a channel without touching the org-wide toggle.
* An operator's manual **close action** can always reopen a conversation by hand regardless of the detractor-rescue setting; rescue is the *automatic* version of that action.
* A conversation that reopens and closes again re-arms the survey under the current org default, not under a frozen copy of the setting at first close.

The result: you tune the *org* default on these pages, and you narrow its reach with conditions — never by editing a queue's own page. The scorecards below then group by queue or by agent so the org default is still sliced per queue when you read it, even though it was never configured per queue.

## 4. Read paths — where the configured values surface

Your CSAT/NPS configuration is not just a stored JSONB block — every dispatch and every answer it produces surfaces in three places:

* **Insights → Sentiment** — the org's sentiment rollup; the score history your dispatch delay, template, and conditions actually produce.
* **Insights → Account scores** — the per-account rollup of CSAT and NPS over the interactions your console dispatched; this is where the accumulated score of a queue or a contact lands.
* **Insights → Sentiment → Anomalies** — the anomaly surface over that same score stream; a falling-NPS queue or a sudden detractor spike shows here.

The answers also aggregate into the per-queue / per-agent **scorecards** over `GET /api/v1/surveys/scorecards` — rows bucketed by `group_by=queue` or `group_by=agent`, each reporting the response count, top-2-box satisfaction percentage, average score, CSAT-only average, and the NPS over NPS rows.

The detractor-rescue threshold you set in the console is what the classification uses to decide whether a rating counts as a detractor: it directly drives the auto-reopen, and it is the same value the anomaly surface reads to call a queue's detractor share unusual.

## 5. API hooks

Both consoles persist through the same org-settings pair the other settings pages use, plus the scorecards read:

| API hook                         | Purpose                                                                           |
| -------------------------------- | --------------------------------------------------------------------------------- |
| `GET /api/v1/settings/general`   | Read the current org CSAT/NPS configuration (the console pre-populates from this) |
| `PUT /api/v1/settings/general`   | Persist a change to the org settings block                                        |
| `GET /api/v1/surveys`            | List the survey templates the template pickers offer                              |
| `GET /api/v1/surveys/scorecards` | Read the per-queue / per-agent rollups the dispatched surveys roll into           |

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/surveys/scorecards?group_by=queue&from=2026-08-01T00:00:00Z" \
  -H "X-API-Key: $ORBIT_API_KEY"
```

`group_by=queue|agent` picks the bucket, `survey_type=csat|nps|all` restricts the rollup to one metric, `queue_id` / `agent_user_id` narrow to one bucket, and `from` / `to` bound the window. A bucket appears only once it has at least one answered response — sampled-off or unanswered sends never surface as zero-divide rows.

## See also

* [Auto-CSAT/NPS dispatch](/guides/auto-csat-nps) — what happens on the close and the dispatch sweep
* [Surveys end to end](/guides/surveys-voc) — manual, audience-targeted survey distribution over the API
* [Post-call surveys](/guides/post-call-surveys) — IVR digit-capture played inside a voice call
* [Voice survey scorecards](/guides/voice-survey-scorecards) — the scorecards read in full
* [Sentiment portfolio reading](/guides/sentiment-portfolio-reading) — the sentiment plane's read surface
* [Insights anomaly pages](/guides/session-anomaly-alerts-reading) — anomaly alarms over the score stream
