Auto-CSAT/NPS dispatch
Auto-CSAT sends a satisfaction survey to the customer automatically when a conversation closes — no manual send step. You pick the template once, and every qualifying close dispatches it after a configurable delay. Auto-NPS runs the same loop on a separate track, so satisfaction (CSAT, 1–5) and loyalty (NPS, 0–10) accumulate in parallel. The answers roll up into scorecards you can break down by queue or by agent. This is distinct from the two other survey surfaces: surveys end to end covers manual, audience-targeted distribution over the API (send to a segment, chase non-responders); post-call surveys covers the IVR digit-capture played inside a voice call. Auto-CSAT/NPS is the third pattern — a close-triggered follow-up message, with no audience step and no IVR.1. Configure it in Settings
Open Settings → CSAT in the dashboard (owner or admin role). Everything on the page persists to one organization settings block; the shape is exact:
NPS has its own Settings → NPS page with the same knob set, so the two tracks carry independent templates, delays, and enable flags.
Conditions: scope which closes fire
The conditions list lets you restrict auto-dispatch to the closes worth surveying. Each entry is an AND matcher — every field you set must match — and the list is an OR: any single matching entry fires the survey. Fields left empty are wildcards.- Channels — only closes on these conversation channels (SMS, WhatsApp, email, web chat, and the rest of the channel list). To disable auto-CSAT for one channel, set conditions that cover every channel except that one.
- Agents — only conversations assigned to these users. Use it to pilot CSAT on a subgroup before rolling out, or to exclude a team. A conversation with no assignee (bot-only) never matches a non-empty agent list.
- Dispositions — only closes stamped with these disposition labels from your taxonomy.
- Exclude bot-only — skip conversations a human never touched; the bot’s own confidence score already captures that signal.
2. What happens on close
The moment a conversation transitions to closed — by an operator’s close action or by automated disposition — the platform reads your auto-CSAT settings. When enabled, a template is chosen, and the conditions pass, the close arms the survey: the due timestamp and the template are stamped on the conversation. A dispatcher sweep runs every minute, picks up conversations whose delay has elapsed, and sends the survey. Per dispatch, the sweep:- Confirms the template still exists (a template deleted between close and dispatch clears the pending survey instead of retrying forever).
- Applies the smart-trigger gates: negative-sentiment conversations and contacts inside the cooldown window are marked skipped, not sent.
- Picks the channel — the conversation’s last-used channel when the template allows it, else the first allowed channel the contact can be reached on (a phone-capable channel needs a contact phone number; email needs a contact email). Closes with no reachable channel are skipped and recorded as such.
- Holds SMS-class sends outside the 08:00–21:00 TCPA quiet-hours window until the recipient’s local morning; email is exempt.
- Sends the survey through the same message routing, billing, and opt-out enforcement as a manual send. The message carries the question, a signed link to a hosted survey page, and a quick-rate link — so the customer can reply with a bare number, tap through to the full survey, or rate 1–5 directly.
3. Read the scorecards
Answered surveys aggregate into per-queue and per-agent scorecards overGET /api/v1/surveys/scorecards:
Each row reports the response count, the top-2-box satisfaction percentage (score ≥ 4), the average score, the CSAT-only average, and the NPS (promoters minus detractors) over NPS rows. A row appears only once the bucket has at least one answered response, so sampled-off or unanswered sends never surface as zero-divide rows. Trend the same call over time — weekly snapshots with a moving
from/to window — to see whether a queue’s score is drifting or a coaching change is landing.