Skip to main content
Back to blog

Conversation Sentiment Analytics: The Trend Beats the Polarity

Why aggregated conversation sentiment tells you more than per-message polarity, what Devotel Orbit ships at /insights/sentiment — net sentiment trend, by-channel, by-agent, and resolution-correlated breakdowns — and how it fits alongside contact reasons and topic intelligence.

Orbit Editorial Team

Quick answer: A single message scored "negative" tells you almost nothing. What matters is the shape of sentiment across thousands of conversations — which channel is drifting, which agent carries the heaviest conversations, and whether resolved issues land better than the open backlog. Orbit ships that roll-up as Sentiment: GET /analytics/sentiment aggregates the per-message scores you already see on individual conversations into a net sentiment trend with by-channel, by-agent, and resolution-correlated breakdowns. This post explains why aggregation beats polarity, what ships, and how to read it next to Contact Reasons and Topic Intelligence.

If you've ever exported a CSV of "negative messages" and still had no idea where to act, the problem was the unit of analysis, not the signal.

Why aggregated sentiment beats per-message polarity

Per-message sentiment scoring is noisy by construction. A frustrated "ugh" in one message and a delighted "perfect, thanks" in the next can come from the same conversation, on the same issue. Aggregate too early and you average away the fire; aggregate too late and you're reading tarot from timestamps.

Aggregation over conversations — rolled up across hundreds or thousands of them in the window you pick — cancels the noise and surfaces the structure:

  • A trend line moves only when something real shifts (a buggy launch, a pricing change, a routing regression).
  • Per-channel and per-agent groupings tell you where the shift lives.
  • Correlation with resolution is the control: if positive sentiment clusters on conversations that actually got resolved, the metric is measuring outcomes, not vibes.

The per-message scores still matter — they power the sparkline you see on an individual conversation — but the decision-grade signal is the portfolio roll-up.

What ships: the /insights/sentiment surface

Orbit exposes the roll-up through GET /analytics/sentiment, rendered on the dashboard at /insights/sentiment. You pick a window (24h, 7d, 30d, or 90d) and get the same payload:

  • Net sentiment trend — a time series of (positive − negative) / total scored messages, clamped to a ±100 index so a +42 reads as genuinely good and a −7 as worth a look.
  • By channel — voice, WhatsApp, SMS, email, and the rest of your connected surfaces, ranked so the most-negative channel is flagged first.
  • By assigned agent — the conversations each agent owns, with volume and the positive/neutral/negative mix. The tile on the page frames this as a coaching signal, not a scorecard.
  • By resolution — resolved vs unresolved conversations, and the resolution lift: the gap between the two. If resolution lift is "—", there isn't enough labeled data yet; when it's numeric, it answers "do we get sentiment right when we close the loop?"

Under the hood the same route powers the KPI tiles (net sentiment, analyzed messages, positive share, resolution lift) and refreshes every 60 seconds against a cached aggregate, so the page isn't doing expensive per-message work in the browser.

Contact reasons tells you what people need; topic intelligence clusters what they talk about. Sentiment adds how it went — the missing side of the triangle when you're explaining a bad week.

Cross-links: contact reasons and topic intelligence

Sentiment alone can tell you "WhatsApp is negative this week." Contact Reasons then answers "people need order status and refunds," and Topic Intelligence clusters the actual phrasing. Reading the three together is usually enough to name the root cause before you open a single conversation. Each surface links back to the others from the header, so the loop is one click in either direction.

Worked example: voice versus WhatsApp on one agent

Imagine a support team running both a voice line and a WhatsApp lane under the same agent pool.

  1. Open Sentiment on the 30d window. The trend line is flat at +12, but the By channel table flags WhatsApp as "Most negative" at −18 while voice sits at +25.
  2. Check By assigned agent: one agent, "Priya," owns most WhatsApp conversations, and her mix skews heavily negative — but only on that channel.
  3. Cross-check By resolution: unresolved WhatsApp conversations are far worse than unresolved voice ones, so the problem isn't just tone — issues are getting stuck.
  4. Jump to Contact Reasons filtered to WhatsApp: "order status" dominates.
  5. Conclusion: WhatsApp routing is sending order-status questions to a voice-trained agent without the order-lookup tool. Sentiment identified the channel, resolution-correlation confirmed it wasn't noise, and contact reasons named the fix.

That's the value of aggregated sentiment: it compressed step 1–3 from an afternoon of CSV exports into three tiles.

How the trends map to deliverability and retention

Sentiment trends also serve as an early-warning layer for the rest of Insights. A sustained negative channel usually correlates with a dip in Deliverability (messages landing badly or throttled) before it shows up in bounce metrics, and it often leads the churn curve in Retention by a few weeks. Neither mapping is a hard metric — they're adjacent lenses on the same traffic — but when all three move together, you have an incident, not an anecdote.

Frequently asked questions

How is net sentiment computed?

Each scored message is classed positive, neutral, or negative. Net sentiment is (positive − negative) / total, expressed as an index between −100 and +100. The trend buckets it by hour or day depending on the window.

Does sentiment scoring need me to tag conversations by hand?

No. Scoring runs automatically over inbound messages and voice transcripts. The resolution breakdown only needs your existing resolved/unresolved status; everything else is derived from the traffic you already send.

Which channels feed the by-channel breakdown?

Every connected surface — voice, WhatsApp, SMS, email, and any other channel you've wired into Conversations. The window filter and the totals update together when you add or remove channels.

Is using agent-level sentiment a privacy concern?

The by-agent view shows aggregates only — counts and the positive/negative mix — not message contents. It is surfaced as a coaching signal. If your policy forbids agent-level analytics, keep the surface off for viewer roles; the underlying API scopes to your existing analytics-read permission.

Where do deliverability and retention come in?

They're separate Insights surfaces. A negative-slope sentiment trend on one channel is often the first visible symptom of a deliverability problem (or an early churn signal); the sentiment page is the cheap place to notice it.

Can I pull the same numbers over the API?

Yes — GET /analytics/sentiment with a window parameter (24h, 7d, 30d, 90d) returns the same trend, by-channel, by-agent, and by-resolution JSON the page displays.

The takeaway

Per-message polarity is a component, not a conclusion. Conversation sentiment analytics only becomes actionable when it aggregates into a trend, breaks down by channel and agent, and is checked against resolution. That roll-up ships in Orbit today at /insights/sentiment, powered by GET /analytics/sentiment, and it reads best alongside Contact Reasons and Topic Intelligence — with Deliverability and Retention as the corroborating lenses when a trend actually moves.

Conversation Sentiment Analytics: The Trend Beats the Polarity — Orbit by Devotel