Chanl

Analytics

Turn conversation data into business intelligence with live metrics, trends, and AI-powered recommendations

Turn Conversation Data into Business Intelligence

Your analytics dashboard shows you what's actually happening across every agent conversation — call volume, success rates, response times, sentiment trends, and where things break down. No more guessing whether that prompt change helped or hurt.

What You're Looking At

The dashboard pulls from four data sources and gives you a single view of agent health:

Simulations

Test results from automated scenarios

Live Calls

Real-time production conversations

Call Logs

Historical interaction records

Alerts

Triggered notifications and their frequency

Live Metrics

These are the numbers you'll check every morning. They tell you whether your agents are handling conversations well — or whether something needs your attention right now.

Call Volume and Success Rate

How many conversations are your agents handling, and how many end well?

curl https://api.chanl.ai/v1/analytics/volume \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "timeRange": "7d",
    "interval": "day"
  }'
import Chanl from "@chanl/sdk";

const chanl = new Chanl({ apiKey: "YOUR_API_KEY" });

const volume = await chanl.analytics.volume({
  timeRange: "7d",
  interval: "day",
});

console.log(`Total calls: ${volume.totalCalls}`);
console.log(`Success rate: ${volume.successRate}%`);
from chanl import Chanl

chanl = Chanl(api_key="YOUR_API_KEY")

volume = chanl.analytics.volume(
    time_range="7d",
    interval="day"
)

print(f"Total calls: {volume.total_calls}")
print(f"Success rate: {volume.success_rate}%")
{
  "totalCalls": 3421,
  "successRate": 94.2,
  "avgDuration": 4.3,
  "byDay": [
    {
      "date": "2024-01-15",
      "calls": 512,
      "successRate": 95.1,
      "avgScore": 88.2
    }
  ]
}

Agent Performance Scores

Track quality across all your agents at a glance. This is your "are things getting better or worse?" check.

curl https://api.chanl.ai/v1/analytics/performance \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "timeRange": "30d",
    "groupBy": "agent"
  }'
const performance = await chanl.analytics.performance({
  timeRange: "30d",
  groupBy: "agent",
});

for (const agent of performance.agents) {
  console.log(`${agent.name}: ${agent.avgScore} (${agent.trend})`);
}
performance = chanl.analytics.performance(
    time_range="30d",
    group_by="agent"
)

for agent in performance.agents:
    print(f"{agent.name}: {agent.avg_score} ({agent.trend})")
{
  "period": "30 days",
  "agents": [
    {
      "id": "agent-v1",
      "name": "Production Agent V1",
      "avgScore": 87.3,
      "totalCalls": 1243,
      "trend": "stable",
      "improvement": "+2.1%"
    },
    {
      "id": "agent-v2",
      "name": "Production Agent V2",
      "avgScore": 91.5,
      "totalCalls": 856,
      "trend": "improving",
      "improvement": "+5.3%"
    }
  ]
}

Response Time and Latency

Slow agents lose customers. Track how quickly your agents respond, and whether latency is creeping up.

Alert Frequency

Fewer alerts over time means your agents are getting better. More alerts means something changed — and you should find out what.

curl https://api.chanl.ai/v1/analytics/alerts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "timeRange": "30d"
  }'
const alertStats = await chanl.analytics.alerts({
  timeRange: "30d",
});

console.log(`Total alerts: ${alertStats.totalAlerts}`);
console.log(`Trend: ${alertStats.trend}`);
alert_stats = chanl.analytics.alerts(time_range="30d")

print(f"Total alerts: {alert_stats.total_alerts}")
print(f"Trend: {alert_stats.trend}")
{
  "totalAlerts": 47,
  "byType": {
    "quality_drop": 23,
    "compliance_issue": 12,
    "timeout": 8,
    "error": 4
  },
  "trend": "decreasing"
}

Conversation Intelligence

Raw metrics tell you what happened. Conversation intelligence tells you why.

Sentiment Analysis

Chanl analyzes the emotional tone of every conversation. You'll see whether customers are leaving happy, frustrated, or neutral — and which agents or topics drive each outcome.

Topic Classification

Conversations are automatically categorized by topic (returns, billing, technical support, etc.). This shows you where call volume is concentrated and which topics have the lowest success rates.

Drop-Off Analysis

Where in the conversation do things go wrong? Drop-off analysis pinpoints the moments customers disengage — so you can fix the exact turn where your agent loses them.

Score Over Time

Don't react to single data points. Watch the trend line instead.

curl https://api.chanl.ai/v1/analytics/trends \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "metric": "score",
    "agents": ["agent-v1"],
    "timeRange": "30d",
    "interval": "day"
  }'
const trends = await chanl.analytics.trends({
  metric: "score",
  agents: ["agent-v1"],
  timeRange: "30d",
  interval: "day",
});

console.log(`Trend: ${trends.trend}`);
console.log(`Change: ${trends.changePercent}%`);
trends = chanl.analytics.trends(
    metric="score",
    agents=["agent-v1"],
    time_range="30d",
    interval="day"
)

print(f"Trend: {trends.trend}")
print(f"Change: {trends.change_percent}%")
{
  "agent": "agent-v1",
  "dataPoints": [
    { "date": "2024-01-01", "score": 85.2 },
    { "date": "2024-01-02", "score": 86.1 },
    { "date": "2024-01-03", "score": 87.3 }
  ],
  "trend": "improving",
  "changePercent": 4.2
}

Persona-Specific Analysis

Your agent might handle polite customers perfectly but fall apart with frustrated ones. Persona analysis breaks down performance by customer type so you know exactly where to focus.

curl https://api.chanl.ai/v1/analytics/by-persona \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "agent": "agent-v1",
    "timeRange": "30d"
  }'
const byPersona = await chanl.analytics.byPersona({
  agent: "agent-v1",
  timeRange: "30d",
});

for (const p of byPersona.byPersona) {
  console.log(`${p.persona}: ${p.avgScore} (${p.status})`);
}
by_persona = chanl.analytics.by_persona(
    agent="agent-v1",
    time_range="30d"
)

for p in by_persona.by_persona:
    print(f"{p.persona}: {p.avg_score} ({p.status})")
{
  "agent": "agent-v1",
  "byPersona": [
    {
      "persona": "Analytical Customer",
      "avgScore": 92.1,
      "totalInteractions": 234,
      "status": "strength"
    },
    {
      "persona": "Frustrated Customer",
      "avgScore": 76.4,
      "totalInteractions": 189,
      "status": "needs_improvement"
    },
    {
      "persona": "Confused Customer",
      "avgScore": 88.3,
      "totalInteractions": 156,
      "status": "good"
    }
  ]
}

Agent Comparison

Wondering whether V2 is actually better than V1? Compare them side-by-side instead of guessing.

curl https://api.chanl.ai/v1/analytics/compare \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "agents": ["agent-v1", "agent-v2"],
    "timeRange": "30d",
    "metrics": ["score", "duration", "successRate"]
  }'
const comparison = await chanl.analytics.compare({
  agents: ["agent-v1", "agent-v2"],
  timeRange: "30d",
  metrics: ["score", "duration", "successRate"],
});

console.log(`Winner: ${comparison.winner}`);
console.log(`Advantages: ${comparison.advantages.join(", ")}`);
comparison = chanl.analytics.compare(
    agents=["agent-v1", "agent-v2"],
    time_range="30d",
    metrics=["score", "duration", "successRate"]
)

print(f"Winner: {comparison.winner}")
for adv in comparison.advantages:
    print(f"  - {adv}")
{
  "comparison": {
    "agent-v1": {
      "avgScore": 87.3,
      "avgDuration": 4.2,
      "successRate": 93.1
    },
    "agent-v2": {
      "avgScore": 91.5,
      "avgDuration": 3.8,
      "successRate": 95.7
    }
  },
  "winner": "agent-v2",
  "advantages": [
    "+4.2 points higher score",
    "10% faster resolution",
    "+2.6% higher success rate"
  ]
}

AI-Powered Recommendations

Chanl doesn't just show you numbers — it tells you what to do about them. Based on your conversation data, you'll get specific suggestions like:

  • "Agent V1 scores 15% lower on Friday afternoons. Tool integration latency spikes during high-traffic periods — consider adding a timeout fallback."
  • "Frustrated Customer persona scores are trending down. The agent's empathy response was removed in last week's prompt update."
  • "80% of escalations mention 'refund policy.' Adding proactive refund info to the greeting could reduce transfers by ~30%."

These show up in your dashboard and in scheduled reports.

Custom Reports and Exports

Scheduled Reports

Set up weekly or daily reports delivered to your team's inbox:

curl -X POST https://api.chanl.ai/v1/analytics/reports \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly Quality Report",
    "timeRange": "7d",
    "metrics": ["avgScore", "successRate", "totalCalls", "alertCount"],
    "groupBy": ["agent", "scenario"],
    "schedule": {
      "frequency": "weekly",
      "dayOfWeek": "monday",
      "time": "09:00",
      "recipients": ["team@company.com"]
    }
  }'
const report = await chanl.analytics.createReport({
  name: "Weekly Quality Report",
  timeRange: "7d",
  metrics: ["avgScore", "successRate", "totalCalls", "alertCount"],
  groupBy: ["agent", "scenario"],
});

await chanl.analytics.scheduleReport({
  reportId: report.id,
  frequency: "weekly",
  dayOfWeek: "monday",
  time: "09:00",
  recipients: ["team@company.com"],
});
report = chanl.analytics.create_report(
    name="Weekly Quality Report",
    time_range="7d",
    metrics=["avgScore", "successRate", "totalCalls", "alertCount"],
    group_by=["agent", "scenario"]
)

chanl.analytics.schedule_report(
    report_id=report.id,
    frequency="weekly",
    day_of_week="monday",
    time="09:00",
    recipients=["team@company.com"]
)

Export Data

Pull data into your own tools — CSV for spreadsheets, JSON for pipelines, or Excel for stakeholder decks.

curl https://api.chanl.ai/v1/analytics/export \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "format": "csv",
    "timeRange": "30d",
    "metrics": ["score", "duration", "persona", "scenario"]
  }' > analytics_export.csv
curl https://api.chanl.ai/v1/analytics/export \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "format": "json",
    "timeRange": "30d",
    "includeRawData": true
  }' > analytics_export.json
curl https://api.chanl.ai/v1/analytics/export \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "format": "xlsx",
    "timeRange": "30d",
    "includeCharts": true
  }' > analytics_export.xlsx

Troubleshooting

What's Next?

Live Calls

Listen in on active conversations in real time

Call Logs

Dig into historical interactions with full transcripts

Alerts

Get notified the way you work — Slack, email, SMS, or webhooks

Scorecards

Define what "good" looks like and grade every conversation

On this page