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.
Performance Trends
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.csvcurl https://api.chanl.ai/v1/analytics/export \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"format": "json",
"timeRange": "30d",
"includeRawData": true
}' > analytics_export.jsoncurl https://api.chanl.ai/v1/analytics/export \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"format": "xlsx",
"timeRange": "30d",
"includeCharts": true
}' > analytics_export.xlsx