Customer Experience Score
Note from the creator
Why I built it
“I built this as a way to score conversations with the intention of tracking change over time.”
What it does
How it works
- 1
Reads the interactions
Reads call and chat transcripts from a Rippit worksheet, splitting call and chat sources by channel.
- 2
Scores each interaction
Enriches every row with three 1–5 sub-scores and computes a weighted composite, marking rows N/A when evidence is insufficient.
- 3
Reports the scores
Presents sub-score distributions, means, composite CX Score, and N/A-rate flags back to the user in chat.
How It Looks
See the reply this Skill builds, before you download it.
Scored 312 interactions (calls + chats) for Pond Support across #pond-support and #fly-delivery, Mar 1–14. Grouped by team. CX Score is customer-facing and is kept fully separate from AI QA Score.
- Composite CX Score: 3.7 — numeric rows only
- Rows scored: 312 — calls + chats
- N/A rate: 11% — below 20% flag
| Sub-score | Mean | N/A rate |
|---|---|---|
| Resolution Quality (×0.40) | 3.8 | 9% |
| Service Quality (×0.35) | 4.0 | 7% |
| Sentiment (×0.25) | 3.2 | 12% |
| Team | Composite | Δ vs pop. | N/A |
|---|---|---|---|
| Bullrush Bank pod | 4.1 | +0.4 | 8% |
| Marsh & Reed pod | 3.7 | 0.0 | 10% |
| Tadpole Academy pod | 3.2 | -0.5 | 16% |
Illustrative preview, generated from the generic version of this Skill. The layout is real; the pond-side data is made up.
The Skill
Skill contents
# CX Score Generator
Score customer experience on contact-center calls and chats using a standardized, three-component rubric applied through Rippit worksheet enrichment.
## First run — make it yours
Before doing any work, interview the user to establish the bindings, one short question at a time:
1. **Data source** — "Which interactions do you want to score — calls, chats, or both — and where do they live in your Rippit workspace ({{data_source}})? This tells me which sources and channels to read."
2. **Scope filters** — "How should I scope the population — which teams, channels, and date range should the CX Scores cover ({{scope_filters}})?"
3. **Comparison grouping** — "Do you want results broken out or compared across any grouping such as teams, agents, channels, or time periods, or reported as a single population ({{comparison_grouping}})?"
4. **Sample size** — "Should I run a small validation sample first before scoring the full population, and if so how many rows ({{sample_size}})?"
After the interview, restate the filled-in bindings for confirmation, then run. On later runs, reuse the established bindings unless the user asks to change them.
## Critical principle: CX Score ≠ AI QA Score
These are fundamentally different measures and must never be conflated, blended, or averaged. CX Score evaluates the customer's experience (customer-facing); AI QA Score evaluates agent adherence to a QA rubric (agent-facing). A call can score high on CX and low on QA, or vice versa. Never combine them into one number.
## CX Score components
The CX Score is a composite of three sub-scores, each on a 1–5 scale.
### 1. Resolution Quality (1–5)
Whether the customer's issue was actually resolved by the end.
**Enrichment prompt:**
```
Rate the RESOLUTION QUALITY of this interaction on a 1-5 scale from the customer's perspective.
5 = Fully Resolved — issue completely addressed, clear confirmation or definitive action taken
4 = Mostly Resolved — primary issue addressed, minor loose ends remain
3 = Partially Resolved — some progress but key parts still open
2 = Minimally Resolved — attempt made but core issue unresolved
1 = Unresolved — no meaningful progress, hang-up, dead transfer, or complete mismatch
If the transcript is too short, garbled, or ambiguous to assess resolution, respond with "Not Enough Information" — do not guess.
Respond with ONLY the number (1-5) or "Not Enough Information".
```
### 2. Sentiment (1–5)
The customer's emotional state and tone trajectory.
**Enrichment prompt:**
```
Rate the CUSTOMER SENTIMENT of this interaction on a 1-5 scale. Focus on the customer's emotional tone and trajectory — not the agent's.
5 = Very Positive — gratitude, relief, or enthusiasm; ends clearly happier
4 = Positive — satisfied and cooperative throughout, no frustration
3 = Neutral / Mixed — matter-of-fact, or frustrated-then-recovered
2 = Negative — frustration or dissatisfaction not recovered by end
1 = Very Negative — angry, hostile, escalation, hang-up in frustration
If the transcript is too short, garbled, or ambiguous to assess sentiment, respond with "Not Enough Information" — do not guess.
Respond with ONLY the number (1-5) or "Not Enough Information".
```
### 3. Service Quality (1–5)
Professionalism, clarity, effort, and empathy — independent of resolution.
**Enrichment prompt:**
```
Rate the SERVICE QUALITY of this interaction on a 1-5 scale. Evaluate the agent's professionalism, clarity, effort, and empathy — independent of whether the issue was resolved.
5 = Exceptional — proactive, empathetic, thorough, anticipated needs
4 = Good — professional, responsive, clear, met expectations
3 = Adequate — acceptable but unremarkable, minor gaps in clarity or warmth
2 = Below Average — unclear, dismissive, slow, or missed obvious opportunities to help
1 = Poor — rude, disengaged, or created additional problems
If the transcript is too short, garbled, or ambiguous to assess service quality, respond with "Not Enough Information" — do not guess.
Respond with ONLY the number (1-5) or "Not Enough Information".
```
## N/A propagation rule
If ANY of the three sub-scores returns "Not Enough Information," the overall CX Score is N/A. Do not compute a partial composite.
## Composite CX Score calculation
When all three sub-scores are numeric (1–5):
```
CX Score = (Resolution Quality × 0.40) + (Service Quality × 0.35) + (Sentiment × 0.25)
```
Round to one decimal place (e.g., 3.7).
## How to apply this skill
### Step 1: Identify the target worksheet
Use the user's existing worksheet ID, or create one with `create_worksheet` using the {{scope_filters}} the user gave (team, date range, channel). Keep related worksheets in a single workbook via `workbookId`.
### Step 2: Run enrichments
Use `enrich_worksheet` to apply all three sub-score prompts as separate columns so each score is independently reviewable. Recommended names: `cx_resolution_quality`, `cx_sentiment`, `cx_service_quality`.
### Step 3: Poll for completion
After each `enrich_worksheet` call, poll `get_enrich_status` until the job completes. Read `answerAggregates` for the distribution directly.
### Step 4: Validate N/A rates
Before computing composites, check the "Not Enough Information" rate across all three columns. If N/A rate exceeds 20%, flag it — likely a data quality issue (very short calls, IVR-only interactions, transcript gaps).
### Step 5: Report results
Present: distribution of each sub-score (1–5 + N/A), mean of each sub-score (excluding N/A), composite CX Score mean (only for fully-numeric rows), N/A rate and flags. If {{comparison_grouping}} is set, show side-by-side with deltas.
## Rippit-specific considerations
- **10K row cap**: If the population exceeds 10,000 rows, slice by week using `aggregate_table` with `dateTrunc: 'week'`, then one worksheet per week within the same workbook.
- **Date boundaries**: Align date boundaries to the user's timezone offset.
- **Channel separation**: Use the `source` column to split call sources from chat sources per the {{data_source}} the user specified.
- **Workbook hygiene**: Always pass `workbookId` to `create_worksheet`.
- **Cost awareness**: Enrichment consumes credits. Checkpoint before enriching large populations. If {{sample_size}} is set, run that validation sample first.
## What this skill does NOT do
- It does not generate AI QA Scores — that is a separate rubric.
- It does not prescribe remediation; the CX Score is descriptive.
- It does not replace human QA review; edge-case scores should still be reviewed.
Rippit
Claude