Call Logs
Call logs give you access to every conversation your agents have had—whether from test simulations or real customer calls. Use them to analyze performance, identify training opportunities, and understand what’s working (and what’s not).
Why Call Logs Matter
Historical call data helps you:
Identify patterns - See recurring issues across many conversations
Validate improvements - Compare performance before and after changes
Train better agents - Use successful calls as training examples
Ensure compliance - Audit conversations for regulatory requirements
Example : Searching call logs reveals that 80% of escalations happen when customers mention “refund policy.” You update the agent’s prompt to address this proactively.
What’s in a Call Log?
Each call log contains:
Call Metadata
Source (VAPI, Bland, etc.)
Phone numbers (from/to)
Date and duration
Agent that handled it
Simulation vs real call
Content & Analysis
Full audio recording
Complete transcript
Quality score (if analyzed)
AI-powered insights
Tags and categories
Viewing Call Logs
Navigate to Call Logs to see:
Searchable list of all historical calls
Filter by date, agent, score, or source
Sort by most recent, lowest score, or longest duration
Click any call for detailed view
# List recent calls
curl https://api.chanl.ai/v1/call-logs \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"limit": 50,
"sortBy": "date",
"order": "desc"
}'
Response: {
"calls" : [
{
"id" : "call_abc123" ,
"source" : "vapi" ,
"from" : "+1234567890" ,
"to" : "+1987654321" ,
"agent" : "agent-v1" ,
"date" : "2024-01-15T14:30:00Z" ,
"duration" : 245 ,
"score" : 87 ,
"analyzed" : true ,
"isSimulation" : false
}
],
"total" : 1247 ,
"page" : 1
}
Analyzing Call Logs
Run Analysis on Historical Calls
Analyze calls that weren’t evaluated when they occurred:
curl -X POST https://api.chanl.ai/v1/call-logs/call_abc123/analyze \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scorecard": "customer-service-quality"
}'
This generates:
Quality score based on scorecard criteria
AI-powered analysis of strengths and weaknesses
Specific recommendations for improvement
Comparison to similar calls
Batch Analysis
Analyze multiple calls at once:
const chanl = require ( '@chanl/sdk' );
// Analyze all unscored calls from last week
const results = await chanl . callLogs . batchAnalyze ({
filters: {
dateRange: {
start: '2024-01-08' ,
end: '2024-01-15'
},
analyzed: false
},
scorecard: 'customer-service-quality'
});
console . log ( `Analyzed ${ results . count } calls` );
console . log ( `Average score: ${ results . avgScore } ` );
Search and Filtering
Advanced Search
Find specific types of calls:
By Score Range
By Date Range
By Agent
By Source
# Find failing calls
curl "https://api.chanl.ai/v1/call-logs?minScore=0&maxScore=70" \
-H "Authorization: Bearer YOUR_API_KEY"
# Find calls from specific period
curl "https://api.chanl.ai/v1/call-logs" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"dateRange": {
"start": "2024-01-01",
"end": "2024-01-31"
}
}'
# Find all calls for specific agent
curl "https://api.chanl.ai/v1/call-logs?agent=agent-v1" \
-H "Authorization: Bearer YOUR_API_KEY"
# Find only real customer calls
curl "https://api.chanl.ai/v1/call-logs?isSimulation=false" \
-H "Authorization: Bearer YOUR_API_KEY"
Transcript Search
Search within conversation transcripts:
curl -X POST https://api.chanl.ai/v1/call-logs/search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "refund policy",
"dateRange": "30d",
"minScore": 0,
"maxScore": 75
}'
Results show calls where “refund policy” was mentioned and scored below 75:
{
"results" : [
{
"callId" : "call_xyz789" ,
"date" : "2024-01-14T10:22:00Z" ,
"score" : 68 ,
"matches" : [
{
"speaker" : "customer" ,
"text" : "What's your refund policy?" ,
"timestamp" : 45
},
{
"speaker" : "agent" ,
"text" : "Our refund policy allows returns within 30 days" ,
"timestamp" : 48
}
]
}
],
"totalResults" : 23
}
Accessing Call Content
Audio Files
Download or stream call recordings:
# Get audio URL
curl https://api.chanl.ai/v1/call-logs/call_abc123/audio \
-H "Authorization: Bearer YOUR_API_KEY"
Returns a signed URL valid for 1 hour:
{
"url" : "https://chanl-audio.s3.amazonaws.com/..." ,
"expiresAt" : "2024-01-15T12:00:00Z" ,
"format" : "mp3" ,
"duration" : 245 ,
"size" : 3145728
}
Transcripts
Get full conversation text:
curl https://api.chanl.ai/v1/call-logs/call_abc123/transcript \
-H "Authorization: Bearer YOUR_API_KEY"
{
"callId" : "call_abc123" ,
"transcript" : [
{
"speaker" : "agent" ,
"timestamp" : 0 ,
"text" : "Thank you for calling. How can I help you today?"
},
{
"speaker" : "customer" ,
"timestamp" : 3.2 ,
"text" : "I received a damaged product and need a replacement."
},
{
"speaker" : "agent" ,
"timestamp" : 6.8 ,
"text" : "I'm sorry to hear that. Let me help you with a replacement right away."
}
],
"duration" : 245 ,
"wordCount" : 487
}
Call Analysis Reports
Individual Call Analysis
View detailed AI analysis:
curl https://api.chanl.ai/v1/call-logs/call_abc123/analysis \
-H "Authorization: Bearer YOUR_API_KEY"
{
"callId" : "call_abc123" ,
"overallScore" : 87 ,
"analysis" : {
"strengths" : [
"Showed immediate empathy for customer's issue" ,
"Offered solution within first minute" ,
"Confirmed customer satisfaction before ending"
],
"weaknesses" : [
"Didn't verify customer identity before processing" ,
"Missed opportunity to upsell protection plan"
],
"recommendations" : [
"Add identity verification step to prompt" ,
"Train on upselling during replacement scenarios"
]
},
"categoryScores" : {
"Communication" : 92 ,
"Problem Resolution" : 88 ,
"Compliance" : 79
}
}
Exporting Call Data
Bulk Export
Export multiple calls for external analysis:
CSV Export
JSON Export
With Audio
curl -X POST https://api.chanl.ai/v1/call-logs/export \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "csv",
"dateRange": "30d",
"fields": ["date", "agent", "score", "duration"],
"filters": {
"minScore": 0
}
}' > calls_export.csv
curl -X POST https://api.chanl.ai/v1/call-logs/export \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "json",
"dateRange": "30d",
"includeTranscripts": true,
"includeAnalysis": true
}' > calls_export.json
curl -X POST https://api.chanl.ai/v1/call-logs/export \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "zip",
"dateRange": "7d",
"includeAudio": true,
"includeTranscripts": true
}' > calls_with_audio.zip
Finding Training Data
High-Quality Call Examples
Find calls to use as training data:
const chanl = require ( '@chanl/sdk' );
// Find top-performing calls
const topCalls = await chanl . callLogs . list ({
minScore: 90 ,
dateRange: '90d' ,
limit: 50 ,
sortBy: 'score' ,
order: 'desc'
});
// Export for fine-tuning
const trainingData = await chanl . fineTuning . prepareDataset ({
calls: topCalls . map ( c => c . id ),
format: 'conversational'
});
console . log ( `Prepared ${ topCalls . length } high-quality examples for training` );
Problem Pattern Identification
Find calls with recurring issues:
const chanl = require ( '@chanl/sdk' );
// Find common failure patterns
const patterns = await chanl . callLogs . analyzePatterns ({
filters: {
maxScore: 70 ,
dateRange: '30d'
},
groupBy: 'issue_type'
});
console . log ( 'Common issues:' );
patterns . forEach ( p => {
console . log ( `- ${ p . issue } : ${ p . count } occurrences ( ${ p . percentage } %)` );
});
/*
Common issues:
- Refund policy confusion: 23 occurrences (34%)
- Unable to verify customer: 15 occurrences (22%)
- Tool failure: 12 occurrences (18%)
*/
Compliance & Auditing
Compliance Search
Find calls for regulatory review:
curl -X POST https://api.chanl.ai/v1/call-logs/compliance-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dateRange": {
"start": "2024-01-01",
"end": "2024-01-31"
},
"requiredDisclosures": [
"data_privacy_notice",
"call_recording_notice"
],
"onlyFlagged": true
}'
Returns calls missing required disclosures:
{
"flaggedCalls" : [
{
"callId" : "call_compliance123" ,
"date" : "2024-01-15T09:30:00Z" ,
"missingDisclosures" : [ "call_recording_notice" ],
"severity" : "high"
}
],
"totalFlagged" : 3 ,
"complianceRate" : 98.7
}
Best Practices
Analyze Regularly
Run analysis on all calls, not just the ones with obvious issues. You’ll discover patterns you didn’t know existed.
Search Before Building
Before creating new scenarios, search call logs to find real examples of situations you want to test.
Export for Records
Regularly export call data for compliance and backup purposes. Don’t rely solely on cloud storage.
Tag and Categorize
Add tags to calls (e.g., “excellent_example”, “training_needed”) for easier filtering later.
Compare Time Periods
When you make changes, compare call logs from before and after to measure impact.
Troubleshooting
Problem : Expected calls not appearing in call logsSolutions :
Verify date range filter includes when call occurred
Check if call actually completed (not dropped)
Confirm agent is connected and logging enabled
Look in failed calls section
Problem : Audio playback fails or URL expiredSolutions :
Audio URLs expire after 1 hour - request new URL
Check browser allows audio playback
Try downloading file instead of streaming
Verify call has audio recording (some simulations might not)
Problem : Batch analysis timing out or very slowSolutions :
Reduce batch size to 50-100 calls at a time
Run analysis during off-peak hours
Consider processing in smaller date ranges
Contact support for large-scale analysis needs
Problem : Transcript search returns no resultsSolutions :
Try broader search terms (e.g., “refund” vs “refund policy”)
Verify spelling of search terms
Check if calls have been transcribed
Expand date range
What’s Next?