Settings: CSAT console
The CSAT console in Orbit (/settings/csat) is the tenant-owned survey-configuration surface listed on the Settings hub as:
CSAT | /settings/csat | Customer satisfaction survey configuration and scoring
From it you control the auto-survey loop end to end: which survey template fires when a conversation closes, how long the dispatch waits, which conversations qualify, and where the 1–5 score groups your customers. Everything on this page is configurable by your organization — no platform-side compliance guard sits over survey dispatch.
The console is owner/admin only. Operators see the answers it produces, not the configuration itself.
1. What the CSAT console owns
One page manages four distinct surfaces:- Survey template and timing. Which CSAT / NPS / CES template fires on conversation close, and the dispatch delay (1 minute to 24 hours) between resolve and send.
- Trigger scope. A smart-sentiment gate, a per-contact fatigue cooldown, and an optional condition editor that narrows dispatch by channel, assigned agent, and closing disposition.
- Scoring policy. The CSAT (1–5) and NPS (0–10) detractor bands, and whether a detractor answer auto-reopens the conversation.
- Channel eligibility. The condition editor’s channel chips gate which channels auto-dispatch fires on; all dispatch still flows through the same opt-out-checked sender every manual survey uses.
GET/PUT /api/v1/settings/general), and every change is captured by your audit log.
2. Field-by-field walkthrough
Open Settings → CSAT. Each card below maps to one control on the page.Master toggle — Enable auto-survey
- What it does: when on, every conversation that transitions to
closedschedules a survey dispatch. - Default: on for new tenants.
- Toggle it off to pause auto-surveys tenant-wide without losing your template or timing configuration. Manual survey sends from the API still work.
Survey template
- What it does: picks which template fires. The picker enumerates every row in your survey library whose type is
csat,nps, orces. - Create templates under Insights → Surveys; the page links straight through when the list is empty.
- Edge case: if no template is selected, conversations close normally but no survey is sent — the close-arming hook reads an empty template id as “not armed.” Select a template before turning the toggle on.
Dispatch delay after resolve
- What it does: the minutes to wait between
closedand the send. The slider is single-thumb (minutes) with a live read-out (5 min,1h 30m,24h). - Clamped to 1–1440 (1 minute → 24 hours) on both save and normalisation.
- Typical: 5–30 minutes for transactional support. Longer delays reduce reply rates but feel less intrusive.
Smart CSAT triggering
- What it does: when on, the dispatcher skips two classes of closes before sending — conversations the sentiment pipeline labelled negative, and contacts inside your cooldown window. Off fires on every eligible close regardless of sentiment.
- Default on. Skip a negative-sentiment close on purpose: surveying a customer who just had a bad experience tends to inflame rather than collect signal.
Per-contact cooldown
- What it does: minimum days between surveys for the same contact, across all templates and both the CSAT and NPS tracks.
- Clamped to 7–90 days. Default 14.
- The cooldown counts any
survey_responsesrow for the contact, so a contact who answered a survey yesterday cannot receive another today.
Conditional triggers
The condition editor narrows which closes fire. Leave it empty and every eligible close is surveyed. Add one or more condition cards; a conversation is surveyed when it matches any card, and within a card every selected filter must match:- Channels — chip toggles for the conversation channel (SMS, WhatsApp, email, voice, etc.). An empty selection means any channel.
- Assigned agents — restrict dispatch to closes resolved by specific team members. A conversation never assigned to a human (bot-only) never matches a non-empty agent list.
- Dispositions — restrict to closes stamped with specific inbox disposition labels. An empty list means any disposition.
- Exclude bot-only conversations — a per-card switch that skips conversations never picked up by a human agent.
Detractor rescue
Two thresholds classify an incoming rating, plus an optional auto-reopen playbook:- CSAT detractor threshold — on the 1–5 scale, ratings at or below this value are detractors. Default 2; clamped to 1–4.
- NPS detractor threshold — on the 0–10 scale, ratings at or below this value are detractors. Default 6 (Bain canonical: 0–6 detractor, 7–8 passive, 9–10 promoter); clamped to 0–9.
- Reopen conversation on a detractor rating — when on, a detractor answer flips the conversation back to
openand tags itcsat_detractorso an agent can rescue the relationship. When off, the detractor webhook event still fires; the conversation just stays closed. Archived conversations are never reopened.
Save
The save bar enables once any field changes. All edits land in a single org-settings write, so a partial save can’t leave the console in a mixed state.3. How a survey is triggered from a closed conversation
The close path arms and the dispatcher fires — two steps, both driven by this page:- Close arms the dispatch. When a conversation transitions to
closed, the close handler reads your console configuration. If the master toggle is on, a template is selected, and — if the condition editor is in use — the conversation matches at least one card, the handler stamps a due timestamp (now + your delay) and the template id onto the conversation. - The dispatch sweep fires. A scheduled sweep scans for stamped conversations whose due time has passed, re-checks smart triggering and the per-contact cooldown at send time, and dispatches through the same sender a manual survey uses — so opt-out, quiet hours, and billing behave identically to a hand-sent survey.
4. Scoring model
- Scale. CSAT answers use integers 1–5 (NPS sibling: 0–10). Answers outside 1–5 are rejected at intake.
- Per-response bucket. Every response is bucketed at intake as
satisfied(4–5),neutral(3), ordissatisfied(1–2). The bucket travels on the response row and on the webhook payload. - Aggregate. The answer rolls into Insights → Surveys and Insights → Sentiment rollups, and into
GET /api/v1/surveys/scorecards— rows bucketed bygroup_by=queueorgroup_by=agentreporting response count, top-2-box satisfaction percent (the share of answers scoring 4–5), average score, and the NPS over NPS rows. A bucket appears only once it has at least one answered response, so unsampled sends never surface as zero-divide rows. - Detractor handling. When a rating lands at or below your CSAT detractor threshold, it is classified detractor at intake — driving the auto-reopen playbook and the anomaly surface’s detractor-share signal.
5. Webhooks and API
Webhooks
The survey-response webhook emits at most once per response, only after the response row is persisted:conversation.csat_detractor when the rating came in against a conversation — subscribe to that event to open a follow-up case in your CRM within seconds of the response.
API
6. Limits and edge cases
- Delay bounds. 1 minute to 24 hours (1–1440 minutes). Out-of-range values are clamped at save.
- Cooldown bounds. 7–90 days. Default 14.
- Destructive thresholds rejected. CSAT detractor threshold 0 (no detractors possible) and 5 (every rating a detractor) are rejected by the API; NPS threshold 10 is likewise rejected.
- Channel eligibility. A channel chip unselected in every condition card simply never fires on that channel — you scope out channels rather than blacklist them.
- Suppression and opt-out. Auto-dispatch flows through the same sender a manual survey uses, so an opted-out contact on a suppression list is skipped at send time — the same tenant-owned guard that gates campaign sends.
- Cooldown spans templates. The fatigue window counts
survey_responsesrows across CSAT and NPS, so the two tracks cannot jointly over-survey a contact. - No template selected. Closes arm nothing and no survey fires; picking a template later does not retro-dispatch to already-closed conversations.
7. Troubleshooting
No survey leaves even though the toggle is on. The most common cause is an empty template picker — the close arm hook skips silently when no template is selected. Open the card and select one. (Create a template under Insights → Surveys first if the list is empty.) No responses are collected. A send fired but no score landed. Verify you are not in the per-contact cooldown (a contact inside the 7–90-day window is skipped at send time), check the template’s channel — an email survey answered over SMS never links back to the response row — and confirm the contact has not opted out since the last send. Score drifts downward over time. Check whether smart triggering was recently turned off: firing on every close, including negative-sentiment closes, floods the score with unhappy customers and masks a real trend. Also check the conditional triggers editor — a saved card that narrowed scope (e.g. one channel removed) changes the sample mix immediately and the score re-bases. Detractor reopens fire on too many or too few answers. Re-set the CSAT detractor threshold — a threshold of 4 means ratings of 1–4 all reopen; the default 2 catches only 1–2. The slider clamps to 1–4 on CSAT and 0–9 on NPS; values outside those bounds never persist. The dashboard shows a blank page or a load error. The organization settings fetch failed — the API or database was unreachable. Use the in-page Retry button; the page never writes a partial save.Related guides
- CSAT and NPS settings consoles — the joint CSAT/NPS read-path guide
- Auto-CSAT/NPS dispatch — the close-path dispatch loop in detail
- Surveys end to end — manual, audience-targeted distribution over the API
- Post-call surveys — IVR digit capture inside a voice call
- Settings hub — the full console map