Calls

Call Insights

Insights turn raw transcripts into numbers you can act on: how the caller felt, which topics came up, whether the agent did its job, and what to fix next.


What gets computed

๐Ÿ™‚

Sentiment

Per-turn and overall polarity for the caller, plus the trajectory across the call.

๐Ÿ”Ž

Keyword spotting

Tracked terms โ€” competitors, pricing, cancellation โ€” flagged with timestamps.

๐ŸŽฏ

Call score

A 0โ€“100 rubric score covering objective completion, compliance, and conversation quality.

๐Ÿงพ

Structured summary

Outcome, next step, and extracted fields pushed to your CRM.

Sentiment

Each caller turn is scored from -1 to +1 and rolled into an overall label of positive, neutral, or negative. The trajectory matters more than the average: a call that starts negative and ends positive is a recovery, and those are the calls worth studying.

FieldTypeDescription
sentiment.overallstringpositive | neutral | negative
sentiment.scorenumber-1.0 to 1.0, averaged across caller turns.
sentiment.trajectorystringimproving | flat | declining
sentiment.turns[]arrayPer-turn scores with timestamps.

Keyword spotting

Define tracked terms per workspace under Data โ†’ Dashboard โ†’ Insights. Matching is case-insensitive and includes configurable synonyms, so "cancel", "cancellation", and "close my account" can share one bucket.

json
{
  "keyword_groups": [
    { "label": "pricing", "terms": ["price", "cost", "how much", "quote"] },
    { "label": "churn_risk", "terms": ["cancel", "close my account", "refund"] },
    { "label": "competitor", "terms": ["other provider", "switching from"] }
  ]
}

Call scoring

Scores come from a rubric you control. Each criterion is judged against the transcript and weighted into the final number, so the score reflects your definition of a good call rather than a generic one.

CriterionDefault weightPasses when
Objective completed40%The agent achieved the stated goal (booked, qualified, resolved).
Accuracy25%No claims contradicting the knowledge base.
Compliance20%Required disclosures spoken; restricted topics avoided.
Conversation quality15%Few interruptions, natural pacing, clear next step.

Reading insights on a call

json
{
  "call_id": "cl_889",
  "sentiment": { "overall": "positive", "score": 0.42, "trajectory": "improving" },
  "keywords": [{ "label": "pricing", "count": 3, "first_at": 48.2 }],
  "score": { "total": 86, "objective_completed": true, "compliance": true },
  "summary": "Caller booked a cleaning for Tuesday 10am. Asked about pricing twice.",
  "next_step": "Confirmation SMS sent"
}

Turning insights into changes

  • Low objective completion โ€” The prompt is not driving to a close. Add an explicit goal and a fallback ask.
  • Declining sentiment mid-call โ€” Find the turn where it flips โ€” usually a tool timeout or a repeated question.
  • Spiking churn_risk keywords โ€” Route those calls to a Team with a retention agent via Handoff Rules.
  • Compliance misses โ€” Move the disclosure out of the prompt body and into a required first-turn line.
Insights are computed within about a minute of the call ending and are delivered on the insights.ready webhook if you need them downstream.