Rela AIRela AI Docs
Features

CSAT Surveys

Measure customer satisfaction at the end of every WhatsApp or email conversation — 1-5 / 1-10 scale, yes/no or open text, with per-version aggregates.

CSAT Surveys

CSAT (Customer Satisfaction) is the short survey the agent fires automatically when a conversation ends. One to three quick questions — "How satisfied are you?", "Did we solve your problem?" — consolidated into per-agent, per-channel aggregates so supervisors see real trends instead of gut feelings.

Executive summary

The game changer: measure satisfaction where the conversation happens — not in a separate form nobody opens.

BeforeWith CSAT
Supervisor guesses whether service is going wellResponse rate + average score per agent
Separate email survey → 2% responseSame chat question → 30-40% response
No traceability per conversationEvery answer tied to its conversation_id

What is it for?

  • Spot quality drops for a specific agent (a prompt change that hurt experience).
  • Compare channels: WhatsApp vs email across the same organisation.
  • Justify improvements: "score went from 3.8 to 4.4 after the new prompt".
  • Get operational NPS with zero extra tooling.

How it works

sequenceDiagram
  autonumber
  participant U as User
  participant A as WhatsApp/Email Agent
  participant T as Conversation timeout service
  participant C as CSAT service
  U->>A: last message in conversation
  Note over A,T: 30 min idle (configurable timeout)
  T->>C: any active question set for this agent+channel?
  C-->>T: yes, version 3, 2 questions
  T->>A: send intro_message
  A->>U: "Quick survey to help us?"
  U->>A: answer 1
  A->>C: parse → CSATAnswer
  A->>U: question 2
  U->>A: answer 2
  A->>C: complete CSATResponseItem
  A->>U: thank_you_message

Key details:

  1. Trigger: when the agent's session_timeout_minutes expires (default 30 min), if csat_enabled=true and an active question set exists, the survey fires.
  2. Versioning: editing questions creates a new version; the previous one is archived. Existing responses keep pointing at their original version — aggregates never mix versions.
  3. Multi-language parser: the parser accepts "1/5", "⭐⭐⭐⭐⭐", "five", "5 stars" for scale_1_5; "yes", "sí", "sure", "no", "nope" for yes_no; free text for open_text.
  4. Snapshot: every CSATResponseItem persists its question_set_version. If you edit the set later, previous responses stay uncontaminated.

Question types

TypeTypical useNormalised answer
scale_1_5Overall satisfaction (5 stars)int 1-5
scale_1_10Net Promoter Scoreint 0-10
yes_no"Did we solve your problem?"bool
open_textQualitative feedbackstr (max 500)

Setup

Enable CSAT on an agent

From the dashboard:

  1. AI Agents → WhatsApp (or Email) → pick the agent.
  2. In the Settings tab, flip the Enable CSAT switch.
  3. Save.

The agent is now linked to the active question set for its channel + agent. If no question set exists, the toggle is a no-op.

Create a question set

Open the agent's CSAT editor (Settings → CSAT):

  1. Intro message (optional): short line before the first question, e.g. "Can you help us with 2 quick questions?".
  2. Question 1 — type: scale_1_5, scale_1_10, yes_no, open_text.
  3. Prompt: text that guides the AI when phrasing the question. E.g. "Ask if they were satisfied with the service". The system paraphrases it in the user's language at runtime.
  4. Repeat for 2-10 questions.
  5. Thank-you message (optional): e.g. "Thanks! Your feedback helps us improve."
  6. Save → version 1 is created. Every later edit bumps the version.

Per-question fields

FieldDescription
keyStable identifier (max 50 chars). Used in aggregates — renaming the question does NOT break the historical series as long as key is kept.
prompt_to_aiText that guides Gemini when phrasing the question in the user's language.
interpretation_hintOptional hint for parsing answers, e.g. "accept 1-5, one-five, ⭐⭐⭐, 1/5".
typescale_1_5 / scale_1_10 / yes_no / open_text.
requiredIf true, the agent rephrases when the user skips. Default true.

Aggregates

The dedicated dashboard lives at Satisfaction (/satisfaction), with per-agent and per-channel views:

  • Response rate: total_completed / total_started * 100.
  • Average score per numeric question.
  • Distribution by value (histogram for scales, yes/no split).
  • Open text: paginated list of answers.

Aggregates are computed on-the-fly against the _csat_responses collection filtered by question_set_id + version. No batch job — the dashboard numbers are real-time.

Use cases

1 · WhatsApp supervisor spots a dropping agent. "north-support" agent held a 4.6 scale_1_5 average for 3 months. After a prompt change it fell to 3.9 in one week. Supervisor sees the drop, reverts the prompt, score bounces back to 4.5 in two days.

2 · Operational NPS with no external tool. B2B company with email agents uses a single scale_1_10 question "How likely are you to recommend us?". NPS = %promoters (9-10) − %detractors (0-6) straight from the aggregate. 200 responses/month, 35% response rate.

3 · Triageable qualitative feedback. Agent with 2 questions: scale_1_5 + open_text. Scores ≤2 get reviewed manually. The AI agent classifies open text by theme (tech issue, time complaint, positive feedback). Continuous improvement flow with zero bulk human effort.

Limits and assumptions

  • Survey fires on idle timeout, not when the user says "thanks, bye". If the conversation stays open 30 minutes without closure, it still fires.
  • Max 10 questions per set. Beyond that, response rate collapses.
  • The answer parser is forgiving but not infallible. Ambiguous replies are stored as raw text in CSATAnswer.text with value = null.
  • Aggregates do NOT mix versions. To see historical evolution after a question change, compare versions side-by-side — the system doesn't combine them.
  • CSAT runs per-channel only: no cross-channel survey (email + WhatsApp into one unified set).

Key benefits

  • Satisfaction measured where the conversation happens → 10-20× higher response rate than a separate email survey.
  • Automatic versioning: every question change is archived, aggregates stay comparable by version.
  • No external service: no SurveyMonkey or Typeform bill. Everything lives in the platform.
  • Tolerant parser for natural user styles (emojis, numbers, words).
  • Per-conversation traceability: every answer points to its conversation_id for audit.

On this page